命令[01]lsof用法總結

來源:互聯網
上載者:User

lsof全名list opened files,也就是列舉系統中已經被開啟的檔案。我們都知道,linux環境中,任何事物都是檔案,裝置是檔案,目錄是檔案,甚至sockets也是檔案。所以,用好lsof命令,對日常的linux管理非常有協助。以下的說明,大部分內容來自lsof的manual文檔。我所做的只是在中文翻譯的基礎上,進行簡單的分類說明,並列舉最常用的參數。

lsof –i :<連接埠號碼>
lsof –i協議類型@IP地址:連接埠號碼

lsof命令解析

選項 選項文法 說明
lsof -i
lsof -i[46][protocol][@hostname|hostaddr][:service|port]
46 --> IPv4或者IPv6             protocol --> TCP、UDP             hostname --> Internet host name             hostaddr --> IPv4地址             service --> /etc/service中的 service name (可以不只一個)             port --> 連接埠號碼 (可以不只一個)
查看指定的協議、主機、連接埠等網路資訊
     
     
     
     
     
lsof -n lsof -n 不將IP轉換為hostname,預設是不加上-n參數
lsof +c lsof +c <num>

num為0表示,顯示命令的全部名稱

num不為0表示,按該值截斷命令名稱
調整結果COMMAND列顯示命令名稱的輸出寬度,預設最大為9個字元。
     
     
     
     
     
     
     
     
     
     
     

 

 

 

lsof用在網路檢查方面的例子

例子:知道連接埠號碼,得到開啟該連接埠的進程

顯示誰開啟了原生某個連接埠(比如本機IP為:172.16.31.63,連接埠號碼為:32782)使用命令及結果如下:

 

root@motadou:~# lsof -i :32782COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEmyTest 409 root 30u IPv4 4075 TCP 172.16.31.63:32782->172.30.6.56:3306 (ESTABLISHED)如果我們知道該連接埠的協議類型,還可以使用使用如下的命令root@motadou:~# lsof -iTCP@172.16.31.63:32782COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEmyTest 409 root 30u IPv4 4075 TCP 172.16.31.63:32782->172.30.6.56:3306 (ESTABLISHED)從輸出結果可以看到,開啟172.16.31.63:32782連接埠的程式是myTest,它的進程號是409,對端地址是172.30.6.56:3306。

 

例子:查看進程開啟了哪些檔案
lsof -p pid

----

如下摘抄

lsof是一個用來顯示被開啟的檔案的強大而有用的工具。在Unix系統中,任何事物都是檔案(everything is a file),pipe是檔案,IP sockets是檔案,unix sockets是檔案,目錄是檔案,裝置是檔案,inodes是檔案。

一些有用的例子:

當在lsof後邊沒有跟任何參數時,該命令將會列出當前系統中被所有進程開啟的所有檔案

       lsof|nl     #nl命令列印出行號

下邊這幾個命令指出開啟某檔案的進程

       lsof `which httpd`   #那個進程在使用apache的可執行檔

       lsof /etc/passwd      #那個進程在佔用/etc/passwd

       lsof /dev/hda6         #那個進程在佔用hda6

       lsof /dev/cdrom       #那個進程在佔用光碟機

下邊將會列印出佔用httpd可執行檔的進程的進程號(僅僅是進程號,在編寫shell指令碼是有用)

       lsof -t `which httpd`

顯示出那些檔案被以k打頭的進程名的進程開啟,以bash打頭,和以init打頭:

       lsof -c k

       lsof -c bash

       lsof -c init

顯示出那些檔案被以courier打頭的進程開啟,但是並不屬於使用者‘zahn’

       lsof -c courier -u ^zahn

顯示被zahn和apache開啟的檔案

       lsof -u apache,zahn

顯示那些檔案被pid為30297的進程開啟:

       lsof +p 30297

顯示所有在/tmp檔案夾中開啟的instance和檔案的進程。但是symbol檔案並不在列

       lsof -D /tmp

顯示所有開啟的連接埠

       lsof -i

顯示所有開啟80連接埠的進程

       lsof -i:80

顯示所有開啟的連接埠和UNIX domain檔案:

       lsof -i -U

顯示那些進程開啟了到www.akadia.com的UDP的123(ntp)連接埠的連結:

      lsof -iUDP@www.akadia.com:123

lsofabc.txt顯示開啟檔案abc.txt的進程

lsof-i:22知道22連接埠現在運行什麼程式

lsof-cnsd顯示nsd進程現在開啟的檔案

lsof-ggid顯示歸屬gid的進程情況

lsof d/usr/local/顯示目錄下被進程開啟的檔案

lsof D/usr/local/同上,但是會搜尋目錄下的目錄,時間較長

lsof-d4顯示使用fd為4的進程

lsof-i用以顯示合格進程情況

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

46-->IPv4orIPv6

protocol-->TCPorUDP

hostname-->Internethostname

hostaddr-->IPv4位置

service-->/etc/service中的servicename(可以不只一個)

port-->埠號(可以不只一個)

例子:TCP:25-TCPandport25

@1.2.3.4-InternetIPv4hostaddress1.2.3.4

tcp@ohaha.ks.edu.tw:ftp-TCPprotocolhost:ohaha.ks.edu.twservicename:ftp

lsof-n不將IP轉換為hostname,預設是不加上-n參數

例子:lsof-itcp@ohaha.ks.edu.tw:ftp-n

lsof-p12看進程號為12的進程開啟了哪些檔案

lsof |-r[t]控制lsof不斷重複執行,預設是15s重新整理

-r,lsof會永遠不斷的執行,直到收到中斷訊號

r,lsof會一直執行,直到沒有檔案被顯示

例子:不斷查看目前ftp串連的情況:lsof-itcp@ohaha.ks.edu.tw:ftp-r

lsof-s列出開啟檔案的大小,如果沒有大小,則留下空白

lsof-uusername以UID,列出開啟的檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.