濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Linux系統(tǒng)下強(qiáng)大的lsof命令使用寶典

Linux系統(tǒng)下強(qiáng)大的lsof命令使用寶典

熱門(mén)標(biāo)簽:小語(yǔ)股票電銷(xiāo)機(jī)器人 萊蕪移動(dòng)外呼系統(tǒng) 申請(qǐng)400電話流程好嗎 柯城手機(jī)地圖如何做地圖標(biāo)注 金華呼叫中心外呼系統(tǒng)廠家 軟件電話機(jī)器人 高德地圖標(biāo)注在電腦上 杭州電銷(xiāo)機(jī)器人有效果嗎 襄陽(yáng)地圖標(biāo)注店

lsof命令簡(jiǎn)介:
lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開(kāi)文件的工具。在linux環(huán)境下,任何事物都以文件的形式存在,通過(guò)文件不僅僅可以訪問(wèn)常規(guī)數(shù)據(jù),還可以訪問(wèn)網(wǎng)絡(luò)連接和硬件。所以,lsof的功能很強(qiáng)大。一般root用戶(hù)才能執(zhí)行l(wèi)sof命令,普通用戶(hù)可以看見(jiàn)/usr/sbin/lsof命令,但是普通用戶(hù)執(zhí)行會(huì)顯示“permission denied”。因此通過(guò)lsof工具能夠查看這個(gè)列表對(duì)系統(tǒng)監(jiān)測(cè)以及排錯(cuò)將是很有幫助的。

有趣的是,lsof也是有著最多開(kāi)關(guān)的Linux/Unix命令之一。它有那么多的開(kāi)關(guān),它有許多選項(xiàng)支持使用-和+前綴。

usage: [-?abhlnNoOPRstUvV] [+|-c c] [+|-d s] [+D D] [+|-f[cgG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+|-M] [-o [o]]
 [-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
正如你所見(jiàn),lsof有著實(shí)在是令人驚訝的選項(xiàng)數(shù)量。你可以使用它來(lái)獲得你系統(tǒng)上設(shè)備的信息,你能通過(guò)它了解到指定的用戶(hù)在指定的地點(diǎn)正在碰什么東西,或者甚至是一個(gè)進(jìn)程正在使用什么文件或網(wǎng)絡(luò)連接。
對(duì)于我,lsof替代了netstat和ps的全部工作。它可以帶來(lái)那些工具所能帶來(lái)的一切,而且要比那些工具多得多。那么,讓我們來(lái)看看它的一些基本能力吧:
 
在終端下輸入lsof即可顯示系統(tǒng)打開(kāi)的文件,因?yàn)?lsof 需要訪問(wèn)核心內(nèi)存和各種文件,所以必須以 root 用戶(hù)的身份運(yùn)行它才能夠充分地發(fā)揮其功能。

每行顯示一個(gè)打開(kāi)的文件,若不指定條件默認(rèn)將顯示所有進(jìn)程打開(kāi)的所有文件。lsof輸出各列信息的意義如下:
COMMAND:進(jìn)程的名稱(chēng)
PID:進(jìn)程標(biāo)識(shí)符
USER:進(jìn)程所有者
FD:文件描述符,應(yīng)用程序通過(guò)文件描述符識(shí)別該文件。如cwd、txt等
TYPE:文件類(lèi)型,如DIR、REG等
DEVICE:指定磁盤(pán)的名稱(chēng)
SIZE:文件的大小
NODE:索引節(jié)點(diǎn)(文件在磁盤(pán)上的標(biāo)識(shí))
NAME:打開(kāi)文件的確切名稱(chēng)
 
lsof指令的用法如下:
lsof abc.txt 顯示開(kāi)啟文件abc.txt的進(jìn)程
lsof 目錄名 查找誰(shuí)在使用文件目錄系統(tǒng)

關(guān)鍵選項(xiàng)
理解一些關(guān)于lsof如何工作的關(guān)鍵性東西是很重要的。最重要的是,當(dāng)你給它傳遞選項(xiàng)時(shí),默認(rèn)行為是對(duì)結(jié)果進(jìn)行“或”運(yùn)算。因此,如果你正是用-i來(lái)拉出一個(gè)端口列表,同時(shí)又用-p來(lái)拉出一個(gè)進(jìn)程列表,那么默認(rèn)情況下你會(huì)獲得兩者的結(jié)果。
下面的一些其它東西需要牢記:
默認(rèn) : 沒(méi)有選項(xiàng),lsof列出活躍進(jìn)程的所有打開(kāi)文件
組合 : 可以將選項(xiàng)組合到一起,如-abc,但要當(dāng)心哪些選項(xiàng)需要參數(shù)
-a : 結(jié)果進(jìn)行“與”運(yùn)算(而不是“或”)
-l : 在輸出顯示用戶(hù)ID而不是用戶(hù)名
-h : 獲得幫助
-t : 僅獲取進(jìn)程ID
-U : 獲取UNIX套接口地址
-F : 格式化輸出結(jié)果,用于其它命令??梢酝ㄟ^(guò)多種方式格式化,如-F pcfn(用于進(jìn)程id、命令名、文件描述符、文件名,并以空終止)


獲取網(wǎng)絡(luò)信息
正如我所說(shuō)的,我主要將lsof用于獲取關(guān)于系統(tǒng)怎么和網(wǎng)絡(luò)交互的信息。這里提供了關(guān)于此信息的一些主題:
使用-i顯示所有連接
有些人喜歡用netstat來(lái)獲取網(wǎng)絡(luò)連接,但是我更喜歡使用lsof來(lái)進(jìn)行此項(xiàng)工作。結(jié)果以對(duì)我來(lái)說(shuō)很直觀的方式呈現(xiàn),我僅僅只需改變我的語(yǔ)法,就可以通過(guò)同樣的命令來(lái)獲取更多信息。

復(fù)制代碼
代碼如下:

# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
dhcpcd 6061 root 4u IPv4 4510 UDP *:bootpc
sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

使用-i 6僅獲取IPv6流量

復(fù)制代碼
代碼如下:

# lsof -i 6

僅顯示TCP連接(同理可獲得UDP連接)
你也可以通過(guò)在-i后提供對(duì)應(yīng)的協(xié)議來(lái)僅僅顯示TCP或者UDP連接信息。

復(fù)制代碼
代碼如下:

# lsof -iTCP
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

使用-i:port來(lái)顯示與指定端口相關(guān)的網(wǎng)絡(luò)信息
或者,你也可以通過(guò)端口搜索,這對(duì)于要找出什么阻止了另外一個(gè)應(yīng)用綁定到指定端口實(shí)在是太棒了。

復(fù)制代碼
代碼如下:

# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

使用@host來(lái)顯示指定到指定主機(jī)的連接
這對(duì)于你在檢查是否開(kāi)放連接到網(wǎng)絡(luò)中或互聯(lián)網(wǎng)上某個(gè)指定主機(jī)的連接時(shí)十分有用。

復(fù)制代碼
代碼如下:

# lsof -i@172.16.12.5
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)

