lsof - 僅將輸出限制為物理檔案 - 如何?

lsof - 僅將輸出限制為物理檔案 - 如何?

我如何告訴 lsof 我只需要列出物理文件(不是套接字,不是 TCP/IP 連接,只有物理文件)?

答案1

剛剛瀏覽了一些手冊頁,看來您使用了以下指令:

sudo lsof /

這將列出 / 目錄中所有開啟的文件,這是 Linux 文件系統上的所有內容。剛剛測試,它只顯示 REG 和 DIR。

更多範例:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 將其限制為具有檔案描述符編號的檔案。

答案2

可能有一個開關,但如果您不介意透過 grep 過濾它,您可以這樣做sudo lsof | egrep 'REG|DIR',假設「實體檔案」指的是常規檔案和目錄。

請參閱手冊頁的 OUTPUT :: TYPE 部分,man lsof以了解該列中可能存在的所有類型。

答案3

這就是我所做的,這對我來說非常有效:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

選項-F nlsof導致它只列印出名字打開的文件。每個具有開啟檔案名稱的輸出行將以單一字元開頭n緊接著是姓名常規的files 將始終是檔案的絕對、完全限定名稱。將grep ^n/只選擇名稱以 a 開頭的行/(表示絕對的、完全限定的檔名);從而cut -c2-消除諸如開放連接埠、套接字、管道(如 FIFO)等之類的內容n。最後,sort -u將消除任何重複的條目。

需要注意的是,這將包括不屬於常規的只要他們的名字以 開頭/。例如,將包含以以下內容開頭的所有檔案:

  • /dev
  • /行程
  • /系統

根據您的作業系統,可能還有其他的。

答案4

如果您使用lsof /它,只會列出直接安裝在 / 下的檔案系統上的開啟檔案 - 也就是說,如果您將 /home 安裝在 / 下,則其內容將被忽略。我嘗試了 lsof 的各種選項組合,但都有問題。我能想到的最好的方法是:

lsof `readlink -f /dev/block/*`

這使用 readlink -f 來獲取所有區塊設備並將它們作為列表提供以進行搜尋。 lsof 忽略那些未安裝的。

如果您有任何其他選項來限制搜索,例如 pid,請記住以 to 結尾 lsof 命令,-a並將它們與區塊設備列表一起使用:

lsof -p 982482 -a `readlink -f /dev/block/*`

相關內容