lsof
命令主要是查看当前打开的文件列表,不添加任何参数选项,会输出一堆打开的文件。
lsof 文件名
lsof + 文件名
可以查看当前文件被谁打开,以及对应的PID
。
例如我用tail -f /etc/passwd
打开了文件/etc/passwd
,用lsof
查看:
$ lsof /etc/passwd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 7746 host 3r REG 8,66 2450 81005434 /etc/passwd
可以看到是PID
为7746
的进程打开了/etc/passwd
文件。
lsof -p 进程号
可以看到是该进程打开了哪些文件
$ lsof -p 7746
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 7746 host cwd DIR 8,66 4096 59899906 /home/host
tail 7746 host rtd DIR 8,66 4096 2 /
tail 7746 host txt REG 8,66 64432 87033273 /usr/bin/tail
tail 7746 host mem REG 8,66 4763056 87032810 /usr/lib/locale/locale-archive
tail 7746 host mem REG 8,66 1868984 64881686 /lib/x86_64-linux-gnu/libc-2.23.so
tail 7746 host mem REG 8,66 162632 64881678 /lib/x86_64-linux-gnu/ld-2.23.so
tail 7746 host 0u CHR 136,18 0t0 21 /dev/pts/18
tail 7746 host 1u CHR 136,18 0t0 21 /dev/pts/18
tail 7746 host 2u CHR 136,18 0t0 21 /dev/pts/18
tail 7746 host 3r REG 8,66 2450 81005434 /etc/passwd
tail 7746 host 4r a_inode 0,13 0 12973 inotify
可以看出是tail
命令打开了/etc/passwd
。
lsof -i :端口号
lsof -i :端口号
可以查看端口打开了那些文件。例如查看端口5000
打开了哪几个文件
$ lsof -i :5000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 530 host 5u IPv4 21044280 0t0 TCP *:5000 (LISTEN)
python 530 host 7u IPv4 21044280 0t0 TCP *:5000 (LISTEN)
python 2053 host 5u IPv4 21044280 0t0 TCP *:5000 (LISTEN)
python 2053 host 7u IPv4 21044280 0t0 TCP *:5000 (LISTEN)
可以看到是python
命令打开的这个端口