chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

運維工程師必須掌握的10個系統(tǒng)命令

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-03-23 10:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 命令概述與分類

1.1 為什么要掌握這些命令

系統(tǒng)命令是運維工程師與服務(wù)器交互的基礎(chǔ)工具。雖然現(xiàn)代運維工作有大量的自動化工具和平臺,但掌握核心系統(tǒng)命令仍然必要。命令行工具響應(yīng)速度快、不依賴圖形界面、可以組合使用應(yīng)對復(fù)雜場景。在服務(wù)器故障的緊急情況下,命令行往往是最高效的診斷和處置手段。

運維工作中常見的問題場景包括:服務(wù)器SSH連接不上、業(yè)務(wù)響應(yīng)超時、磁盤空間爆滿、進程異常退出。這些問題的排查往往需要在命令行環(huán)境下進行快速診斷。掌握核心命令可以大幅縮短故障排查時間,提升運維效率。

系統(tǒng)命令的掌握程度直接影響運維工作的效率。一位熟練掌握系統(tǒng)命令的工程師,可以在幾分鐘內(nèi)定位問題,而經(jīng)驗不足的工程師可能需要幾小時。命令的組合使用可以應(yīng)對各種復(fù)雜場景,這是圖形化工具難以替代的。

1.2 命令分類

本文將10個核心命令分為五類:

系統(tǒng)監(jiān)控類包括top、htop用于進程和資源監(jiān)控;vmstat用于虛擬內(nèi)存統(tǒng)計;iostat用于磁盤IO統(tǒng)計。這類命令幫助運維人員快速了解系統(tǒng)負載情況。

網(wǎng)絡(luò)診斷類包括netstat、ss用于網(wǎng)絡(luò)連接狀態(tài)查看;tcpdump用于網(wǎng)絡(luò)數(shù)據(jù)包抓??;lsof用于文件與端口關(guān)聯(lián)查看。這類命令是網(wǎng)絡(luò)故障排查的利器。

磁盤分析類包括df、du用于磁盤空間分析。這類命令幫助運維人員快速定位磁盤空間問題。

文本處理類包括find、awk、sed用于文本搜索和處理。這類命令在日志分析和配置處理場景中使用頻繁。

服務(wù)管理類包括systemctl、service用于服務(wù)啟停管理;rsync用于數(shù)據(jù)同步。這類命令是日常運維的基本操作。

2. 命令詳解

2.1 top與htop

top是Linux下最常用的進程監(jiān)控命令,實時顯示系統(tǒng)的整體狀態(tài)和各個進程的資源占用情況。top默認每3秒刷新一次數(shù)據(jù),可以通過-d參數(shù)調(diào)整刷新間隔。

top輸出的第一行是系統(tǒng)負載信息,包含當(dāng)前時間、系統(tǒng)運行時間、當(dāng)前登錄用戶數(shù)、1分鐘/5分鐘/15分鐘平均負載。負載數(shù)值如果持續(xù)高于CPU核心數(shù),說明系統(tǒng)存在性能瓶頸。

top - 1030 up 100 days, 3:22, 2 users, load average: 1.25, 0.98, 0.85

load average的三個數(shù)字分別代表1分鐘、5分鐘、15分鐘的平均負載。判斷負載是否過高需要結(jié)合CPU核心數(shù):8核CPU的負載不超過8算正常,超過8說明負載過高。

第二行是進程統(tǒng)計信息,顯示總進程數(shù)、運行中的進程數(shù)、睡眠中的進程數(shù)、停止的進程數(shù)、僵尸進程數(shù)。僵尸進程數(shù)如果大于0,需要檢查對應(yīng)的父進程。

Tasks: 245 total,  3 running, 242 sleeping,  0 stopped,  0 zombie

第三行和第四行是CPU和內(nèi)存使用情況的匯總。CPU行的us表示用戶空間占用比例,sy表示內(nèi)核空間占用比例,id表示空閑比例。如果wa(等待IO)數(shù)值持續(xù)較高,說明系統(tǒng)存在IO瓶頸。

%Cpu(s): 25.3 us, 5.2 sy, 0.0 ni, 68.5 id, 0.0 wa, 0.8 hi, 0.2 si, 0.0 st
KiB Mem : 32768032 total, 8192000 free, 16384000 used, 8192032 buff/cache

進程列表默認按CPU使用率排序,可以通過P(大寫)切換到CPU排序,M切換到內(nèi)存排序,T切換到運行時間排序。按q鍵退出top。

top交互命令匯總:

按鍵 功能
q 退出top
P 按CPU使用率排序
M 按內(nèi)存使用率排序
T 按運行時間排序
1 切換顯示每個CPU核心
c 顯示完整命令行
k 終止進程
r 調(diào)整進程優(yōu)先級
u 按用戶過濾
n 設(shè)置顯示進程數(shù)量
W 保存配置到文件

htop是top的增強版本,提供了更友好的界面和更多功能。htop支持鼠標(biāo)操作,顏色區(qū)分不同類型進程,可以水平滾動查看完整命令行參數(shù)。htop還可以直接向進程發(fā)送信號,支持進程樹視圖。

htop界面布局:

 CPU [|||||||||||||||||||||||||||||||||||||||] 85%
 Mem [|||||||||||||||||||||||||||||||||||||] 72%
 Swp [||                    ]  5%

 PID  USER  PRI NI VIRT  RES  SHR S CPU% MEM%  TIME+ Command
1234 nginx  20  0 128M  64M  12M R 45.2 12.5 15:32.11 nginx: worker
5678 mysql  20  0 2.1G  1.8G 156M S 25.0  5.5  2:45.33 mysqld
9012 redis  20  0 45M  32M  8M S 10.5  3.2  0:23.11 redis-server

htop常用快捷鍵:

按鍵 功能
F1 幫助
F2 設(shè)置
F3 搜索進程
F4 過濾器
F5 樹形視圖
F6 排序
F7/F8 調(diào)整nice值
F9 發(fā)送信號
F10 退出

使用場景舉例:服務(wù)器響應(yīng)緩慢時,使用top查看是哪個進程占用CPU或內(nèi)存最高。如果發(fā)現(xiàn)某個Java進程CPU占用100%,需要進一步使用jstack分析線程堆棧。

# 查找CPU占用最高的進程
top -c

# 查看特定用戶的進程
top -u nginx

# 實時監(jiān)控,每秒刷新
top -d 1

# 查看所有CPU核心的使用情況
top - 1

# 保存top輸出到文件
top -b -n 1 > top_output.txt

2.2 netstat與ss

netstat是查看網(wǎng)絡(luò)連接狀態(tài)的經(jīng)典命令,可以顯示網(wǎng)絡(luò)協(xié)議統(tǒng)計信息和網(wǎng)絡(luò)連接狀態(tài)。netstat的常用參數(shù)組合是-anp,其中-a顯示所有連接,-n不解析主機名和服務(wù)名,-p顯示進程信息。

netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address      Foreign Address     State    PID/Program name
tcp    0   0 0.0.0.0:22       0.0.0.0:*        LISTEN   1234/sshd
tcp    0   48 10.0.0.5:22       192.168.1.100:54321  ESTABLISHED 1234/sshd
tcp    0   0 127.0.0.1:631      0.0.0.0:*        LISTEN   4567/cupsd
tcp    0   0 0.0.0.0:3306      0.0.0.0:*        LISTEN   7890/mysqld

netstat的輸出包含協(xié)議類型、本地地址、外部地址、狀態(tài)、進程ID和進程名稱。狀態(tài)列顯示TCP連接的狀態(tài),常見狀態(tài)包括LISTEN(監(jiān)聽中)、ESTABLISHED(已建立)、TIME_WAIT(等待關(guān)閉)、CLOSE_WAIT(等待關(guān)閉)。

TCP連接狀態(tài)說明:

