简介
lsof命令用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、DUP)。找回/恢复删除的文件。是十分方便的系统监视工具,应为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该程序分配了一个描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。应为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将很有帮助
语法格式
lsof (选项)
选项
选项 描述 -a 列出打开文件存在的进程 -c<进程名> 列出指定进程所打开的文件 -g 列出GID号进程详情 -d<文件号> 列出终于该文件号的进程 +d<目录> 列出目录下被打开的文件 -D<目录> 递归列出目录下被打开的文件 -n<目录> 列出使用NFS的文件 -i<条件> 列出符合条件的进程 -p<进程号> 列出指定进程号所打开的文件 -u 列出UID号进程详情 -h 显示帮助信息 -v 显示版本信息
示例
列出所有打开的文件
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,1 4096 2 / systemd 1 root rtd DIR 253,1 4096 2 / lsof输出各列信息的意义 COMMAND 进程的名称 PID 进程的标识符 PPID 父进程标识符(需指定—R参数) USER 进程的所有者 FD 文件描述符,应用程序通过文件描述符识别该文件 DEVICE 指定磁盘的名称 SIZE 文件的大小 NODE 索引节点(文件在磁盘上的标识) NAME 打开文件的确切名称
常用用法
列出所有打开的文件
[root@boke ~]# lsof COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,1 4096 2 / systemd 1 root rtd DIR 253,1 4096 2 /
列出所有的网络连接
[root@boke ~]# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 512 chrony 1u IPv4 12811 0t0 UDP localhost:323 chronyd 512 chrony 2u IPv6 12812 0t0 UDP localhost:323 sshd 986 root 3u IPv4 15015 0t0 TCP *:ssh (LISTEN) nginx 10333 root 6u IPv4 171175 0t0 TCP *:http (LISTEN) nginx 10333 root 10u IPv4 204723 0t0 TCP *:https (LISTEN)
列出所有tcp连接
[root@boke ~]# lsof -i tcp COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 986 root 3u IPv4 15015 0t0 TCP *:ssh (LISTEN) nginx 10333 root 6u IPv4 171175 0t0 TCP *:http (LISTEN) nginx 10333 root 10u IPv4 204723 0t0 TCP *:https (LISTEN) nginx 12802 nobody 6u IPv4 171175 0t0 TCP *:http (LISTEN) nginx 12802 nobody 10u IPv4 204723 0t0 TCP *:https (LISTEN)
列出所有udp连接
[root@boke ~]# lsof -i udp COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 512 chrony 1u IPv4 12811 0t0 UDP localhost:323 chronyd 512 chrony 2u IPv6 12812 0t0 UDP localhost:323 chronyd 512 chrony 5u IPv4 12815419 0t0 UDP boke:46188->10.143.0.45:ntp dhclient 11589 root 7u IPv4 11726634 0t0 UDP *:bootpc
列出谁在使用某个端口
[root@boke ~]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 10333 root 6u IPv4 171175 0t0 TCP *:http (LISTEN) nginx 12802 nobody 6u IPv4 171175 0t0 TCP *:http (LISTEN) AliYunDun 27562 root 22u IPv4 11779645 0t0 TCP boke:54272->100.100.30.26:http (ESTABLISHED)
列出某个程序打开的文件信息
[root@boke home]# lsof -c nginx COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 10333 root cwd DIR 253,1 4096 1182046 /opt/install/nginx nginx 10333 root rtd DIR 253,1 4096 2 / nginx 10333 root txt REG 253,1 5872680 1182048 /opt/install/nginx/sbin/nginx nginx 10333 root mem REG 253,1 61624 265462 /usr/lib64/libnss_files-2.17.so
列出某个用户打开的文件信息
[root@boke home]# lsof -u root
列出某个用户活跃的网络端口
[root@boke ~]# lsof -a -u root -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 986 root 3u IPv4 15015 0t0 TCP *:ssh (LISTEN) nginx 10333 root 6u IPv4 171175 0t0 TCP *:http (LISTEN) nginx 10333 root 10u IPv4 204723 0t0 TCP *:https (LISTEN) dhclient 11589 root 7u IPv4 11726634 0t0 UDP *:bootpc java 12916 root 6u IPv4 11198528 0t0 TCP boke:8090->li1828-46.members.linode.com:42198 (ESTABLISHED) java 12916 root 31u IPv4 218040 0t0 TCP *:8090 (LISTEN) java 12916 root 33u IPv4 224678 0t0 TCP boke:8090->178-73-
列出除了某个用户外的被打开文件信息
[root@boke ~]# lsof -u ^root COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME dbus-daem 482 dbus cwd DIR 253,1 4096 2 / dbus-daem 482 dbus rtd DIR 253,1 4096 2 / dbus-daem 482 dbus txt REG 253,1 223320 269686 /usr/bin/dbus-daemon dbus-daem 482 dbus mem REG 253,1 61624 265462 /usr/lib64/libnss_files-2.17.so
查看谁在使用某个文件
[root@boke opt]# lsof nohup.out COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 18554 root 1w REG 253,1 397455 1182113 nohup.out java 18554 root 2w REG 253,1 397455 1182113 nohup.out