
在 Linux 运维工作中,簡單命令往往難以應對複雜場景 —— 比如批量處理文件時反覆手動執行指令、終端斷開導致數據庫導出中斷、內存異常卻找不到耗資源進程…… 這些問題不僅浪費時間,還可能延誤故障處理。其實,掌握幾款高級命令就能輕鬆解決這些痛點,讓腳本更精簡、操作更高效、排查更快速。本文整理了 8 類运维必備的 Linux 高級命令,結合真實場景給出詳細示例,幫你擺脫「重複勞動」,提升运维效率。
一、xargs:批量處理的「效率神器」
xargs 命令的核心價值在於「將前一個命令的輸出作為後一個命令的參數」,避免手動傳參的繁瑣,尤其適用於批量文件處理場景。比如查找特定格式文件後分類、打包,普通方法需要先輸出到文件再二次處理,而 xargs 可一步完成。
實戰示例:
- 查找並分類 .conf 文件需求:找出根目錄下所有以
.conf結尾的文件,並分析每個文件的類型(如文本、XML 等)。命令:bash# find / -name *.conf -type f -print | xargs file輸出結果(片段):plaintext/etc/lvm/lvm.conf: ASCII English text/etc/fonts/fonts.conf: XML document text/etc/libaudit.conf: ASCII English text解釋:find負責定位文件,xargs將找到的文件路徑傳給file命令,直接輸出每個文件的格式類型。 - 查找並打包 .conf 文件需求:將根目錄下所有
.conf文件打包壓縮,便於備份。命令:bash# find / -name *.conf -type f -print | xargs tar cjf conf_backup.tar.gz解釋:tar cjf負責創建壓縮包,xargs自動將find找到的文件列表作為壓縮對象,無需手動輸入多個文件路徑。
二、後台運行:避免終端中斷的「保險措施」
运维中常遇到長時間操作(如大數據量數據庫導出、大型文件傳輸),若終端會話中斷(如網絡波動),操作將直接失敗。此時用 nohup 命令可讓進程在後台持續運行,並記錄輸出日志。
實戰示例:
- 明文密碼後台導出數據庫需求:導出所有數據庫到文件,後台運行,避免終端中斷。命令:bash
# nohup mysqldump -uroot -p123456 --all-databases > ./all_dbs.sql &參數解釋:nohup:忽略終端掛斷信號,確保進程持續運行;&:將進程放入後台;- 執行後當前目錄會生成
nohup.out文件,記錄導出過程中的錯誤或日誌。
- 隱藏密碼後台運行需求:避免密碼明文顯示在命令行(防止他人查看歷史命令),同時後台導出數據庫。操作步驟:① 執行命令(不帶
&):bash# nohup mysqldump -uroot -p --all-databases > ./all_dbs.sql② 此時終端會提示輸入密碼,輸入後按 Ctrl+Z 暫停進程;③ 輸入bg命令,將暫停的進程切換到後台:bash# bg解釋:通過「暫停 + 後台恢復」的方式,既隱藏了密碼,又實現了後台運行。
三、排查資源異常:快速定位高耗用進程
當服務卡頓、服務器響應緩慢時,需先找出佔用內存或 CPU 過高的進程。通過 ps 配合 sort 命令,可按資源佔用率排序,快速定位「元凶」。
1. 查找內存耗用最高的前 20 個進程
命令:bash# ps -aux | sort -rnk 4 | head -20參數解釋:
ps -aux:顯示所有進程的詳細信息(包括用戶、PID、內存 / CPU 佔比等);sort -rnk 4:按第 4 列(內存佔用百分比%MEM)反向排序(從高到低);head -20:只顯示前 20 個進程。
輸出關鍵列:第 4 列為內存佔比,最後一列為進程名稱(如/usr/libexec/mysqld代表 MySQL 進程)。
2. 查找 CPU 耗用最高的前 20 個進程
命令:bash# ps -aux | sort -rnk 3 | head -20參數解釋:僅將 sort -rnk 4 改為 sort -rnk 3,按第 3 列(CPU 佔用百分比 %CPU)排序,其餘邏輯與內存排查一致。
四、multitail:同一終端查看多個日誌
傳統查看多個日誌需打開多個終端,切換來回浪費時間。multitail 工具支持在同一終端分屏顯示多個文件內容,還可過濾關鍵字,適用於排查多日誌間的關聯問題(如「應用日誌報錯時,網絡日誌是否有異常」)。
實戰示例:
- 安裝 multitail(CentOS 系統)命令:bash
# wget ftp://ftp.is.co.za/mirror/ftp.rpmforge.net/redhat/el6/en/x86_64/dag/RPMS/multitail-5.2.9-1.el6.rf.x86_64.rpm# yum -y localinstall multitail-5.2.9-1.el6.rf.x86_64.rpm - 同時查看安全日誌與網絡 ping 結果需求:過濾
/var/log/secure日誌中的「成功登錄」記錄(關鍵字Accepted),同時實時查看對百度的 ping 狀態,判斷登錄異常是否與網絡有關。命令:bash# multitail -e "Accepted" /var/log/secure -l "ping baidu.com"輸出效果:終端分為兩部分,上半部分顯示包含Accepted的安全日誌,下半部分顯示實時 ping 結果,無需切換終端即可同步觀察。
五、持續 ping 並記錄日志:破解「網絡甩鍋」
業務異常時,常出現「歸因於網絡問題」的情況,但臨時 ping 幾個包無法證明歷史狀態。通過「ping + awk 時間戳」命令,可每秒記錄 ping 結果,留存完整日志,便於事後追溯。
實戰示例:
需求:持續 ping 極光推送 API 地址,記錄每條結果的時間戳,存到日志文件中。命令:bash# ping api.jpush.cn | awk '{ print $0" " strftime("%Y-%m-%d %H:%M:%S",systime()) } ' >> /tmp/jpush_ping.log &參數解釋:
ping api.jpush.cn:持續 ping 目標地址;awk '{...}':為每條 ping 結果添加當前時間戳(格式年-月-日 時:分:秒);>> /tmp/jpush_ping.log:將結果追加到日志文件,避免覆蓋;&:後台運行,不影響其他操作。
查看日志:cat /tmp/jpush_ping.log,可看到每條記錄的時間與延遲,輕鬆證明「某時間段網絡是否正常」。
六、查看 TCP 連接狀態:分析網絡連接健康度
當服務出現「連接超時」「無法建立連接」時,需先排查 TCP 連接狀態(如 LISTEN 數量是否正常、ESTABLISHED 是否過多導致資源耗盡)。
實戰示例:
命令:bash# netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn參數解釋:
netstat -nat:顯示所有 TCP 連接(-n用 IP 代替主機名,-a顯示所有連接,-t只看 TCP);awk '{print $6}':提取第 6 列(連接狀態,如LISTEN「監聽中」、ESTABLISHED「已建立」);sort | uniq -c:統計每種狀態的數量;sort -rn:按數量從高到低排序。
輸出示例(片段):
plaintext
10 LISTEN5 ESTABLISHED1 Foreign
通過結果可判斷:若 ESTABLISHED 數量異常高,可能是連接未及時釋放;若 LISTEN 數量為 0,可能是服務未正常啟動。
七、統計 80 端口請求 IP:排查異常請求
當 Web 服務(默認 80 端口)請求量突增、服務卡頓時,需排查是否有單一 IP 大量請求(可能是攻擊或誤操作)。通過命令可統計 80 端口的請求來源 IP 排名。
實戰示例:
命令:bash# netstat -anlp | grep 80 | grep tcp | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n20參數解釋:
netstat -anlp | grep 80 | grep tcp:過濾出 80 端口的 TCP 連接;awk '{print $5}':提取第 5 列(來源 IP: 端口,如172.31.2.23:51677);awk -F: '{print $1}':按「:」分割,提取來源 IP(去掉端口);sort | uniq -c:統計每個 IP 的請求次數;sort -nr | head -n20:按次數排序,顯示前 20 個 IP。輸出示例(片段):
plaintext
899 172.31.2.23
60 172.31.2.24
若某 IP 請求次數遠高於其他(如 899 次),可進一步判斷是否為異常請求,並通過防火牆封禁。
八、SSH 端口轉發:安全訪問內網服務
企業中常通過堡壘機管理內網服務,若需讓開發人員訪問內網 ElasticSearch 的 9200 端口(不直接暴露內網 IP),可通過 SSH 端口轉發實現 —— 將堡壘機的端口請求轉發到內網服務端口。
實戰示例:
場景:堡壘機 IP 為 192.168.1.15,內網 ElasticSearch 服務器 IP 為 192.168.1.19(9200 端口),需讓開發訪問 192.168.1.15:9200 時,實際訪問內網的 192.168.1.19:9200。命令:bash# ssh -p 22 -C -f -N -g -L 9200:192.168.1.19:9200 ihavecar@192.168.1.19參數解釋:
-p 22:SSH 默認端口(若堡壘機端口不同需修改);-C:壓縮數據傳輸,提升速度;-f:後台運行 SSH 進程;-N:不執行遠程命令,僅用於端口轉發;-g:允許其他主機訪問轉發端口(不僅限本機);-L 9200:192.168.1.19:9200:本地端口映射(本地端口:目標主機IP:目標端口);ihavecar@192.168.1.19:內網服務器的 SSH 賬號與 IP(需先配置堡壘機到內網服務器的免密登錄,避免每次輸密碼)。
驗證:開發人員訪問 http://192.168.1.15:9200,即可看到 ElasticSearch 的 head 面板,無需直接訪問內網 IP。
