查询端口占用情况?Linux 命令之 lsof 详解

lsof(list open files)是一个列出当前系统打开文件的工具
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件

lsof 命令可以

  • 查看某个进程打开的文件
  • 查看某个进程打开的端口
  • 查看打开文件的进程
  • 找回/恢复删除的文件等

语法

lsof [选项]

如果提示命令不存在则需要安装该命令

redhat 系安装 lsof

yum install lsof -y

debian 系安装 lsof

apt-get install lsof

常用选项

-i [条件]       列出符合条件的进程(4、6、协议、:端口、@ip)
-c <COMMAND>    列出某个程序所打开的文件
-p <PID>        列出指定进程号所打开的文件
-d <FD>         列出占用指定文件号的进程
-u <USER>       列出指定用户打开的文件
+d <目录>       列出目录下被打开的文件
+D <目录>       递归列出目录下被打开的文件
-n              不将列出结果的 IP 转换为 hostname
-h              显示帮助信息
-v              显示版本信息

更多选项使用 $ sudo lsof -h 查看

实例

列出所有打开的文件(打印出一大堆东西,不方便查看,所以用的不多 )

$ sudo lsof 

查看所有的连接

$ sudo lsof -i

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
cupsd    4412 root    7u  IPv4  27251      0t0  TCP localhost:ipp (LISTEN)
dhclient 5239 root    6u  IPv4  35107      0t0  UDP *:bootpc
nmbd     5254 root   15u  IPv4  35366      0t0  UDP *:netbios-dgm
charon   5307 root   11u  IPv6  36155      0t0  UDP *:ipsec-nat-t
smbd     5347 root   32u  IPv6  35581      0t0  TCP *:netbios-ssn (LISTEN)

查看 IPV6 连接

$ sudo lsof -i 6

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
cupsd   4412 root    6u  IPv6  27250      0t0  TCP ip6-localhost:ipp (LISTEN)
charon  5307 root   10u  IPv6  36154      0t0  UDP *:isakmp 
charon  5307 root   11u  IPv6  36155      0t0  UDP *:ipsec-nat-t 
smbd    5347 root   31u  IPv6  35580      0t0  TCP *:microsoft-ds (LISTEN)
smbd    5347 root   32u  IPv6  35581      0t0  TCP *:netbios-ssn (LISTEN)

查看 TCP 连接

$ sudo lsof -i tcp

COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
cupsd      4412    root    6u  IPv6  27250      0t0  TCP ip6-localhost:ipp (LISTEN)
cupsd      4412    root    7u  IPv4  27251      0t0  TCP localhost:ipp (LISTEN)
smbd       5347    root   32u  IPv6  35581      0t0  TCP *:netbios-ssn (LISTEN)
wineserve 14399 johnhan  264u  IPv4 620729      0t0  TCP localhost:4301 (LISTEN)

查看 4300 端口占用情况

$ sudo lsof -i:4300

COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
wineserve 14399 johnhan  213u  IPv4 620696      0t0  TCP localhost:4300 (LISTEN)
QQ.exe    14712 johnhan  276u  IPv4 620696      0t0  TCP localhost:4300 (LISTEN)

查看 localhost 主机的连接

$ sudo lsof -i@localhost

COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
cupsd      4412    root    6u  IPv6  27250      0t0  TCP ip6-localhost:ipp (LISTEN)
cupsd      4412    root    7u  IPv4  27251      0t0  TCP localhost:ipp (LISTEN)
wineserve 14399 johnhan  213u  IPv4 620696      0t0  TCP localhost:4300 (LISTEN)
QQ.exe    14712 johnhan  280u  IPv4 620729      0t0  TCP localhost:4301 (LISTEN)

列出所有 chrome 进程

$ sudo lsof -c chrome

COMMAND   PID    USER   FD      TYPE       DEVICE  SIZE/OFF     NODE NAME
chrome  10509 johnhan  mem       REG          8,2    219736  1310799 /opt/google/chrome/locales/zh-CN.pak
chrome  10509 johnhan  mem       REG          8,2    818030  1310733 /opt/google/chrome/chrome_100_percent.pak
chrome  10509 johnhan  mem       REG          8,2    107020   528807 /usr/share/locale/zh_CN/LC_MESSAGES/glib20.mo
chrome  10509 johnhan  mem       REG          8,2      9492   528773 /usr/share/locale/zh_CN/LC_MESSAGES/atk10.mo

列出进程号为 10530 的进程

$ sudo lsof -p 10530

COMMAND   PID    USER   FD   TYPE       DEVICE  SIZE/OFF    NODE NAME
chrome  10530 johnhan  cwd    DIR          0,4         0  460385 /proc/10535/fdinfo
chrome  10530 johnhan  rtd    DIR          0,4         0  460385 /proc/10535/fdinfo
chrome  10530 johnhan  txt    REG          8,2 133477152 1310731 /opt/google/chrome/chrome
chrome  10530 johnhan  mem    REG          8,2   6947604 1310746 /opt/google/chrome/libwidevinecdm.so

列出占用文件描述符为 180 的所有进程

$ sudo lsof -d 180

COMMAND    PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google    4618 getui-johnhan  180u  IPv4 0x6ba3f5f37a8c0185      0t0  TCP 192.168.30.173:57109->151.101.72.133:https (CLOSED)
Google    9728 getui-johnhan  180   PIPE 0x6ba3f5f39001911d    16384

列出用户 root 打开的文件

$ sudo lsof -u root

COMMAND   PID   USER    FD   TYPE             DEVICE  SIZE/OFF NODE NAME
lsof      13896 root    1u   CHR               16,5  0t3591836 1633 /dev/ttys005
lsof      13896 root    2u   CHR               16,5  0t3591836 1633 /dev/ttys005
lsof      13896 root    4    PIPE 0x6ba3f5f3900191dd     16384      ->0x6ba3f5f39001785d
lsof      13896 root    5    PIPE 0x6ba3f5f39001a55d     16384      ->0x6ba3f5f39001a79d

列出 /usr/lib/ 目录下打开的所有文件

$ sudo lsof +d /usr/lib/

COMMAND     PID             USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
launchd       1             root  txt    REG    1,2   841440 404176 /usr/lib/dyld
syslogd      40             root  txt    REG    1,2   841440 404176 /usr/lib/dyld
UserEvent    41             root  txt    REG    1,2   841440 404176 /usr/lib/dyld
uninstall    44             root  txt    REG    1,2   841440 404176 /usr/lib/dyld

更多用法

列出某个用户以及某个程序所打开的文件信息

$ sudo lsof -u test -c mysql

列出除了某个用户外的被打开的文件信息

$ sudo lsof -u ^root

列出多个进程号对应的文件信息

$ sudo lsof -p 123,456,789

根据文件描述范围列出文件信息

$ sudo lsof -d 2-3

列出某个程序所打开的文件信息(同 $ sudo lsof -c mysql)

$ sudo lsof | grep mysql
除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1008.html
鄂ICP备17018604号-1  鄂公网安备42060702000030号