iT邦幫忙

DAY 24
0

回應鐵人賽的文章變鐵人系列 第 24

[Reply] 你該知道的Unix的工具:lsof (一)

接續 上一篇 的你該知道的相關指令,
其實會發現,
雖然每天都會用Linux,
但熟也只是熟常用的工具或指令,
總還是有一些工具搞不清楚其用途,
lsof就是其中一個。
如果netcat號稱是「網路連線的瑞士刀」的話,
那麼lsof可稱為「Unix除錯的瑞士刀」。

lsof非常貼切地體現Unix的哲學,
只做一個工作,且做得完美,
可列出某程序所開啟使用檔案的相關訊息。
一被開啟的檔案,
可能是一般的檔案、一個目錄、
一個NFS上的檔案、
一個區塊設備檔、
字元設備檔、
程式庫、
一般的pipe或被命名的pipe,
一個符號連結、
socket stream、
internet socket、
Unix domain socket…
及其他,
正因為在Unix裡,
所有東西都是檔案,
可想像lsof是相當重要的。

如何用lsof?
列出所有開啟的檔案**# lsof**
沒任何參數,列出所有程序所開的檔案。

找誰用某個檔
# lsof /path/to/file
以檔案為參數,
列出所有程序中,用此檔案的程序。

也可同時指定幾個檔,
列出所有用這些檔案的程序。
# lsof /path/to/file1 /path/to/file2

在遞回的目錄中,找所有開啟的檔案
# lsof +D /usr/lib
有 +D 的參數lsof會去找該目錄及其子目錄下的所有檔。

這個是比 平常會用到 grep 較慢些。
# lsof | grep '/usr/lib'
這樣比較慢是因為:
先找所有檔案,然後只做輸出。

列出某使用者所開啟檔案的列表
# lsof -u pkrumins
-u的參數是只列某使用者開啟的檔案,
也可以用逗號來分隔不同的使用者,
來列出這些使用者開了哪些檔。
# lsof -u rms,root
這會列出rms及root兩個人所開啟所有檔的列表。
或者也可以用 -u 兩次:
# lsof -u rms -u root

請接續 [Reply] 你該知道的Unix的工具:lsof (二)


上一篇
[Reply] 你應知道的 Unix 工具:Pipe Viewer
下一篇
[Reply] 你該知道的Unix的工具:lsof (二)
系列文
回應鐵人賽的文章變鐵人30

尚未有邦友留言

立即登入留言