| 欄位 | 含義 |
| COMMAND | 進程名(截斷 15 字符) |
| PID | 進程 ID |
| USER | 進程擁有者 |
| FD | 檔案描述符:cwd(工作目錄) txt(程式碼段) mem(記憶體映射) 0-9(普通 fd) 1u(讀寫模式)… |
| TYPE | 檔案類型:REG(普通) DIR(目錄) CHR(字符設備) BLK(塊設備) FIFO(管道) SOCK(Socket) IPv4/IPv6 |
| DEVICE | 設備號 (主,次) |
| SIZE/OFF | 檔案大小/偏移量 |
| NODE | inode 號 |
| NAME | 檔案路徑/網路地址 |
高頻實戰場景
1. 端口被佔用,找兇手
lsof -i :8080
# 輸出含 PID,直接 kill
kill -9 $(lsof -t -i :8080)
2. 磁碟無法卸載,找佔用進程
lsof +D /mnt/data
# 或
fuser -mv /mnt/data
3. 進程洩漏檔案描述符
lsof -p 12345 | wc -l # 總打開數
lsof -p 12345 | awk '{print $4}' | sort | uniq -c | sort -nr | head # FD 分布
4. 監控特定服務連接數
watch -n 2 'lsof -i tcp@:80 -sTCP:ESTABLISHED | wc -l'
5. 找出刪除但未釋放空間的檔案
lsof | grep deleted
# 典型輸出:java 1234 user 123r REG 253,0 1073741824 12 /tmp/tmpfile (deleted)
# 空間佔用在 SIZE/OFF 欄,重啟進程或通過 /proc/1234/fd/123 截斷釋放
進階組合招
- 只看 Socket:
lsof -i -a -p 12345
- 找出某用戶所有網路連接:
lsof -i -u nginx
- 統計各進程打開檔案數 Top 10:
lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head
總結
lsof 是排查「佔用端口、掛載點忙、FD 洩漏、異常連接」的首選工具。熟記 -i -p -u +D -t -r 核心組合,配合 awk/kill/watch,可在秒級定位資源爭用問題。