查詢Linux系統中使用檔案的程序


摘要

可能出現這種情況:即使您知道沒有人嘗試訪問共享,您也無法解除安裝它。這通常在掛載共享時出現。您可能遇到的潛在錯誤是“檔案繁忙”,或者我們有時在嘗試訪問檔案時可能會看到“檔案繁忙”的提示。這表示系統上有一個正在使用該檔案的活動程序,並將其開啟以進行讀取或寫入操作。有時,發生這種情況時,我們需要找出哪個程序正在使用該檔案。

本教程將識別使用檔案的程序。

注意 − Linux 命令區分大小寫。

查詢程序的命令

有一些命令可以幫助我們找到處理檔案的程序,所以我們將從這裡開始。這些命令從Linux核心收集資訊,因為它管理程式和檔案系統等等。

fuser命令

名為fuser的Linux命令可用於確定哪個程序正在使用特定的檔案、目錄或套接字。此外,它還提供有關訪問型別和負責操作該程序的使用者的資訊。

fuser 也可以使用 -v 選項以詳細模式使用。使用詳細選項生成更多輸出,以便使用者可以看到 fuser 正在做什麼。使用 -v 選項執行 fuser,

$ fuser -v scripts.txt 

輸出

                          USER          PID ACCESS COMMAND
/run/sripts.txt:          student       64589 ..c.. less

fuser 命令中的 -k 標誌也可用於停止或終止在特定埠上執行的程序。

$ fuser -k scripts.txt 

輸出

/run/sripts.txt:       52349   

為了再次驗證程序是否已被終止,我們將再次查詢“scripts.txt”檔案,

$ fuser -v scripts.txt   

輸出

none of the processes are using scripts.txt 

再說一次,我遇到過一些情況,一些已刪除的程序會繼續鎖定檔案,直到它們的父程序或連線到該程序的應用程式執行完畢。您可能需要使用額外的選項(例如以下示例中的選項)來檢視某些檔案。

lsof命令

lsof 命令代表“列出開啟的檔案”,但它也可以用於其他目的。一個常見的誤解是 Linux 中的一切都是檔案。在許多方面這是正確的,因此識別開啟檔案的工具實際上非常有用。

要找出誰正在使用檔案系統上的任何檔案,請使用 lsof 命令。在 Linux 檔案系統上執行 lsof 命令將產生以下結果,其中顯示了使用該檔案的任何程序的所有者和程序詳細資訊。

$ lsof /dev/run/files

輸出

COMMAND   PID      USER     FD    TYPE   DEVICE   SIZE/OFF    NODE NAME
systemd   1480    student    0r    CHR    1,3      0t0       6 /dev/run/files
sh        1501    student    0r    CHR    1,3      0t0       6 /dev/run/files
sh        1501    student    1w    CHR    1,3      0t0       6 /dev/run/files
dbus-daem 1530    student    0u    CHR    1,3      0t0       6 /dev/run/files
Xfce4-seb 1603    student    0r    CHR    1,3      0t0       6 /dev/run/files
xfce4-ses 1603    student    1w    CHR    1,3      0t0       6 /dev/run/files
at-spi-b  1604    student    0r    CHR    1,3      0t        6 /dev/run/files
dbus-daem 1609    student    0u    CHR    1,3      0t0       6 /dev/run/files

執行以下命令,列出使用者特定的開啟檔案

$ lsof -u student

輸出

COMMAND    PID      USER       FD     TYPE          DEVICE   SIZE/OFF       NODE NAME
systemd    1480    student   cwd       DIR           8,3      4096              2 /
systemd    1480    student   rtd       DIR           8,3      4096              2 /
systemd    1480    student   txt       REG           8,3      1595792        3147496 

結論

在本教程中,我們學習了一些使用 fuser 和 lsof 命令監控 Linux 系統上正在使用的埠和目錄的示例。如果您試圖識別可能在您的系統上執行的任何未知程式,這些命令會特別有用。我希望您能發現這些命令示例有用。

更新於:2023年3月23日

22K+ 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.