在 Linux 中,一切都被視為文件並組織在目錄中。 lsof(打開文件列表)顯示打開的文件列表。 它主要有助於找出有關打開文件的進程的信息。 除了文件之外,它還可以列出目錄、塊特殊文件、共享庫、字符特殊文件、常規管道、命名管道、互聯網套接字、UNIX 域套接字等等。
在本教程中,我們將了解 lsof 命令 在 Linux 使用通俗易懂的 例子.
lsof 命令
lsof 命令默認在大多數 Linux 發行版中可用。 當我們無法卸載磁盤時,通常會使用 lsof 命令,然後 lsof 命令有助於找到打開的文件及其導致它的進程。
句法:
lsof [options] [names]
上述語法將列出系統中所有進程已打開的所有文件。
1. 列出所有打開的文件
要快速獲取打開文件的列表,請鍵入 lsof。 它列出了系統各個進程打開的所有文件。
$ lsof
通常輸出會很長,你使用 $ sudo lsof | more
, 如果您想一次一屏查看內容。
2. 按用戶名列出打開的文件
lsof 有一個命令,可用於查找特定用戶打開的特定文件列表。
到 按用戶名列出打開的文件 使用以下命令:
$ lsof -u bobbin

對於多個用戶,請使用以下語法:
$ lsof -u [username1] -u [username2]
或者
$ lsof -u [username1], [username2]
列出除特定用戶外的打開文件:
$ lsof -u ^root
要僅列出進程 ID,請使用 -t
選項。
$ lsof -t -u sonar
如果您需要終止與特定用途相關的所有進程,這將很有幫助。
$ kill -9 lsof -t -u sonar
3.按進程列出打開的文件
lsof 也可用於列出由特定進程打開的文件,方法是使用 -c
選項後跟進程名稱。
為了 example 通過 ssh 列出所有打開的文件:
$ lsof -c ssh

4. 按文件名列出打開的文件
我們可以指定文件名作為參數來列出打開特定文件的所有進程。
要列出文件 /var/log/messages 打開的所有進程,請鍵入:
$ lsof /var/log/messages

5. 按進程 ID 列出打開的文件
每個文件都分配了一個進程 ID。 單個進程可能會打開大量文件。 我們可以使用 lsof 命令列出給定進程 ID 的所有打開文件。
為了 example 要列出進程 ID 為 2 的打開文件,請鍵入:
$ lsof -p 2

如果要列出多個進程 ID 的打開文件,請鍵入
$ lsof -p 2,3
一個系統包含大量進程,每個進程都有打開的文件供使用。 一個進程可能有多個子進程,這個進程也稱為父進程。
lsof 命令與 -R
選項以獲取由 PPID(父進程標識)打開的文件列表。
$ lsof -R

您可以從輸出的第 5 列中顯示打開文件的 PPID。
要查找特定 PID 的 PPID,請鍵入:
$ lsof -p [PID] -R
6. 列出目錄中打開的文件
要列出特定目錄中打開的文件,我們可以使用 lsof 命令。
利用 +d
在提供的目錄中顯示打開文件列表的選項,但是,它不會進入子目錄。
下列 example 在 /var/log 目錄中搜索打開的文件:
$ lsof +d /var/log

+D 選項命令 lsof 在目錄的整個深度中搜索所有打開的實例以及它包含的所有文件和目錄。
在這種情況下, lsof 在 /var/log 及其子目錄中搜索打開的文件:
$ lsof +D /var/log

7. 列出網絡協議打開的文件
出於各種目的,系統可以鏈接到各種網絡。 Linux中的一切都是一個文件,我們可以檢查系統中通過某些網絡連接打開的文件。
要列出 TCP 協議中打開的文件,我們可以運行以下命令。
$ lsof -i TCP

要列出UDP協議中打開的文件,我們可以運行以下命令。
$ sudo lsof -i UDP

8. 按端口號列出打開的文件
lsof 有一個命令,它專門列出給定端口號上打開的文件,以列出在該端口上運行的所有進程。
為了 example 列出端口號 443 上打開的文件
$ lsof -i :443

您可以列出多個端口號的打開文件,如下所示:
$ lsof -i :80,443
您還可以按端口範圍列出 TCP 或 UDP 的打開文件。
$ lsof -i TCP:1-49151
9. 按 IPv4/IPv6 列出打開的文件
lsof 中有一個選項可以列出打開的 IPv4 或 IPv6 網絡文件。
要顯示 IPv4 打開的文件,請鍵入
$ lsof -i4

以下語法可用於顯示 IPv6 打開的文件:
$ lsof -i6
10. 連續運行lsof
重複模式使 lsof 能夠以指定的延遲不斷重複更新。 可以使用“-r”或“+r”選項啟用重複模式,其中“+r”將在找不到打開的文件時結束,而“-r”將繼續列出直到啟動手動中斷。 每個延遲週期輸出將使用“========”分隔。
句法:
$ lsof [options] -r/+r[time-interval]
為了 example:
$ lsof -u sonar -r5
lsof 命令頭
這 lsof
有各種欄目。
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
與進程關聯的 UNIX 命令的名稱存儲在 COMMAND
柱子。
這 PID
顯示命令的進程 ID。
這 USER
顯示與以下進程關聯的用戶名。
這 TID
顯示任務 ID。
這 FD
是一個文件描述符,包括諸如 cwd(當前工作目錄)、txt(文本文件)、mem(內存映射文件)、rtd(根目錄)等縮寫。
TYPE
是特定文件類型的縮寫,如REG(常規文件)、DIR(目錄)、CHR(字符特殊文件)等。
這 DEVICE
包含設備編號。
這 SIZE/OFF
包含以字節為單位的文件大小或文件偏移量。
這 NODE
列值表示本地文件的節點號。
這 NAME
顯示文件的安裝點和文件系統的名稱,以及 Internet 地址。
結論
在本教程中,我們通過示例了解了 lsof 命令及其用法。 lsof 提供了許多選項來自定義其輸出以滿足您的需要。 它使您能夠輕鬆快速地組合多個參數以獲得所需的輸出。