lsof(list open files)是一个列出当前系统打开文件的工具,我通常使用它来查看网络端口占用,因为在Linux下所有事物都是以文件的形式存在。
root@node5:~# lsof | head -10
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 254,0 4096 2 /
systemd 1 root rtd DIR 254,0 4096 2 /
systemd 1 root txt REG 254,0 1120992 2884146 /lib/systemd/systemd
systemd 1 root mem REG 254,0 19008 2883683 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd 1 root mem REG 254,0 18832 2883613 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd 1 root mem REG 254,0 79936 2883655 /lib/x86_64-linux-gnu/libgpg-error.so.0.21.0
systemd 1 root mem REG 254,0 283464 2883666 /lib/x86_64-linux-gnu/libblkid.so.1.1.0
systemd 1 root mem REG 254,0 22944 2883621 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd 1 root mem REG 254,0 14640 2883595 /lib/x86_64-linux-gnu/libdl-2.24.so
字段说明:
COMMAND进程名PID进程号TID线程号USER进程所有者FD文件描述符,应用程序通过文件描述符识别该文件TYPE文件类型DEVICE指定磁盘的名称SIZE/OFF文件的大小NODE索引节点(文件在磁盘上的标识)NAME文件名称
TYPE:
DIR目录文件REG普通文件CHRchar, 字符设备文件BLKblock, 块设备文件IPV4ipv4 socket 套接字文件IPV6ipv6 socket 套接字文件
FD 文件描述符 file description:
0标准输入流1标准输出流2标准错误流cwdcurrent work directory, 应用程序启动的目录txt二进制可执行文件或共享库rtdroot directory, 根目录memmemory mapped file, 内存映射文件mmapmemory-mapped device, 内存映射设备u可读可写模式r只读模式w只写模式
几个常用命令
# 显示所有网络连接
lsof -i
# 只显示 ipv6 的连接
lsof -i 6
# 只显示 tcp 协议的连接
lsof -i TCP
# 指定端口号
lsof -i:port
# 列出用户相关
lsof -u <USER>
比如,查看80端口占用
[root@localhost ~]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 23838 nginx 6u IPv4 25676340 0t0 TCP *:http (LISTEN)
nginx 23838 nginx 7u IPv6 25676341 0t0 TCP *:http (LISTEN)
nginx 23839 nginx 6u IPv4 25676340 0t0 TCP *:http (LISTEN)
nginx 23839 nginx 7u IPv6 25676341 0t0 TCP *:http (LISTEN)
nginx 28953 root 6u IPv4 25676340 0t0 TCP *:http (LISTEN)
nginx 28953 root 7u IPv6 25676341 0t0 TCP *:http (LISTEN)
