lsof命令简介

lsof 简介

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

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 输出各列信息的意义以下:mysql

  • 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目录及目录下的文件,不包括子目录linux

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

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

$ 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选项,列出指定用户打开的文件bash

$ 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 选项,能够列出网络链接状况。语法格式以下:ssh

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. 查看指定IPui

-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
相关文章
相关标签/搜索