<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux 命令神器:lsof

          共 6204字,需瀏覽 13分鐘

           ·

          2021-12-23 22:27


          來自:Linux迷

          lsof是系統(tǒng)管理/安全的管理工具。將這個工具稱之為lsof真實名副其實,因為它是指“列出打開文件(lists openfiles)”。而有一點要切記,在Unix中一切(包括網(wǎng)絡(luò)套接口)都是文件。

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

          1.  usage:  [-?abhlnNoOPRstUvV]  [+|-c c]  [+|-d s]  [+D D]  [+|-f[cgG]]
          2. [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+|-M] [-o [o]]
          3. [-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]

          正如你所見,lsof有著實在是令人驚訝的選項數(shù)量。你可以使用它來獲得你系統(tǒng)上設(shè)備的信息,你能通過它了解到指定的用戶在指定的地點正在碰什么東西,或者甚至是一個進程正在使用什么文件或網(wǎng)絡(luò)連接。

          對于我,lsof替代了netstat和ps的全部工作。它可以帶來那些工具所能帶來的一切,而且要比那些工具多得多。那么,讓我們來看看它的一些基本能力吧:

          關(guān)鍵選項

          理解一些關(guān)于lsof如何工作的關(guān)鍵性東西是很重要的。最重要的是,當(dāng)你給它傳遞選項時,默認行為是對結(jié)果進行“或”運算。因此,如果你正是用-i來拉出一個端口列表,同時又用-p來拉出一個進程列表,那么默認情況下你會獲得兩者的結(jié)果。

          下面的一些其它東西需要牢記:

          • 默認 : 沒有選項,lsof列出活躍進程的所有打開文件

          • 組合 : 可以將選項組合到一起,如-abc,但要當(dāng)心哪些選項需要參數(shù)

            -a : 結(jié)果進行“與”運算(而不是“或”)-l : 在輸出顯示用戶ID而不是用戶名-h : 獲得幫助-t : 僅獲取進程ID-U : 獲取UNIX套接口地址-F : 格式化輸出結(jié)果,用于其它命令??梢酝ㄟ^多種方式格式化,如-F pcfn(用于進程id、命令名、文件描述符、文件名,并以空終止)

          獲取網(wǎng)絡(luò)信息

          正如我所說的,我主要將lsof用于獲取關(guān)于系統(tǒng)怎么和網(wǎng)絡(luò)交互的信息。這里提供了關(guān)于此信息的一些主題:

          使用-i顯示所有連接

          有些人喜歡用netstat來獲取網(wǎng)絡(luò)連接,但是我更喜歡使用lsof來進行此項工作。結(jié)果以對我來說很直觀的方式呈現(xiàn),我僅僅只需改變我的語法,就可以通過同樣的命令來獲取更多信息。

          語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

          1.  #  lsof  -i

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

          使用-i 6僅獲取IPv6流量

          1.  #  lsof  -i 6

          僅顯示TCP連接(同理可獲得UDP連接)

          你也可以通過在-i后提供對應(yīng)的協(xié)議來僅僅顯示TCP或者UDP連接信息。

          1.  #  lsof  -iTCP

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

          使用-i:port來顯示與指定端口相關(guān)的網(wǎng)絡(luò)信息

          或者,你也可以通過端口搜索,這對于要找出什么阻止了另外一個應(yīng)用綁定到指定端口實在是太棒了。

          1.  #  lsof  -i :22

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

          使用@host來顯示指定到指定主機的連接

          這對于你在檢查是否開放連接到網(wǎng)絡(luò)中或互聯(lián)網(wǎng)上某個指定主機的連接時十分有用。


          1. # lsof [email protected]

          3. sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)

          使用@host:port顯示基于主機與端口的連接

          你也可以組合主機與端口的顯示信息。


          1. # lsof [email protected]:22

          3. sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)

          找出監(jiān)聽端口

          找出正等候連接的端口。

          1.  #  lsof  -i -sTCP:LISTEN

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

          1.  #  lsof  -i |  grep  -i LISTEN

          3. iTunes 400 daniel 16u IPv4 0x4575228 0t0 TCP *:daap (LISTEN)

          找出已建立的連接

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

          1.  #  lsof  -i -sTCP:ESTABLISHED

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

          1.  #  lsof  -i |  grep  -i ESTABLISHED

          3. firefox-b 169 daniel 49u IPv4 0t0 TCP 1.2.3.3:1863->1.2.3.4:http (ESTABLISHED)

          用戶信息

          你也可以獲取各種用戶的信息,以及它們在系統(tǒng)上正干著的事情,包括它們的網(wǎng)絡(luò)活動、對文件的操作等。

          使用-u顯示指定用戶打開了什么


          1. # lsof -u daniel

          3. -- snipped --
          4. Dock 155 daniel txt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylib
          5. Dock 155 daniel txt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylib
          6. Dock 155 daniel txt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylib
          7. Dock 155 daniel txt REG 14,2 132008 823505 /usr/lib/libgcc_s.1.dylib
          8. Dock 155 daniel txt REG 14,2 212160 823214 /usr/lib/libauto.dylib
          9. -- snipped --

          使用-u user來顯示除指定用戶以外的其它所有用戶所做的事情


          1. # lsof -u ^daniel

          3. -- snipped --
          4. Dock 155 jim txt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylib
          5. Dock 155 jim txt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylib
          6. Dock 155 jim txt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylib
          7. Dock 155 jim txt REG 14,2 132008 823505 /usr/lib/libgcc_s.1.dylib
          8. Dock 155 jim txt REG 14,2 212160 823214 /usr/lib/libauto.dylib
          9. -- snipped --

          殺死指定用戶所做的一切事情

          可以消滅指定用戶運行的所有東西,這真不錯。

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

          命令和進程

          可以查看指定程序或進程由什么啟動,這通常會很有用,而你可以使用lsof通過名稱或進程ID過濾來完成這個任務(wù)。下面列出了一些選項:

          使用-c查看指定的命令正在使用的文件和網(wǎng)絡(luò)連接

          1.  #  lsof  -c syslog-ng

          3. COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
          4. syslog-ng 7547 root cwd DIR 3,3 4096 2 /
          5. syslog-ng 7547 root rtd DIR 3,3 4096 2 /
          6. syslog-ng 7547 root txt REG 3,3 113524 1064970 /usr/sbin/syslog-ng
          7. -- snipped --

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

          1.  #  lsof  -p 10075

          3. -- snipped --
          4. sshd 10068 root mem REG 3,3 34808 850407 /lib/libnss_files-2.4.so
          5. sshd 10068 root mem REG 3,3 34924 850409 /lib/libnss_nis-2.4.so
          6. sshd 10068 root mem REG 3,3 26596 850405 /lib/libnss_compat-2.4.so
          7. sshd 10068 root mem REG 3,3 200152 509940 /usr/lib/libssl.so.0.9.7
          8. sshd 10068 root mem REG 3,3 46216 510014 /usr/lib/liblber-2.3
          9. sshd 10068 root mem REG 3,3 59868 850413 /lib/libresolv-2.4.so
          10. sshd 10068 root mem REG 3,3 1197180 850396 /lib/libc-2.4.so
          11. sshd 10068 root mem REG 3,3 22168 850398 /lib/libcrypt-2.4.so
          12. sshd 10068 root mem REG 3,3 72784 850404 /lib/libnsl-2.4.so
          13. sshd 10068 root mem REG 3,3 70632 850417 /lib/libz.so.1.2.3
          14. sshd 10068 root mem REG 3,3 9992 850416 /lib/libutil-2.4.so
          15. -- snipped --

          -t選項只返回PID

          1.  #  lsof  -t -c Mail
          3. 350

          文件和目錄

          通過查看指定文件或目錄,你可以看到系統(tǒng)上所有正與其交互的資源——包括用戶、進程等。

          顯示與指定目錄交互的所有一切


          1. # lsof /var/log/messages/

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

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

          1.  #  lsof  /home/daniel/firewall_whitelist.txt

          高級用法

          與tcpdump類似,當(dāng)你開始組合查詢時,它就顯示了它強大的功能。

          顯示daniel連接到1.1.1.1所做的一切

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

          同時使用-t和-c選項以給進程發(fā)送 HUP 信號

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

          lsof +L1顯示所有打開的鏈接數(shù)小于1的文件

          這通常(當(dāng)不總是)表示某個攻擊者正嘗試通過刪除文件入口來隱藏文件內(nèi)容。

          1.  #  lsof  +L1
          3. (hopefully nothing)

          顯示某個端口范圍的打開的連接

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

          結(jié)尾

          本入門教程只是管窺了lsof功能的一斑,要查看完整參考,運行man lsof命令或查看在線版本。

          我總結(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 -p 12 看進程號為12的進程打開了哪些文件lsof +|-r [t] 控制lsof不斷重復(fù)執(zhí)行,缺省是15s刷新-r,lsof會永遠不斷的執(zhí)行,直到收到中斷信號+r,lsof會一直執(zhí)行,直到?jīng)]有檔案被顯示





          瀏覽 90
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  极品在线视频 | 日本激情视频网站免费 | 天天干天天射天天射 | 蜜桃成人无码 | 77777亚洲和欧洲 |