狀態(tài) 說明
LISTEN 等待連接,服務(wù)器socket正在監(jiān)聽
ESTABLISHED 連接已建立,雙方可以傳輸數(shù)據(jù)
TIME_WAIT 等待足夠時間確保對方收到關(guān)閉請求
CLOSE_WAIT 等待本地應(yīng)用程序關(guān)閉連接
SYN_SENT 正在發(fā)送連接請求
SYN_RECV 收到連接請求并發(fā)送確認
FIN_WAIT1 主動關(guān)閉,發(fā)送FIN
FIN_WAIT2 收到確認,等待對方關(guān)閉
CLOSING 雙方同時關(guān)閉
LAST_ACK 最后確認,等待接收

使用netstat可以統(tǒng)計當(dāng)前各種狀態(tài)的連接數(shù)量:

# 統(tǒng)計ESTABLISHED連接數(shù)量
netstat -an | grep ESTABLISHED | wc -l

# 統(tǒng)計TIME_WAIT連接數(shù)量
netstat -an | grep TIME_WAIT | wc -l

# 統(tǒng)計各狀態(tài)的連接數(shù)量
netstat -an | awk'/^tcp/ {print $6}'| sort | uniq -c

# 查看監(jiān)聽中的端口
netstat -lntp

# 查看所有TCP連接
netstat -anp | grep tcp

# 查看特定端口的連接
netstat -anp | grep :80

# 查看網(wǎng)絡(luò)統(tǒng)計信息
netstat -s

ss是netstat的現(xiàn)代替代工具,采用iproute2架構(gòu),性能更好且輸出信息更詳細。ss -tunap可以列出所有TCP和UDP連接,顯示完整的五元組信息和進程信息。

ss -tunap
Netid State  Recv-Q  Send-Q  Local Address:Port       Peer Address:Port        Process
tcp  LISTEN 0    128   0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
tcp  ESTAB  0    0    10.0.0.5:22           192.168.1.100:54321     users:(("sshd",pid=5678,fd=4))
tcp  LISTEN 0    80    0.0.0.0:3306          0.0.0.0:*          users:(("mysqld",pid=7890,fd=10))
udp  UNCONN 0    0    0.0.0.0:68           0.0.0.0:*          users:(("dhclient",pid=1011,fd=5))

ss相比netstat的優(yōu)勢在于查詢速度。在大量連接的場景下,netstat可能需要數(shù)秒才能返回結(jié)果,ss幾乎是即時返回。ss還支持更多的過濾條件。

# 查看所有TCP連接
ss -t

# 查看所有UDP連接
ss -u

# 查看監(jiān)聽中的 sockets
ss -l

# 顯示進程信息
ss -p

# 顯示概要統(tǒng)計
ss -s

# 過濾特定狀態(tài)
ss -t state established

# 過濾特定端口
ss -t sport = :80

# 過濾特定地址
ss -t dst 10.0.0.1

# 組合過濾
ss -t state established'( sport = :http or dport = :http )'

# 顯示詳細信息
ss -tunap

使用場景舉例:服務(wù)端口連接數(shù)過多導(dǎo)致性能下降時,使用ss -s統(tǒng)計各類狀態(tài)的連接數(shù)量,使用ss -tan dst :8080查看連接8080端口的所有連接,定位異常的客戶端IP。

# 統(tǒng)計連接狀態(tài)分布
ss -s

# 查看8080端口的所有連接
ss -tan dst :8080

# 查看來自特定IP的連接
ss -tan src 192.168.1.100

# 查看連接數(shù)最多的前10個IP
ss -tan | awk'{print $5}'| cut -d: -f1 | sort | uniq -c | sort -rn | head -10

# 查看socket緩沖區(qū)大小
ss -tm

# 查看TCP握手詳細信息
ss -ti

2.3 lsof

lsof是list open files的縮寫,用于查看進程打開的文件。在Linux系統(tǒng)中,一切皆文件,包括網(wǎng)絡(luò)連接、管道、設(shè)備文件等。lsof通過分析內(nèi)核的進程文件表獲取信息。

lsof -p 1234
COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF  NODE NAME
nginx  1234 nginx cwd  DIR 253,1   4096  128 /
nginx  1234 nginx rtd  DIR 253,1   4096  128 /
nginx  1234 nginx txt  REG 253,1 123456 1024 /usr/sbin/nginx
nginx  1234 nginx mem  REG 253,1 789012 2048 /lib/x86_64/libcrypto.so
nginx  1234 nginx  0r  CHR  1,3   0t0  1024 /dev/null
nginx  1234 nginx  1w  REG 253,1 123456 4096 /var/log/nginx/access.log
nginx  1234 nginx  2w  REG 253,1  8192 4100 /var/log/nginx/error.log
nginx  1234 nginx  3u IPv4  12345   0t0  TCP *:80 (LISTEN)
nginx  1234 nginx  4u IPv4  12346   0t0  TCP *:443 (LISTEN)

lsof的常用參數(shù)包括:-i顯示網(wǎng)絡(luò)連接文件,-p指定進程ID,-u指定用戶,-c指定命令名稱。不帶參數(shù)運行l(wèi)sof會列出所有打開的文件,信息量很大,通常需要配合過濾條件使用。

# 查看占用80端口的進程
lsof -i:80

# 查看所有網(wǎng)絡(luò)連接
lsof -i

# 查看特定協(xié)議的網(wǎng)絡(luò)連接
lsof -i TCP
lsof -i UDP

# 查看特定進程打開的文件
lsof -p 1234

# 查看特定用戶打開的文件
lsof -u nginx

# 查看特定命令打開的文件
lsof -c nginx

# 查看目錄下的文件被哪些進程使用
lsof +D /var/log

# 遞歸查看目錄下被使用的文件
lsof +D /var/log/nginx/

# 查看文件被哪些進程使用
lsof /var/log/nginx/access.log

# 查看IPv6連接
lsof -i6

# 查看端口范圍
lsof -i:80-443

# 查看X Window連接
lsof -i @localhost:6000

使用場景舉例:磁盤空間顯示已滿,但找不到大文件時,使用lsof +D /path檢查是否有進程打開了已刪除的文件。文件刪除后,磁盤空間不會立即釋放,只有進程關(guān)閉文件句柄后才會釋放。

# 檢查打開已刪除文件的進程
lsof +L1

# 檢查打開大量文件的進程
lsof -p 1234 | wc -l

# 查看某個用戶的所有網(wǎng)絡(luò)連接
lsof -a -u nginx -i

# 查看所有Listening sockets
lsof -i -sTCP:LISTEN

# 查看網(wǎng)絡(luò)文件系統(tǒng)
lsof -N

# 查看字符設(shè)備
lsof -c ^nginx

# 查看Unix Domain Socket
lsof -U

# 查看FD類型
lsof -d txt,mem

# 檢查特定UID用戶
lsof -u 1000

# 組合條件
lsof -u nginx -i -a -p 1234

2.4 df與du

df(disk free)用于查看文件系統(tǒng)磁盤空間使用情況,是排查磁盤空間問題的第一個命令。df -h以人類可讀格式顯示,-T顯示文件系統(tǒng)類型。

df -h
Filesystem   Size Used Avail Use% Mounted on
/dev/sda1    100G  45G  55G 45% /
/dev/sda2    200G 120G  80G 60% /var/lib/kubelet
/dev/sdb1    500G 300G 200G 60% /var/lib/containerd
tmpfs      64M   0  64M  0% /dev/shm
tmpfs      7.8G  12M 7.8G  1% /run
/dev/mapper/centos-home
        50G  48G  2G 96% /home

df的輸出包含文件系統(tǒng)名稱、總大小、已用大小、可用大小、已用百分比、掛載點。已用百分比是判斷磁盤空間是否緊張的關(guān)鍵指標(biāo),建議設(shè)置告警閾值。

inode使用情況也需要關(guān)注。df -i顯示inode使用情況。inode用于存儲文件的元數(shù)據(jù),當(dāng)inode耗盡時,即使磁盤還有空間也無法創(chuàng)建新文件。大量小文件場景容易出現(xiàn)inode耗盡問題。

