Shell 脚本提速秘籍:80 个高频命令组合用法,新手也能轻松驾驭!

2025-07-30 09:13:02 RAIZ

 

Shell 脚本是自动化运维、数据处理和系统管理的利器。掌握核心命令的组合使用,能极大提升脚本效率和解决问题的能力。本文精心整理 80 个 Shell 脚本中高频出现的命令组合用法,涵盖文件操作、文本处理、系统监控、条件判断等核心场景,条条实用!即使你是 Shell 新手,也能通过这些“积木块”快速搭建起自己的脚本世界。


一、文件与目录操作基础

  1. 1. 创建并进入目录: mkdir -p project/data && cd project/data (-p 确保父目录存在)
  2. 2. 复制并保留属性: cp -a source_dir destination_dir (-a 归档模式,保留权限、时间戳等)
  3. 3. 移动文件到特定目录: find . -name "*.log" -exec mv -t /backup/ {} + (高效移动大量文件)
  4. 4. 安全删除(先确认): rm -i *.tmp (-i 交互式删除,每个文件都询问)
  5. 5. 强制递归删除目录: rm -rf old_build/ (慎用! -r 递归, -f 强制)
  6. 6. 查看文件前10行: head -n 10 access.log
  7. 7. 查看文件后15行: tail -n 15 error.log
  8. 8. 实时跟踪日志新增内容: tail -f app.log (-f follow, 持续输出新增内容)
  9. 9. 查找文件(按名称): find /home/user -type f -name "config.ini"
  10. 10. 查找目录: find /var -type d -name "www"
  11. 11. 查找并删除(谨慎!): find /tmp -name "core.*" -mtime +7 -exec rm {} \; (删除 /tmp 下超过 7 天的 core 文件)
  12. 12. 查找并统计文件数: find src/ -type f | wc -l
  13. 13. 创建文件软链接: ln -s /path/to/original /path/to/link
  14. 14. 创建目录软链接: ln -s /path/to/original_dir /path/to/link_dir
  15. 15. 查看文件类型: file unknown_file.bin
  16. 16. 比较两个文件差异: diff file1.txt file2.txt
  17. 17. 比较并排显示差异: diff -y file1.txt file2.txt
  18. 18. 生成目录树结构: tree -L 2 (显示当前目录树,深度为 2 级)
  19. 19. 更改文件扩展名: for f in *.txt; do mv -- "$f" "${f%.txt}.csv"; done (批量 .txt 改为 .csv)
  20. 20. 备份文件(带时间戳): cp important.conf{,.bak_$(date +%Y%m%d)} (生成 important.conf.bak_20230713)

二、文本处理利器 (grep, sed, awk, sort, uniq)

  1. 21. 搜索文件中包含关键词的行: grep "ERROR" system.log
  2. 22. 递归搜索目录下文件内容: grep -r "function_name" src/
  3. 23. 搜索时忽略大小写: grep -i "warning" app.log
  4. 24. 显示匹配行及其后2行: grep -A 2 "Exception" trace.log
  5. 25. 显示匹配行及其前3行: grep -B 3 "Starting" boot.log
  6. 26. 只显示匹配的文件名: grep -l "pattern" *.py
  7. 27. 反转匹配(显示不包含的行): grep -v "DEBUG" verbose.log
  8. 28. 使用扩展正则表达式: grep -E "error|warning" messages.log
  9. 29. 统计匹配行数: grep -c "success" report.txt
  10. 30. 简单文本替换: sed 's/old_text/new_text/' input.txt (输出到屏幕,不修改原文件)
  11. 31. 替换并保存修改(原地编辑): sed -i 's/foo/bar/g' file.txt (-i 直接修改文件, g 全局替换)
  12. 32. 删除空白行: sed '/^$/d' messy.txt
  13. 33. 打印特定行(第5行): sed -n '5p' data.txt
  14. 34. 打印行范围(10到20行): sed -n '10,20p' longfile.log
  15. 35. 打印最后一列(默认空格分隔): awk '{print $NF}' columns.dat
  16. 36. 打印特定列(第2和第4列): awk '{print $2, $4}' table.csv
  17. 37. 根据条件打印行(第3列大于100): awk '$3 > 100 {print $0}' numbers.txt
  18. 38. 设置输入字段分隔符(如逗号): awk -F',' '{print $1}' data.csv
  19. 39. 统计文件行数、单词数、字符数: wc report.txt
  20. 40. 排序文件内容: sort unsorted_list.txt

