Sử dụng lsof (list of open files)

0
1674

lsof là một lệnh có trong nhiều hệ điều hành tựa Unix (“lisopen files”), có chức năng xuất ra danh sách tất cả các tập tin đamg được mở và những tiến trình đang mở chúng. Tiện ích này được phát triển và hỗ trợ bởi Vic Abell, phó giám đốc đã về hưu của trung tâm tin học Đại học Purdue.[2]

Các tập tin được mở trong hệ thống bao gồm các tập tin trên đĩa, đường ốngsocket mạng và các thiết bị được sử dụng bởi các tiến trình. Một ví dụ cho ứng dụng của chương trình là khi không thể gỡ một ổ đĩa ra khỏi hệ thống vì một số tập tin đang được sử dụng. Chương trình sẽ liệt kê những tệp đang mở và tiến trình nào đang sử dụng chúng

Default output

# lsof
COMMAND  PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init       1       root  cwd       DIR        8,1      4096          2 /
init       1       root  txt       REG        8,1    124704     917562 /sbin/init
init       1       root    0u      CHR        1,3       0t0       4369 /dev/null
init       1       root    1u      CHR        1,3       0t0       4369 /dev/null
init       1       root    2u      CHR        1,3       0t0       4369 /dev/null
init       1       root    3r     FIFO        0,8       0t0       6323 pipe
  • FD – File descriptor
    • cwd – current working directory
    • txt – text
    • mem – memory mapped file
    • mmap – memory mapped device
    • <number>[rwu] – file descriptor (r – read, w – write, r – read/write)
  • TYPE – File Type
    • REG – Regular File
    • DIR – Directory
    • FIFO – First In First Out
    • CHR – Character special file

List process that open specific file

# lsof /var/log/syslog
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 488 syslog    1w   REG    8,1     1151 268940 /var/log/syslog

List open files under a directory

# lsof +D /var/log
COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

List open files based on process names start with

# lsof -c init -c ssh
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1       root  txt    REG        8,1   124704  917562 /sbin/init
init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so
...
ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

List processes using a mount point

# lsof /home
# lsof +D /home

List files opened by a specific user

# lsof -u lakshmanan
COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
update-no 1892 lakshmanan   20r  FIFO        0,8      0t0      14536 pipe
update-no 1892 lakshmanan   21w  FIFO        0,8      0t0      14536 pipe
bash      1995 lakshmanan  cwd    DIR        8,1     4096     393218 /home/lakshmanan

Or list files opened not by specific user

# lsof -u ^lakshmanan
COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
rtkit-dae 1380      rtkit    7u     0000        0,9         0       4360 anon_inode
udisks-da 1584       root  cwd       DIR        8,1      4096          2 /

List all open files by a specific process

# lsof -p 1753
COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1753 lakshmanan  cwd    DIR    8,1     4096  393571 /home/lakshmanan/test.txt
bash    1753 lakshmanan  rtd    DIR    8,1     4096       2 /
bash    1753 lakshmanan  255u   CHR  136,0      0t0       3 /dev/pts/0

Kill all process that belongs to a particular user

# kill -9 `lsof -t -u lakshmanan`

List process which open specific file

# lsof -t /var/log/syslog
489

Combine more list options using OR/AND

# lsof -u lakshmanan -c init
COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
init         1       root  cwd    DIR        8,1     4096          2 /
init         1       root  txt    REG        8,1   124704     917562 /sbin/init
bash      1995 lakshmanan    2u   CHR      136,2      0t0          5 /dev/pts/2
bash      1995 lakshmanan  255u   CHR      136,2      0t0          5 /dev/pts/2

Using -a option for AND

# lsof -u lakshmanan -c init -a

Execute lsof in repeat mode

# lsof -u lakshmanan -c init -a -r5

=======
=======
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218 /home/lakshmanan
inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /
inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315 /bin/dash
inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612 /lib/i386-linux-gnu/ld-2.13.so
inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578 /home/lakshmanan/inita.sh
=======

List all network connections

Network connections are also files. So we can find information about them by using lsof.

# lsof -i
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  515 avahi   13u  IPv4   6848      0t0  UDP *:mdns
avahi-dae  515 avahi   16u  IPv6   6851      0t0  UDP *:52060
cupsd     1075  root    5u  IPv6  22512      0t0  TCP ip6-localhost:ipp (LISTEN)

Using -4 or -6 for IPv4/IPv6 only

List all network files in use by a specific process

# lsof -i -a -p 234
# lsof -i -a -c ssh

List processes which are listening on a particular port

# lsof -i :25
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2541 Debian-exim    3u  IPv4   8677       TCP localhost:smtp (LISTEN)

List all TCP or UDP connections

# lsof -i tcp; lsof -i udp;

List all Network File System (NFS) files

# lsof -N -u lakshmanan -a

Leave a Reply

avatar
  Subscribe  
Notify of