如何使用Linux Fuser命令

什么是fuser命令?

fuser命令是一个非常聪明的unix实用程序,用于查找哪个进程正在使用文件,目录或套接字。它还提供有关拥有进程和访问类型的用户的信息。 fuser工具显示使用指定文件或文件系统的每个进程的进程标识(PID)。

如何使用fuser实用程序?

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选项一起使用,该选项在详细模式下运行工具。 verbose选项用于在计算机屏幕上生成详细输出,以便用户可以看到实用程序正在执行的实时状态。
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(用于写入的打开文件, m(mmap文件或共享库)。

什么进程使用您的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命令会基于该进程标识来终止进程。 fuser实用程序还可用于终止访问特定文件的进程。在以下命令中,-k选项用于终止使用在端口123上运行的tcp侦听器的进程。要确保用户不会杀死错误的进程,请使用-i选项,该命令要求用户在杀死进程前确认。
root@exampleuser-X55CR:~# fuser -k  123/tcp
123/tcp:             11543
使用带有-i选项的'fuser -k'命令要求在终止进程之前确认用户。用户可以用y回答yes或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忍者。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