Linux / UNIX: List Open Files for Process

in Categories , , , , , last updated March 5, 2008

Q. How do I list all open files for a Linux or UNIX process using command line options?

A. Both Linux and UNIX like operating systems comes with various utilities to find out open files associated with process.

Task: UNIX List Open Files For Process

First use ps command to get PID of process, enter:
$ ps -aef | grep {process-name}
$ ps -aef | grep httpd

Next pass this PID to pfiles command,
$ pfiles {PID}
$ pfile 3533

Task: Linux List Open Files For Process

First you need to find out PID of process. Simply use any one of the following command to obtain process id:
# ps aux | grep {program-name}
OR
$ ps -C {program-name} -o pid=
For example, find out PID of firefox web-browser, enter:
$ ps -C firefox -o pid=
Output:

 7857

To list opne files for firefox process, enter:
$ ls -l /proc/7857/fd
Sample output:

total 0
lr-x------ 1 vivek vivek 64 2008-03-05 22:31 0 -> /dev/null
l-wx------ 1 vivek vivek 64 2008-03-05 22:31 1 -> pipe:[18371]
lr-x------ 1 vivek vivek 64 2008-03-05 22:31 10 -> /usr/lib/firefox/firefox
l-wx------ 1 vivek vivek 64 2008-03-05 22:31 2 -> pipe:[18371]

lsof command

lsof command list open files under all Linux distributions or UNIX like operating system. Type the following command to list open file for process ID 351:
$ lsof -p 351

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

Share this on (or read 22 comments/add one below):

22 comment

  1. Here is a cool lsof trick that shows you what port is in use by which program:

    lsof -iTCP:80

  2. For the single line lovers, here is another:

    lsof -p `pgrep firefox-bin`

    pgrep could be not automatically installed by your distro.

  3. Hi,,,, lsof is not giving the results in my Linux server,
    whenever i give the command ” lsof -u OSuser|wc -l ” its gives error saying “command not found”

  4. How can i see all files that opened by a specific pid and all it’s threads.
    My C++ program opens 200 threads per process but i do not see all file descriptors that were opened by each thread.

  5. Hi there,

    Is it possible to do it in the opposite direction. How to know which process created a particular file?

    I’ve just discovered your site, thanks a lot for sharing so much good stuff.

    Javier.

  6. javier:
    >>> Is it possible to do it in the opposite direction. How to know which process created a particular file?

    if the file is open try
    fuser

  7. fuser -m (or . in case file is not accessible)
    will return all processes that have locked this file (or directory in case file is not accessible)
    then proceed as suggested with lsof -p | grep

  8. Oneliner for Linux ; )
    lsof -p $(ps -ef | grep [PROGRAM_NAME] | grep -v grep | awk ‘{print $2}’)

  9. How could you get the files opened by a process using kernel modules?
    I mean, what would be the corespondent for ps aux | grep ?

    10x

  10. it doesn’t works when i try to do ‘lsof -p ‘ and got message as below
    /opt/csw/bin/lsof -p 22982
    lsof: can’t stat(/devices): No such file or directory

  11. I am using weblogic osb in red hat linux system,and the command pfiles is not found.
    My aim is to find File Descriptor’s total capacity

    command which i am running is:
    procfiles | grep rlimit

    Please help.

  12. Yeah… lsof comes from something that used to be called ‘ofiles’ I think…. Hit nothing searching for ‘ofiles’ so I’m including this comment ! ;)

    Have a question? Post it on our forum!