使用@host:port顯示基于主機(jī)與端口的連接
你也可以組合主機(jī)與端口的顯示信息。

復(fù)制代碼
代碼如下:

# lsof -i@172.16.12.5:22
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)

找出監(jiān)聽(tīng)端口
找出正等候連接的端口。

復(fù)制代碼
代碼如下:

# lsof -i -sTCP:LISTEN

你也可以grep “LISTEN”來(lái)完成該任務(wù)。

復(fù)制代碼
代碼如下:

# lsof -i | grep -i LISTEN
iTunes 400 daniel 16u IPv4 0x4575228 0t0 TCP *:daap (LISTEN)

找出已建立的連接
你也可以顯示任何已經(jīng)連接的連接。

復(fù)制代碼
代碼如下:

# lsof -i -sTCP:ESTABLISHED

你也可以通過(guò)grep搜索“ESTABLISHED”來(lái)完成該任務(wù)。

復(fù)制代碼
代碼如下:

# lsof -i | grep -i ESTABLISHED
firefox-b 169 daniel 49u IPv4 0t0 TCP 1.2.3.3:1863->1.2.3.4:http (ESTABLISHED)


用戶(hù)信息
你也可以獲取各種用戶(hù)的信息,以及它們?cè)谙到y(tǒng)上正干著的事情,包括它們的網(wǎng)絡(luò)活動(dòng)、對(duì)文件的操作等。
使用-u顯示指定用戶(hù)打開(kāi)了什么

復(fù)制代碼
代碼如下:

# lsof -u daniel
-- snipped --
Dock 155 daniel txt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylib
Dock 155 daniel txt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylib
Dock 155 daniel txt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 daniel txt REG 14,2 132008 823505 /usr/lib/libgcc_s.1.dylib
Dock 155 daniel txt REG 14,2 212160 823214 /usr/lib/libauto.dylib
-- snipped --

使用-u user來(lái)顯示除指定用戶(hù)以外的其它所有用戶(hù)所做的事情

復(fù)制代碼
代碼如下:

# lsof -u ^daniel
-- snipped --
Dock 155 jim txt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylib
Dock 155 jim txt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylib
Dock 155 jim txt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 jim txt REG 14,2 132008 823505 /usr/lib/libgcc_s.1.dylib
Dock 155 jim txt REG 14,2 212160 823214 /usr/lib/libauto.dylib
-- snipped --

殺死指定用戶(hù)所做的一切事情
可以消滅指定用戶(hù)運(yùn)行的所有東西,這真不錯(cuò)。

復(fù)制代碼
代碼如下:

# kill -9 `lsof -t -u daniel`


命令和進(jìn)程
可以查看指定程序或進(jìn)程由什么啟動(dòng),這通常會(huì)很有用,而你可以使用lsof通過(guò)名稱(chēng)或進(jìn)程ID過(guò)濾來(lái)完成這個(gè)任務(wù)。下面列出了一些選項(xiàng):
使用-c查看指定的命令正在使用的文件和網(wǎng)絡(luò)連接

