Shell 脚本提速秘籍:80 个高频命令组合用法,新手也能轻松驾驭!
2025-07-30 09:13:02
RAIZ
Shell 脚本是自动化运维、数据处理和系统管理的利器。掌握核心命令的组合使用,能极大提升脚本效率和解决问题的能力。本文精心整理 80 个 Shell 脚本中高频出现的命令组合用法,涵盖文件操作、文本处理、系统监控、条件判断等核心场景,条条实用!即使你是 Shell 新手,也能通过这些“积木块”快速搭建起自己的脚本世界。
一、文件与目录操作基础
1. 创建并进入目录: mkdir -p project/data && cd project/data
(-p
确保父目录存在)2. 复制并保留属性: cp -a source_dir destination_dir
(-a
归档模式,保留权限、时间戳等)3. 移动文件到特定目录: find . -name "*.log" -exec mv -t /backup/ {} +
(高效移动大量文件)4. 安全删除(先确认): rm -i *.tmp
(-i
交互式删除,每个文件都询问)5. 强制递归删除目录: rm -rf old_build/
(慎用!-r
递归,-f
强制)6. 查看文件前10行: head -n 10 access.log
7. 查看文件后15行: tail -n 15 error.log
8. 实时跟踪日志新增内容: tail -f app.log
(-f
follow, 持续输出新增内容)9. 查找文件(按名称): find /home/user -type f -name "config.ini"
10. 查找目录: find /var -type d -name "www"
11. 查找并删除(谨慎!): find /tmp -name "core.*" -mtime +7 -exec rm {} \;
(删除 /tmp 下超过 7 天的 core 文件)12. 查找并统计文件数: find src/ -type f | wc -l
13. 创建文件软链接: ln -s /path/to/original /path/to/link
14. 创建目录软链接: ln -s /path/to/original_dir /path/to/link_dir
15. 查看文件类型: file unknown_file.bin
16. 比较两个文件差异: diff file1.txt file2.txt
17. 比较并排显示差异: diff -y file1.txt file2.txt
18. 生成目录树结构: tree -L 2
(显示当前目录树,深度为 2 级)19. 更改文件扩展名: for f in *.txt; do mv -- "$f" "${f%.txt}.csv"; done
(批量 .txt 改为 .csv)20. 备份文件(带时间戳): cp important.conf{,.bak_$(date +%Y%m%d)}
(生成 important.conf.bak_20230713)
二、文本处理利器 (grep, sed, awk, sort, uniq)
21. 搜索文件中包含关键词的行: grep "ERROR" system.log
22. 递归搜索目录下文件内容: grep -r "function_name" src/
23. 搜索时忽略大小写: grep -i "warning" app.log
24. 显示匹配行及其后2行: grep -A 2 "Exception" trace.log
25. 显示匹配行及其前3行: grep -B 3 "Starting" boot.log
26. 只显示匹配的文件名: grep -l "pattern" *.py
27. 反转匹配(显示不包含的行): grep -v "DEBUG" verbose.log
28. 使用扩展正则表达式: grep -E "error|warning" messages.log
29. 统计匹配行数: grep -c "success" report.txt
30. 简单文本替换: sed 's/old_text/new_text/' input.txt
(输出到屏幕,不修改原文件)31. 替换并保存修改(原地编辑): sed -i 's/foo/bar/g' file.txt
(-i
直接修改文件,g
全局替换)32. 删除空白行: sed '/^$/d' messy.txt
33. 打印特定行(第5行): sed -n '5p' data.txt
34. 打印行范围(10到20行): sed -n '10,20p' longfile.log
35. 打印最后一列(默认空格分隔): awk '{print $NF}' columns.dat
36. 打印特定列(第2和第4列): awk '{print $2, $4}' table.csv
37. 根据条件打印行(第3列大于100): awk '$3 > 100 {print $0}' numbers.txt
38. 设置输入字段分隔符(如逗号): awk -F',' '{print $1}' data.csv
39. 统计文件行数、单词数、字符数: wc report.txt
40. 排序文件内容: sort unsorted_list.txt
三、文本处理进阶与数据操作
41. 排序(数值顺序): sort -n numeric_data.txt
42. 排序(逆序): sort -r names.txt
43. 排序并去重: sort names.txt | uniq
44. 仅显示重复行: sort dups.txt | uniq -d
45. 显示唯一行(去除所有重复): sort dups.txt | uniq -u
46. 统计每行出现次数: sort log_levels.txt | uniq -c
47. 按次数降序排列: sort log_levels.txt | uniq -c | sort -nr
48. 提取文件路径的目录部分: dirname /var/log/apache/access.log
(输出/var/log/apache
)49. 提取文件路径的文件名部分: basename /var/log/apache/access.log
(输出access.log
)50. 提取文件名(不含扩展名): basename /path/to/file.tar.gz .tar.gz
(输出file
)51. 连接多个文件: cat header.txt body.txt footer.txt > complete.html
52. 查看压缩文本文件: zcat access.log.gz | grep "404"
(适用于 gzip)53. 分页查看长输出: ls -l /etc | less
(按空格下翻页,q
退出)54. 转换DOS换行符(CRLF)为Unix(LF): dos2unix script.sh
(或sed -i 's/\r$//' script.sh
)55. 转换Unix换行符为DOS: unix2dos document.txt
(或sed -i 's/$/\r/' document.txt
)56. 生成随机密码(16字符): head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16; echo
57. 计算文件MD5校验和: md5sum important.iso
(Linux)58. 计算文件SHA256校验和: sha256sum critical.zip
(Linux)59. 按列合并两个文件: paste file1.txt file2.txt > combined.txt
60. 转换字符大小写(小写转大写): echo "Hello" | tr 'a-z' 'A-Z'
(输出HELLO
)
四、系统、进程、网络与脚本技巧
61. 查看当前用户名: whoami
62. 查看系统运行时间与负载: uptime
63. 查看磁盘空间使用: df -h
(-h
人类可读格式)64. 查看目录大小: du -sh /home/user
(-s
总大小,-h
可读)65. 查看内存使用情况: free -h
66. 查看最耗CPU的进程: top -o %CPU
(动态,q
退出) 或ps aux --sort=-%cpu | head -n 11
67. 查看最耗内存的进程: top -o %MEM
或ps aux --sort=-%mem | head -n 11
68. 根据进程名查找PID: pgrep -f "nginx master process"
69. 根据进程名发送信号(如TERM): pkill -TERM -f "python myapp.py"
70. 后台运行命令: long_running_command &
71. 将后台作业带到前台: fg %1
(1
是作业号, 用jobs
查看)72. 暂停当前前台作业: 按 Ctrl+Z
73. 让暂停的作业在后台继续运行: bg %1
74. 使进程不受终端关闭影响: nohup ./start_server.sh &
(输出默认到 nohup.out)75. 查看网络连接状态: netstat -tulnp
(查看监听端口及对应进程)76. 查看主机路由表: route -n
或ip route show
77. 测试网络连通性: ping -c 4 google.com
(-c
指定次数)78. 下载文件: wget https://example.com/file.tar.gz
79. 命令行HTTP客户端: curl -O https://example.com/image.jpg
(-O
下载文件)80. 安全复制文件到远程主机: scp local_file.txt user@remote_host:/remote/directory/
这 80 个命令组合是 Shell 脚本的“瑞士军刀”,熟练掌握能解决日常大部分自动化任务。需要注意的是:
1. 理解原理: 了解每个命令选项的含义 ( man command
)。2. 安全第一: 对 rm -rf
、find -exec
、chmod
、chown
等操作保持警惕,尤其涉及系统文件或重要数据时。操作前务必确认路径和条件。3. 循序渐进: 从简单组合开始尝试,逐步构建更复杂的逻辑。 4. 善用测试: 在非生产环境测试脚本逻辑。 5. 添加注释: 为脚本中的复杂命令组合添加注释说明意图。