df -i
Filesystem    Inodes IUsed  IFree IUse% Mounted on
/dev/sda1   6553600 234567 6319033  4% /
/dev/sda2   32768000 456789 32311211  2% /var
/dev/mapper/centos-home
       3276800 123456 3153344  4% /home

du(disk usage)用于分析目錄和文件的磁盤使用量。du -sh /path顯示指定路徑的總大小,-h以人類可讀格式,-s匯總統(tǒng)計。du -sh *顯示當(dāng)前目錄下各子目錄的大小。

du -sh /var
45G   /var

du -sh /var/*
12G   /var/log
8G   /var/lib
5G   /var/cache
20G   /var/spool

du支持按時間排序。du --time -sh *按修改時間顯示大小。du -ah --max-depth=1顯示指定深度的文件分布情況。

# 查看當(dāng)前目錄各子目錄大小
du -sh *

# 查看特定目錄大小
du -sh /var/log

# 顯示文件大小
du -ah /var/log

# 按大小排序顯示
du -sh * | sort -h

# 顯示目錄和文件大?。ㄏ拗粕疃龋?du -ah --max-depth=1 /var

# 顯示修改時間
du -sh --time=modification /var/*

# 排除特定目錄
du -sh --exclude='*.log'/var

# 查看所有文件系統(tǒng)使用情況
df -ah

# 查看inode使用情況
df -i

# 統(tǒng)計某類型文件大小
find /var -name"*.log"-execdu -ch {} + | tail -1

# 查看磁盤IO
iostat -x 1

使用場景舉例:磁盤空間不足時,使用du -sh /*從根目錄開始逐級排查,找到占用空間最大的目錄或文件。日志目錄、臨時文件目錄、緩存目錄通常是磁盤空間的主要消耗者。

# 從根目錄開始逐級排查
du -h --max-depth=1 /

# 查看特定目錄下最大的10個文件
find /var -typef -execdu -h {} + | sort -rh | head -10

# 查看日志文件大小分布
find /var/log-typef -name"*.log"-execdu -h {} + | sort -rh

# 查看臨時目錄
du -sh /tmp

# 查看用戶目錄
du -sh /home/*

# 統(tǒng)計特定用戶使用的空間
du -sh /home/nginx

# 排除已刪除但被進程打開的文件
du -h --exclude='proc'/proc

# 實時監(jiān)控目錄變化
watch -n 1'du -sh /var'

2.5 iostat與vmstat

iostat是iostatistics的縮寫,用于監(jiān)控系統(tǒng)磁盤IO和CPU使用情況。iostat -xz 1每秒刷新一次詳細統(tǒng)計,-x顯示擴展統(tǒng)計,-z忽略沒有活動的設(shè)備。

iostat -xz 1
Linux 6.1.0-k8s (node-1)   03/20/2026   _x86_64_    (4 CPU)

avg-cpu: %user  %nice %system %iowait %steal   %idle
     15.23  0.00  5.12  2.34  0.00   77.31

Device: rrqm/s  wrqm/s  r/s  w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await %util
sda     0.12  12.34  2.45 45.67  198.23 4567.89  98.45   1.23  5.67  2.34  6.12  5.67
sdb     0.00   0.00  0.00  0.00   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00

iostat輸出的關(guān)鍵指標(biāo)包括:%util設(shè)備利用率,接近100%時說明設(shè)備達到IO瓶頸;r/s和w/s每秒讀寫次數(shù);rkB/s和wkB/s每秒讀寫數(shù)據(jù)量;await平均IO等待時間;avgqu-sz平均隊列長度。

await和%util是兩個最關(guān)鍵的指標(biāo)。await高但%util不高,說明IO延遲大但設(shè)備本身未飽和,可能是存儲網(wǎng)絡(luò)延遲問題。%util高但await正常,說明設(shè)備本身是瓶頸。

vmstat(virtual memory statistics)用于查看虛擬內(nèi)存統(tǒng)計信息。vmstat 1每秒刷新一次,-s顯示詳細統(tǒng)計表。

vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b  swpd  free  buff cache  si  so  bi  bo in cs us sy id wa st
3 0   0 2048576 312456 4567890  0  0   5  12 1234 8567 25 5 68 2 0

vmstat輸出的關(guān)鍵列包括:r運行隊列長度,表示等待CPU的進程數(shù);b阻塞隊列長度,表示等待IO的進程數(shù);swpd虛擬內(nèi)存使用量;free空閑內(nèi)存;si/so換入換出內(nèi)存量;us/sy/id CPU用戶/系統(tǒng)/空閑比例。

# 每秒顯示一次
vmstat 1

# 顯示5次后退出
vmstat 1 5

# 顯示詳細統(tǒng)計
vmstat -s

# 顯示內(nèi)存統(tǒng)計(MB為單位)
vmstat -S m 1

# 顯示磁盤統(tǒng)計
vmstat -d

# 顯示每CPU核心統(tǒng)計
vmstat -p /dev/sda1

# 配合grep監(jiān)控特定指標(biāo)
vmstat 1 | grep -E'r|wa'

使用場景舉例:系統(tǒng)負載高但CPU空閑時,使用vmstat查看是否有大量進程在等待IO。使用iostat查看是哪個設(shè)備存在IO瓶頸。如果%util接近100%,說明設(shè)備處理能力不足,需要考慮升級存儲或優(yōu)化IO模式。

# 綜合使用
iostat -xz 1 &
vmstat 1 &
pidstat -d 1

# 查看CPU和IO關(guān)系
iostat -x 1 5

# 監(jiān)控特定設(shè)備
iostat -p sda 1

# 查看CPU頻率
vmstat -s | grep -i cpu

# 監(jiān)控上下文切換
vmstat 1 10

# 查看內(nèi)存詳情
vmstat -s -S m

# 監(jiān)控系統(tǒng)負載
uptime
w

2.6 strace與ltrace

strace用于追蹤進程的系統(tǒng)調(diào)用和信號,是排查程序行為和性能問題的有力工具。strace -f -p PID追蹤指定進程及其子進程,-c統(tǒng)計各類系統(tǒng)調(diào)用次數(shù)和耗時。

strace -c -p 1234
strace: Process 1234 attached
^Cstrace: Process 1234 detached
% time   seconds usecs/call   calls  errors  syscall
------ ----------- ----------- --------- --------- ----------------
45.23  0.123456     123   1000     read
25.67  0.070123      70   1000      write
15.34  0.041890      41   1000      select
10.12  0.027654      27   1000      fcntl
 3.45  0.009432      10   1000      gettimeofday
------ ----------- ----------- --------- --------- ----------------
100.00  0.272555          5000      total

strace的輸出包含每行一個系統(tǒng)調(diào)用,顯示調(diào)用號、函數(shù)名、參數(shù)和返回值。read(fd, buffer, count)顯示讀取操作,write(fd, buffer, count)顯示寫入操作,openat(pathname, flags)顯示文件打開操作。

strace -T顯示每個系統(tǒng)調(diào)用的耗時,-tt顯示微秒級時間戳。耗時信息對于性能分析非常重要,長時間等待的系統(tǒng)調(diào)用往往是性能瓶頸。

# 追蹤進程系統(tǒng)調(diào)用
strace -p 1234

# 追蹤并顯示返回值
strace -i -p 1234

# 統(tǒng)計系統(tǒng)調(diào)用次數(shù)
strace -c -p 1234

# 顯示時間戳
strace -t -p 1234

# 顯示微秒級時間
strace -tt -p 1234

# 顯示每個調(diào)用耗時
strace -T -p 1234

# 追蹤特定系統(tǒng)調(diào)用
strace -e trace=read,write,open,close -p 1234

# 追蹤網(wǎng)絡(luò)相關(guān)調(diào)用
strace -e trace=network -p 1234

# 追蹤信號
strace -e trace=signal -p 1234

# 追蹤子進程
strace -f -p 1234

# 輸出到文件
strace -o /tmp/strace.log -p 1234

# 限制輸出行數(shù)
strace -q -p 1234

# 顯示系統(tǒng)調(diào)用號
strace -r -p 1234

ltrace用于追蹤進程調(diào)用的庫函數(shù)。使用ltrace -p PID追蹤指定進程,-c統(tǒng)計庫函數(shù)調(diào)用次數(shù)。ltrace主要追蹤動態(tài)庫函數(shù)調(diào)用,適合分析程序與庫的交互。

# 追蹤庫函數(shù)調(diào)用
ltrace -p 1234

# 統(tǒng)計庫函數(shù)調(diào)用次數(shù)
ltrace -c -p 1234

# 追蹤特定庫函數(shù)
ltrace -e malloc,free -p 1234

# 顯示返回值
ltrace -i -p 1234

# 追蹤子進程
ltrace -f -p 1234

# 輸出到文件
ltrace -o /tmp/ltrace.log -p 1234

使用場景舉例:程序卡住無響應(yīng)時,使用strace -p PID查看進程正在執(zhí)行的系統(tǒng)調(diào)用。如果顯示connect或read阻塞,說明可能在等待網(wǎng)絡(luò)通信或文件讀取。如果某個系統(tǒng)調(diào)用反復(fù)返回-1,說明可能存在系統(tǒng)資源或權(quán)限問題。

# 分析nginx worker進程
strace -p $(pgrep -f"nginx: worker"| head -1) -c

# 分析進程正在做什么
strace -p 1234 2>&1 | head -50

# 追蹤失敗的調(diào)用
strace -e trace=open,openat -p 1234 2>&1 | grep -E"ENOENT|Permission"

# 追蹤TCP連接
strace -e trace=socket,connect,accept -p 1234

# 分析文件操作
strace -e trace=open,read,write,close -p 1234

# 分析CPU密集型進程
strace -c -p 1234

# 追蹤正在運行的命令
strace -f -o /tmp/trace.log 

# 分析動態(tài)庫加載
ltrace -e dlopen -p 1234

2.7 tcpdump與Wireshark

tcpdump是命令行網(wǎng)絡(luò)抓包工具,用于捕獲和分析網(wǎng)絡(luò)數(shù)據(jù)包。tcpdump -i eth0 -nn host 10.0.0.1捕獲eth0網(wǎng)卡上與10.0.0.1通信的數(shù)據(jù)包,-nn不解析主機名和服務(wù)名。

tcpdump -i eth0 -nn host 10.0.0.1
tcpdump: verbose output suppressed, use -v or -vvforfull protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
1030.123456 IP 10.0.0.1.443 > 10.0.0.2.54321: Flags [P.], seq 12345:12356, ack 67890, win 502, length 11
1030.123789 IP 10.0.0.2.54321 > 10.0.0.1.443: Flags [.], ack 12356, win 502, length 0
1030.124012 IP 10.0.0.1.443 > 10.0.0.2.54321: Flags [P.], seq 12356:12367, ack 67890, win 502, length 11

tcpdump的輸出格式是:時間戳 協(xié)議 源地址.端口 > 目標(biāo)地址.端口 標(biāo)志信息。TCP包的標(biāo)志信息包括S(SYN)、F(FIN)、P(PUSH)、R(RST)。三次握手顯示為S、S.、F。TCP連接終止顯示為F.、.F。

tcpdump支持豐富的過濾表達式。tcpdump port 80 and tcp[13]&2!=0捕獲所有TCP的SYN包(發(fā)起連接)。tcpdump tcp and greater 1000捕獲大于1000字節(jié)的TCP包。

# 捕獲特定接口
tcpdump -i eth0

# 捕獲所有接口
tcpdump -i any

# 捕獲特定主機
tcpdump host 10.0.0.1

# 捕獲特定端口
tcpdump port 80

# 捕獲特定協(xié)議
tcpdump icmp

# 捕獲特定網(wǎng)絡(luò)
tcpdump net 192.168.1.0/24

# 組合條件
tcpdump -i eth0 host 10.0.0.1 and port 80

# 不解析地址和端口
tcpdump -nn

# 顯示完整數(shù)據(jù)包內(nèi)容
tcpdump -X

# 顯示ASCII內(nèi)容
tcpdump -A

# 保存到文件
tcpdump -w /tmp/capture.pcap

# 讀取抓包文件
tcpdump -r /tmp/capture.pcap

# 顯示詳細輸出
tcpdump -v

# 顯示更詳細輸出
tcpdump -vv

# 限制抓包數(shù)量
tcpdump -c 100

# 限制抓包大小
tcpdump -s 100

# 打印鏈路層頭
tcpdump -e

Wireshark是圖形化的網(wǎng)絡(luò)協(xié)議分析工具,提供更強大的分析功能。Wireshark支持更豐富的協(xié)議解析,可以自動重組TCP流,提供統(tǒng)計和圖表功能。

Wireshark常用過濾器:

# 顯示過濾器
ip.addr == 10.0.0.1
tcp.port == 80
tcp.flags.syn == 1
tcp.flags.reset == 1
http.request.method =="GET"
dns.qry.name contains"example.com"

# 捕獲過濾器
host 10.0.0.1
port 80
tcp[tcpflags] & (tcp-syn|tcp-fin) != 0

使用場景舉例:服務(wù)連接超時排查。使用tcpdump -i any host target_ip and port target_port -w capture.pcap在問題發(fā)生時捕獲數(shù)據(jù)包,然后在Wireshark中分析TCP三次握手是否正常,是否存在丟包或重傳。

# 捕獲HTTP請求
tcpdump -i any -A'tcp port 80 andtcp[((tcp[12:1] & 0xf0) >> 2):2] = 0x474554'

# 捕獲DNS查詢
tcpdump -i any -A'udp port 53'

# 捕獲TCP重傳
tcpdump -i any'tcp[tcpflags] & (tcp-retrans) != 0'

# 捕獲TCP連接建立
tcpdump -i any'tcp[tcpflags] & (tcp-syn) != 0 andtcp[tcpflags] & (tcp-ack) == 0'

# 捕獲SSL/TLS握手
tcpdump -i any'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x160301'

# 分析網(wǎng)絡(luò)延遲
tcpdump -i any -tttt'tcp port 80'

# 捕獲ICMP
tcpdump -i any'icmp'

# 捕獲ARP
tcpdump -i any'arp'

# 捕獲VLAN標(biāo)記
tcpdump -i any -vlan

2.8 find、awk與sed

find用于在目錄樹中查找文件,支持按文件名、類型、大小、時間等條件搜索。

# 基本查找
find /path -name"*.log"
find /path -typef
find /path -typed

# 按權(quán)限查找
find /path -perm 644
find /path -perm -u+x

# 按大小查找
find /path -size +100M
find /path -size -1G

# 按時間查找
find /path -mtime -7    # 7天內(nèi)修改
find /path -atime +30   # 30天前訪問
find /path -ctime 0    # 當(dāng)天狀態(tài)改變

# 按所有者查找
find /path -user nginx
find /path -group www-data

# 執(zhí)行動作
find /path -name"*.tmp"-delete
find /path -name"*.log"-execrm {} ;
find /path -name"*.log"-execls -lh {} ;

# 排除目錄
find /path -path"*/proc"-prune -o -typef -print