三、文本处理进阶与数据操作

  1. 41. 排序(数值顺序): sort -n numeric_data.txt
  2. 42. 排序(逆序): sort -r names.txt
  3. 43. 排序并去重: sort names.txt | uniq
  4. 44. 仅显示重复行: sort dups.txt | uniq -d
  5. 45. 显示唯一行(去除所有重复): sort dups.txt | uniq -u
  6. 46. 统计每行出现次数: sort log_levels.txt | uniq -c
  7. 47. 按次数降序排列: sort log_levels.txt | uniq -c | sort -nr
  8. 48. 提取文件路径的目录部分: dirname /var/log/apache/access.log (输出 /var/log/apache)
  9. 49. 提取文件路径的文件名部分: basename /var/log/apache/access.log (输出 access.log)
  10. 50. 提取文件名(不含扩展名): basename /path/to/file.tar.gz .tar.gz (输出 file)
  11. 51. 连接多个文件: cat header.txt body.txt footer.txt > complete.html
  12. 52. 查看压缩文本文件: zcat access.log.gz | grep "404" (适用于 gzip)
  13. 53. 分页查看长输出: ls -l /etc | less (按空格下翻页, q 退出)
  14. 54. 转换DOS换行符(CRLF)为Unix(LF): dos2unix script.sh (或 sed -i 's/\r$//' script.sh)
  15. 55. 转换Unix换行符为DOS: unix2dos document.txt (或 sed -i 's/$/\r/' document.txt)
  16. 56. 生成随机密码(16字符): head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16; echo
  17. 57. 计算文件MD5校验和: md5sum important.iso (Linux)
  18. 58. 计算文件SHA256校验和: sha256sum critical.zip (Linux)
  19. 59. 按列合并两个文件: paste file1.txt file2.txt > combined.txt
  20. 60. 转换字符大小写(小写转大写): echo "Hello" | tr 'a-z' 'A-Z' (输出 HELLO)

四、系统、进程、网络与脚本技巧

  1. 61. 查看当前用户名: whoami
  2. 62. 查看系统运行时间与负载: uptime
  3. 63. 查看磁盘空间使用: df -h (-h 人类可读格式)
  4. 64. 查看目录大小: du -sh /home/user (-s 总大小, -h 可读)
  5. 65. 查看内存使用情况: free -h
  6. 66. 查看最耗CPU的进程: top -o %CPU (动态, q退出) 或 ps aux --sort=-%cpu | head -n 11
  7. 67. 查看最耗内存的进程: top -o %MEM 或 ps aux --sort=-%mem | head -n 11
  8. 68. 根据进程名查找PID: pgrep -f "nginx master process"
  9. 69. 根据进程名发送信号(如TERM): pkill -TERM -f "python myapp.py"
  10. 70. 后台运行命令: long_running_command &
  11. 71. 将后台作业带到前台: fg %1 (1 是作业号, 用 jobs 查看)
  12. 72. 暂停当前前台作业: 按 Ctrl+Z
  13. 73. 让暂停的作业在后台继续运行: bg %1
  14. 74. 使进程不受终端关闭影响: nohup ./start_server.sh & (输出默认到 nohup.out)
  15. 75. 查看网络连接状态: netstat -tulnp (查看监听端口及对应进程)
  16. 76. 查看主机路由表: route -n 或 ip route show
  17. 77. 测试网络连通性: ping -c 4 google.com (-c 指定次数)
  18. 78. 下载文件: wget https://example.com/file.tar.gz
  19. 79. 命令行HTTP客户端: curl -O https://example.com/image.jpg (-O 下载文件)
  20. 80. 安全复制文件到远程主机: scp local_file.txt user@remote_host:/remote/directory/

这 80 个命令组合是 Shell 脚本的“瑞士军刀”,熟练掌握能解决日常大部分自动化任务。需要注意的是:

  1. 1. 理解原理: 了解每个命令选项的含义 (man command)。
  2. 2. 安全第一: 对 rm -rffind -execchmodchown 等操作保持警惕,尤其涉及系统文件或重要数据时。操作前务必确认路径和条件。
  3. 3. 循序渐进: 从简单组合开始尝试,逐步构建更复杂的逻辑。
  4. 4. 善用测试: 在非生产环境测试脚本逻辑。
  5. 5. 添加注释: 为脚本中的复杂命令组合添加注释说明意图。

 


我要咨询