fuser命令小結


前提

linux環境下,當使用umount命令卸載掛載點時,會遇到“device is busy”提示,這時fuser就能查出誰在使用這個資源;當然umount –lf  [掛載點] 也可以強制卸載

功能

fuser 可以顯示出當前哪個程序在使用磁盤上的某個文件、掛載點、甚至網絡端口,並給出程序進程的詳細信息.

fuser只把PID輸出到標准輸出,其他的都輸出到標准錯誤輸出。

常用選項

-a 顯示所有命令行中指定的文件,默認情況下被訪問的文件才會被顯示。
-c 和-m一樣,用於POSIX兼容。
-k 殺掉訪問文件的進程。如果沒有指定-signal就會發送SIGKILL信號。結合 –signal

-signal 使用指定的信號,而不是用SIGKILL來殺掉進程。可以通過名稱或者號碼來表示信號(例如-HUP,-1),這個選項要和-k一起使用,否則會被忽略。

-l 列出所有已知的信號名稱。
-i 殺掉進程之前詢問用戶,如果沒有-k這個選項會被忽略。
-m name 指定一個掛載文件系統上的文件或者被掛載的塊設備(名稱name)。這樣所有訪問這個文件或者文件系統的進程都會被列出來。如果指定的是一個目錄會自動轉換成"name/",並使用所有掛載在那個目錄下面的文件系統。
-n space 指定一個不同的命名空間(space).這里支持不同的空間文件(文件名,此處默認)、tcp(本地tcp端口)、udp(本地udp端口)。對於端口,可以指定端口號或者名稱,如果不會引起歧義那么可以使用簡單表示的形式,例如:name/space (即形如:80/tcp之類的表示)。
-s 靜默模式,這時候-u,-v會被忽略。-a不能和-s一起使用。 
-u 在每個PID后面添加進程擁有者的用戶名稱。
-v 詳細模式。輸出似ps命令的輸出,包含PID,USER,COMMAND等許多域,如果是內核訪問的那么PID為kernel.

 

案例

假設無法卸載的設備為/dev/sdb1
1)運行下面命令看一下哪個用戶哪個進程占用着此設備
fuser -m -v /dev/sdb1

2)運行下面命令殺掉占用此設備的進程
fuser -m -v -k /dev/sdb1
或者fuser -m -v -k -i  /dev/sdb1(每殺掉一下進程會讓你確認)
3)再umount

 

查看那些程序使用tcp的80端口:
$fuser -n tcp 80
或$fuser -v -n tcp 80
或$fuser -v 80/tcp
這里,后兩種方式顯示的信息比較全,因為有了-v選項

# fuser -v 111/udp 111/tcp 
                     用戶     進程號 權限   命令
111/udp:             rpc         968 F.... rpcbind
111/tcp:             rpc         968 F.... rpcbind

如上例子中第4列的權限也成訪問類型,如下:

c 代表當前目錄                              F 打開的文件,用於寫操作。默認不顯示。

e 可執行的被運行                          m 映射文件或者共享庫。

f 打開的文件。默認不顯示。         r 根目錄。    

其它相同命令:

# netstat -lntup|grep 111
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      968/rpcbind         
tcp        0      0 :::111                      :::*                        LISTEN      968/rpcbind         
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               968/rpcbind         
udp        0      0 :::111                      :::*                                    968/rpcbind
# ss  -lntup|grep 111       
udp    UNCONN     0      0                      *:111                   *:*      users:(("rpcbind",968,6))
udp    UNCONN     0      0                     :::111                  :::*      users:(("rpcbind",968,9))
tcp    LISTEN     0      128                   :::111                  :::*      users:(("rpcbind",968,11))
tcp    LISTEN     0      128                    *:111                   *:*      users:(("rpcbind",968,8))
# lsof -i :111
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 968  rpc    6u  IPv4  11275      0t0  UDP *:sunrpc 
rpcbind 968  rpc    8u  IPv4  11278      0t0  TCP *:sunrpc (LISTEN)
rpcbind 968  rpc    9u  IPv6  11280      0t0  UDP *:sunrpc 
rpcbind 968  rpc   11u  IPv6  11283      0t0  TCP *:sunrpc (LISTEN)

 

signal列表

# fuser -l
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

# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
詳細使用命令 man 7signal


免責聲明!

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



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