# 查找空文件
find /path -typef -empty

# 查找符號鏈接
find /path -typel

# 查找最近修改的文件
find /path -mmin -60    # 60分鐘內(nèi)修改

# 查找并移動
find /path -name"*.bak"-execmv {} /backup/ ;

# 查找并壓縮
find /path -name"*.log"-execgzip {} ;

awk是一種文本處理語言,適合處理結(jié)構(gòu)化文本數(shù)據(jù)。

# 基本用法
awk'{print $1, $3}'file     # 打印第1和第3列
awk -F:'{print $1}'/etc/passwd  # 指定分隔符
awk'{print NF}'file        # 打印列數(shù)
awk'{print NR}'file        # 打印行號

# 條件過濾
awk'/pattern/ {print $0}'file  # 包含模式的行
awk'$3 > 100 {print $0}'file   # 第3列大于100
awk'$1 == "value" {print $0}'file# 第1列等于value

# 計算統(tǒng)計
awk'{sum+=$1} END {print sum}'file
awk'{sum+=$1; count++} END {print sum/count}'file
awk'{if($1>max) max=$1} END {print max}'file

# 多字段處理
awk -F:'{print $1, $NF}'/etc/passwd

# 字符串函數(shù)
awk'{print toupper($1)}'file
awk'{print length($1)}'file
awk'{print substr($1, 1, 5)}'file

