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
相關文章
相關標籤/搜索