每天一條神級Linux命令:升職加薪第一步
lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開文件的工具,它可以列出某個(gè)進(jìn)程打開的文件,或某個(gè)用戶打開的文件,甚至是系統(tǒng)上打開的所有文件。
lsof命令提供了非常全面的文件檢視功能,它既可以查看普通文件,也可以查看目錄、網(wǎng)絡(luò)連接、管道等,大大方便了日常管理和診斷工作。
一、lsof命令的起源
lsof命令最初是在UNIX System V環(huán)境下由Purdue大學(xué)團(tuán)隊(duì)開發(fā),后來Sun將其移植到Solaris上,成為系統(tǒng)內(nèi)建工具。
目前所有主流Linux發(fā)行版包括Red Hat、Debian等都內(nèi)置了lsof命令。Apple也在其macOS系統(tǒng)中集成了lsof。
lsof隨著時(shí)間成長為一個(gè)功能強(qiáng)大且不可或缺的日常管理工具。
二、lsof命令的功能作用
lsof命令的主要用途有:
1、查看進(jìn)程打開的文件,可用于查看程序訪問情況。
2、查看網(wǎng)絡(luò)連接信息,如打開的端口。
3、快速查看目錄下被打開的文件。
4、與其他命令組合定位程序問題。
5、查看用戶打開的文件信息。
6、查看偽設(shè)備、管道等打開的文件情況。
所以lsof是管理員排查問題的“瑞士軍刀”。
三、lsof命令的應(yīng)用場景
lsof適用于許多場景:
1、查看進(jìn)程打開的端口,確認(rèn)網(wǎng)絡(luò)程序運(yùn)行情況。
2、查看目錄被占用情況,快速定位故障。
3、查找打開特定文件的進(jìn)程,分析程序訪問文件情況。
4、與strace合用追蹤程序訪問系統(tǒng)調(diào)用。
5、查找大量打開文件的程序,分析資源占用情況。
6、查看被刪除文件是否還在被進(jìn)程持有。
四、lsof命令語法格式
lsof基本語法格式為:
lsof [選項(xiàng)] [文件名或目錄名]
常用選項(xiàng)包括:
-a :邏輯與列出多項(xiàng)
lsof -a -u user1 -c nginx
-c :列出指定命令的文件
lsof -c nginx
-p :列出指定pid的文件
lsof -p 1234
-u :列出指定用戶名的文件
lsof -u user1
五、lsof各項(xiàng)參數(shù)使用詳解
-a:或操作,顯示多個(gè)選項(xiàng)的結(jié)果
lsof -a -u user1 -i :80
-c:查看執(zhí)行指定命令的進(jìn)程所打開的文件
lsof -c nginx
-d:查看某個(gè)目錄被進(jìn)程占用情況
lsof -d /home/user1
-i:查看打開的網(wǎng)絡(luò)連接
lsof -i :80
+d、+D:遞歸查看目錄內(nèi)容
lsof +D /usr/bin
-p:查看指定pid進(jìn)程打開的文件
lsof -p 1234
-t:僅顯示pid號
lsof -t -c nginx
-u:查看某用戶打開的文件信息
lsof -u user1
六、lsof命令使用示例
1、查看80端口的網(wǎng)絡(luò)連接
lsof -i :80
2、查看nginx進(jìn)程打開的文件
lsof -c nginx
3、查看目錄被打開情況
lsof -d /home
4、查看/usr目錄被占用文件
lsof +D /usr
5、查看指定進(jìn)程及用戶打開的文件
lsof -p 1234 -u root
七、lsof命令技巧總結(jié)
1、結(jié)合grep或者awk可以進(jìn)行過濾和處理
lsof -i | grep nginx
2、設(shè)置alias,創(chuàng)建快捷方式
alias lopen='lsof -c'
3、查看文件鏈接數(shù),定位被刪除文件
lsof -p 1234 | grep deleted
4、統(tǒng)計(jì)不同用戶或程序打開的文件數(shù)
lsof -u user1 | wc -l
5、與strace結(jié)合定位程序問題
strace -p 1234 & lsof -p 1234
八、lsof命令常見問題解析
1、lsof默認(rèn)只能查看當(dāng)前用戶打開的文件,要查看其他用戶打開的文件需要root權(quán)限。
2、lsof顯示的用戶名如果是數(shù)字,說明它顯示的是用戶的uid而不是用戶名。可以通過id命令查uid和用戶名的對應(yīng)。
3、某些情況下lsof統(tǒng)計(jì)的打開文件數(shù)太多,可以用-n參數(shù)限制顯示的結(jié)果數(shù)。
4、lsof查看文件或目錄時(shí)如果找不到,很可能是提供的路徑不正確,應(yīng)檢查路徑是否寫正確。