復(fù)制代碼
代碼如下:

# lsof -c syslog-ng
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
syslog-ng 7547 root cwd DIR 3,3 4096 2 /
syslog-ng 7547 root rtd DIR 3,3 4096 2 /
syslog-ng 7547 root txt REG 3,3 113524 1064970 /usr/sbin/syslog-ng
-- snipped --

使用-p查看指定進(jìn)程ID已打開(kāi)的內(nèi)容

復(fù)制代碼
代碼如下:

# lsof -p 10075
-- snipped --
sshd 10068 root mem REG 3,3 34808 850407 /lib/libnss_files-2.4.so
sshd 10068 root mem REG 3,3 34924 850409 /lib/libnss_nis-2.4.so
sshd 10068 root mem REG 3,3 26596 850405 /lib/libnss_compat-2.4.so
sshd 10068 root mem REG 3,3 200152 509940 /usr/lib/libssl.so.0.9.7
sshd 10068 root mem REG 3,3 46216 510014 /usr/lib/liblber-2.3
sshd 10068 root mem REG 3,3 59868 850413 /lib/libresolv-2.4.so
sshd 10068 root mem REG 3,3 1197180 850396 /lib/libc-2.4.so
sshd 10068 root mem REG 3,3 22168 850398 /lib/libcrypt-2.4.so
sshd 10068 root mem REG 3,3 72784 850404 /lib/libnsl-2.4.so
sshd 10068 root mem REG 3,3 70632 850417 /lib/libz.so.1.2.3
sshd 10068 root mem REG 3,3 9992 850416 /lib/libutil-2.4.so
-- snipped --

-t選項(xiàng)只返回PID

復(fù)制代碼
代碼如下:

# lsof -t -c Mail
350


文件和目錄
通過(guò)查看指定文件或目錄,你可以看到系統(tǒng)上所有正與其交互的資源——包括用戶(hù)、進(jìn)程等。
顯示與指定目錄交互的所有一切

復(fù)制代碼
代碼如下:

# lsof /var/log/messages/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
syslog-ng 7547 root 4w REG 3,3 217309 834024 /var/log/messages

顯示與指定文件交互的所有一切

復(fù)制代碼
代碼如下:

# lsof /home/daniel/firewall_whitelist.txt

高級(jí)用法
與tcpdump類(lèi)似,當(dāng)你開(kāi)始組合查詢(xún)時(shí),它就顯示了它強(qiáng)大的功能。
顯示daniel連接到1.1.1.1所做的一切

復(fù)制代碼
代碼如下:

# lsof -u daniel -i @1.1.1.1
bkdr 1893 daniel 3u IPv6 3456 TCP 10.10.1.10:1234->1.1.1.1:31337 (ESTABLISHED)

同時(shí)使用-t和-c選項(xiàng)以給進(jìn)程發(fā)送 HUP 信號(hào)

復(fù)制代碼
代碼如下:

# kill -HUP `lsof -t -c sshd`

lsof +L1顯示所有打開(kāi)的鏈接數(shù)小于1的文件
這通常(當(dāng)不總是)表示某個(gè)攻擊者正嘗試通過(guò)刪除文件入口來(lái)隱藏文件內(nèi)容。

復(fù)制代碼
代碼如下:

# lsof +L1

(hopefully nothing)
顯示某個(gè)端口范圍的打開(kāi)的連接

復(fù)制代碼
代碼如下:

# lsof -i @fw.google.com:2150=2180


結(jié)尾
本入門(mén)教程只是管窺了lsof功能的一斑,要查看完整參考,運(yùn)行man lsof命令或查看在線版本。希望本文對(duì)你有所助益,也隨時(shí)歡迎你的評(píng)論和指正。

標(biāo)簽:欽州 威海 鶴壁 黔南 景德鎮(zhèn) 海北 天門(mén) 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux系統(tǒng)下強(qiáng)大的lsof命令使用寶典》,本文關(guān)鍵詞  Linux,系統(tǒng),下強(qiáng),大的,lsof,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux系統(tǒng)下強(qiáng)大的lsof命令使用寶典》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Linux系統(tǒng)下強(qiáng)大的lsof命令使用寶典的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    江阴市| 临夏县| 藁城市| 大冶市| 绥阳县| 成武县| 武穴市| 乐清市| 鸡泽县| 健康| 镇康县| 阳西县| 元氏县| 嵩明县| 农安县| 桐梓县| 清水河县| 邹平县| 调兵山市| 资阳市| 永福县| 申扎县| 尉氏县| 成都市| 自贡市| 榕江县| 临潭县| 高碑店市| 车致| 中山市| 乐清市| 辛集市| 双流县| 长春市| 六盘水市| 罗山县| 涿鹿县| 宾川县| 榆社县| 全椒县| 修水县|