介紹
fuser
命令是一個針對 Linux 的實用工具,旨在查找使用特定文件、目錄或套接字的進程。它還提供了有關擁有運行該進程的用戶以及訪問類型的信息。
如何使用 fuser 實用工具
您可以查閱fuser
的手冊頁,以獲得有關與fuser
一起使用的所有選項的概述。您還可以在不使用任何選項的情況下運行fuser
,以獲得有關fuser
語法的概述:
- fuser
OutputNo process specification given
Usage: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
fuser -l
fuser -V
Show which processes use the named files, sockets, or filesystems.
-a,--all display unused files too
-i,--interactive ask before killing (ignored without -k)
-k,--kill kill processes accessing the named file
-l,--list-signals list available signal names
-m,--mount show all processes using the named filesystems or block device
-M,--ismountpoint fulfill request only if NAME is a mount point
-n,--namespace SPACE search in this name space (file, udp, or tcp)
-s,--silent silent operation
-SIGNAL send this signal instead of SIGKILL
-u,--user display user IDs
-v,--verbose verbose output
-w,--writeonly kill only processes with write access
-V,--version display version information
-4,--ipv4 search IPv4 sockets only
-6,--ipv6 search IPv6 sockets only
- reset options
udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]
如何查看運行在目錄中的進程
fuser
還可以與 -v 選項一起使用,該選項以冗長模式運行該工具。冗長選項用於生成更多輸出,以便用戶可以觀察fuser
正在進行的操作。在當前目錄.
上運行fuser
,並包括-v
選項:
- fuser -v .
Output USER PID ACCESS COMMAND
/home/sammy: sammy 17604 ..c.. bash
在這種情況下,此目錄中唯一運行的進程是您當前正在運行命令的交互式 bash
shell。
在啟用冗長模式運行時,fuser
工具會提供有關進程的 USER
、PID
、ACCESS
和 COMMAND
的信息。在 ACCESS
下的 c
字符顯示訪問的類型,在這種情況下表示當前目錄。c還有其他訪問類型,例如正在運行的 executable,root 目錄,打開的 file 和 mapped file 或共享庫。
如何查找使用網絡套接字的進程
您可能還需要查找使用 TCP 和 UDP 套接字的進程。為了演示這個例子,首先使用 nc
在端口 8002 上創建一個 TCP 監聽器,這樣就有一個運行中的進程可以觀察:
- nc -l -p 8002
只要它在運行,這將阻塞終端。在另一個終端窗口中,使用 fuser
使用 -n
選項查找在 TCP 端口 8002 上運行的進程:
- fuser -v -n tcp 8002
Output USER PID ACCESS COMMAND
8002/tcp: sammy 17985 F.... nc
注意:默認情況下,fuser
工具將檢查 IPv4 和 IPv6 套接字,但您可以使用 -4
和 -6
選項進行更改,分別僅檢查 IPv4 或僅檢查 IPv6 連接。
這個輸出顯示使用 netcat 的進程的進程 ID(PID)是 17985,並且用於啟動它的命令是 ‘nc’。進程 ID(PID)可以用多種方式,包括停止或終止正在運行的進程。您可以通過閱讀《如何使用 ps、kill 和 nice 管理 Linux 中的進程》來更多了解進程管理。您還可以使用 fuser 自身來通過使用 -k 標誌來終止在特定端口上運行的進程:
- fuser -k 8002/tcp
Output8002/tcp: 18056
如果您回到您的第一個終端窗口,您會注意到 nc 程序已被終止並返回到 shell。
fuser 實用程序還可以用於向進程發送特定信號。當與 -k 選項一起使用時,fuser 命令將 KILL 信號發送給一個進程。還有許多其他信號可以發送給特定運行中的進程。您可以使用 fuser -l 列出這些:
- fuser -l
OutputHUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
結論
在本文中,您了解了使用 fuser 監控 Linux 系統中正在使用的端口和目錄的一些示例用法。在嘗試理解系統上可能正在運行的未知進程時,fuser 可能特別有用。
下一步,您可能想要学习如何使用 netstat
和 du
来监控其他服务器资源。
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-the-linux-fuser-command