• lsof命令简介


    lsof 简介

    lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境中一切皆文件,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

    lsof 命令解析

    COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
    systemd      1         root  cwd       DIR              253,0       224         64 /
    systemd      1         root  rtd       DIR              253,0       224         64 /
    systemd      1         root  txt       REG              253,0   1482128   67418805 /usr/lib/systemd/systemd
    systemd      1         root  mem       REG              253,0     20040   33619254 /usr/lib64/libuuid.so.1.3.0
    ...
    

    lsof 输出各列信息的意义如下:

    • COMMAND: 进程的名称
    • PID: 进程标识符
    • USER: 进程所有者
    • FD: 文件描述符,应用程序通过文件描述符识别该文件。每个进程都有自己的文件描述符表,因此FD可能会重名
    • TYPE: 文件类型
    • DEVICE: 指定磁盘的名称
    • SIZE: 文件的大小
    • NODE: 索引节点(文件在磁盘上的标识)
    • NAME: 打开文件的确切名称

    查看进程打开文件

    • 列出占用文件的进程
    $ sudo lsof /home/mysql/
    COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
    bash    18522 mysql  cwd    DIR  253,0     4096 655378 /home/mysql
    sudo    18544  root  cwd    DIR  253,0     4096 655378 /home/mysql
    lsof    18545  root  cwd    DIR  253,0     4096 655378 /home/mysql
    lsof    18546  root  cwd    DIR  253,0     4096 655378 /home/mysql
    

    可配合 +d 选项,表示/home/mysql目录及目录下的文件,不包括子目录

    $ sudo lsof /home/mysql/ +d
    
    • 列出pid打开的文件

    -p选项,列出指定pid打开的文件,如果要多个,则用逗号隔开

    $ sudo lsof -p 16273
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    nano    16273 root  cwd    DIR  253,0     4096 1179649 /root
    
    • 列出指定用户打开的文件

    -u选项,列出指定用户打开的文件

    $ sudo lsof -u test1
    COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    bash    16335 test1  cwd    DIR  253,0     4096 1966556 /home/test1
    
    • 列出指定进程名打开的文件

    -c 选项,列出指定进程名打开的文件

    sudo lsof -c java   # 显示command列中以java的所有打开的文件
    
    sudo lsof -c java -c sh  # 显示command列中以java开头或以sh开头的打开的文件
    
    sudo lsof -c ^java   # 显示command列中所有不以java开头的打开的文件
    

    查看网络连接情况

    -i 选项,可以列出网络连接情况。语法格式如下:

    lsof -i[46] [protocol] [@hostname|hostaddr] [:service|prot]
    
    参数解析:
    4/6:IPv4或IPv6
    protocol:TCP或UDP
    hostname:主机名
    hostaddr:ip地址
    service:/etc/service中服务名,可写多个
    port:端口号,可写多个
    

    示例:

    1. 查看IPv4网络情况

    $ lsof -i 4
    COMMAND     PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    rpcbind    1599       rpc    6u  IPv4  10168      0t0  UDP *:sunrpc 
    rpcbind    1599       rpc    7u  IPv4  10169      0t0  UDP *:926 
    ...
    

    2. 查看指定IP

    -n 表示不进行IP域名反查,直接显示ip地址

    $ lsof -i @10.0.137.144 -n
    COMMAND   PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    sshd    16734      root    3u  IPv4 14692046      0t0  TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
    sshd    16736      test    3u  IPv4 14692046      0t0  TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
    

    3. 查看指定IP及端口

    $ sudo lsof -i @10.0.137.144:22 -n
    COMMAND   PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    sshd    16734      root    3u  IPv4 14692046      0t0  TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
    sshd    16736      test    3u  IPv4 14692046      0t0  TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
    

    4. 查看指定端口

    $ lsof -i :22 -n
    COMMAND   PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    sshd     1095      root    3u  IPv4    14032      0t0  TCP *:ssh (LISTEN)
    sshd     1095      root    4u  IPv6    14034      0t0  TCP *:ssh (LISTEN)
    sshd    16734      root    3u  IPv4 14692046      0t0  TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
    sshd    16736      test    3u  IPv4 14692046      0t0  TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
    

    5. 查看指定协议

    $ sudo lsof -i UDP
    COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    rsyslogd 17935 root    3u  IPv4 11066422      0t0  UDP *:40296 
    
  • 相关阅读:
    Asp.net WebAPI Ioc
    Asp.net WebAPi gzip压缩和json格式化
    Asp.net WebApi版本控制
    Asp.net WebAPi Restful 的实现和跨域
    Asp.net WebAPI Request参数验证-请不要重复造轮子
    asp.net mvc源码分析-ModelValidatorProviders 客户端的验证
    MultipleRegularExpressionAttribute MVC中扩展自定义验证规则
    Asp.net5 Session Set扩展
    knockout 多值绑定
    ajax file upload 修改
  • 原文地址:https://www.cnblogs.com/technologylife/p/9211289.html
Copyright © 2020-2023  润新知