命令行生存手册:被遗忘的25个Unix神级工具

作者:开源大模型智能运维FreeAiOps

在Unix系统的世界里,命令行是运维人员的得力助手。它强大而灵活,隐藏着许多被遗忘的神级工具。这些工具或许不像lscdcp等常用命令那样广为人知,但在特定场景下,它们能发挥出巨大的作用,帮助你高效地解决各种问题。作为一名资深的IT运维工程师,我将为你介绍25个被遗忘的Unix神级工具,让你在命令行的世界里如虎添翼。

一、find:强大的文件查找工具

(一)基本用法

find命令用于在指定目录及其子目录中查找文件和目录。它可以根据文件名、类型、大小、权限、修改时间等多种条件进行查找。

find /path/to/search -name "filename.txt"

(二)高级用法

  • 按类型查找:查找所有目录
    find /path/to/search -type d
    
  • 按大小查找:查找大于10MB的文件
    find /path/to/search -size +10M
    
  • 按修改时间查找:查找最近7天内修改过的文件
    find /path/to/search -mtime -7
    
  • 结合exec执行命令:对找到的文件执行操作
    find /path/to/search -name "*.log" -exec rm -f {} \;
    

(三)案例

假设你需要清理一个目录下的所有日志文件,可以使用以下命令:

find /var/log -name "*.log" -exec rm -f {} \;

这将删除/var/log目录下所有扩展名为.log的文件。

二、xargs:批量处理工具

(一)基本用法

xargs用于从标准输入读取数据,并将其作为参数传递给其他命令。它常与find等命令结合使用,实现批量处理。

find /path/to/search -name "*.txt" | xargs grep "search_string"

(二)高级用法

  • 指定分隔符:使用换行符作为分隔符
    find /path/to/search -name "*.txt" | xargs -d '\n' grep "search_string"
    
  • 限制每行处理的文件数:每次处理2个文件
    find /path/to/search -name "*.txt" | xargs -n 2 grep "search_string"
    

(三)案例

假设你需要批量压缩一个目录下的所有文件,可以使用以下命令:

find /path/to/compress -type f | xargs tar -czf archive.tar.gz

这将把/path/to/compress目录下的所有文件压缩成一个名为archive.tar.gz的归档文件。

三、awk:文本处理利器

(一)基本用法

awk是一个强大的文本处理工具,可以对文本文件进行复杂的处理。它默认按行读取输入,并将每行分割成字段。

awk '{print $1}' file.txt

(二)高级用法

  • 条件处理:打印第1列大于10的行
    awk '$1 > 10 {print $0}' file.txt
    
  • 多列操作:打印第1列和第3列的和
    awk '{print $1 + $3}' file.txt
    

(三)案例

假设你有一个日志文件log.txt,每行包含时间戳、用户ID和操作类型,格式如下:

2024-01-01 12:00:00 123 login
2024-01-01 12:05:00 456 logout

你可以使用awk提取所有用户ID:

awk '{print $3}' log.txt

四、sed:流编辑器

(一)基本用法

sed用于对文本文件进行流式编辑,可以进行替换、删除、插入等操作。

sed 's/old/new/' file.txt

(二)高级用法

  • 多行操作:删除第1行
    sed '1d' file.txt
    
  • 全局替换:将所有old替换为new
    sed 's/old/new/g' file.txt
    

(三)案例

假设你需要将一个配置文件config.txt中的所有localhost替换为127.0.0.1,可以使用以下命令:

sed -i 's/localhost/127.0.0.1/g' config.txt

这将直接修改文件内容。

五、grep:文本搜索工具

(一)基本用法

grep用于在文本文件中搜索匹配特定模式的行。

grep "search_string" file.txt

(二)高级用法

  • 忽略大小写:不区分大小写
    grep -i "search_string" file.txt
    
  • 递归搜索:在目录中递归搜索
    grep -r "search_string" /path/to/search
    

(三)案例

假设你需要在当前目录及其子目录中查找所有包含error的文件,可以使用以下命令:

grep -r "error" .

六、sort:排序工具

(一)基本用法

sort用于对文本文件中的行进行排序。

sort file.txt

(二)高级用法

  • 按数字排序:按第1列的数字排序
    sort -n -k1 file.txt
    
  • 反向排序:按降序排序
    sort -r file.txt
    

(三)案例

