lsof是系統(tǒng)管理/ 安全 的尤伯工具。將這個工具稱之為lsof真實名副其實,因為它是指“列出打開文件(lists openfiles)”。而有一點要切記,在Unix中一切(包括網(wǎng)絡(luò)套接口)都是文件。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計制作,服務(wù)好的網(wǎng)站設(shè)計公司,網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)負責(zé)任的成都網(wǎng)站制作公司!
有趣的是,lsof也是有著最多開關(guān)的Linux/Unix命令之一。它有那么多的開關(guān),它有許多選項支持使用-和+前綴。
正如你所見,lsof有著實在是令人驚訝的選項數(shù)量。你可以使用它來獲得你系統(tǒng)上設(shè)備的信息,你能通過它了解到指定的用戶在指定的地點正在碰什么東西,或者甚至是一個進程正在使用什么文件或網(wǎng)絡(luò)連接。
對于我,lsof替代了netstat和ps的全部工作。它可以帶來那些工具所能帶來的一切,而且要比那些工具多得多。那么,讓我們來看看它的一些基本能力吧:
理解一些關(guān)于lsof如何工作的關(guān)鍵性東西是很重要的。最重要的是,當(dāng)你給它傳遞選項時,默認行為是對結(jié)果進行“或”運算。因此,如果你正是用-i來拉出一個端口列表,同時又用-p來拉出一個進程列表,那么默認情況下你會獲得兩者的結(jié)果。
下面的一些其它東西需要牢記:
正如我所說的,我主要將lsof用于獲取關(guān)于系統(tǒng)怎么和網(wǎng)絡(luò)交互的信息。這里提供了關(guān)于此信息的一些主題:
有些人喜歡用netstat來獲取網(wǎng)絡(luò)連接,但是我更喜歡使用lsof來進行此項工作。結(jié)果以對我來說很直觀的方式呈現(xiàn),我僅僅只需改變我的語法,就可以通過同樣的命令來獲取更多信息。
語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
你也可以通過在-i后提供對應(yīng)的協(xié)議來僅僅顯示TCP或者UDP連接信息。
或者,你也可以通過端口搜索,這對于要找出什么阻止了另外一個應(yīng)用綁定到指定端口實在是太棒了。
這對于你在檢查是否開放連接到網(wǎng)絡(luò)中或互聯(lián)網(wǎng)上某個指定主機的連接時十分有用。
你也可以組合主機與端口的顯示信息。
找出正等候連接的端口。
你也可以grep “LISTEN”來完成該任務(wù)。
你也可以顯示任何已經(jīng)連接的連接。
你也可以通過grep搜索“ESTABLISHED”來完成該任務(wù)。
你也可以獲取各種用戶的信息,以及它們在系統(tǒng)上正干著的事情,包括它們的網(wǎng)絡(luò)活動、對文件的操作等。
可以消滅指定用戶運行的所有東西,這真不錯。
可以查看指定程序或進程由什么啟動,這通常會很有用,而你可以使用lsof通過名稱或進程ID過濾來完成這個任務(wù)。下面列出了一些選項:
通過查看指定文件或目錄,你可以看到系統(tǒng)上所有正與其交互的資源——包括用戶、進程等。
與 tcpdump 類似,當(dāng)你開始組合查詢時,它就顯示了它強大的功能。
這通常(當(dāng)不總是)表示某個攻擊者正嘗試通過刪除文件入口來隱藏文件內(nèi)容。
本入門教程只是管窺了lsof功能的一斑,要查看完整參考,運行man lsof命令或查看 在線版本 。希望本文對你有所助益,也隨時 歡迎你的評論和指正 。
本文由 Daniel Miessler撰寫,首次在他 博客 上貼出
一般root用戶才能執(zhí)行l(wèi)sof命令,普通用戶可以看見/usr/sbin/lsof命令,
但是普通用戶執(zhí)行會顯示“permission denied”
我總結(jié)一下lsof指令的用法:
lsof abc.txt 顯示開啟文件abc.txt的進程
lsof -i :22 知道22端口現(xiàn)在運行什么程序
lsof -c abc 顯示abc進程現(xiàn)在打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /usr/local/ 顯示目錄下被進程開啟的文件
lsof +D /usr/local/ 同上,但是會搜索目錄下的目錄,時間較長
lsof -d 4 顯示使用fd為4的進程
lsof -i 用以顯示符合條件的進程情況
語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 -- IPv4 or IPv6
protocol -- TCP or UDP
hostname -- Internet host name
hostaddr -- IPv4位置
service -- /etc/service中的 service name (可以不只一個)
port -- 端口號 (可以不只一個)
例子: TCP:25 - TCP and port 25
@1.2.3.4 - Internet IPv4 host address 1.2.3.4
tcp@ohaha.ks.edu.tw :ftp - TCP protocol hosthaha.ks.edu.tw service name:ftp
lsof -n 不將IP轉(zhuǎn)換為hostname,缺省是不加上-n參數(shù)
例子: lsof -i tcp@ohaha.ks.edu.tw :ftp -n
lsof -p 12 看進程號為12的進程打開了哪些文件
lsof +|-r [t] 控制lsof不斷重復(fù)執(zhí)行,缺省是15s刷新
-r,lsof會永遠不斷的執(zhí)行,直到收到中斷信號
+r,lsof會一直執(zhí)行,直到?jīng)]有檔案被顯示
例子:不斷查看目前ftp連接的情況:lsof -i tcp@ohaha.ks.edu.tw :ftp -r
lsof -s 列出打開文件的大小,如果沒有大小,則留下空白
lsof -u username 以UID,列出打開的文件
關(guān)注:
進程調(diào)試命令:truss、strace和ltrace
進程無法啟動,軟件運行速度突然變慢,程序的"SegmentFault"等等都是讓每個Unix系統(tǒng)用戶頭痛的問題,而這些問題都可以通過使用truss、strace和ltrace這三個常用的調(diào)試工具來快速診斷軟件的"疑難雜癥"。
一、常用命令:
1,lsof -i端口號
2,netstat -tunlp|grep 端口號
這兩個命令都可以查看端口被什么進程占用。
二、lsof -i 需要 root 用戶的權(quán)限來執(zhí)行,如下圖:
三、netstat命令
netstat -tunlp?用于顯示 tcp,udp 的端口和進程等相關(guān)情況。
netstat 查看端口占用語法格式:
netstat -tunlp | grep 端口號
擴展資料
一、更多 lsof 的命令擴展
1、lsof -i:8080:查看8080端口占用
2、lsof abc.txt:顯示開啟文件abc.txt的進程
3、lsof -c abc:顯示abc進程現(xiàn)在打開的文件
4、lsof -c -p 1234:列出進程號為1234的進程所打開的文件
5、lsof -g gid:顯示歸屬gid的進程情況
6、lsof +d /usr/local/:顯示目錄下被進程開啟的文件
7、lsof +D /usr/local/:同上,但是會搜索目錄下的目錄,時間較長
8、lsof -d 4:顯示使用fd為4的進程
9、lsof -i -U:顯示所有打開的端口和UNIX domain文件
二、更多netstat命令
1、netstat -ntlp ? //查看當(dāng)前所有tcp端口
2、netstat -ntulp | grep 80 ? //查看所有80端口使用情況
3、netstat -ntulp | grep 3306 ? //查看所有3306端口使用情況
三、關(guān)閉端口
1、在查到端口占用的進程后,如果你要殺掉對應(yīng)的進程可以使用 kill 命令:
kill -9 PID
2、如上實例,我們看到 8000 端口對應(yīng)的 PID 為 26993,使用以下命令殺死進程:
kill -9 26993
lsof全名list opened files,也就是列舉系統(tǒng)中已經(jīng)被打開的文件。我們都知道,linux環(huán)境中,任何事物都是文件,
設(shè)備是文件,目錄是文件,甚至sockets也是文件。所以,用好lsof命令,對日常的linux管理非常有幫助。
lsof是linux最常用的命令之一,通常的輸出格式為:
引用
常見包括如下幾個字段:更多的可見manual。
1、COMMAND
默認以9個字符長度顯示的命令名稱??墒褂?c參數(shù)指定顯示的寬度,若+c后跟的參數(shù)為零,則顯示命令的全名
2、PID:進程的ID號
3、PPID
父進程的IP號,默認不顯示,當(dāng)使用-R參數(shù)可打開。
4、PGID
進程組的ID編號,默認也不會顯示,當(dāng)使用-g參數(shù)時可打開。
5、USER
命令的執(zhí)行UID或系統(tǒng)中登陸的用戶名稱。默認顯示為用戶名,當(dāng)使用-l參數(shù)時,可顯示UID。
6、FD
是文件的File Descriptor number,或者如下的內(nèi)容:
(這里很難翻譯對應(yīng)的意思,保留英文)
引用
文件的File Descriptor number顯示模式有:
引用
7、TYPE
引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也會顯示為IPv6,而映射到IPv6的地址;
DIR 目錄
LINK 鏈接文件
詳情請看manual中更多的注釋。
8、DEVICE
使用character special、block special表示的設(shè)備號
9、SIZE
文件的大小,如果不能用大小表示的,會留空。使用-s參數(shù)控制。
10、NODE
本地文件的node碼,或者協(xié)議,如TCP等
11、NAME
掛載點和文件的全路徑(鏈接會被解析為實際路徑),或者連接雙方的地址和端口、狀態(tài)等
常用示例:
1.顯示開啟文件/home/oracle/10.2.0/db_1/bin/tnslsnr的進程
2.知道22端口現(xiàn)在運行什么程序
3.顯示init進程現(xiàn)在打開的文件
6.依照文件夾/home/oracle來搜尋,但不會打開子目錄,用來顯示目錄下被進程開啟的文件
顯示內(nèi)容太多了,不顯示了
lsof -n 不將IP轉(zhuǎn)換為hostname,缺省是不加上-n參數(shù)
關(guān)注:
進程調(diào)試命令:truss、strace和ltrace
進程無法啟動,軟件運行速度突然變慢,程序的"SegmentFault"等等都是讓每個Unix系統(tǒng)用戶頭痛的問題,而這些問題都可以通過使用truss、strace和ltrace這三個常用的調(diào)試工具來快速診斷軟件的"疑難雜癥"。