Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

lsof 實戰指南:找出佔用端口、檔案、目錄的進程

編輯:Linux 教學

核心定位

lsof (List Open Files) 列出進程打開的所有文件描述符。Linux 一切皆文件:普通檔、目錄、Socket、管道、設備、inode……掌握 lsof 等於掌握了「誰在用什麼資源」的上帝視角。

常用選項速查

網路過濾 -i 進階語法

lsof -i :80                 # 所有 80 端口連接
lsof -i tcp@192.168.1.10:22 # 特定 IP 的 SSH 連接
lsof -i udp:53              # DNS 查詢
lsof -i 4                   # 所有 IPv4
lsof -i 6                   # 所有 IPv6
lsof -i @google.com         # 域名解析後匹配

輸出欄位詳解

選項說明
lsof file顯示打開指定檔案的所有進程
-aAND 邏輯(多條件同時滿足)
-c STR顯示 COMMAND 欄包含 STR 的進程打開的檔案
-u USER顯示屬於 USER 的進程打開的檔案
-g GID顯示屬於 GID 的進程
+d DIR顯示目錄下被打開的檔案(不遞歸)
+D DIR遞歸顯示目錄樹下所有被打開的檔案
-d FD顯示使用指定檔案描述符的進程(如 -d 0-255、-d ^1 排除)
-n不解析主機名(加速輸出)
-i [spec]顯示網路連接,spec: [46][proto][@host|addr][:svc|port]
-p PID顯示指定 PID 進程打開的所有檔案
-r [t]重複模式,每 t 秒刷新(預設 15s),-r 無限,+r 直到無輸出
-s顯示檔案大小
-t僅輸出 PID(適合管道殺進程)

高頻實戰場景

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,可在秒級定位資源爭用問題。

Copyright © Windows教程網 All Rights Reserved
欄位含義
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檔案大小/偏移量
NODEinode 號
NAME檔案路徑/網路地址