• linux lsof 用法简介


    1.简介:

    lsof(list open files)是一个列出当前系统打开文件的工具。

    只需输入 lsof 就可以生成大量的信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

    常用参数:

    lsof语法格式是:
    lsof [options] filename

    lsof  filename    显示打开指定文件的所有进程
    lsof -a           表示两个参数都必须满足时才显示结果
    lsof -c string    显示COMMAND列中包含指定字符的进程所有打开的文件
    lsof -u username  显示所属user进程打开的文件
    lsof -g gid       显示归属gid的进程情况
    lsof +d /DIR/     显示目录下被进程打开的文件
    lsof +D /DIR/     同上,但是会搜索目录下的所有目录,时间相对较长
    lsof -d FD        显示指定文件描述符的进程
    lsof -n          不将IP转换为hostname,缺省是不加上-n参数
    lsof -i           用以显示符合条件的进程情况
    lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
                46 --> IPv4 or IPv6
                protocol --> TCP or UDP
                hostname --> Internet host name
                hostaddr --> IPv4地址
                service --> /etc/service中的 service name (可以不只一个)
                port --> 端口号 (可以不只一个) 

    lsof 的示例输出:

    [root@localhost ~]# lsof 
    COMMAND     PID      USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
    init          1      root  cwd       DIR              253,0     4096          2 /
    init          1      root  rtd       DIR              253,0     4096          2 /
    init          1      root  txt       REG              253,0   150352    2228266 /sbin/init
    init          1      root  mem       REG              253,0    65928    1966110 /lib64/libnss_files-2.12.so
    

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

    lsof输出各列信息的意义如下:
    COMMAND:进程的名称 PID:进程标识符 USER:进程所有者 FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等 DEVICE:指定磁盘的名称 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称 

    2.lsof常用用法:

    2.1 监控网络

    查看指定端口有哪些进程在使用(lsof -i 列出所有的打开的网络连接):

    [root@localhost ~]# lsof -i:22
    COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    sshd    17909 root    3u  IPv4 2089344      0t0  TCP wx.9888.cn:ssh->bogon:61574 (ESTABLISHED)
    sshd    17911  www    3u  IPv4 2089344      0t0  TCP wx.9888.cn:ssh->bogon:61574 (ESTABLISHED)
    sshd    17933 root    3u  IPv4  277791      0t0  TCP *:ssh (LISTEN)
    sshd    17933 root    4u  IPv6  277793      0t0  TCP *:ssh (LISTEN)
    

    列出被某个进程打开所有的网络文件:

    [root@localhost ~]# lsof -i -a -p 29091
    或者
    [root@localhost ~]#lsof -i -a -c ssh
    

    列出所有 tcp、udp 连接:

    lsof -i tcp;
    lsof -i udp;
    

    列出所有 NFS 文件:

    [root@E08-8th02 ~]# lsof -N -u www -a
    

    2.2 监控打开的文件设备:

    查看文件、设备被哪些进程占用 

    [root@localhost ~]# lsof /dev/tty1
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    Xorg    1648 root    6u   CHR    4,1      0t0 5613 /dev/tty1
    

    2.3 监控文件系统:

    指定目录、挂载点,可以看到有哪些进程打开了其下的文件: 

    # lsof /data/
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    bash    15983 jian  cwd    DIR    8,5     4096 8252 /data/backup
    #这在 umount 某个文件系统失败时非常有用(通常会报该 FS is busy)
    

    列出某个目录(挂载点 如 /home 也行)下被打开的文件:

    # lsof +D /var/log/
    COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
    rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
    rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
    console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history
    

    列出被指定进程名打开的文件

    [root@localhost ~]# lsof -c ssh -c init
    COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
    init        1 root  cwd    DIR              253,0     4096       2 /
    init        1 root  rtd    DIR              253,0     4096       2 /
    init        1 root  txt    REG              253,0   150352 2228266 /sbin/init
    init        1 root  mem    REG              253,0    65928 1966110 /lib64/libnss_files-2.12.so
    init        1 root  DEL    REG              253,0          1966094 /lib64/libc-2.12.so
    

    2.4 监控进程:

    指定进程号,可以查看该进程打开的文件: 

    [root@localhost ~]# lsof -p 29084
    COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
    nginx   29084  www  cwd    DIR              253,0     4096 2359841 /apps/product/nginx/conf
    nginx   29084  www  rtd    DIR              253,0     4096       2 /
    nginx   29084  www  txt    REG              253,0  5497249 2359840 /apps/product/nginx/sbin/nginx
    

    当你想要杀掉某个用户所有打开的文件、设备,你可以这样:

    kill -9 `lsof -t -u www`
    #此处 -t 的作用是单独的列出 进程 id 这一列。 
    

    2.5 监控用户:

    查看指定用戶打开的文件(lsof -u ^www可以排除某用户): 

    [root@localhost ~]# lsof -u www
    COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
    tail       2409  www  cwd    DIR              253,0     4096       2 /
    tail       2409  www  rtd    DIR              253,0     4096       2 /
    tail       2409  www  txt    REG              253,0    61368  670089 /usr/bin/tail
    tail       2409  www  mem    REG              253,0   156928 1972676 /lib64/ld-2.12.so
    

    2.6 监控应用程序:

    查看指定程序打开的文件:

    [root@localhost ~]# lsof -c nginx
    COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
    nginx   28624 root  cwd    DIR              253,0     4096 2359841 /apps/product/nginx/conf
    nginx   28624 root  rtd    DIR              253,0     4096       2 /
    nginx   28624 root  txt    REG              253,0  5497249 2359840 /apps/product/nginx/sbin/nginx
    

    2.7 组合逻辑查询条件:

    只有多个查询条件都满足, 用 "-a" 参数,默认是 -o 。

    [root@localhost ~]# lsof -a -c bash -u root
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    bash    25602 root  cwd    DIR  253,0     4096 1572865 /root
    bash    25602 root  rtd    DIR  253,0     4096       2 /
    bash    25602 root  txt    REG  253,0   938832 1703983 /bin/bash
    bash    25602 root  mem    REG  253,0   156928 1972676 /lib64/ld-2.12.so
    bash    25602 root  mem    REG  253,0    22536 1972681 /lib64/libdl-2.12.so

       

  • 相关阅读:
    CSAcademy Or Problem
    BZOJ 4516 [Sdoi2016] 生成魔咒
    SPOJ7258 SUBLEX
    SPOJ1812 LCS2
    SPOJ1811 LCS
    SPOJ8222 NSUBSTR
    洛谷3804 【模板】后缀自动机
    SPOJ287 NETADMIN
    SPOJ1693 COCONUTS
    BZOJ5329 SDOI2018 战略游戏
  • 原文地址:https://www.cnblogs.com/saneri/p/5333333.html
Copyright © 2020-2023  润新知