假设你有一个日志文件log.txt,每行包含时间戳、用户ID和操作类型,格式如下:

2024-01-01 12:00:00 123 login
2024-01-01 12:05:00 456 logout

你可以使用sort按时间戳排序:

sort -k1 file.txt

七、uniq:去重工具

(一)基本用法

uniq用于删除文本文件中的重复行。

uniq file.txt

(二)高级用法

  • 统计重复次数:统计每行的重复次数
    uniq -c file.txt
    

(三)案例

假设你有一个日志文件log.txt,每行包含用户ID,格式如下:

123
456
123
789

你可以使用uniq统计每个用户ID的出现次数:

uniq -c log.txt

八、tr:字符转换工具

(一)基本用法

tr用于对文本文件中的字符进行转换。

tr 'a-z' 'A-Z' < file.txt

(二)高级用法

  • 删除字符:删除换行符
    tr -d '\n' < file.txt
    

(三)案例

假设你需要将一个文件中的所有小写字母转换为大写字母,可以使用以下命令:

tr 'a-z' 'A-Z' < file.txt > output.txt

九、cut:字段提取工具

(一)基本用法

cut用于从文本文件中提取指定字段。

cut -d',' -f1 file.txt

(二)高级用法

  • 提取多个字段:提取第1列和第3列
    cut -d',' -f1,3 file.txt
    

(三)案例

假设你有一个CSV文件data.csv,每行包含用户ID、用户名和邮箱,格式如下:

123,John,[email protected]
456,Jane,[email protected]

你可以使用cut提取用户名和邮箱:

cut -d',' -f2,3 data.csv

十、paste:字段合并工具

(一)基本用法

paste用于将多个文件的字段合并成一个文件。

paste file1.txt file2.txt

(二)高级用法

  • 指定分隔符:使用逗号作为分隔符
    paste -d',' file1.txt file2.txt
    

(三)案例

假设你有两个文件file1.txtfile2.txt,内容如下:

file1.txt: 123
file2.txt: John

你可以使用paste将它们合并成一个文件:

paste -d',' file1.txt file2.txt > output.txt

输出文件output.txt内容为:

123,John

十一、join:字段连接工具

(一)基本用法

join用于将两个文件中具有相同字段的行连接起来。

join file1.txt file2.txt

(二)高级用法

  • 指定连接字段:按第2列连接
    join -1 2 -2 2 file1.txt file2.txt
    

(三)案例

假设你有两个文件file1.txtfile2.txt,内容如下:

file1.txt: 123 John
file2.txt: 123 USA

你可以使用join将它们连接起来:

join file1.txt file2.txt

输出内容为:

123 John USA

十二、comm:比较文件内容

(一)基本用法

comm用于比较两个文件的内容,输出两个文件的共有行、第一个文件独有的行和第二个文件独有的行。

comm file1.txt file2.txt

(二)高级用法

  • 输出共有行:只输出共有行
    comm -12 file1.txt file2.txt
    

(三)案例

假设你有两个文件file1.txtfile2.txt,内容如下:

file1.txt: 123
file2.txt: 123
file1.txt: 456
file2.txt: 789

你可以使用comm找出共有行:

comm -12 file1.txt file2.txt

输出内容为:

123

十三、diff:文件差异比较

(一)基本用法

diff用于比较两个文件的差异。

diff file1.txt file2.txt

(二)高级用法

  • 忽略空白字符:忽略空白字符
    diff -w file1.txt file2.txt
    

(三)案例

假设你有两个文件file1.txtfile2.txt,内容如下:

file1.txt: 123
file2.txt: 123
file1.txt: 456
file2.txt: 456
file1.txt: 789
file2.txt: 987

你可以使用diff找出差异:

diff file1.txt file2.txt

输出内容为:

3c3
< 789
---
> 987

十四、patch:文件补丁工具

(一)基本用法

patch用于应用diff生成的补丁文件。

patch file.txt patch.diff

(二)高级用法

  • 反向应用补丁:反向应用补丁
    patch -R file.txt patch.diff
    

(三)案例

假设你有一个文件file.txt和一个补丁文件patch.diff,内容如下:

file.txt: 123
patch.diff: 2c2
< 123
---
> 456

你可以使用patch应用补丁:

patch file.txt patch.diff

修改后的file.txt内容为:

456

十五、tar:归档工具

(一)基本用法

tar用于创建和解压归档文件。

