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.log7. 查看文件后15行: tail -n 15 error.log8. 实时跟踪日志新增内容: tail -f app.log(-ffollow, 持续输出新增内容)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 -l13. 创建文件软链接: ln -s /path/to/original /path/to/link14. 创建目录软链接: ln -s /path/to/original_dir /path/to/link_dir15. 查看文件类型: file unknown_file.bin16. 比较两个文件差异: diff file1.txt file2.txt17. 比较并排显示差异: diff -y file1.txt file2.txt18. 生成目录树结构: 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.log22. 递归搜索目录下文件内容: grep -r "function_name" src/23. 搜索时忽略大小写: grep -i "warning" app.log24. 显示匹配行及其后2行: grep -A 2 "Exception" trace.log25. 显示匹配行及其前3行: grep -B 3 "Starting" boot.log26. 只显示匹配的文件名: grep -l "pattern" *.py27. 反转匹配(显示不包含的行): grep -v "DEBUG" verbose.log28. 使用扩展正则表达式: grep -E "error|warning" messages.log29. 统计匹配行数: grep -c "success" report.txt30. 简单文本替换: sed 's/old_text/new_text/' input.txt(输出到屏幕,不修改原文件)31. 替换并保存修改(原地编辑): sed -i 's/foo/bar/g' file.txt(-i直接修改文件,g全局替换)32. 删除空白行: sed '/^$/d' messy.txt33. 打印特定行(第5行): sed -n '5p' data.txt34. 打印行范围(10到20行): sed -n '10,20p' longfile.log35. 打印最后一列(默认空格分隔): awk '{print $NF}' columns.dat36. 打印特定列(第2和第4列): awk '{print $2, $4}' table.csv37. 根据条件打印行(第3列大于100): awk '$3 > 100 {print $0}' numbers.txt38. 设置输入字段分隔符(如逗号): awk -F',' '{print $1}' data.csv39. 统计文件行数、单词数、字符数: wc report.txt40. 排序文件内容: sort unsorted_list.txt
三、文本处理进阶与数据操作
41. 排序(数值顺序): sort -n numeric_data.txt42. 排序(逆序): sort -r names.txt43. 排序并去重: sort names.txt | uniq44. 仅显示重复行: sort dups.txt | uniq -d45. 显示唯一行(去除所有重复): sort dups.txt | uniq -u46. 统计每行出现次数: sort log_levels.txt | uniq -c47. 按次数降序排列: sort log_levels.txt | uniq -c | sort -nr48. 提取文件路径的目录部分: 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.html52. 查看压缩文本文件: 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; echo57. 计算文件MD5校验和: md5sum important.iso(Linux)58. 计算文件SHA256校验和: sha256sum critical.zip(Linux)59. 按列合并两个文件: paste file1.txt file2.txt > combined.txt60. 转换字符大小写(小写转大写): echo "Hello" | tr 'a-z' 'A-Z'(输出HELLO)
四、系统、进程、网络与脚本技巧
61. 查看当前用户名: whoami62. 查看系统运行时间与负载: uptime63. 查看磁盘空间使用: df -h(-h人类可读格式)64. 查看目录大小: du -sh /home/user(-s总大小,-h可读)65. 查看内存使用情况: free -h66. 查看最耗CPU的进程: top -o %CPU(动态,q退出) 或ps aux --sort=-%cpu | head -n 1167. 查看最耗内存的进程: top -o %MEM或ps aux --sort=-%mem | head -n 1168. 根据进程名查找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+Z73. 让暂停的作业在后台继续运行: bg %174. 使进程不受终端关闭影响: nohup ./start_server.sh &(输出默认到 nohup.out)75. 查看网络连接状态: netstat -tulnp(查看监听端口及对应进程)76. 查看主机路由表: route -n或ip route show77. 测试网络连通性: ping -c 4 google.com(-c指定次数)78. 下载文件: wget https://example.com/file.tar.gz79. 命令行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. 添加注释: 为脚本中的复杂命令组合添加注释说明意图。