s11.1 lsof:查看進程打開的文件


功能說明

lsof 全名為list open files,也就是列舉系統中已經被打開的文件,通過lsof命令,就可以根據文件找到對應的進程信息,也可以根據進程信息找到進程打開的文件。

【語法格式】

lsof    [option]
lsof    [選項]
參數選項         解釋說明
-c<進程名>     顯示指定的進程名所打開的文件
-p<進程號>     顯示指定的進程號所打開的文件
-i            通過監聽指定的協議、端-和主機等信息,顯示符合條件的進程信息
-u            顯示指定用戶使用的文件
-U            顯示所有socket文件
 

范例11-1:顯示使用文件的進程。

[root@lewen ~]# lsof /var/log/messages
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
abrt-watc  8718 root    4r   REG  253,0   404668 522404 /var/log/messages
rsyslogd  10046 root    6w   REG  253,0   404668 522404 /var/log/messages
 
如果想知道某個特定的文件是由哪個進程在使用,就可以通過“lsof文件名”的方式
來得到。從上面的輸出可以得知,/var/log/messages文件是由rsyslogd進程在使用。
輸出中每列的含義具體如下。
-COMMAND:命令,進程的名稱。
-PID:進程號。
-USER:進程的所有者。
-FD:文件描述符,它又包含如下內容。
  0:表示標准輸出。
  1:表示標准輸入。
  2:表示標准錯誤。
  u:表示該文件被打開並處於讀取/寫人模式。
  r:表示該文件被打開並處於只讀模式。
  w:表示該文件被打開並處於寫人模式。
-TYPE:文件類型,REG(regular)為普通文件。
-DEVICE:指定磁盤的名稱。
-SIZE/OFF:文件的大小。
-NODE:索引節點。
-NAME:文件名稱。

范例11-2:顯示指定進程所打開的文件。

[root@lewen ~]# lsof -c rsyslog
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF   NODE NAME
rsyslogd 10046 root  cwd       DIR              253,0      224     64 /
rsyslogd 10046 root  rtd       DIR              253,0      224     64 /
rsyslogd 10046 root  txt       REG              253,0   664080 522402 /usr/sbin/rsyslogd
...

范例11-3:顯示指定進程號所打開的文件。

[root@lewen ~]# lsof -p 10046
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF   NODE NAME
rsyslogd 10046 root  cwd       DIR              253,0      224     64 /
rsyslogd 10046 root  rtd       DIR              253,0      224     64 /
rsyslogd 10046 root  txt       REG              253,0   664080 522402 /usr/sbin/rsyslogd
...

范例11-4:監聽指定的協議、端口和主機等信息,顯示符合條件的進程信息。

在講解范例之前,我們先來看看相應的語法格式:
lsof -i [46] [protocol][@8hostname][:service|port]
 
其中各項的含義如下。
  • 46:4代表IPv4,6代表IPv6。
  • protocol:傳輸協議,可以是TCP或UDP。
  • hostname:主機名稱或者IP地址。
  • service:進程的服務名,例如NFS、SSH和FTP等。
  • port:系統中與服務對應的端口號。例如HTTP服務默認對應的端口號為80,SS日服務默認對應的端口號為22。了解了語法格式之后,再來看看范例的解答。
[root@lewen ~]# lsof -i #<=查看所有進程。
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
master  10215 root   13u  IPv4  50008      0t0  TCP localhost:smtp (LISTEN)
master  10215 root   14u  IPv6  50009      0t0  TCP localhost:smtp (LISTEN)
sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)
 
 
[root@lewen ~]# lsof -i tcp # <=顯示所有tcp網培連接的進程信息
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
master  10215 root   13u  IPv4  50008      0t0  TCP localhost:smtp (LISTEN)
master  10215 root   14u  IPv6  50009      0t0  TCP localhost:smtp (LISTEN)
sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)
 
 
[root@lewen ~]# lsof -i :22 #<=顯示端口為22的進程,這條命今很常用
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)
 
 
[root@lewen ~]# lsof -i tcp:22 #<==星示同時滿足TCP和端口為22的進程。
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    10044 root    3u  IPv4  49337      0t0  TCP *:ssh (LISTEN)
sshd    10044 root    4u  IPv6  49346      0t0  TCP *:ssh (LISTEN)
sshd    10805 root    3u  IPv4  52326      0t0  TCP k8s-node1:ssh->10.0.0.1:10662 (ESTABLISHED)

范例11-5:顯示指定用戶使用的文件。

[lewen@k8s-node1 ~]$ lsof -u lewen
COMMAND   PID  USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash    11081 lewen  cwd    DIR  253,0        62 33997200 /home/lewen
bash    11081 lewen  rtd    DIR  253,0       224       64 /
bash    11081 lewen  txt    REG  253,0    964608 50333656 /usr/bin/bash
bash    11081 lewen  mem    REG  253,0     61624    34664 /usr/lib64/libnss_files-2.17.so
bash    11081 lewen  mem    REG  253,0 106075056 50334298 /usr/lib/locale/locale-archive
bash    11081 lewen  mem    REG  253,0   2151672    34646 /usr/lib64/libc-2.17.so
bash    11081 lewen  mem    REG  253,0     19288    34652 /usr/lib64/libdl-2.17.so

范例11-6:顯示所有socket文件。

[root@k8s-node1 ~]# lsof -U
COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
systemd       1    root   12u  unix 0xffff964f7656e800      0t0 25117 /run/systemd/private
systemd       1    root   22u  unix 0xffff964f7656fc00      0t0 25169 /run/lvm/lvmpolld.socket
systemd       1    root   23u  unix 0xffff9650714f8400      0t0  8992 /run/systemd/notify
systemd       1    root   24u  unix 0xffff9650714f8000      0t0  8994 /run/systemd/cgroups-agent

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM