Linux fuser工具使用方法介紹


引言

fuser是linux中較常用的工具,"fuser"——從其名稱我們可以看出該工具的用途:查詢給定文件或目錄的用戶或進程信息。

除查詢文件相關信息之外,使用fuser還能向進程發送SIGKILL等信號,完成強制讓進程退出的功能,下面我們就來看fuser工具的具體使用方法。


以上命令查詢了/root目錄被哪些進程使用,輸出包含進程的PID以及字符’c’。字符’c’指示了進程的工作目錄,使用以下命令可進行驗證:

 

查詢文件和目錄使用者
fuser最基本的用法是查詢某個文件或目錄被哪個進程使用:

# fuser /root
/root:               17923c 24869c

 

以上命令查詢了/root目錄被哪些進程使用,輸出包含進程的PID以及字符’c’。字符’c’指示了進程的工作目錄,使用以下命令可進行驗證:

# ls -l /proc/17923/cwd
lrwxrwxrwx 1 root root 0 Apr 19 09:02 /proc/17923/cwd -> /root

 

PID后跟的字符說明了進程以何種方式與該目錄/文件關聯,有以下關聯方式:

  c  指示進程的工作目錄

  e  指示該文件為進程的可執行文件(即進程由該文件拉起)

  f  指示該文件被進程打開,默認情況下f字符不顯示

  F  指示該文件被進程打開進行寫入,默認情況下F字符不顯示

  r  指示該目錄為進程的根目錄

  m  指示進程使用該文件進行內存映射,抑或該文件為共享庫文件,被進程映射進內存

 

使用-v選項將顯示更全的信息:

# fuser -v /root
            USER     PID    ACCESS   COMMAND
/root:      root    17923    ..c..      bash
            root    24869    ..c..      atop

 

下面我們使用一個端口監聽的例子,來看可執行文件、socket端口使用進程的信息查詢。

# ./socket &

以上socket程序是一個使用C編寫的小程序,起一個TCP服務端,監聽9999端口,代碼請查附件。

 

執行完該程序時候,我們使用fuser進行查詢:

# fuser -v socket
             USER    PID   ACCESS   COMMAND
socket:    root    11861    ...e.   socket

可以看到PID11861socket文件的關聯方式為’e’,與上表所列相符。

 

查詢socket和文件系統使用者

除了查詢文件、目錄的相關使用進程,我們還可以對socket端口的使用者進行查詢。還是使用上面socket程序,我們對端口9999進行如下查詢:

# fuser -v -n tcp 9999
              USER     PID    ACCESS   COMMAND
9999/tcp:     root     11861   F....    socket

 

另外,針對某文件系統的使用者,我們可以使用-m參數進行查詢,對於以下分區的系統:

# df
Filesystem           1K-blocks      Used     Available Use%  Mounted on
/dev/sda2           15735128   10218084   5517044  65%  /
udev                  4091824        168    4091656   1%  /dev
/dev/sda3           47550928   43836764   3714164  93%  /home1
/dev/sdb2           70627600   64344256   6283344  92%  /home2

執行以下查詢命令:

# fuser -m /home1
/home1:               2703ce

可以看到/dev/sda3分區的使用者為2703對應的進程,執行fuser –m /dev/sda3fuser –m /home1/test將得到相同的結果。

 

使用fuser關閉進程

除了可以使用fuser進行查詢之外,fuser還可以向進程發送信號,讓進程退出:

# fuser -v -k socket
             USER    PID   ACCESS   COMMAND
socket:      root  11861    ...e.    socket
 
[1]+  Killed                  ./socket

-k選項表示向使用socket文件的相關進程發送SIGKILL信號。除了發送SIGKILL信號之外,fuser還可以發送以下信號:

# fuser -l /home
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

 

另外,加上-i選項,在KILL進程時,需要人為地進行確認:

# fuser -v -k -i socket
            USER    PID   ACCESS   COMMAND
socket:     root   11861  ...e.     socket
Kill process 11861 ?(y/N)

 

小結

本文介紹了fuser工具的用法,fuser可用於查詢文件、目錄、socket端口和文件系統的使用進程,並且可以使用fuser關閉進程。

當文件系統umountdevice busy時,常用到fuser查詢並關閉使用相應文件系統的進程。

 

本文翻譯自 5 Practical Linux fuser Command Examples

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM