1.简介:

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

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

常用参数:

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

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

lsof 的示例输出:

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

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

  1. lsof输出各列信息的意义如下:
  2. COMMAND:进程的名称 PID:进程标识符
  3. USER:进程所有者
  4. FD:文件描述符,应用程序通过文件描述符识别该文件。如cwdtxt TYPE:文件类型,如DIRREG
  5. DEVICE:指定磁盘的名称
  6. SIZE:文件的大小
  7. NODE:索引节点(文件在磁盘上的标识)
  8. NAME:打开文件的确切名称 

2.lsof常用用法:

2.1 监控网络

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

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

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

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

列出所有 tcp、udp 连接:

  1. lsof -i tcp;
  2. lsof -i udp;

列出所有 NFS 文件:

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

2.2 监控打开的文件设备:

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

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

2.3 监控文件系统:

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

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

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

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

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

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

2.4 监控进程:

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

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

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

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

2.5 监控用户:

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

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

2.6 监控应用程序:

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

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

2.7 组合逻辑查询条件:

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

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

   

linux lsof 用法简介的更多相关文章

  1. [转帖]linux lsof 用法简介

    linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...

  2. linux 系统监控、诊断工具之 lsof 用法简介

    1.lsof 简介 lsof 是 Linux 下的一个非常实用的系统级的监控.诊断工具. 它的意思是 List Open Files,很容易你就记住了它是 "ls + of"的组合 ...

  3. linux lsof用法

    linux lsof命令详解   简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可 ...

  4. lsof用法简介

    lsof:一个功能强大的命令 lsof命令的原始功能是列出打开的文件的进程,但LINUX下,所有的设备都是以文件的行式存在的,所以,lsof的功能很强大!  [root@limt01 ~]# lsof ...

  5. Linux screen用法简介

    [admin@VM_0_2_centos ~]$ screen -bash: screen: 未找到命令 [admin@VM_0_2_centos ~]$ sudo su [sudo] passwor ...

  6. lsof命令简介

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

  7. linux lsof命令详解

    linux lsof命令详解 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访 ...

  8. Linux lsof 命令

    lsof(list open files)是一个查看进程打开的文件的工具. 在 linux 系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以 lsof 命令不仅可以查 ...

  9. [转贴]linux lsof命令详解

    linux lsof命令详解 https://www.cnblogs.com/sparkbj/p/7161669.html 简介 lsof(list open files)是一个列出当前系统打开文件的 ...

随机推荐

  1. Maven-常用命令

    mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码 mvn deploy 发布项目 mvn test-compile :编译测试代码 mvn te ...

  2. Timer和DPC

    一般两种方法使用/设置定时器,一种是使用I/O定时器例程,一种是使用DPC例程.1.定时器的实现1)使用I/O定时器例程NTSTATUSIoInitializeTimer(IN PDEVICE_OBJ ...

  3. JS 打印功能代码可实现打印预览、打印设置等

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  4. Hp自学整理html

    a:hover {text-decoration:underline; color:#00FF00;}/* 鼠标悬浮在链接上时.出现下划线颜色变绿色 */ display:inline.block.i ...

  5. Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法

    Hadoop安装完后,启动时报Error: JAVA_HOME is not set and could not be found. 解决办法: 修改/etc/hadoop/hadoop-env.sh ...

  6. webapi获取IP的方式

    using System.Net.Http; public static class HttpRequestMessageExtensions { private const string HttpC ...

  7. 贴一段shell代码

    好久没用shell了,呵呵,这个是当counter < 1000的时候,往tmp.sql里填这两个字符串,生成假数据. #!/usr/bin/env bash COUNTER= ]; do ec ...

  8. Maven异常:Could not find artifact

    用Maven build("clean tomcat7:run" )  Maven聚合工程时,出现了一下问题: [INFO] Scanning for projects... [E ...

  9. django views中提示cannot convert dictionary update sequence element #0 to a sequence错误

    def message(request): message_list = MessageBoard.objects.all().order_by('-pk') return render(reques ...

  10. hdu 2042 - 不容易系列之二

    题意:(略)太长了 解法:找规律,发现A[i]=A[i-1]*2-2; 1: #include<stdlib.h> 2: #include<string.h> 3: #incl ...