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
普通文件CHR
char, 字符设备文件BLK
block, 块设备文件IPV4
ipv4 socket 套接字文件IPV6
ipv6 socket 套接字文件
FD 文件描述符 file description:
0
标准输入流1
标准输出流2
标准错误流cwd
current work directory, 应用程序启动的目录txt
二进制可执行文件或共享库rtd
root directory, 根目录mem
memory mapped file, 内存映射文件mmap
memory-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)