系統管理員日常離不開服務管理、磁盤監控、進程檢查、網絡狀態查看四大核心命令。本文提煉高頻參數組合、典型輸出解讀與實戰排錯場景,作為桌面速查手冊。
注意:CentOS 7+ 推薦 systemctl,chkconfig 僅兼容 SysV 腳本。
# 列出所有服務在各運行級狀態
chkconfig --list
chkconfig --list nginx
# 設置服務在運行級 3,4,5 自啟
chkconfig --level 345 nginx on
chkconfig nginx on # 等同 --level 345
# 禁用服務
chkconfig nginx off
# 添加/刪除服務 (需腳本含 chkconfig 註釋)
chkconfig --add myservice
chkconfig --del myservice
# 運行級含義
# 0: 關機 1: 單用戶 2: 多用戶無網絡 3: 多用戶有網絡 (字符界面)
# 4: 預留 5: 圖形界面 6: 重啟
for svc in sshd network crond sysstat rsyslog nginx mysql docker; do
chkconfig --list "$svc" 2>/dev/null | grep -E '3:on|5:on' || echo "$svc NOT enabled in runlevel 3/5"
done
df -hT # 人類可讀、顯示文件系統類型 (ext4/xfs/nfs/vfat)
df -h /home # 指定掛載點
df -i # inode 使用率 (關鍵:大量小文件場景)
df -h --output=source,fstype,size,used,avail,pcent,target # 自定義列
/dev/shm、/run 內存文件系統滿,檢查應用共享內存洩漏。
du -h --max-depth=1 / | sort -hr | head -20
# 或交互式
ncdu /
ps aux # BSD 風格,所有進程,含 CPU/MEM%
ps -ef # SystemV 風格,顯示 PPID
ps -efT # 顯示線程 (SPID/LWP)
ps -Lf PID # 指定進程的所有線程
ps -eo pid,ppid,user,pcpu,pmem,cmd,stat,wchan --sort=-pcpu | head -20 # 自定義排序
ps -T -C java # 某命令的所有線程
| 碼 | 含義 |
|---|---|
| R | 運行/就緒 |
| S | 可中斷睡眠 |
| D | 不可中斷睡眠 (通常 IO) |
| T | 停止/跟蹤 |
| Z | 殭屍 |
| < | 高優先級 |
| N | 低優先級 |
| L | 鎖頁內存 |
| s | 會話首進程 |
| l | 多線程 |
| + | 前台進程組 |
# 1. 找高 CPU 線程 PID (LWP)
ps -Leo pid,lwp,pcpu,cmd | grep java | sort -k3 -nr | head -5
# 輸出: 1234 5678 95.2 java ...
# 2. 轉換 LWP 為 16 進制
printf "%x\n" 5678 # 0x162e
# 3. jstack 導出線程堆疊
jstack 1234 > /tmp/threaddump.txt
# 搜索 nid=0x162e 定位代碼行
推薦 ss (iproute2),更快、更豐富、netstat 已棄用。
# 所有監聽端口 (TCP/UDP) + 進程信息
ss -ntulp
netstat -ntulp
# 所有已建立 TCP 連接
ss -nt
netstat -nt
# 連接狀態統計
ss -s
netstat -s
# 查看特定端口進程
ss -ntulp sport = :80
netstat -ntulp | grep :80
# 顯示定時器/內存/內核信息
ss -ti
ss -mi
net.ipv4.tcp_tw_reuse=1。close(),應用層 Bug 導致連接洩漏。
# 1. 找出 CLOSE_WAIT 連接的 PID
ss -ntp state close-wait
# 或
netstat -ntp | grep CLOSE_WAIT
# 2. 定位代碼 (Java 示例)
jstack PID | grep -A 20 "CLOSE_WAIT"
# 檢查 HTTP 客戶端 (HttpClient/OkHttp) 是否正確釋放連接、連接池配置
#!/bin/bash
echo "===== $(date) System Snapshot ====="
echo "--- Load & Uptime ---"; uptime
echo "--- Memory ---"; free -h
echo "--- Disk / ---"; df -h /
echo "--- Disk Inodes / ---"; df -i /
echo "--- Top 5 CPU Processes ---"; ps aux --sort=-pcpu | head -6
echo "--- Top 5 MEM Processes ---"; ps aux --sort=-pmem | head -6
echo "--- Listening Ports ---"; ss -ntulp
echo "--- TCP States Summary ---"; ss -s | grep -E 'TCP:|estab|time-wait|close-wait'
echo "--- Failed Systemd Units ---"; systemctl --failed --no-legend