運維必備!超實用 Linux 高級命令:從批量處理到故障排查,壹篇掌握

78a52155a35e43d8a9a2c0f32d3241b0

在 Linux 运维工作中,簡單命令往往難以應對複雜場景 —— 比如批量處理文件時反覆手動執行指令、終端斷開導致數據庫導出中斷、內存異常卻找不到耗資源進程…… 這些問題不僅浪費時間,還可能延誤故障處理。其實,掌握幾款高級命令就能輕鬆解決這些痛點,讓腳本更精簡、操作更高效、排查更快速。本文整理了 8 類运维必備的 Linux 高級命令,結合真實場景給出詳細示例,幫你擺脫「重複勞動」,提升运维效率。

一、xargs:批量處理的「效率神器」

xargs 命令的核心價值在於「將前一個命令的輸出作為後一個命令的參數」,避免手動傳參的繁瑣,尤其適用於批量文件處理場景。比如查找特定格式文件後分類、打包,普通方法需要先輸出到文件再二次處理,而 xargs 可一步完成。

實戰示例:
  1. 查找並分類 .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 命令,直接輸出每個文件的格式類型。
  2. 查找並打包 .conf 文件需求:將根目錄下所有 .conf 文件打包壓縮,便於備份。命令:bash# find / -name *.conf -type f -print | xargs tar cjf conf_backup.tar.gz解釋:tar cjf 負責創建壓縮包,xargs 自動將 find 找到的文件列表作為壓縮對象,無需手動輸入多個文件路徑。

二、後台運行:避免終端中斷的「保險措施」

运维中常遇到長時間操作(如大數據量數據庫導出、大型文件傳輸),若終端會話中斷(如網絡波動),操作將直接失敗。此時用 nohup 命令可讓進程在後台持續運行,並記錄輸出日志。

實戰示例:
  1. 明文密碼後台導出數據庫需求:導出所有數據庫到文件,後台運行,避免終端中斷。命令:bash# nohup mysqldump -uroot -p123456 --all-databases > ./all_dbs.sql &參數解釋:
    • nohup:忽略終端掛斷信號,確保進程持續運行;
    • &:將進程放入後台;
    • 執行後當前目錄會生成 nohup.out 文件,記錄導出過程中的錯誤或日誌。
  2. 隱藏密碼後台運行需求:避免密碼明文顯示在命令行(防止他人查看歷史命令),同時後台導出數據庫。操作步驟:① 執行命令(不帶 &):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 工具支持在同一終端分屏顯示多個文件內容,還可過濾關鍵字,適用於排查多日誌間的關聯問題(如「應用日誌報錯時,網絡日誌是否有異常」)。

實戰示例:
  1. 安裝 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
  2. 同時查看安全日誌與網絡 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 LISTEN
  • 5 ESTABLISHED
  • 1 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。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top