// Tutorial //

How To Use the Linux Fuser Command

Published on December 3, 2013
Default avatar
By Oltjano Terpollari
Developer and author at DigitalOcean.
How To Use the Linux Fuser Command

What Is The fuser Command?

The fuser command is a very smart unix utility used to find which process is using a file, a directory or a socket. It also gives information about the user owning the process and the type of access. The fuser tool displays the process id(PID) of every process using the specified files or file systems.

How To Use The fuser Utility?

The man command can be used to see manual pages for any command, but the best way to learn something new, especially linux commands, is by going through real world examples and never stop typing commands in the terminal. Run the following command in your terminal to get information about the usage options of the fuser utility. We will be experimenting with the fuser utility on a Ubuntu 12.04 VPS. However, as long as you are running a linux distribution it should be okay.


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]]]

How To View Processes Using A Directory

The fuser utility can be used with -v option, which runs the tool in verbose mode. The verbose option is used to produce verbose output on the computer screen so the user can see real-time status of what the utility is doing.

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

The above output shows that, when ran in verbose mode, the fuse utility gives information about the USER, PID, ACCESS and COMMAND. The ‘c’ character under ACCESS shows the type of access, it means ‘current directory’. There are many access types such as e(executable being run), r(root directory), f(open file. f is omitted in default display mode), F(open file for writing, F is omitted in default display mode) and m (mmap’ed file or shared library).

What process is using your tcp or udp socket?

There are times when you need to look up processes using TCP and UDP sockets. In order to look up these processes, the usage of -n option is needed. The -n option is used to select the corresponding name space.The following command creates a tcp listener on port 80.

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

By default, the fuser tool will look in both IPv6 and IPv4 sockets, but the default option can be changed with the -4 and -6 options. The -4 option stands for IPv4, the -6 one stands for IPv6. Note that fuser outputs only the PIDs to stdout, everything else is sent to stderr.

The results of the ‘fuser -v -n tcp 80’ command show that process id of the process using netcat is 3846 and the command which was used to launch it is ‘nc’. The process id (PID) can be used in many ways, one of them is process killing. When used with a PID, the kill command kills a process based on that process id. The fuser utility can also be used to kill processes accessing a specific file. In the following command, the -k option is used to kill the process which is using the tcp listener running on port 123. To make sure that the user does not kill a wrong process, the -i option is used which asks the user for confirmation before killing a process.

root@exampleuser-X55CR:~# fuser -k  123/tcp
123/tcp:             11543

Use the ‘fuser -k’ command with the -i option to ask the user for confirmation before killing a process. The user can answer with y for yes or N for not confirming the killing.

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.

The following command uses fuser tool in verbose mode and tries to find IPv6 sockets running on port 123.

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.

Find The Process Accessing A File System

The -m option can be used with the fuser command to find processes accessing files on the filesystem of a file. This option requires a filename as input argument. The -m option is very useful, especially when used to discover processes accessing a file system with the intetion of identifying which process to kill.

The following command displays all processes accessing filesystem on which ‘example.txt’ resides. See carefully how the -m option is used with the fuser utility.

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

The fuser utility can also be used to send specific signals to a process. When used with the -k option, the fuser command sends the KILL signal to a process. There are many signals which can be sent to a specific running process; the -l option helps to find the list of signals that can be used with the fuser tool.

root@exampleuser-X55CR:~# fuser -l

The above output shows all the possible signals that can be used with the fuser tool.


Of course this article is not enough to cover all options and practical examples of the fuser tool, but every example served in this article will help you in your way to being a Linux ninja.

<div class=“author”>By Oltjano Terpollari</div>

Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?
Leave a comment

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!