如何使用LinuxFuser命令
什么是定影命令?
fuser 命令是一个非常智能的 unix 实用程序,用于查找哪个进程正在使用文件、目录或套接字。 它还提供有关拥有进程的用户和访问类型的信息。 fuser 工具显示使用指定文件或文件系统的每个进程的进程 ID(PID)。
如何使用定影器实用程序?
man 命令可用于查看任何命令的手册页,但学习新知识(尤其是 linux 命令)的最佳方式是通过现实世界的示例,并且永远不要停止在终端中输入命令。 在终端中运行以下命令以获取有关 fuser 实用程序的使用选项的信息。 我们将在 Ubuntu 12.04 VPS 上试验 fuser 实用程序。 但是,只要您运行的是 linux 发行版,就应该没问题。
fuser
root@exampleuser-X55CR:~# fuser No 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 选项一起使用,该选项以详细模式运行该工具。 详细选项用于在计算机屏幕上生成详细输出,以便用户可以查看实用程序正在执行的实时状态。
root@exampleuser-X55CR:~# fuser -v . USER PID ACCESS COMMAND /root: root 3378 ..c.. vim root 3398 ..c.. bash root 3449 ..c.. bash root 19370 ..c.. bash root@exampleuser-X55CR:~#
上面的输出表明,当以详细模式运行时,fuse 实用程序会提供有关 USER、PID、ACCESS 和 COMMAND 的信息。 ACCESS 下的“c”字符表示访问类型,表示“当前目录”。 有许多访问类型,例如e(正在运行的可执行文件),r(根目录),f(打开文件)。 f在默认显示模式下省略),F(打开文件以写入,F在默认显示模式下省略)和m(mmap'ed文件或共享库)。
什么进程正在使用您的 tcp 或 udp 套接字?
有时您需要使用 TCP 和 UDP 套接字查找进程。 为了查找这些进程,需要使用 -n 选项。 -n 选项用于选择对应的命名空间。下面的命令在 80 端口创建一个 tcp 监听器。
root@exampleuser-X55CR:~# nc -l -p 80 Since a tcp server is listening on port 80, the fuser utility can be used to find the process which is using the server’s socket. The -v option is used to put the fuser utility in verbose mode and the -n option is used to select the tcp protocol as a name space.
root@exampleuser-X55CR:~# fuser -v -n tcp 80 root@exampleuser-X55CR:~# fuser -v -n tcp 80 USER PID ACCESS COMMAND 80/tcp: root 3846 F.... nc root@exampleuser-X55CR:~#
默认情况下,fuser 工具将同时查看 IPv6 和 IPv4 套接字,但可以使用 -4 和 -6 选项更改默认选项。 -4 选项代表 IPv4,-6 选项代表 IPv6。 请注意,fuser 仅将 PID 输出到 stdout,其他所有内容都发送到 stderr。
'fuser -v -n tcp 80' 命令的结果显示,使用 netcat 的进程的进程 ID 是 3846,用于启动它的命令是 'nc'。 进程ID(PID)可以有多种使用方式,其中之一就是进程杀戮。 当与 PID 一起使用时,kill 命令会根据该进程 ID 杀死一个进程。 fuser 实用程序还可用于终止访问特定文件的进程。 在以下命令中,-k 选项用于终止使用在端口 123 上运行的 tcp 侦听器的进程。 为了确保用户不会杀死错误的进程,使用了 -i 选项,该选项在杀死进程之前要求用户确认。
root@exampleuser-X55CR:~# fuser -k 123/tcp 123/tcp: 11543
使用带有 -i 选项的“fuser -k”命令在终止进程之前要求用户确认。 用户可以用 y 回答是,或者用 N 回答不确认杀戮。
root@exampleuser-X55CR:~# fuser -i -k 123/tcp 123/tcp: 12216 Kill process 12216 ? (y/N) Use The -6 Option To Look For IPv6 Sockets.
以下命令在详细模式下使用 fuser 工具并尝试查找在端口 123 上运行的 IPv6 套接字。
root@exampleuser-X55CR:~# fuser -v -n tcp -6 123 Since there is no IPv6 socket running on port 123, the command does not produce any output. The -6 option can be replaced with the -4 option in order to search for IPv4 sockets running on a specific port.
查找访问文件系统的进程
-m 选项可以与 fuser 命令一起使用,以查找访问文件文件系统上文件的进程。 此选项需要文件名作为输入参数。 -m 选项非常有用,特别是当用于发现访问文件系统的进程以识别要杀死哪个进程时。
以下命令显示访问“example.txt”所在文件系统的所有进程。 仔细查看 -m 选项如何与 fuser 实用程序一起使用。
root@exampleuser-X55CR:~# fuser -v -m example.txt USER PID ACCESS COMMAND /root/example.txt: root kernel mount / root 1 Frce. init root 2 .rc.. kthreadd root 3 .rc.. ksoftirqd/0 root 6 .rc.. migration/0 root 7 .rc.. watchdog/0 [...] exampleuser 23347 .r.e. gcalctool exampleuser 24527 f..e. chrome exampleuser 25388 f..e. chrome exampleuser 25628 .r.e. evince exampleuser 25634 .rce. evinced exampleuser 25706 .rce. gm-notify exampleuser 25769 .rce. at-spi-bus-laun exampleuser 28191 .rce. mate-settings-d exampleuser 28193 .rce. mate-screensave exampleuser 29942 f..e. chrome exampleuser 30044 .r.e. evince exampleuser 32721 f..e. chrome
fuser 实用程序还可用于向进程发送特定信号。 当与 -k 选项一起使用时,fuser 命令将 KILL 信号发送到进程。 有许多信号可以发送到特定的运行进程; -l 选项有助于查找可以与 fuser 工具一起使用的信号列表。
root@exampleuser-X55CR:~# 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
上面的输出显示了可以与 fuser 工具一起使用的所有可能的信号。
结论
当然,本文不足以涵盖 fuser 工具的所有选项和实际示例,但本文中提供的每个示例都将帮助您成为 Linux 忍者。