zoukankan      html  css  js  c++  java
  • 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

       

  • 相关阅读:
    android 中文 api (43) —— Chronometer
    SVN客户端清除密码
    Android 中文 API (35) —— ImageSwitcher
    Android 中文API (46) —— SimpleAdapter
    Android 中文 API (28) —— CheckedTextView
    Android 中文 API (36) —— Toast
    Android 中文 API (29) —— CompoundButton
    android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener
    Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  • 原文地址:https://www.cnblogs.com/saneri/p/5333333.html
Copyright © 2011-2022 走看看