Linux中的文件比对
在Linux中,文件比对有多种强大且灵活的命令行工具,最核心和常用的是diff命令及其相关工具。
核心命令行工具:
- 1.
diff:最基础、最通用的文本文件差异比较工具。 - • 常用选项:▪
-u:以“统一格式”输出,更易读,是查看代码差异的标准格式。▪ -c:上下文格式输出。▪ -y:并排格式输出。▪ -i:忽略大小写差异。▪ -r:递归比较目录。▪ -W100:设置字符展示宽度为100。 - • 示例:原文件如下:
原文件cx01.sv(左)与cx02.sv(右)-u命令效果:
-u命令效果-c命令效果:
-c命令效果-y命令效果:
-y命令效果
- 2.
vimdiff / vim -d:在Vim编辑器内进行直观的并排对比,支持高亮和实时编辑。 - • 用法:
vimdiff 文件1 文件2 或 vim -d 文件1 文件2
vimdiff、vim -d命令效果- 3.
cmp:专门用于比较二进制文件,检查它们是否完全相同。 - • 示例:
cmp命令效果
图形化工具(GUI):
如果更喜欢可视化界面,以下工具非常流行:
- •
Meld:功能强大,支持文件和目录的双向或三向对比与合并,界面直观。 - •
KDiff3:另一款优秀的对比合并工具,尤其擅长三向合并。 - •
Beyond Compare:功能全面的商业软件,有Linux版本。
Beyond Compare命令效果
Linux中的文件压缩
在Linux中,文件压缩与归档通常通过命令行工具完成,核心方法是使用 tar 命令进行打包,再结合不同的压缩算法。
使用 tar 进行打包与压缩:
tar 本身是“打包”工具,将多个文件/目录合并成一个 .tar 文件。结合压缩选项可实现压缩。
- • 命令如下:
tar -czvf archive.tar.gz /path/to/folder - • 最常用的命令,其中
-c 创建,-z 用gzip压缩,-v 显示过程,-f 指定文件名。
- • 命令如下:
tar -xzvf archive.tar.gz
- • 命令如下:
tar -cjvf archive.tar.bz2 /path/to/folder - • 其中
-j 表示用bzip2压缩,压缩率更高,速度稍慢。
- • 命令如下:
tar -xjvf archive.tar.bz2
- • 命令如下:
tar -cJvf archive.tar.xz /path/to/folder - • 其中
-J 表示用xz压缩,压缩率最高,速度最慢。
- • 解压
.tar.xz :- 命令如下:tar -xJvf archive.tar.xz - • 命令如下:
tar -cvf archive.tar /path/to/folder
- • 命令如下:
tar -xvf archive.tar
- • 命令如下:
tar -tzf archive.tar.gz
独立压缩工具(适用于单个文件):
- • 压缩:
gzip filename (生成 filename.gz,会替换原文件) - • 解压:
gunzip filename.gz 或 gzip -d filename.gz
- • 压缩:
bzip2 filename (生成 filename.bz2) - • 解压:
bunzip2 filename.bz2
- • 压缩:
xz filename (生成 filename.xz)
zip / unzip(跨平台兼容):
- • 创建zip压缩包:
zip -r archive.zip /path/to/folder (-r 递归目录) - • 解压zip包:
unzip archive.zip - • 列出内容:
unzip -l archive.zip
压缩文件快速选择建议:
- • Linux系统备份:首选
tar.gz(均衡)或 tar.xz(追求高压缩率)。 - • 需要与Windows用户共享:使用
zip,兼容性最好。 - • 仅压缩单个大文件:可考虑
bzip2 或 xz。 - • 查看压缩包内容:使用
tar -tzf 或 unzip -l。
Linux中的文件权限
Linux文件权限是系统安全和多用户管理的基石,它精确控制着谁可以读取、修改或执行文件与目录。
一、权限核心概念
Linux中,每个文件和目录都为三类用户分配了独立的权限:
- 1. 所有者 (owner/u):文件的创建者或指定所有者。
- 2. 所属组 (group/g):文件所属的用户组,组内成员共享此权限。
- 3. 其他用户 (others/o):既不是所有者,也不在所属组中的任何其他用户。
每类用户拥有三种基本权限:
- • 读 (
r):对于文件,表示可以查看内容;对于目录,表示可以列出目录内的文件列表。 - • 写 (
w):对于文件,表示可以修改内容;对于目录,表示可以在其中创建、删除或重命名文件。 - • 执行 (
x):对于文件,表示可以将其作为程序或脚本运行;对于目录,表示可以进入(cd)该目录并访问其中的文件元数据。
二、查看权限
使用 ls -l 命令查看详细信息,首列的10个字符即为权限标识。
权限标识权限分解:
- • 第1位:文件类型 (- 普通文件,d 目录,l 符号链接);
三、修改权限 (chmod)
- • 用三位八进制数字分别代表所有者、组、其他用户的权限总和。
# 设置 script.sh 为:所有者可读写执行(7),组可读执行(5),其他只读(4)chmod 754 script.sh# 常用权限示例chmod 644 file.txt # 所有者读写,其他人只读(标准文档)chmod 755 script.sh # 所有者全权,其他人读执行(可执行脚本)chmod 700 ~/.ssh/id_rsa # 仅所有者全权(私钥文件)chmod 777 /some/dir # ⚠️ 所有人全权(极度危险,通常应避免)# 为所有用户添加执行权限chmod a+x script.sh# 移除组和其他用户的写权限chmod go-w file.txt# 设置组权限为只读,不影响所有者和其他人chmod g=r file.txt
四、修改所有者和所属组
1. chown - 改变文件所有者# 将文件所有者改为 alicesudo chown alice file.txt# 同时改变所有者和所属组sudo chown alice:developers file.txt# 递归改变目录及其下所有文件sudo chown -R alice:developers /project/2. chgrp - 改变文件所属组# 将文件所属组改为 developerssudo chgrp developers file.txt
五、默认权限与umask
新创建的文件和目录会有一个初始权限,由系统的 umask 值决定。umask指定了需要从默认权限中屏蔽掉的权限位。
# 查看当前umask(通常为0022或0002)umask# 设置umask(例如,希望新建文件更私密)umask 0077
计算规则:
- • 文件默认权限:666 - umask(文件默认无执行位)
示例(umask=022):
- • 新建文件权限:666 - 022 = 644 (rw-r--r--)
- • 新建目录权限:777 - 022 = 755 (rwxr-xr-x)
六、权限检查与故障排查
权限不足错误:遇到“Permission denied”时,按顺序检查:
ls -l /path/to/file # 1. 查看当前权限id # 2. 确认当前用户和所属组groups # 3. 确认用户所在的所有组ls -ld /parent/directory # 4. 检查父目录权限(尤其是执行位)
Linux中的定时任务
在Linux中,定时任务主要通过 cron 服务来实现。其核心是使用 crontab 命令来编辑和管理属于用户的“cron时间表”。
一、核心工具:crontab
crontab -e
crontab -l
crontab -r
二、crontab 时间语法
在 crontab -e 打开的编辑器中,每一行代表一个任务,格式如下:
* * * * * 要执行的命令- - - - -| | | | || | | | +----- 星期几 (0 - 7) (0和7都代表星期日)| | | +------- 月份 (1 - 12)| | +--------- 日期 (1 - 31)| +----------- 小时 (0 - 23)+------------- 分钟 (0 - 59)
三、定时任务的常用实例
# 每天凌晨2点30分执行备份脚本30 2 * * * /home/user/scripts/backup.sh# 每周一上午9点整清理日志0 9 * * 1 /usr/bin/find /var/log -name "*.log" -mtime +7 -delete# 每5分钟检查一次系统状态*/5 * * * * /usr/bin/uptime >> /tmp/uptime.log# 每月1号和15号的晚上10点发送报告0 22 1,15 * * /usr/bin/python3 /home/user/send_report.py# 每天9点到18点,每小时的第10分钟提醒10 9-18 * * * /usr/bin/notify-send "Time to take a break"
Linux中的磁盘管理
在Linux中,查看和管理磁盘大小及占用空间主要通过一系列命令行工具实现。以下是核心方法和常用命令。
一、查看磁盘整体使用情况
- •
df 命令 - 查看文件系统磁盘空间使用情况,最常用的命令,显示所有已挂载文件系统的使用情况。
# 基本用法:以人类可读格式(KB, MB, GB)显示df -h# 显示文件系统类型df -hT# 仅显示特定文件系统(如ext4)df -hT -t ext4# 显示inode使用情况(而非磁盘空间)df -i
输出示例:
df -h命令效果- •
lsblk 命令 - 查看块设备信息,该显示所有块设备(磁盘、分区)的树状结构,包括大小和挂载点。
# 基本用法lsblk# 显示详细信息,包括文件系统类型和UUIDlsblk -f# 以人类可读格式显示大小lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
输出示例:
lsblk命令效果二、查看目录和文件的磁盘占用
- •
du 命令 - 查看目录/文件磁盘使用情况,该命令是分析磁盘占用来源的核心工具。
# 查看当前目录总大小du -sh# 查看指定目录总大小du -sh /path/to/directory# 查看目录下各子目录/文件的大小(按大小排序)du -sh * | sort -rh# 查看目录深度为1的各项目大小du -h --max-depth=1 /path/to/directory# 查找大文件(当前目录下大于100M的文件)find . -type f -size +100M -exec du -h {} \;
常用选项:
- •
--max-depth=N:限制显示的目录深度;
三、清理磁盘空间
# 查找当前目录下大于100M的文件find . -type f -size +100M# 查找并删除7天前的日志文件find /var/log -name "*.log" -type f -mtime +7 -delete# 查找空目录并删除find . -type d -empty -delete
Linux中的进程管理
在Linux中,进程管理是系统运维的核心技能,涉及查看、控制、监控和调整运行中的程序。
一、查看进程
- 1.
ps 命令 - 查看当前进程快照,该命令是最基础的进程查看工具,选项风格多样(UNIX、BSD、GNU)。
# 查看当前终端下的进程ps# 查看所有进程(完整格式)ps -ef# 查看所有进程(BSD风格,显示完整命令)ps aux# 按内存使用排序ps aux --sort=-%mem | head -10# 按CPU使用排序ps aux --sort=-%cpu | head -10# 查看特定用户的进程ps -u username# 查看特定进程(如ssh)ps aux | grep ssh
ps命令执行效果:
ps命令执行效果- 2.
top 命令 - 动态实时查看进程,该命令为交互式进程监控器,显示系统资源使用情况和进程列表。
# 启动top(默认按CPU使用率排序)top# 启动时隐藏空闲进程top -i# 按内存排序(在top界面按"M')# 按CPU排序(在top界面按"P")# 按进程号排序(按"N")# 退出(按'q')
top命令执行效果:
top命令执行效果- 3.
htop 命令 - 增强版top,该命令更直观、支持鼠标操作,需要安装。
# 安装(Debian/Ubuntu)sudo apt install htop# 安装(RHEL/CentOS)sudo yum install htop# 使用htop
- 4.
pstree 命令 - 以树状结构显示进程,该命令显示进程间的父子关系。
# 显示进程树pstree# 显示进程IDpstree -p# 显示指定用户的进程树pstree username
pstree命令执行效果:
pstree命令执行效果二、控制进程
# 前台启动command# 后台启动(在命令后加&)command &# 后台启动并输出重定向command > output.log 2>&1 &
# 查看后台作业jobs# 将后台作业切换到前台(%后跟作业号)fg %1# 将前台作业切换到后台(先Ctrl+Z暂停,再执行)bg %1
# 通过进程名结束(发送TERM信号,默认)kill process_id# 通过进程名结束killall process_name# 通过模式匹配结束进程pkill pattern# 强制结束(发送KILL信号)kill -9 process_id# 结束指定用户的所有进程pkill -u username
# 暂停前台进程(按Ctrl+Z)# 然后可以放入后台bg# 继续运行暂停的进程(发送CONT信号)kill -CONT process_id
三、进程状态
Linux进程主要有以下几种状态:
- • R (Running):运行中或可运行(在运行队列中);
- • S (Sleeping):可中断的睡眠状态(等待事件完成);
- • D (Uninterruptible Sleep):不可中断的睡眠状态(通常等待IO);
- • T (Stopped):暂停状态(由信号控制);
- • Z (Zombie):僵尸进程(已终止但未回收);
进程状态查看方法:
ps aux | awk '{print $8}' | sort | uniq -c
四、常用进程相关命令
- • 强制结束进程:
kill -9 process_id - • 按名称结束进程:
pkill process_name - • 查看进程资源:
cat /proc/process_id/status - • 调整优先级:
renice -n 5 -p process_id - • 查找进程ID:
pgrep process_name - • 查看端口对应进程:
sudo lsof -i :端口号
Linux中的用户权限切换
在Linux中,用户切换是系统管理和安全操作的核心技能,主要涉及临时权限提升和完全身份切换。
一、核心命令对比
| | |
| | 以其他用户权限执行单条命令,默认以root权限执行。 |
| | |
| | 需要执行者自身的密码(且需在sudoers配置中授权)。 |
| 默认保留当前用户环境。使用 - 或 -l 选项加载目标用户的环境(如PATH)。 | |
| 需要长时间以另一用户身份(尤其是root)进行多项操作时。 | |
二、su 命令详解:完全切换用户
# 切换到root,但环境变量(如PATH)保持不变su# 切换到root,并完全加载root的环境配置(推荐方式)su -# 或su -l
# 切换到用户 alice,加载她的环境su - alice# 切换到用户 alice,但不加载她的环境su alice
# 以root身份执行一条命令后立即返回(不进入交互shell)su -c "apt update" root4. 退出切换状态# 结束切换后的shell,返回原用户exit# 或按 Ctrl+D
三、sudo 命令详解:权限委托执行
# 以root权限执行命令(系统会提示输入当前用户自己的密码)sudo apt update# 以其他用户身份执行命令sudo -u alice whoami# 启动一个root身份的交互式shell(环境变量会重置,类似`su -`)sudo -i# 启动一个root身份的shell,但保留当前环境sudo -s
# 列出当前用户被允许执行的sudo命令sudo -l# 以root身份编辑文件(如配置文件)sudo vim /etc/nginx/nginx.conf# 切换到另一个用户并加载其环境(需当前用户有sudo权限)sudo su - alice
Linux中的根目录简析
Linux的根目录(/)是整个文件系统的起点和锚点,所有目录和文件都从这里开始分支。理解其结构是掌握Linux系统管理的基础。
一、根目录概览
根目录根目录 / 下包含一系列标准化的子目录,每个目录都有其特定用途,这遵循文件系统层次结构标准(FHS)。这种设计保证了系统文件的有序性和一致性。
二、核心子目录解析
- •
/bin :用于放置基本用户命令(二进制文件) ,即系统启动和单用户模式所需的命令,如 ls, cp, bash, cat。 - •
/boot :用于放置系统启动所需的文件,如内核镜像(vmlinuz)、初始RAM磁盘(initrd)和引导加载器(如GRUB)的文件。 - •
/dev :用于放置设备文件,将硬件设备(如磁盘、终端、USB)抽象为文件,用于与设备通信。如 /dev/sda(第一块SATA硬盘)、/dev/null(空设备,丢弃数据)。 - •
/etc : 用于放置系统和应用程序的配置文件。如 /etc/passwd(用户账户)、/etc/fstab(文件系统表)、/etc/ssh/sshd_config(SSH服务配置)。 - •
/home :普通用户主目录,每个用户拥有一个以用户名命名的子目录(如 /home/alice),用于存放个人文件、配置和桌面环境设置。 - •
/lib :基本共享库和内核模块,为 /bin 和 /sbin 中的程序提供最基本的共享库(.so文件)和内核模块。 - •
/media : 可移动媒体挂载点,系统自动挂载可移动设备(如U盘、光盘)的目录,通常会自动创建子目录。 - •
/mnt : 临时挂载点,系统管理员临时手动挂载文件系统(如U盘、网络共享)的通用目录。 - •
/opt :可选的应用软件包,通常用于安装第三方或大型商业应用程序的独立软件包,每个软件在单独的子目录中。 - •
/proc : 进程与内核信息文件系统,以文件形式动态反映系统内核和进程的实时信息。如 /proc/cpuinfo(CPU信息)、/proc/[PID](某个进程的详细信息)。 - •
/root :超级用户(root)的主目录,系统管理员root的专属家目录,普通用户无权访问。 - •
/run : 运行时数据 虚拟目录,存放自本次系统启动以来的运行时信息,如进程ID文件(.pid)和套接字文件。 - •
/sbin :系统管理命令(二进制文件) 系统管理员用于引导、修复、恢复系统的命令,如 fdisk, fsck, init, ip。 - •
/srv :服务数据 存放由本系统提供的服务(如网站、FTP)所产生的数据。 - •
/tmp : 临时文件,供所有用户存放临时文件,系统重启后通常会被清空。 - •
/usr : 用户程序与只读数据,存放大部分用户应用程序和文件,可视为“二级根目录”。其下又有 /usr/bin(非必需命令)、/usr/lib(库文件)、/usr/share(共享数据,如文档、字体)。 - •
/var :可变数据,存放经常变化的文件,是排查日志和运行时问题的关键位置。如 /var/log(系统日志)、/var/cache(应用程序缓存)、/var/spool(队列数据,如邮件、打印任务)。
💓 💖 💓 ~ 本节完结 ~ 💓 💖 💓