【Linux常见命令】lsof命令

浪尽此生 提交于 2019-12-05 06:56:11

lsof - list open files

lsof命令用于查看你进程打开的文件,进程打开的端口(TCP、UDP),找回/恢复删除的文件,打开文件的进程。

 

语法:

    lsof [选项] [文件]

常用选项:

  • -c <进程名> 列出指定进程所打开的文件
  • +D <目录> 递归列出目录下被打开的文件
  • -i <条件> 列出符号条件的进程(4、6、协议、:端口、@ip)
  • -n <目录> 列出使用NFS的文件
  • -p <进程号> 列出指定进程号所打开的文件
  • -u s 列出login name或UID为s的程序
 

实例

1. 在没有任何参数时,显示当前系统已经打开的正在使用的所有文件

[root@oldboy ~]# lsof|more -10
COMMAND    PID  USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1  root  cwd       DIR                8,3     4096          2 /
init         1  root  rtd       DIR                8,3     4096          2 /
init         1  root  txt       REG                8,3   150352     139708 /sbin/init
init         1  root  mem       REG                8,3    65928     132072 /lib64/libnss_fil
es-2.12.so
init         1  root  mem       REG                8,3  1926480     155325 /lib64/libc-2.12.
so
init         1  root  mem       REG                8,3    93320     155348 /lib64/libgcc_s-4
.4.7-20120601.so.1
--More--

显示的内容分析:

1. 名称详解

  •  COMMAND:进程名称
  •  PID:进程标识符
  •  TID:线程ID
  •  USER:所有者
  •  FD:文件描述符
  •  TYPE:文件类型
  •  DEVICE:磁盘名称
  •  SIZE/OFF:文件大小
  •  NODE:索引节点
  •  NAME:文件名称

2. FD(文件描述符)详解

  •  cwd:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行修改
  •  txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库
  •  rtd:根目录
  •  0:表示标准输出
  •  1:表示标准输入
  •  2:表示标准错误

3.文件类型详解

  •  DIR:目录
  •  CHR:字符类型
  •  BLK:块设备类型
  •  UNIX:UNIX域套接字
  •  FIFO:先进先出(FIFO)队列
  •  IPv4:国际协议(IP)套接字

 

2. 查看指定文件相关的进程信息,即找出此文件的进程

[root@oldboy ~]# lsof /bin/bash
COMMAND    PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
mysqld_sa 1298 root txt    REG    8,3   941720 134686 /bin/bash
bash      5979 root txt    REG    8,3   941720 134686 /bin/bash
bash      5990 root txt    REG    8,3   941720 134686 /bin/bash

 

3. 递归查询某个目录的文件信息

[root@oldboy share]# lsof +D /usr/local/share
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    5990 root  cwd    DIR    8,3     4096 129846 /usr/local/share
lsof    6695 root  cwd    DIR    8,3     4096 129846 /usr/local/share
lsof    6696 root  cwd    DIR    8,3     4096 129846 /usr/local/share

 

4. 不使用+D选项得到与某个文件有关的进程信息的方法

[root@oldboy share]# lsof |grep '/usr/local/share'       
bash      5990  root  cwd       DIR                8,3     4096     129846 /usr/local/share
lsof      6704  root  cwd       DIR                8,3     4096     129846 /usr/local/share
grep      6705  root  cwd       DIR                8,3     4096     129846 /usr/local/share
lsof      6706  root  cwd       DIR                8,3     4096     129846 /usr/local/share
[root@oldboy share]# 

 

5. 列出某个用户打开的所有文件相关的进程信息

[root@oldboy share]# lsof -u root|wc -l 
508
[root@oldboy share]# lsof -u root|more -10
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1 root  cwd       DIR                8,3     4096          2 /
init         1 root  rtd       DIR                8,3     4096          2 /
init         1 root  txt       REG                8,3   150352     139708 /sbin/init
init         1 root  mem       REG                8,3    65928     132072 /lib64/libnss_file
s-2.12.so
init         1 root  mem       REG                8,3  1926480     155325 /lib64/libc-2.12.s
o
init         1 root  mem       REG                8,3    93320     155348 /lib64/libgcc_s-4.
4.7-20120601.so.1

 

6. 使用不同方法列出与程序有关的文件

方法一:使用-c选项

