lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開文件的工具。在linux環(huán)境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。所以如傳輸控制協(xié)議 (TCP) 和用戶數(shù)據(jù)報(bào)協(xié)議 (UDP) 套接字等,系統(tǒng)在后臺(tái)都為該應(yīng)用程序分配了一個(gè)文件描述符,無論這個(gè)文件的本質(zhì)如何,該文件描述符為應(yīng)用程序與基礎(chǔ)操作系統(tǒng)之間的交互提供了通用接口。因?yàn)閼?yīng)用程序打開文件的描述符列表提供了大量關(guān)于這個(gè)應(yīng)用程序本身的信息,因此通過lsof工具能夠查看這個(gè)列表對(duì)系統(tǒng)監(jiān)測(cè)以及排錯(cuò)將是很有幫助的。
最新版本的 CentOS Linux 上默認(rèn)可能沒有安裝
lsof工具,可通過執(zhí)行yum install lsof命令來安裝。
lsof [參數(shù)][文件]
用于查看你進(jìn)程開打的文件,打開文件的進(jìn)程,進(jìn)程打開的端口(TCP、UDP)。找回/恢復(fù)刪除的文件。是十分方便的系統(tǒng)監(jiān)視工具,因?yàn)?lsof 需要訪問核心內(nèi)存和各種文件,所以需要 root 用戶執(zhí)行。
lsof打開的文件可以是:
-a 列出打開文件存在的進(jìn)程-c<進(jìn)程名> 列出指定進(jìn)程所打開的文件-g 列出GID號(hào)進(jìn)程詳情-d<文件號(hào)> 列出占用該文件號(hào)的進(jìn)程+d<目錄> 列出目錄下被打開的文件+D<目錄> 遞歸列出目錄下被打開的文件-n<目錄> 列出使用NFS的文件-i<條件> 列出符合條件的進(jìn)程。(4、6、協(xié)議、:端口、 @ip )-p<進(jìn)程號(hào)> 列出指定進(jìn)程號(hào)所打開的文件-u 列出UID號(hào)進(jìn)程詳情-h 顯示幫助信息-v 顯示版本信息命令:
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 67349141 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20040 33619254 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 256960 33759239 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90664 33619237 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 33619240 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 33619292 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19888 33619306 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem REG 253,0 19344 33826633 /usr/lib64/libdl-2.17.so
systemd 1 root mem REG 253,0 398264 33828533 /usr/lib64/libpcre.so.1.2.0
systemd 1 root mem REG 253,0 2116736 33826627 /usr/lib64/libc-2.17.so
systemd 1 root mem REG 253,0 143352 33826653 /usr/lib64/libpthread-2.17.so
systemd 1 root mem REG 253,0 88720 33554508 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd 1 root mem REG 253,0 43928 33828481 /usr/lib64/librt-2.17.so
systemd 1 root mem REG 253,0 265008 33772642 /usr/lib64/libmount.so.1.1.0
systemd 1 root mem REG 253,0 91792 33640184 /usr/lib64/libkmod.so.2.2.10
systemd 1 root mem REG 253,0 122936 33619295 /usr/lib64/libaudit.so.1.0.0
systemd 1 root mem REG 253,0 61672 33771917 /usr/lib64/libpam.so.0.83.1
systemd 1 root mem REG 253,0 20024 33619311 /usr/lib64/libcap.so.2.22
systemd 1 root mem REG 253,0 155744 33619233 /usr/lib64/libselinux.so.1
systemd 1 root mem REG 253,0 155064 33826620 /usr/lib64/ld-2.17.so
systemd 1 root mem REG 253,0 44725 67521139 /etc/selinux/targeted/contexts/files/file_contexts.homedirs.bin
systemd 1 root mem REG 253,0 1393914 67521137 /etc/selinux/targeted/contexts/files/file_contexts.bin
systemd 1 root 0u CHR 1,3 0t0 5930 /dev/null
systemd 1 root 1u CHR 1,3 0t0 5930 /dev/null
systemd 1 root 2u CHR 1,3 0t0 5930 /dev/null
systemd 1 root 3u a_inode 0,9 0 5926 [timerfd]
systemd 1 root 4u a_inode 0,9 0 5926 [eventpoll]
... ... 大概有2000多行,此處省略。
lsof輸出各列信息的意義如下:
FD:文件描述符,應(yīng)用程序通過文件描述符識(shí)別該文件。如cwd、txt等。
/sbin/init 程序一般在標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤、標(biāo)準(zhǔn)輸入后還跟著文件狀態(tài)模式:r、w、u等
命令:
lsof /bin/bash
輸出:
[root@localhost yiibai]# lsof /bin/bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2240 root txt REG 253,0 960392 66362 /usr/bin/bash
bash 2261 root txt REG 253,0 960392 66362 /usr/bin/bash
bash 2278 yiibai txt REG 253,0 960392 66362 /usr/bin/bash
bash 2454 root txt REG 253,0 960392 66362 /usr/bin/bash
bash 2490 yiibai txt REG 253,0 960392 66362 /usr/bin/bash
bash 2706 root txt REG 253,0 960392 66362 /usr/bin/bash
[root@localhost yiibai]#
命令:
lsof /home/yiibai
輸出:
[root@localhost yiibai]# lsof /home/yiibai
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2278 yiibai cwd DIR 253,2 4096 68 /home/yiibai
python 2291 yiibai cwd DIR 253,2 4096 68 /home/yiibai
bash 2454 root cwd DIR 253,2 4096 68 /home/yiibai
bash 2490 yiibai cwd DIR 253,2 4096 68 /home/yiibai
bash 2706 root cwd DIR 253,2 4096 68 /home/yiibai
sftp-serv 2738 yiibai cwd DIR 253,2 4096 68 /home/yiibai
lsof 2766 root cwd DIR 253,2 4096 68 /home/yiibai
lsof 2767 root cwd DIR 253,2 4096 68 /home/yiibai
[root@localhost yiibai]#
說明:使用了+D,對(duì)應(yīng)目錄下的所有子目錄和文件都會(huì)被列出
命令:
lsof |grep '/home/yiibai'
輸出:
[root@localhost yiibai]# lsof |grep '/home/yiibai'
bash 2278 yiibai cwd DIR 253,2 4096 68 /home/yiibai
python 2291 yiibai cwd DIR 253,2 4096 68 /home/yiibai
python 2291 yiibai 1w REG 253,2 0 100 /home/yiibai/nohup.out
python 2291 yiibai 2w REG 253,2 0 100 /home/yiibai/nohup.out
bash 2454 root cwd DIR 253,2 4096 68 /home/yiibai
bash 2490 yiibai cwd DIR 253,2 4096 68 /home/yiibai
bash 2706 root cwd DIR 253,2 4096 68 /home/yiibai
sftp-serv 2738 yiibai cwd DIR 253,2 4096 68 /home/yiibai
lsof 2780 root cwd DIR 253,2 4096 68 /home/yiibai
grep 2781 root cwd DIR 253,2 4096 68 /home/yiibai
lsof 2782 root cwd DIR 253,2 4096 68 /home/yiibai
[root@localhost yiibai]#
命令:
lsof -u username
說明:
-u 選項(xiàng),u其實(shí)是user的縮寫命令:
lsof -c mysql
說明:
-c 選項(xiàng)將會(huì)列出所有以mysql這個(gè)進(jìn)程開頭的程序的文件,其實(shí)你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個(gè)字符了命令:
lsof -c mysql -c apache
命令:
lsof -u test -c mysql
說明:
用戶與進(jìn)程可相關(guān),也可以不相關(guān)
命令:
lsof -u ^root
說明:
^這個(gè)符號(hào)在用戶名之前,將會(huì)把是root用戶打開的進(jìn)程不讓顯示
命令:
lsof -p 1
命令:
lsof -p 1,2,3
命令:
lsof -p ^1
命令:
lsof -i
命令:
lsof -i tcp
命令:
lsof -i udp
命令:
lsof -i :8080
命令:
lsof -i udp:5500
或者:特定的tcp端口
命令:
lsof -i tcp:8081
命令:
lsof -a -u test -i
命令:
lsof -N
命令:
lsof -u
命令:
lsof -g 5555
命令:
lsof -d description(like 2)
例如:lsof -d txt
例如:lsof -d 1
例如:lsof -d 2
說明:
0表示標(biāo)準(zhǔn)輸入,1表示標(biāo)準(zhǔn)輸出,2表示標(biāo)準(zhǔn)錯(cuò)誤,從而可知:所以大多數(shù)應(yīng)用程序所打開的文件的 FD 都是從 3 開始
命令:
lsof -d 2-3
命令:
lsof -c sshd -a -d txt
輸出:
[root@localhost yiibai]# lsof -c sshd -a -d txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1107 root txt REG 253,0 819640 34027130 /usr/sbin/sshd
sshd 2257 root txt REG 253,0 819640 34027130 /usr/sbin/sshd
sshd 2733 root txt REG 253,0 819640 34027130 /usr/sbin/sshd
sshd 2737 yiibai txt REG 253,0 819640 34027130 /usr/sbin/sshd
[root@localhost yiibai]# lsof -c python -a -d bin
[root@localhost yiibai]# lsof -c python -a -d txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 2291 yiibai txt REG 253,0 7136 141693 /usr/bin/python2.7
命令:
lsof -i 4 -a -p 22
命令:
lsof -i @localhost:20,21,22,25,53,80 -r 3