# 格式化輸出
awk'{printf "%-10s %10.2f
", $1, $2}'file

日志分析awk示例:

# Nginx訪問日志分析
# 格式: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent
awk'{print $1}'access.log | sort | uniq -c | sort -rn | head -20 # TOP 20 IP
awk'{print $9}'access.log | sort | uniq -c | sort -rn | head -10 # TOP 10 狀態(tài)碼
awk'{sum+=$10} END {print sum/1024/1024 " MB"}'access.log    # 總流量
awk'$9 >= 500 {count++} END {print count}'access.log       # 5xx錯誤數(shù)

# Apache日志分析
awk'{print $7}'access.log | sort | uniq -c | sort -rn | head -10 # TOP URL

# SSH登錄日志分析
awk'/Failed password/ {print $11}'/var/log/secure | sort | uniq -c | sort -rn | head -10
awk'/Accepted/ {print $9, $11}'/var/log/secure

sed是一種流編輯器,用于對文本進行替換、刪除、插入等操作。

# 基本替換
sed's/old/new/'file       # 替換每行第一個
sed's/old/new/g'file       # 替換所有
sed's/old/new/2'file       # 替換每行第二個

# 原地編輯
sed -i's/old/new/g'file     # 直接修改文件
sed -i.bak's/old/new/g'file   # 修改并備份

# 多重替換
sed -e's/a/b/'-e's/c/d/'file

# 排除行
sed'/pattern/d'file       # 刪除匹配行
sed'/pattern/!d'file       # 刪除不匹配行

# 插入和追加
sed'1iheader'file        # 在第1行前插入
sed'1aline'file         # 在第1行后追加
sed'/pattern/aline'file     # 在匹配行后追加

# 替換多行
sed'/start/,/end/s/old/new/g'file

# 使用正則
sed -r's/regex/new/g'file
sed's/.*prefix(.*)suffix.*/1/'file # 捕獲組

# 打印行
sed -n'10,20p'file        # 打印第10-20行
sed -n'/pattern/p'file      # 打印匹配行

# 替換tab為空格
sed's/	/ /g'file

# 去除空格
sed's/^[ 	]*//'file      # 行首
sed's/[ 	]*$//'file      # 行尾
sed's/[ 	]*//g'file      # 所有空格

使用場景舉例:分析nginx訪問日志統(tǒng)計IP訪問量。

# 統(tǒng)計IP訪問量
awk'{print $1}'access.log | sort | uniq -c | sort -rn | head -20

# 統(tǒng)計狀態(tài)碼分布
awk'{print $9}'access.log | sort | uniq -c | sort -rn

# 統(tǒng)計帶寬使用
awk'{sum+=$10} END {print sum/1024/1024 " MB"}'access.log

# 統(tǒng)計5xx錯誤
awk'$9 ~ /^5/ {count++} END {print count}'access.log

# 統(tǒng)計訪問最頻繁的URL
awk'{print $7}'access.log | sort | uniq -c | sort -rn | head -10

# 統(tǒng)計每秒請求數(shù)
awk'{print $4}'access.log | cut -d: -f2,3,4 | sort | uniq -c | sort -rn | head -10

# 統(tǒng)計HTTP方法分布
awk'{print $6}'access.log | tr -d'"'| sort | uniq -c | sort -rn

# 實時分析日志
tail -f access.log | awk'{print $1}'| sort | uniq -c | sort -rn

# 查找異常IP
awk'{print $1}'access.log | sort | uniq -c | sort -rn | awk'$1 > 1000 {print $2}'

# 替換日志中的敏感信息
sed -i's/password=[^&]*/password=REDACTED/g'app.log
sed -i's/token=[^&]*/token=REDACTED/g'app.log

2.9 rsync

rsync是遠程數(shù)據(jù)同步工具,支持增量同步和本地同步。

# 本地同步
rsync -avzsource/ dest/

# 遠程同步
rsync -avzsource/ user@host:/dest/
rsync -avz user@host:/source/ dest/

# SSH指定端口
rsync -avz -e"ssh -p 2222"source/ user@host:/dest/

# 顯示差異
rsync -avzisource/ dest/

# 增量同步(只傳輸變化的部分)
rsync -avz --deletesource/ dest/

# 排除文件
rsync -avz --exclude='*.log'source/ dest/
rsync -avz --exclude-from='exclude.txt'source/ dest/

# 包含文件
rsync -avz --include='*.php'--include='*/'--exclude='*'source/ dest/

# 壓縮傳輸
rsync -avz --compresssource/ dest/

# 保留權(quán)限和時間戳
rsync -avzsource/ dest/

# 顯示進度
rsync -avz --progresssource/ dest/

# 限制帶寬
rsync -avz --bwlimit=1000source/ dest/

# dry-run(模擬執(zhí)行)
rsync -avznsource/ dest/

# 同步符號鏈接
rsync -avzLsource/ dest/

# 保留硬鏈接
rsync -avzHsource/ dest/

rsync的核心優(yōu)勢是增量同步。只傳輸源和目標(biāo)之間差異的部分,通過快速檢查文件大小和修改時間實現(xiàn)。

# 文件權(quán)限對應(yīng)關(guān)系
# rsync參數(shù) -p = --perms
# rsync參數(shù) -o = --owner
# rsync參數(shù) -g = --group
# rsync參數(shù) -t = --times
# rsync參數(shù) -D = --devices --specials

# 完整參數(shù)示例
rsync -avz --delete 
 --exclude='.git'
 --exclude='node_modules'
 --exclude='*.log'
 --progress 
 --stats 
source/ user@host:/dest/

使用場景舉例:網(wǎng)站文件同步。

# 保持兩臺Web服務(wù)器內(nèi)容一致
rsync -avz --delete /var/www/html/ user@web-server:/var/www/html/

# 同步到多個目標(biāo)
forhostinweb1 web2 web3;do
 rsync -avz /var/www/html/ user@$host:/var/www/html/
done

# 定時同步腳本
0 */6 * * * rsync -avz --delete /data/ backup@backup-server:/backup/

# 同步時排除特定目錄
rsync -avz --exclude='cache'--exclude='tmp'/var/www/html/ /dest/

# 使用rsync daemon方式
rsync -avz /source/ rsync://user@host/module/

# 限速傳輸避免影響業(yè)務(wù)
rsync -avz --bwlimit=5000 /source/ /dest/

2.10 systemctl與service

systemctl是systemd系統(tǒng)的管理工具,是現(xiàn)代Linux發(fā)行版的標(biāo)準(zhǔn)服務(wù)管理命令。

# 服務(wù)管理
systemctl start nginx     # 啟動服務(wù)
systemctl stop nginx     # 停止服務(wù)
systemctl restart nginx   # 重啟服務(wù)
systemctl reload nginx   # 重新加載配置
systemctl status nginx    # 查看狀態(tài)
systemctlenablenginx   # 開機自啟
systemctldisablenginx   # 取消開機自啟
systemctl daemon-reload   # 重載systemd配置

# 查看服務(wù)
systemctl list-units --type=service     # 列出所有服務(wù)
systemctl list-units --type=service --state=running
systemctl list-dependencies nginx       # 服務(wù)依賴關(guān)系

# 服務(wù)日志
journalctl -u nginx       # 服務(wù)日志
journalctl -u nginx -n 50   # 最近50行
journalctl -u nginx -f     # 實時跟蹤
journalctl --since"1 hour ago"# 指定時間范圍