[root@oldboy share]# lsof -c bash 
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    5979 root  cwd    DIR    8,3     4096 129797 /root
bash    5979 root  rtd    DIR    8,3     4096      2 /
bash    5979 root  txt    REG    8,3   941720 134686 /bin/bash
bash    5979 root  mem    REG    8,3   157072 155324 /lib64/ld-2.12.so
bash    5979 root  mem    REG    8,3    22536 141851 /lib64/libdl-2.12.so
bash    5979 root  mem    REG    8,3  1926480 155325 /lib64/libc-2.12.so
bash    5979 root  mem    REG    8,3   134792 151195 /lib64/libtinfo.so.5.7
bash    5979 root  mem    REG    8,3    65928 132072 /lib64/libnss_files-2.12.so
bash    5979 root    0u   CHR    4,1      0t0   5614 /dev/tty1
bash    5979 root    1u   CHR    4,1      0t0   5614 /dev/tty1
bash    5979 root    2u   CHR    4,1      0t0   5614 /dev/tty1
bash    5979 root  255u   CHR    4,1      0t0   5614 /dev/tty1
bash    5990 root  cwd    DIR    8,3     4096 129846 /usr/local/share
bash    5990 root  rtd    DIR    8,3     4096      2 /
bash    5990 root  txt    REG    8,3   941720 134686 /bin/bash
bash    5990 root  mem    REG    8,3   157072 155324 /lib64/ld-2.12.so
bash    5990 root  mem    REG    8,3    22536 141851 /lib64/libdl-2.12.so
bash    5990 root  mem    REG    8,3  1926480 155325 /lib64/libc-2.12.so
bash    5990 root  mem    REG    8,3   134792 151195 /lib64/libtinfo.so.5.7
bash    5990 root  mem    REG    8,3    65928 132072 /lib64/libnss_files-2.12.so
bash    5990 root    0u   CHR  136,0      0t0      3 /dev/pts/0
bash    5990 root    1u   CHR  136,0      0t0      3 /dev/pts/0
bash    5990 root    2u   CHR  136,0      0t0      3 /dev/pts/0
bash    5990 root  255u   CHR  136,0      0t0      3 /dev/pts/0

 

方法二:使用grep重定向

    lsof | grep bash

 

方法三:使用-p选项

[root@oldboy share]# ps aux|grep bash
root 5979 0.0 0.1 11472 1540 tty1 Ss+ 14:34 0:00 -bash
root 5990 0.0 0.1 11476 1580 pts/0 Ss 14:35 0:00 -bash
root 6744 0.0 0.0 6444 688 pts/0 S+ 15:46 0:00 grep --color=auto bash

 

[root@oldboy share]# lsof -p 5990
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 5990 root cwd DIR 8,3 4096 129846 /usr/local/share
bash 5990 root rtd DIR 8,3 4096 2 /
bash 5990 root txt REG 8,3 941720 134686 /bin/bash
bash 5990 root mem REG 8,3 157072 155324 /lib64/ld-2.12.so
bash 5990 root mem REG 8,3 22536 141851 /lib64/libdl-2.12.so
bash 5990 root mem REG 8,3 1926480 155325 /lib64/libc-2.12.so
bash 5990 root mem REG 8,3 134792 151195 /lib64/libtinfo.so.5.7
bash 5990 root mem REG 8,3 65928 132072 /lib64/libnss_files-2.12.so
bash 5990 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 5990 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 5990 root 2u CHR 136,0 0t0 3 /dev/pts/0
bash 5990 root 255u CHR 136,0 0t0 3 /dev/pts/0

 

7. 列出所有网络连接,或指定条件的进程

[root@oldboy share]# lsof -i
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1261  root    3u  IPv4   9347      0t0  TCP *:ssh (LISTEN)
sshd     1261  root    4u  IPv6   9349      0t0  TCP *:ssh (LISTEN)
mysqld   1400 mysql   10u  IPv4   9807      0t0  TCP *:mysql (LISTEN)
dhclient 5614  root    6u  IPv4  31819      0t0  UDP *:bootpc 
sshd     5986  root    3r  IPv4  32808      0t0  TCP 192.168.0.109:ssh->192.168.0.102:53902 (ESTABLISHED)

列出使用指定网络条件的进程:

[root@oldboy share]# lsof -i 4
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1261  root    3u  IPv4   9347      0t0  TCP *:ssh (LISTEN)
mysqld   1400 mysql   10u  IPv4   9807      0t0  TCP *:mysql (LISTEN)
dhclient 5614  root    6u  IPv4  31819      0t0  UDP *:bootpc 
sshd     5986  root    3r  IPv4  32808      0t0  TCP 192.168.0.109:ssh->192.168.0.102:53902 (ESTABLISHED)

 

8. 列出指定目录下使用NFS文件系统的所有文件

lsof -n /home/zoe 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!