昨天一位读者在公众号后台约稿,于是有了以下文章,欢迎各位读者约稿,我会认真考虑各位的意见的。
lsof 命令是 Linux 系统的扩展工具,它的含义是 list opened filedesciptor (列出已经打开的文件描述符),在 Linux 系统中,所有的与资源句柄相关的东西都可以统一抽象成文件描述符(filedescriptor,简称 fd)。一个文件句柄是一个 fd,一个 socket 对象也可以称之为 fd 等等。
默认情况下,系统是不存在这个命令的,你需要安装一下,使用如下命令安装:
yum install lsof
我们来看一下这个命令的使用效果:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 202,1 4096 2 /
nscd 453 469 nscd 8u netlink 0t0 11017 ROUTE
nscd 453 470 nscd cwd DIR 202,1 4096 2 /
nscd 453 470 nscd rtd DIR 202,1 4096 2 /
nscd 453 470 nscd txt REG 202,1 180272 146455 /usr/sbin/nscd
nscd 453 470 nscd mem REG 202,1 217032 401548 /var/db/nscd/hosts
nscd 453 470 nscd mem REG 202,1 90664 132818 /usr/lib64/libz.so.1.2.7
nscd 453 470 nscd mem REG 202,1 68192 133155 /usr/lib64/libbz2.so.1.0.6
nscd 453 470 nscd mem REG 202,1 153192 133002 /usr/lib64/liblzma.so.5.0.99
nscd 453 470 nscd mem REG 202,1 91496 133088
nscd 453 471 nscd 5u a_inode 0,9 0 4796 [eventpoll]
nscd 453 471 nscd 6r REG 202,1 217032 401548 /var/db/nscd/hosts
nscd 453 471 nscd 7u unix 0xffff880037497440 0t0 11015 /var/run/nscd/socket
nscd 453 471 nscd 8u netlink 0t0 11017 ROUTE
imgserver 611 zhangyl cwd DIR 202,1 4096 1059054 /home/zhangyl/flamingoserver
imgserver 611 zhangyl rtd DIR 202,1 4096 2 /
imgserver 611 zhangyl txt REG 202,1 4788917 1057044 /home/zhangyl/flamingoserver/imgserver
imgserver 611 zhangyl 24u a_inode 0,9 0 4796 [eventfd]
imgserver 611 zhangyl 25u IPv4 55707643 0t0 TCP *:commtact-http (LISTEN)
imgserver 611 zhangyl 26r CHR 1,3 0t0 4800 /dev/null
imgserver 611 613 zhangyl 32w REG 202,1 131072 2754609 /home/zhangyl/flamingoserver/imgcache/258bfb8945288a117d98d440986d7a03
结果显示中列出了各个进程打开的各种 fd 类型,对于 Uinx Socket,lsof 命令会显示出其详细的路径,打开的文件 fd 亦是如此。
使用 lsof 命令有三点需要注意:
上文也介绍了,socket 也是一种 fd,如果需要仅显示系统的网络连接信息,使用的是 -i 选项即可,这个选项可以形象地显示出系统当前的出入连接情况:
看到图中的连接方向了吧?
当然,和 netstat 命令一样,lsof -i 默认也会显示 ip 地址和端口号的别名,我们只要使用 -n 和 -P 选项就能相对应地显示 ip 地址和端口号了,综合起来就是 lsof -Pni:
本文首发于『easyserverdev』公众号,欢迎关注,转载请保留版权信息。