lsof 是 Linux 下的一个非常实用的系统级的监控、诊断工具。它可以用来列出被各种进程打开的文件信息,记住:Linux 下 “一切皆文件”,因此,使用 lsof,你可以获取任何被打开文件的各种信息
lsof 是 Linux 下的一个非常实用的系统级的监控、诊断工具。
它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~
它可以用来列出被各种进程打开的文件信息,记住:Linux 下 “一切皆文件”,
包括但不限于 pipes, sockets, directories, devices, 等等。
因此,使用 lsof,你可以获取任何被打开文件的各种信息。
只需输入 lsof 就可以生成大量的信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能
实验环境
centos-5.5
实验软件
lsof_4.76.tar.gz
下载地址
安装
tar zxvf lsof_4.76.tar.gz
cd lsof_4.76
tar xvf lsof_4.76_src.tar
cd lsof_4.76_src
./Configure linux 安装这一步许多yes选择,都选择y
make
安装完毕
验证结果
lsof 如果ls 看到这个命令说明安装正确
使用方法
1.列出所有打开的文件:
lsof
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
2. 查看谁正在使用某个文件
lsof /filepath/file
3.递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法
lsof | grep ‘/filepath/filepath2/’
5. 列出某个用户打开的文件信息
lsof -u username
备注: -u 选项,u其实是user的缩写
6. 列出某个程序所打开的文件信息
lsof -c mysql
备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符了
7. 列出多个程序多打开的文件信息
lsof -c mysql -c apache
8. 列出某个用户以及某个程序所打开的文件信息
lsof -u test -c mysql
9. 列出除了某个用户外的被打开的文件信息
lsof -u ^root
备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
10. 通过某个进程号显示该进行打开的文件
lsof -p 1
11. 列出多个进程号对应的文件信息
lsof -p 123,456,789
12. 列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1
13 . 列出所有的网络连接
lsof -i
14. 列出所有tcp 网络连接信息
lsof -i tcp
15. 列出所有udp网络连接信息
lsof -i udp
16. 列出谁在使用某个端口
lsof -i :3306
17. 列出谁在使用某个特定的udp端口
lsof -i udp:55
特定的tcp端口
lsof -i tcp:80
18. 列出某个用户的所有活跃的网络端口
lsof -a -u test -i
19. 列出所有网络文件系统
lsof -N
20.域名socket文件
lsof -u
21.某个用户组所打开的文件信息
lsof -g 5555
22. 根据文件描述列出对应的文件信息
lsof -d description(like 2)
23. 根据文件描述范围列出文件信息
lsof -d 2-3
lsof +D /var/log/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
syslogd 2572 root 1w REG 8,3 123065 1560644 /var/log/messages
syslogd 2572 root 2w REG 8,3 1530 1560645 /var/log/secure
syslogd 2572 root 3w REG 8,3 1476 1560646 /var/log/maillog
syslogd 2572 root 4w REG 8,3 2132 1561350 /var/log/cron
syslogd 2572 root 5w REG 8,3 0 1560647 /var/log/spooler
syslogd 2572 root 6w REG 8,3 554 1561351 /var/log/boot.log
auditd 4205 root 5w REG 8,3 8832 1561343 /var/log/audit/audit.log
acpid 4488 root 1w REG 8,3 564 1561379 /var/log/acpid
acpid 4488 root 2w REG 8,3 564 1561379 /var/log/acpid
cupsd 4535 root 3u REG 8,3 4810 1561394 /var/log/cups/error_log
lsof -c ssh -c init
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 35380 717154 /sbin/init
init 1 root mem REG 8,3 1690404 1398040 /lib/libc-2.5.so
init 1 root mem REG 8,3 243928 1398099 /lib/libsepol.so.1
init 1 root mem REG 8,3 129480 1398033 /lib/ld-2.5.so
init 1 root mem REG 8,3 18812 1398046 /lib/libdl-2.5.so
init 1 root mem REG 8,3 91892 1398224 /lib/libselinux.so.1
init 1 root 10u FIFO 0,17 0t0 1173 /dev/initctl
sshd 3014 root cwd DIR 8,3 4096 2 /
sshd 3014 root rtd DIR 8,3 4096 2 /
lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 3014 root 3u IPv6 9411 0t0 TCP *:ssh (LISTEN)
sshd 3014 root 4u IPv4 9413 0t0 TCP *:ssh (LISTEN)
sshd 5354 root 3u IPv4 15091 0t0 TCP 192.168.0.102:ssh->192.168.0.101:60013 (ESTABLISHED)
lsof -i@192.168.0.102
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 5354 root 3u IPv4 15091 0t0 TCP 192.168.0.102:ssh->192.168.0.101:60013 (ESTABLISHED)