# 服務(wù)配置
systemctl show nginx      # 顯示服務(wù)配置
systemctl cat nginx      # 查看服務(wù)文件
systemctl edit nginx      # 編輯服務(wù)配置

service是較老的服務(wù)管理命令,兼容SysVinit腳本。

# 基本用法
service nginx start
service nginx stop
service nginx restart
service nginx status
service --status-all      # 列出所有服務(wù)

# 檢查特定服務(wù)
service sshd status
service httpd configtest    # 檢查配置語法

systemd服務(wù)文件示例:

[Unit]
Description=nginx HTTP Server
Documentation=https://nginx.org/en/docs/
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx -g daemon on; master_process on;
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

使用場景舉例:服務(wù)故障排查。

# 查看服務(wù)狀態(tài)
systemctl status nginx

# 查看詳細日志
journalctl -u nginx -n 100 --no-pager

# 檢查配置文件語法
nginx -t

# 測試服務(wù)啟動
systemctl start nginx

# 查看服務(wù)是否監(jiān)聽端口
ss -tlnp | grep nginx

# 檢查進程
ps aux | grep nginx

# 強制重啟
systemctl force-reload nginx

# 屏蔽服務(wù)
systemctl mask nginx
systemctl unmask nginx

3. 命令組合實戰(zhàn)場景

3.1 服務(wù)器負載高排查

服務(wù)器負載高是常見的運維問題,排查思路是逐步定位是CPU、IO還是內(nèi)存問題。

第一步,使用top或vmstat 1查看系統(tǒng)負載和CPU使用情況。如果CPU的us和sy很高,說明是CPU密集型任務(wù)占用大量CPU資源。如果CPU的wa很高,說明是IO等待導(dǎo)致。

# 查看系統(tǒng)狀態(tài)
top
vmstat 1 5

# 查看CPU使用情況
mpstat -P ALL 1

# 查看進程狀態(tài)
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10

第二步,如果確定是CPU問題,使用top按CPU排序查看最消耗CPU的進程。如果Java進程CPU占用高,使用jstack獲取線程堆棧,分析哪個線程占用CPU高。

# 獲取Java進程PID
jps -l
ps aux | grep java

# 獲取線程堆棧
jstack PID > threaddump.txt

# 獲取CPU使用最高的線程
top -Hp PID

# 獲取進程的CPU使用情況
pidstat -p PID 1 5

第三步,如果確定是IO問題,使用vmstat查看b列是否有進程在等待IO。使用iostat查看哪個設(shè)備的%util高。

# 查看IO等待
vmstat 1

# 查看各設(shè)備IO情況
iostat -xz 1

# 查看哪個進程在進行IO
iotop

# 查看具體IO操作
lsof +D /

第四步,確定問題進程后,分析問題原因。CPU高可能是死循環(huán)、大量計算、夜間批處理任務(wù)觸發(fā)。IO高可能是大量日志寫入、數(shù)據(jù)庫寫入、文件掃描。

3.2 網(wǎng)絡(luò)連接問題排查

網(wǎng)絡(luò)連接問題的表現(xiàn)可能是SSH連接不上、服務(wù)訪問超時、連接數(shù)異常等。

第一步,使用ping測試網(wǎng)絡(luò)連通性。ping不通可能的原因包括:網(wǎng)絡(luò)配置錯誤、防火墻攔截、鏈路故障。

# 測試基本連通性
ping -c 4 8.8.8.8
ping -c 4 gateway

# 路由追蹤
traceroute 8.8.8.8
mtr 8.8.8.8

# DNS測試
nslookup google.com
dig google.com

第二步,如果ping通但服務(wù)訪問異常,使用netstat或ss查看連接狀態(tài)。

# 查看連接統(tǒng)計
netstat -an | awk'/^tcp/ {print $6}'| sort | uniq -c
ss -s

# 查看監(jiān)聽端口
netstat -tlnp
ss -tlnp

# 查看特定連接狀態(tài)
netstat -an | grep ESTABLISHED
ss -tan state established

第三步,使用tcpdump抓包分析。

# 抓取特定端口的包
tcpdump -i any port 80 -nn

# 抓取特定主機的包
tcpdump -i any host 10.0.0.1 -nn

# 保存到文件
tcpdump -i any port 80 -w capture.pcap

# 分析三次握手
tcpdump -i any host target_ip and port target_port -nn

第四步,檢查防火墻規(guī)則。

# 查看iptables規(guī)則
iptables -L -n -v
iptables -L -n -v --line-numbers

# 查看端口監(jiān)聽
netstat -tlnp
ss -tlnp

# 檢查防火墻狀態(tài)
systemctl status firewalld
systemctl status iptables

3.3 磁盤空間問題排查

磁盤空間不足會導(dǎo)致服務(wù)異常、寫入失敗等問題。

第一步,使用df -h查看各文件系統(tǒng)的空間使用情況。

df -h
df -i

