
Linux 計算機中的每個對象都被視為一個文件。這些文件組織在目錄中。當您的計算機運行時,它會打開多個文件和目錄,供不同的進程使用。您可以使用 lsof 命令列出這些打開的文件和目錄。
在本教程中,我們將通過示例學習如何在 Linux 中使用 lsof 命令。
目錄
(資料圖)
主要分享低代碼、微服務、容器化、SAAS?、系統架構方面的的?內容??,希望?大家?點贊?,評論,關注?。
lsof 命令代表list open files,用于列出所有打開的文件和目錄。這個命令可以幫助你找出哪些文件被各個進程打開,用戶的進程列表,以及監聽特定端口的進程列表。您還可以使用此命令來調試當文件被其他進程使用時導致的磁盤卸載錯誤。
lsof 命令不僅列出常規文件,還列出共享庫、塊特殊文件、常規管道、命名管道、字符特殊文件、UNIX 域、Internet 套接字、文件系統掛載點和磁盤文件。使用 lsof 命令及其選項或 grep 命令過濾掉結果。
lsof 命令需要 root 或 sudo 訪問權限,因為它列出的大多數進程或設備都屬于 root。
默認情況下,所有主要的 Linux 發行版都會自動安裝 lsof 命令。但是,如果它在您的發行版中不可用,那么您需要先安裝命令來嘗試這些示例。
這是 lsof 命令的基本語法:
lsof [option] [username]
lsof 命令可以以不同的方式使用,有或沒有附加選項。不帶選項使用時,它會列出數百個當前打開的文件。這些選項可幫助您縮小搜索結果的范圍。例如,將目錄作為選項傳遞,以列出從目錄打開的所有文件以及打開這些文件的進程。
如果您以普通用戶而不是 root 用戶身份運行 lsof 命令,那么您將看到幾個“權限被拒絕”錯誤,因為許多系統文件和進程僅限于 root 用戶。
lsof 命令提供了許多選項來過濾掉文件列表。下表描述了一些最常用的 lsof 選項:
選項 | 描述 |
^ | 用于列出除指定的用戶、PID 和 UID 之外的所有由用戶、PID 和 UID 打開的文件的否定選項。 |
-u | 列出指定用戶打開的文件。 |
-c | 列出指定進程打開的文件。 |
-p | 列出由指定進程 ID 打開的文件。 |
+D | 列出特定目錄打開的文件。 |
-i | 列出由網絡連接、協議和端口打開的文件。 |
lsof 命令提供了各種選項來在列出打開的文件時縮小搜索結果的范圍。以下 Linux lsof 命令示例將向您展示該命令的一些最常見用例。
使用不帶任何選項的 lsof 命令列出 Linux 計算機上所有打開的文件:
lsof
lsof 輸出通常很長,您可以使用 lsof | more 一次顯示一個屏幕輸出,使其更具可讀性。
多個用戶可以在給定時間訪問一臺 Linux 計算機。每個用戶都有不同的文件和設備要求。要列出特定用戶打開的文件,請鍵入:
lsof -u tom
您還可以使用 lsof 在單個命令中顯示多個用戶的輸出,例如:
lsof -u username1, username2
或者,您可以列出除指定用戶之外的所有用戶打開的所有文件。例如,要顯示所有未由 root 用戶打開的文件,請鍵入:
lsof -u^root
Linux 進程可能一次使用多個文件來完成其操作。以下命令可幫助您列出特定進程使用的打開文件:
lsof -c network
您還可以使用 PID 或進程標識號,而不是進程名稱來列出由特定進程 ID 打開的文件:
lsof -p 11
要在單個命令中列出多個進程 ID 的打開文件,請鍵入:
lsof -p PID1, PID2, PID3
使用文件名作為參數列出所有打開指定文件的進程:
lsof /var/log
要列出由特定目錄打開的所有文件,請將目錄名稱作為 lsof 的參數提供:
sudo lsof +D /var/log
Linux 支持多個網絡連接以連接到不同的應用程序和設備。我們可以使用該-i選項列出特定網絡協議使用的所有文件。
例如,使用以下命令列出 UDP 協議文件:
lsof -i UDP
同樣,我們可以使用lsof -i TCP列出所有 TCP 協議文件。
一些 Linux 應用程序和進程需要特定的端口來建立連接。要列出在端口 631 上運行的進程使用的所有打開文件,請鍵入:
sudo lsof -i :631
我們還可以列出多個端口號,例如,lsof –i :22,443或者指定一個 TCP 端口范圍以及網絡協議,例如lsof -i TCP:1-44653.
以下示例向您展示了打開的 IPv4 網絡連接文件:
sudo lsof -i 4
要列出打開的 IPv6 文件,請鍵入:
sudo lsof -i 6
lsof 命令的輸出以表格形式組織,以幫助您更好地了解正在使用它們的文件和進程。下表列出并描述了 lsof 命令頭:
標題 | 描述 |
COMMAND | 打開文件或目錄的命令。 |
PID | 進程的進程標識符。 |
TID | 用于標識線程的線程或任務標識符。 |
TASKCMD | 任務命令的名稱。僅當指定條目是任務時才顯示此字段。 |
USER | 擁有文件和進程的用戶帳戶的名稱。 |
FD | 用于指示文件描述符類型的文件描述符文本字符串或數字。最常見的文件描述符類型是 cwd(當前工作目錄)、rtd(根目錄)、mem(內存映射文件)、txt(程序文本)和 mmap(內存映射設備)。 |
TYPE | 文件類型,包括DIR(目錄)、REG(常規文件)、CHR(字符特殊文件)、Netlink(網絡連接文件)和FIFO(先進先出)。 |
DEVICE | 設備標識號。 |
SIZE/OFF | 以字節表示的文件大小和偏移量。 |
NODE | 文件的節點號。 |
NAME | 文件的掛載點和文件系統名稱。 |
在本教程中,我們學習了如何使用 lsof ,此命令帶有多個選項,需要在平時的工作中多加練習。
主要分享低代碼、微服務、容器化、SAAS?、系統架構方面的的?內容??,希望?大家?點贊?,評論,關注?。