linux lsof常用方法

lsof简介

lsof(list open files)是一个列出当前系统打开文件的工具,在linux环境下,任何事物都是以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。系统为应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。而应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,通过lsof工具能够查看这个列表。

平时工作中,最常使用的命令是lsof -i:端口号,查看端口号是否被占用。如果端口号被占用,kill掉

kill `lsof -t -i:9981`

常用选项

  • 默认:没有选项,列出所有活跃进程的所有打开文件
  • -a:结果进行“与”运算
  • -l:输出显示用户id而不是用户名
  • -t:仅获取进程id
  • -U:获取UNIX套接字地址
  • -i:显示所有连接
  • -i [46] [protocol] [@hostname|hostaddr] [:port|service]

    4 -> IPV4

    6 -> IPV6

    protocol -> TCP or UDP

    hostname -> Internet host name

    hostaddr -> IPv4地址

    service -> /etc/service中 service name

    port -> 端口号

查看端口号运行情况

# lsof -i:8100
COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
server  17557 root    3u  IPv4 757199778      0t0  TCP *:xprint-server (LISTEN)

获取指定主机的连接

lsof -i@10.13.1.135
COMMAND     PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
kubelet    8800 root    5u  IPv4  766473835      0t0  TCP 77-9-162-bx-core.jpool.sinaimg.cn:50405->10.13.1.135:webcache (ESTABLISHED)
kubelet    8800 root   11u  IPv4  766240275      0t0  TCP 77-9-162-bx-core.jpool.sinaimg.cn:33368->10.13.1.135:webcache (ESTABLISHED)

获取主机:端口的连接

# lsof -i@10.13.1.135:8080
COMMAND     PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
kubelet    8800 root    5u  IPv4  766473835      0t0  TCP 77-9-162-bx-core.jpool.sinaimg.cn:50405->10.13.1.135:webcache (ESTABLISHED)

-t 只返回pid

# lsof -t -i@10.13.1.135:8080
8800
21841

获取IPV4流量

# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qservice_ 594 root 9u IPv4 701348672 0t0 TCP 77-9-162-bx-core.jpool.sinaimg.cn:20808->77-9-162-bx-core.jpool.sinaimg.cn:55515 (ESTABLISHED)
qservice_ 594 root 10u IPv4 503226876 0t0 TCP localhost:cslistener (LISTEN)
原文地址:https://www.cnblogs.com/shining5/p/8244561.html