lsof là một lệnh có trong nhiều hệ điều hành tựa Unix (“list open 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 ống, socket 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