Linux操作系统以其强大的命令行工具集著称。除了 grep、find、tar等日常高频命令外,系统还内置了大量功能专一、设计精巧的工具。它们在特定场景下能极大提升效率,却常因“不常用”而被忽视。本文将按类别介绍其中二十余个这样的工具,并辅以实例说明。
一、 文件与数据处理类
这类工具专注于文件的比较、转换、分割与校验。
1. cmp
- 简介:逐字节比较两个文件是否完全相同。与
diff输出差异内容不同,cmp只报告第一个不同字节的位置,适合快速校验二进制文件。 - 示例:
# 比较两个编译后的二进制文件 cmp file1.bin file2.bin # 输出:file1.bin file2.bin differ: byte 123, line 4 # 静默比较,仅通过退出码表示结果(0相同,1不同) cmp -s file1.bin file2.bin && echo "Files are identical"
2. comm
- 简介:逐行比较两个已排序文件,输出三列:仅文件1有的行、仅文件2有的行、两个文件共有的行。是分析集合交集、差集的利器。
- 示例:
# 准备两个已排序的名单文件 sort list1.txt > list1_sorted.txt sort list2.txt > list2_sorted.txt # 找出只在list1中的人 comm -23 list1_sorted.txt list2_sorted.txt # 找出两个列表共有的人 comm -12 list1_sorted.txt list2_sorted.txt
3. split
- 简介:将大文件分割成若干小文件。常用于处理日志归档、网络传输大文件前的分片。
- 示例:
# 将large.log按每1000行分割,生成文件前缀为log_part_ split -l 1000 large.log log_part_ # 按文件大小分割,每个小文件100M split -b 100M huge_backup.tar.gz backup_part_
4. cksum / md5sum / sha256sum
- 简介:计算文件的校验和(CRC)、MD5或SHA256哈希值。用于验证文件完整性,确保传输或存储过程中未被篡改。
- 示例:
# 计算文件的CRC校验和 cksum important.zip # 计算并保存MD5值到文件 md5sum package.iso > package.iso.md5 # 之后验证文件是否损坏 md5sum -c package.iso.md5
5. rsync
- 简介:强大的远程(或本地)文件同步与备份工具。它通过差异算法只传输文件中变化的部分,效率极高,支持断点续传、保持属性等。
- 示例:
# 本地目录同步(模拟运行,显示将要执行的操作) rsync -avn ~/Documents/ /backup/Documents/ # 实际执行同步,保持权限、时间戳,并压缩传输 rsync -avz ~/Documents/ /backup/Documents/ # 通过SSH同步到远程服务器,并删除目标端源端已不存在的文件 rsync -avz --delete ~/www/ user@remotehost:/var/www/
二、 文本处理与过滤类
6. grep
- 简介:虽然常用,但其部分高级功能常被忽略。用于在文本中搜索匹配模式的行。
- 示例:
# 基础搜索 grep "error" /var/log/syslog # 显示匹配行及其后3行上下文 grep -A 3 "panic" kernel.log # 递归搜索目录下所有文件,只输出匹配的文件名 grep -rl "TODO" ./src/ # 使用Perl兼容正则表达式(PCRE),功能更强大 grep -P "\d{3}-\d{4}" contacts.txt
7. tail
- 简介:输出文件尾部内容。除了常见的看日志,其
-f(follow)模式是监控日志实时增长的经典用法。 - 示例:
# 查看文件最后10行(默认) tail /var/log/auth.log # 查看最后50行 tail -n 50 app.log # **实时追踪**日志文件的新增内容(运维必备) tail -f /var/log/nginx/access.log # 结合grep实时监控包含“ERROR”的日志行 tail -f app.log | grep --line-buffered ERROR
8. column
- 简介:将输入格式化为对齐的列,类似于表格。对于美化
ps、mount等命令的输出非常有用。 - 示例:
# 将逗号分隔的CSV数据格式化成整齐的表格 echo "Name,Age,City\nAlice,30,New York\nBob,25,London" | column -t -s, # 格式化mount命令的输出,使其更易读 mount | column -t
9. paste
- 简介:水平合并多个文件的行,默认以制表符分隔。与
cut垂直切割相反。 - 示例:
# 将两个文件的行并排合并 paste names.txt ages.txt # 用指定分隔符(如冒号)合并 paste -d ':' names.txt ages.txt > users.txt
10. fmt
- 简介:简单的文本格式化程序,将长段落重新格式化为指定宽度,保持单词完整。
- 示例:
# 将文本格式化为每行最大80个字符 fmt -w 80 long_paragraph.txt # 从标准输入读取并格式化 echo "This is a very long line that needs to be wrapped properly." | fmt
三、 系统监控与进程管理类
深入观察系统内部状态的工具。
11. lsof
- 简介:列出(List)打开文件(Open Files)的进程。在Linux中“一切皆文件”,因此它可用来查看进程打开的常规文件、目录、网络连接、管道等。
- 示例:
# 查看哪个进程在使用某个文件 lsof /var/log/syslog # 查看某个进程(如PID为1234)打开的所有文件 lsof -p 1234 # 查看所有监听TCP端口的进程 lsof -iTCP -sTCP:LISTEN # 查看谁在使用80端口 lsof -i :80
12. nc (netcat)
- 简介:网络的“瑞士军刀”,可用于TCP/UDP数据的读写、端口扫描、临时端口监听、文件传输等。
- 示例:
# 监听端口9999,接收到的数据保存到文件 nc -l -p 9999 > received_file # 在另一台机器上,向该端口发送文件 nc remote_host 9999 < file_to_send # 快速测试远程主机端口是否开放 nc -zv google.com 80
13. watch
- 简介:定期执行指定命令,并全屏显示其输出。用于监控命令结果的变化。
- 示例:
# 每2秒监控一次系统内存使用情况 watch -n 2 free -h # 监控目录下文件数量的变化,并高亮差异 watch -d 'ls -la | wc -l'
14. time
- 简介:注意是shell内置命令或
/usr/bin/time。用于测量命令执行所消耗的实际时间、用户态CPU时间、内核态CPU时间。 - 示例:
# 测量一个脚本的运行时间详情 /usr/bin/time ./my_script.sh # 输出类似:0.50user 0.10system 0:00.65elapsed 93%CPU ...
15. pidof
- 简介:根据进程名查找其PID(进程ID),比用
ps和grep组合更简洁。 - 示例:
# 查找nginx主进程的PID pidof nginx # 配合kill命令使用 kill $(pidof some_service)
四、 网络与通信类
处理网络配置和调试。
16. nslookup / dig
- 简介:DNS查询工具。
dig功能更强大,输出格式更规范,适合脚本调用。 - 示例:
# 查询域名的A记录 dig example.com # 查询MX记录(邮件服务器) dig mx example.com # 使用特定DNS服务器查询 dig @8.8.8.8 example.com
17. traceroute / tracepath
- 简介:追踪数据包从源主机到目的主机经过的所有路由节点,用于诊断网络延迟和路由问题。
tracepath无需root权限。 - 示例:
# 追踪到目标主机的路径 traceroute google.com tracepath google.com
18. hostname
- 简介:显示或设置系统的主机名。其
-I选项可以快速列出所有非回环的IP地址。 - 示例:
# 显示本机所有IP地址(非常实用) hostname -I # 显示完整的域名(FQDN) hostname -f
五、 用户与权限管理类
19. chage
- 简介:更改用户密码的“年龄”信息,即密码过期策略。比直接编辑
/etc/shadow文件更安全。 - 示例:
# 查看用户“alice”的密码过期信息 chage -l alice # 设置用户密码30天后过期,提前7天警告 chage -M 30 -W 7 alice
20. getfacl / setfacl
- 简介:获取和设置文件/目录的访问控制列表(ACL),用于实现比传统
rwx更精细的权限控制。 - 示例:
# 查看文件详细的ACL权限 getfacl shared_folder/ # 授予特定用户“bob”对目录的读写执行权限 setfacl -m u:bob:rwx shared_folder/ # 设置默认ACL,使在此目录下新建的文件继承ACL setfacl -d -m u:bob:rwx shared_folder/
六、 其他实用工具
21. cal
- 简介:在终端显示日历。支持显示指定年月、全年日历等。
- 示例:
# 显示当前月日历 cal # 显示2024年全年日历 cal 2024 # 显示2024年7月的日历 cal 7 2024
22. bc
- 简介:一个任意精度的计算器语言,支持交互式和脚本式计算,尤其适合浮点和进制转换运算。
- 示例:
# 交互式计算 echo "scale=10; 10/3" | bc # 输出 3.3333333333 # 进制转换:将255转换为二进制和十六进制 echo "obase=2; 255" | bc # 输出 11111111 echo "obase=16; 255" | bc # 输出 FF