tar -czf archive.tar.gz file.txt

(二)高级用法

  • 解压归档文件:解压归档文件
    tar -xzf archive.tar.gz
    

(三)案例

假设你需要将一个目录/path/to/compress压缩成一个归档文件archive.tar.gz,可以使用以下命令:

tar -czf archive.tar.gz /path/to/compress

十六、gzipgunzip:压缩工具

(一)基本用法

gzip用于压缩文件,gunzip用于解压文件。

gzip file.txt

(二)高级用法

  • 解压文件:解压文件
    gunzip file.txt.gz
    

(三)案例

假设你需要压缩一个文件file.txt,可以使用以下命令:

gzip file.txt

生成的压缩文件为file.txt.gz

十七、bzip2bunzip2:压缩工具

(一)基本用法

bzip2用于压缩文件,bunzip2用于解压文件。

bzip2 file.txt

(二)高级用法

  • 解压文件:解压文件
    bunzip2 file.txt.bz2
    

(三)案例

假设你需要压缩一个文件file.txt,可以使用以下命令:

bzip2 file.txt

生成的压缩文件为file.txt.bz2

十八、netstat:网络状态工具

(一)基本用法

netstat用于显示网络连接、路由表、接口统计等信息。

netstat -an

(二)高级用法

  • 显示监听端口:显示监听的端口
    netstat -tuln
    

(三)案例

假设你需要查看当前系统中所有监听的TCP端口,可以使用以下命令:

netstat -tuln

十九、lsof:文件和进程关联工具

(一)基本用法

lsof用于列出当前系统中打开的文件及其关联的进程。

lsof

(二)高级用法

  • 按进程ID过滤:按进程ID过滤
    lsof -p 1234
    

(三)案例

假设你需要查看进程ID为1234的进程打开的所有文件,可以使用以下命令:

lsof -p 1234

二十、top:系统监控工具

(一)基本用法

top用于实时显示系统中占用资源最多的进程。

top

(二)高级用法

  • 按CPU使用率排序:按CPU使用率排序
    top -o %CPU
    

(三)案例

假设你需要实时监控系统中CPU使用率最高的进程,可以使用以下命令:

top -o %CPU

二十一、htop:交互式系统监控工具

(一)基本用法

htop是一个交互式的系统监控工具,提供了更直观的界面。

htop

(二)高级用法

  • 按内存使用率排序:按内存使用率排序
    htop -s PERCENT_MEM
    

(三)案例

假设你需要实时监控系统中内存使用率最高的进程,可以使用以下命令:

htop -s PERCENT_MEM

二十二、iftop:网络流量监控工具

(一)基本用法

iftop用于实时显示网络接口的流量情况。

iftop

(二)高级用法

  • 指定网络接口:指定网络接口
    iftop -i eth0
    

(三)案例

假设你需要实时监控eth0接口的网络流量,可以使用以下命令:

iftop -i eth0

二十三、nmon:系统性能监控工具

(一)基本用法

nmon用于实时监控系统的CPU、内存、磁盘等性能指标。

nmon

(二)高级用法

  • 生成报告:生成性能报告
    nmon -f -s 60 -c 10
    

(三)案例

假设你需要生成一个包含60秒采样间隔、共10个采样点的性能报告,可以使用以下命令:

nmon -f -s 60 -c 10

二十四、iostat:磁盘和CPU使用率监控工具

(一)基本用法

iostat用于监控磁盘和CPU的使用率。

iostat

(二)高级用法

  • 实时监控:实时监控
    iostat -x 1
    

(三)案例

假设你需要实时监控磁盘和CPU的使用率,可以使用以下命令:

iostat -x 1

二十五、vmstat:系统性能监控工具

(一)基本用法

vmstat用于监控系统的CPU、内存、磁盘等性能指标。

vmstat

(二)高级用法

  • 实时监控:实时监控
    vmstat 1
    

(三)案例

假设你需要实时监控系统的性能指标,可以使用以下命令:

vmstat 1

总结

这些被遗忘的Unix神级工具在日常运维工作中有着广泛的应用。通过熟练掌握这些工具,你可以更高效地完成文件查找、文本处理、网络监控、系统性能监控等任务。希望这篇文章能帮助你在命令行的世界里更加得心应手。如果你有任何问题或建议,欢迎随时交流讨论。

你可能感兴趣的:(FreeAiGuard,unix,chrome,服务器)