Using lsof to get information about open files
September 28, 2010 Leave a comment
lsof allows you to get a list of all open files and the processes that have opened them. It’s a useful tool to have in the sysadmin or linux hack’s toolbox.
Here are some example situations which should show you how useful it can be.
Which process is using this file?
This can be handy for cases like finding out which process/user is logging to a given log file, who is editing a given file, etc
[root@www ~]# lsof /var/log/squid/cache.log COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME squid 18671 squid 5u REG 253,0 3073 784030 /var/log/squid/cache.log
or the lazier:
[root@www ~]# lsof | grep /var/log/squid/cache.log squid 18671 squid 5u REG 253,0 3073 784030 /var/log/squid/cache.log
Which process is still using that directory?
Useful for finding that pesky process which has an open file handle a filesystem you’re trying to unmount.
[root@www ~]# lsof +D /var/log/squid COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME squid 18671 squid 5u REG 253,0 3073 784030 /var/log/squid/cache.log squid 18671 squid 8w REG 253,0 4041 784031 /var/log/squid/store.log
or, again, the lazy option:
[root@www ~]# lsof | grep /var/log/squid squid 18671 squid 5u REG 253,0 3073 784030 /var/log/squid/cache.log squid 18671 squid 8w REG 253,0 4041 784031 /var/log/squid/store.log
Where does process X log to?
You can use the command along with some grep messing to do:
[root@www ~]# lsof | grep squid | grep log squid 18671 squid 5u REG 253,0 3073 784030 /var/log/squid/cache.log squid 18671 squid 8w REG 253,0 4041 784031 /var/log/squid/store.log
Why hasn’t disk space been freed up after that delete?
[root@www ~]# lsof | grep deleted httpd 1519 root 25w REG 253,0 200918 688282 /usr/local/apache/logs/mapping-access_log (deleted) httpd 9515 apache 25w REG 253,0 200918 688282 /usr/local/apache/logs/mapping-access_log (deleted) httpd 9516 apache 25w REG 253,0 200918 688282 /usr/local/apache/logs/mapping-access_log (deleted) httpd 9517 apache 25w REG 253,0 200918 688282 /usr/local/apache/logs/mapping-access_log (deleted)