lsof (list open files) 指令
在 Linux 系統之下,幾乎所有的系統資源都是以檔案的形式呈現的 (包含一般檔案、目錄、連結檔、裝置檔、管線檔、網路 socket 等)
所以對於管理者來說,若要查詢一個程式使用了哪些系統資源,就可以透過 lsof 查看這個程式開啟了哪些檔案
lsof 指令可以用來查詢行程 (process) 所開啟的檔案列表,這對於系統管理者來說非常實用,以下是這個 lsof 的使用方式與範例
查看指令參數
lsof -h
列出所有行程
lsof
查詢開啟指定檔案的行程
查詢用 VS Code 開啟的檔案
lsof linux/lsof.md
顯示結果
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Code\x20H 84084 allen 30r REG 1,17 730 25028666 linux/lsof.md
列出指定使用者所開啟的檔案
查詢使用者開啟的檔案
lsof -u allen
也可以查詢 root 開啟的檔案,但要加上 sudo
sudo lsof -u root
列出指定程式所開啟的檔案
lsof -c docker
根據 PID 搜尋開啟的檔案
# 查詢單一 port
lsof -p 14662
# 查詢多個 port
lsof -p 14662, 14663, 14665
查詢網路連線
列出有網路連線的行程
lsof -i
可以只列出 TCP 或是 UDP 的連線
lsof -i tcp
lsof -i udp
查詢特定 port 的使用情況
lsof -i:9000
顯示結果
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 1803 allen 92u IPv6 0x4ddc2e7d739981cd 0t0 TCP *:cslistener (LISTEN)
一些其他類型的範例
# 列出 SMTP 的網路連線
lsof -i :smtp
# 列出 3642 連接埠的 TCP 連線
lsof -i tcp:3642
# 列出 1 到 1024 連接埠的 TCP 網路連線
lsof -i :1-1024
# 列出所有處於 LISTEN 狀態的 TCP 連線
lsof -i tcp -s tcp:listen
lsof 也可以搭配 grep 做使用
# 查詢目前使用的 port 與 process id
lsof -i | grep LISTEN
# 查詢特定的 port
lsof -n -i:80 | grep LISTEN