第二步,使用du -sh /*從根目錄逐級排查,找出占用空間大的目錄。

du -h --max-depth=1 /
du -sh /var/*
du -sh /home/*

第三步,定位到具體目錄后,使用du -ah --max-depth=1排序,找出占用空間最大的文件或子目錄。

du -ah /var | sort -rh | head -20
find /var -typef -execdu -h {} + | sort -rh | head -20

第四步,清理時注意區(qū)分日志文件和普通文件。日志文件可以使用日志輪轉(zhuǎn)工具處理后刪除舊日志。

# 查看大文件
find / -typef -size +100M -execls -lh {} ;

# 查看被刪除但未釋放的文件
lsof +L1

# 清理舊日志
find /var/log-name"*.gz"-mtime +30 -delete

# 清理緩存
yum clean all
apt-get clean

4. 命令選擇決策樹

4.1 按場景選擇命令

遇到系統(tǒng)卡頓或響應(yīng)慢時,首先使用top或vmstat 1查看系統(tǒng)整體狀態(tài)。

# 系統(tǒng)整體狀態(tài)
vmstat 1 5     # 查看CPU、內(nèi)存、IO綜合情況
top         # 查看進程占用
htop         # 更友好的界面

# 如果CPU使用率高
ps aux --sort=-%cpu | head # 查找CPU占用高的進程
pidstat -p PID        # 分析特定進程

# 如果內(nèi)存使用率高
ps aux --sort=-%mem | head # 查找內(nèi)存占用高的進程
free -h           # 查看內(nèi)存詳情

# 如果IO等待高
iostat -xz 1         # 查看IO情況
iotop            # 查找IO占用高的進程

遇到網(wǎng)絡(luò)連接異常時,使用netstat或ss查看連接狀態(tài)。

# 連接統(tǒng)計
ss -s          # 概要統(tǒng)計
netstat -an | awk'/^tcp/ {print $6}'| sort | uniq -c

# 監(jiān)聽端口
ss -tlnp        # TCP監(jiān)聽
ss -ulnp        # UDP監(jiān)聽

# 連接狀態(tài)
ss -tan state established
ss -tan state time-wait

# 抓包分析
tcpdump -i any port XXXX -nn

遇到磁盤空間問題時,使用df和du配合排查。

# 快速定位
df -h          # 文件系統(tǒng)使用率
df -i          # inode使用率

# 逐級排查
du -h --max-depth=1 / # 根目錄一級目錄
du -sh /var/*     # 特定目錄

# 大文件查找
find / -typef -size +1G
find / -name"*.log"-execdu -h {} + | sort -rh | head

遇到進程異常時,使用ps和lsof分析。

# 進程列表
ps aux         # 完整信息
ps -ef         # 進程樹
pstree         # 進程樹狀圖

# 進程詳情
lsof -p PID      # 打開的文件
lsof -i         # 網(wǎng)絡(luò)連接
cat /proc/PID/status  # 進程狀態(tài)

4.2 命令參數(shù)記憶技巧

top系列記住幾個關(guān)鍵按鍵:P按CPU排序,M按內(nèi)存排序,T按時間排序,1查看各CPU核心,k殺進程,q退出。

netstat記住常用組合:-anp顯示所有連接(-a全部,-n數(shù)字形式,-p進程)。

find記住三個核心選項:-name按文件名,-type按類型,-exec執(zhí)行命令。

awk記住兩個核心概念:1第一列,NF列數(shù)。

5. 進階命令與工具

5.1 性能監(jiān)控工具鏈

除了基礎(chǔ)命令,運維人員還應(yīng)掌握一些進階工具組成完整的監(jiān)控工具鏈。

htop - 增強版的top,支持鼠標(biāo)操作和進程樹視圖。

# 安裝
apt-get install htop # Debian/Ubuntu
yum install htop   # RHEL/CentOS

# 常用參數(shù)
htop          # 啟動
htop -u nginx     # 過濾用戶
htop -d 5       # 刷新延遲
htop -p PID1,PID2   # 監(jiān)控特定進程

iotop - 按進程顯示磁盤IO使用情況。

# 安裝
apt-get install iotop

# 常用參數(shù)
iotop         # 實時IO
iotop -o        # 只顯示有IO的進程
iotop -b        # 批量模式
iotop -n 3       # 刷新3次后退出

iftop - 按連接顯示網(wǎng)絡(luò)帶寬使用情況。

# 安裝
apt-get install iftop

# 常用參數(shù)
iftop -i eth0     # 指定接口
iftop -n        # 不解析主機名
iftop -N        # 不解析端口號
iftop -B        # 以字節(jié)顯示

nethogs - 按進程顯示網(wǎng)絡(luò)帶寬使用情況。

# 安裝
apt-get install nethogs

# 常用參數(shù)
nethogs        # 實時
nethogs eth0      # 指定接口
nethogs -d 2      # 刷新間隔

5.2 日志分析工具

goaccess - 實時Web日志分析器。

goaccess access.log -c  # 交互式配置
goaccess access.log -o report.html --log-format=COMBINED

lnav - 高級日志文件查看器。

lnav /var/log/syslog
lnav /var/log/nginx/*.log
lnav -i access.log

5.3 系統(tǒng)信息收集

dmidecode - 查看硬件信息。

dmidecode -t system    # 系統(tǒng)信息
dmidecode -t memory   # 內(nèi)存信息
dmidecode -t processor  # CPU信息

lscpu - 查看CPU信息。

lscpu
lscpu -e         # 擴展信息
lscpu -p         # 格式化輸出

lsblk - 查看塊設(shè)備信息。

lsblk
lsblk -f         # 文件系統(tǒng)信息
lsblk -a         # 所有設(shè)備

5.4 故障排查實戰(zhàn)流程

系統(tǒng)故障排查的標(biāo)準(zhǔn)化流程可以提高排查效率。

Phase 1:信息收集

# 收集系統(tǒng)基本信息
uname -a             # 系統(tǒng)信息
uptime              # 運行時間和負載
hostname             # 主機名
cat /etc/os-release       # 操作系統(tǒng)版本

# 收集資源使用信息
df -h              # 磁盤使用
free -h             # 內(nèi)存使用
top -bn1 | head -20      # CPU和進程

Phase 2:網(wǎng)絡(luò)診斷

# 網(wǎng)絡(luò)連通性
ping -c 4 8.8.8.8       # 外網(wǎng)連通性
traceroute 8.8.8.8      # 路由追蹤
nslookup google.com       # DNS解析

# 端口和服務(wù)
netstat -tlnp          # 監(jiān)聽端口
netstat -an | grep ESTABLISHED # 已建立連接
ss -tunap            # 詳細連接信息

Phase 3:進程和服務(wù)

# 進程狀態(tài)
ps aux | head -20       # 進程列表
ps -ef | grep nginx      # 查找特定進程
pstree -p           # 進程樹

# 服務(wù)狀態(tài)
systemctl status nginx     # 服務(wù)狀態(tài)
journalctl -u nginx -n 50   # 服務(wù)日志

Phase 4:日志分析

# 系統(tǒng)日志
tail -100 /var/log/syslog   # 系統(tǒng)日志
tail -100 /var/log/messages  # 消息日志

# 應(yīng)用日志
tail -100 /var/log/nginx/error.log
tail -100 /var/log/mysql/error.log

Phase 5:資源分析

# CPU分析
vmstat 1 5           # 虛擬內(nèi)存統(tǒng)計
mpstat -P ALL 1        # CPU使用率

# IO分析
iostat -xz 1         # IO統(tǒng)計
iotop             # 按進程IO

# 內(nèi)存分析
free -m            # 內(nèi)存使用
cat /proc/meminfo       # 詳細內(nèi)存信息

5.5 常見故障快速處理手冊

服務(wù)器無法連接

# 1. 檢查網(wǎng)絡(luò)連通性
ping -c 4 

# 2. 檢查端口連通性
nc -zv  22

# 3. 檢查服務(wù)狀態(tài)
systemctl status sshd

# 4. 檢查防火墻
iptables -L -n
firewall-cmd --list-all

磁盤空間不足

# 1. 找到大文件
du -sh /* | sort -rh | head -10

# 2. 查找大日志文件
find /var -name"*.log"-size +100M

# 3. 清理舊日志
journalctl --vacuum-time=7d
find /var/log-name"*.gz"-mtime +30 -delete

# 4. 清理緩存
yum clean all
apt-get clean

服務(wù)無法啟動

# 1. 檢查配置文件語法
nginx -t
apache2ctl configtest
java -jar app.jar --dry-run

# 2. 檢查端口占用
lsof -i :80
netstat -tlnp | grep :80

# 3. 檢查權(quán)限
ls -la /var/log/app
chown -R app:app /var/log/app

# 4. 檢查依賴
ldd /path/to/binary

CPU使用率過高

# 1. 找到高CPU進程
top -c
# 按P排序查看CPU占用

# 2. 分析線程
ps -p PID -L -o pcpu,pid,tid,time
jstack PID > threaddump.txt

# 3. 如果是Java進程
jps -l
jstack PID

# 4. 限制CPU使用
cpulimit -p PID -l 50

內(nèi)存使用率過高

# 1. 找到高內(nèi)存進程
top -c
# 按M排序查看內(nèi)存占用

# 2. 分析內(nèi)存使用
ps aux --sort=-%mem | head

# 3. 檢查OOM
dmesg | grep -i oom
journalctl -k | grep -i oom

# 4. 調(diào)整策略
sysctl vm.swappiness=10

5.6 命令組合使用技巧

日志分析組合

# 統(tǒng)計錯誤類型
grep -i error app.log | awk'{print $5}'| sort | uniq -c | sort -rn

# 查找異常IP
awk'{print $1}'access.log | sort | uniq -c | sort -rn | head -20

# 分析響應(yīng)時間
awk'{print $NF}'access.log | sort -n | tail -20

# 統(tǒng)計狀態(tài)碼分布
awk'{print $9}'access.log | sort | uniq -c | sort -rn

系統(tǒng)監(jiān)控組合

# 綜合監(jiān)控腳本
#!/bin/bash
echo"=== System Info ==="
uptime
echo"=== CPU ==="
top -bn1 | head -5
echo"=== Memory ==="
free -h
echo"=== Disk ==="
df -h
echo"=== Network ==="
ss -tunap | wc -l
echo"=== Top Processes ==="
ps aux --sort=-%cpu | head -6

進程監(jiān)控組合

# 監(jiān)控特定進程
watch -n 1'ps aux | grep process_name | grep -v grep'

# 監(jiān)控文件描述符
lsof -p PID | wc -l

# 監(jiān)控打開的文件
lsof -p PID -a -d txt,mem,fd

# 監(jiān)控網(wǎng)絡(luò)連接
watch -n 1'netstat -an | grep :80 | wc -l'

5.7 自動化腳本示例

系統(tǒng)健康檢查腳本

#!/bin/bash
# system_health_check.sh

LOG_FILE="/var/log/health_check.log"
EMAIL="admin@example.com"

log() {
 echo"[$(date '+%Y-%m-%d %H:%M:%S')]$1"| tee -a"$LOG_FILE"
}

check_cpu() {
  cpu_usage=$(top -bn1 | grep"Cpu(s)"| awk'{print $2}'| sed's/%us,//')
 if(( $(echo"$cpu_usage> 80"| bc -l) ));then
   log"WARNING: CPU usage is high:$cpu_usage%"
   return1
 fi
 log"OK: CPU usage is normal:$cpu_usage%"
 return0
}

check_memory() {
  mem_usage=$(free | grep Mem | awk'{print ($3/$2) * 100}')
 if(( $(echo"$mem_usage> 85"| bc -l) ));then
   log"WARNING: Memory usage is high:$mem_usage%"
   return1
 fi
 log"OK: Memory usage is normal:$mem_usage%"
 return0
}

check_disk() {
  disk_usage=$(df -h / | tail -1 | awk'{print $5}'| sed's/%//')
 if["$disk_usage"-gt 80 ];then
   log"WARNING: Disk usage is high:$disk_usage%"
   return1
 fi
 log"OK: Disk usage is normal:$disk_usage%"
 return0
}

check_services() {
 forserviceinnginx mysql redis;do
   ifsystemctl is-active --quiet$service;then
     log"OK:$serviceis running"
   else
     log"ERROR:$serviceis not running"
     return1
   fi
 done
 return0
}

# Main
log"=== System Health Check Started ==="
check_cpu
check_memory
check_disk
check_services
log"=== System Health Check Completed ==="

日志備份清理腳本

#!/bin/bash
# log_backup_cleanup.sh

LOG_DIR="/var/log/myapp"
BACKUP_DIR="/backup/logs"
RETENTION_DAYS=30

# Create backup directory if not exists
mkdir -p"$BACKUP_DIR"

# Backup logs
timestamp=$(date +%Y%m%d_%H%M%S)
tar -czf"$BACKUP_DIR/logs_${timestamp}.tar.gz""$LOG_DIR"/*.log2>/dev/null

# Clean old backups
find"$BACKUP_DIR"-name"logs_*.tar.gz"-mtime +$RETENTION_DAYS-delete

# Compress old logs
find"$LOG_DIR"-name"*.log"-mtime +7 -execgzip {} ;

# Delete very old logs
find"$LOG_DIR"-name"*.log.gz"-mtime +90 -delete

echo"Log backup and cleanup completed at$(date)"

總結(jié)

系統(tǒng)命令是運維工程師的基本功。熟練掌握這10個核心命令,可以應(yīng)對大部分日常運維場景和故障排查需求。

命令的學(xué)習(xí)需要注重實踐。建議在測試環(huán)境中多練習(xí),親自運行命令查看輸出,理解每個參數(shù)的含義。同時注意命令之間的組合使用,如find結(jié)合awk、grep結(jié)合netstat等。

除了本文介紹的10個命令,還有很多有用的命令值得學(xué)習(xí)。如htop、iotop、iftop等增強版工具,提供更直觀的信息展示。掌握了基礎(chǔ)命令后,可以逐步學(xué)習(xí)這些增強工具,進一步提升運維效率。

最后,命令只是工具,更重要的是理解系統(tǒng)原理和排查思路。同樣的命令,在不同經(jīng)驗水平的工程師手中,發(fā)揮的作用可能完全不同。建議在掌握命令的同時,也要深入學(xué)習(xí)操作系統(tǒng)原理、網(wǎng)絡(luò)協(xié)議等基礎(chǔ)知識。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 負載
    +關(guān)注

    關(guān)注

    2

    文章

    668

    瀏覽量

    36637
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10299

    瀏覽量

    91587
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    757

    瀏覽量

    23835

原文標(biāo)題:運維工程師必須掌握的10個系統(tǒng)命令

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【知名500強韓企】招聘【IT銷售】【java工程師】【AS400

    本帖最后由 jxncguanlian 于 2012-10-30 16:52 編輯 【知名500強韓企】招聘【IT銷售】【java工程師】【AS400】總計3
    發(fā)表于 10-24 13:18

    20工程師必須掌握的電路

    20工程師必須掌握的電路
    發(fā)表于 12-31 17:38

    工程師必須掌握的20經(jīng)典電路

    工程師必須掌握的20經(jīng)典電路
    發(fā)表于 07-17 15:28

    誠聘高級自動化工程師

    獵頭職位:高級自動化工程師【合肥】工作職責(zé): 1、根據(jù)基礎(chǔ)架構(gòu)管理需求,規(guī)劃設(shè)計
    發(fā)表于 12-12 10:37

    【上海】高級工程師

    獵頭職位:高級工程師工作職責(zé):1.各種項目實施;2.基礎(chǔ)服務(wù)日常維護工作,保障業(yè)務(wù)穩(wěn)定可靠;3.持續(xù)改進
    發(fā)表于 07-13 15:38

    linux命令大全

    Linux高端學(xué)習(xí)需要掌握大量的命令及相關(guān)工具,通讀bash man page、掌握VIM使用、了解SSH是Linux高端
    發(fā)表于 03-15 16:36

    工程師必須掌握的基礎(chǔ)電路大全

    工程師必須掌握的基礎(chǔ)電路大全,多達五十種,從簡到難,重回設(shè)計巔峰路。
    發(fā)表于 09-01 15:51 ?315次下載
    <b class='flag-5'>工程師</b><b class='flag-5'>必須</b><b class='flag-5'>掌握</b>的基礎(chǔ)電路大全

    工程師的四階段

    Linux系統(tǒng)目前主要應(yīng)用在企業(yè)服務(wù)器上,學(xué)習(xí)Linux,更多的是向Linux系統(tǒng)/工程師方向進軍。比如云計算
    的頭像 發(fā)表于 03-26 16:22 ?6832次閱讀

    怎樣成為一合格的工程師

    如果想成為一名合格的工程師,首先我們需要了解運主要是做什么的?如何成為一合格的
    的頭像 發(fā)表于 04-28 15:52 ?4843次閱讀

    怎樣成為合格的Linux工程師

    做為一工程師,你必須掌握最基本的技能方能勝任這份工作,否則,是沒有公司愿意接納你,并繼續(xù)培
    的頭像 發(fā)表于 05-22 16:27 ?3478次閱讀

    如何定義linux工程師

    相信讀者們必定聽說過linux,也聽說過工程師。那么工程師
    的頭像 發(fā)表于 08-21 15:51 ?4186次閱讀

    Linux工程師的發(fā)展前景

    它是一非常新穎的崗位,目前從行業(yè)角度分析,隨著國內(nèi)軟件行業(yè)不斷發(fā)展壯大,越來越多的復(fù)雜系統(tǒng)應(yīng)運而生,為了保證系統(tǒng)的穩(wěn)定運行,必須要有足夠多的linux
    的頭像 發(fā)表于 08-21 15:57 ?4592次閱讀

    Linux工程師的定義

    作爲(wèi)互聯(lián)網(wǎng)的幕后英雄,Linux工程師臨時藏匿在群眾認知范圍之外,關(guān)于的討論依舊是一片無人涉足的荒漠。在某知名行業(yè)研討調(diào)查后果中,非
    的頭像 發(fā)表于 08-31 11:34 ?4631次閱讀

    遠程是什么?是什么?工程師是干嘛的?

    工程師擁有服務(wù)器的各項權(quán)限,一條錯誤的命令、一錯誤的回車操作,可能就將導(dǎo)致企業(yè)蒙受巨大的損失,坊間各種“刪庫跑路”、“rm -rf /
    的頭像 發(fā)表于 04-30 11:53 ?1.6w次閱讀

    一文掌握Linux命令

    作為一名工程師,熟練掌握Linux命令是基本功中的基本功。無論是日常工作中的系統(tǒng)維護,還是面
    的頭像 發(fā)表于 07-22 15:23 ?657次閱讀