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. 添加注釋: 為腳本中的復雜命令組合添加注釋說明意圖。