linux檢視開啟檔案的命令 lsof

2021-06-14 01:51:20 字數 2098 閱讀 7198

簡介:

lsof可以列出某個程序開啟的所有檔案資訊。開啟的檔案可能是普通的檔案,目錄,nfs檔案,塊檔案,字元檔案,共享庫,常規管道,明明管道,符號鏈 接,socket流,網路socket,unix域socket,以及其它更多。因為unix系統中幾乎所有東西都是檔案,你可以想象lsof該有多有用。

lsof的輸出:

fd 和 type 列的含義最為模糊,它們提供了關於檔案如何使用的更多資訊。

fd 列表示檔案描述符,應用程式通過檔案描述符識別該檔案。type 列提供了關於檔案格式的更多描述。

我們來具體研究一下檔案描述符列,上面出現了三種不同的值。cwd 值表示應用程式的當前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改。txt 型別的檔案是程式**,如應用程式二進位制檔案本身或共享庫,再比如本示例的列表中顯示的 init 程式。最後,數值表示應用程式的檔案描述符,這是開啟該檔案時返回的乙個整數。在最後一行中,您可以看到使用者正在使用 vim 編輯 /root/1.txt,其檔案描述符為 3。u 表示該檔案被開啟並處於讀取/寫入模式,而不是唯讀 (r) 或只寫 (w) 模式。有一點不是很重要但卻很有幫助,初始開啟每個應用程式時,都具有三個檔案描述符,從 0 到 2,分別表示標準輸入、輸出和錯誤流。正因為如此,大多數應用程式所開啟的檔案的 fd 都是從 3 開始。

與 fd 列相比,type 列則比較直觀。根據具體作業系統的不同,您會發現將檔案和目錄稱為 reg 和 dir(在 solaris 中,稱為 vreg 和 vdir)。其他可能的取值為 chr 和 blk,分別表示字元和塊裝置;或者 unix、fifo 和 ipv4,分別表示 unix 域套接字、先進先出 (fifo) 佇列和網際協議 (ip) 套接字。

用法:

列出有所開啟的檔案:

#losf

找出誰在使用檔案

#lsof /root/.bashrc遞迴查詢某個目錄中所有開啟的檔案

# lsof +d /usr/lib

加上+d引數,lsof會對指定目錄進行遞迴查詢,注意這個引數要比grep版本慢

# lsof | grep '/usr/lib'

之所以慢是因為+d首先查詢所有的檔案,然後一次性輸出

列出某個使用者代開的檔案

#lsof -u root

列出除root使用者外的所有使用者開啟的檔案

# lsof -u ^root

列出某個程式開啟的所有檔案

可以只寫程序的頭幾個字母

#lsof -c ht

這就會列出以ht開頭的程序開啟的檔案

列出某個pid對應的程序所開啟的檔案

#lsof -p 489列出所有網路連線

#lsof -i

lsof的-i選項可以列出所有開啟了網路套接字(tcp和udp)的程序

列出所有tcp網路連線

#lsof -i tcp

找出某個埠的程序

#lsof -i :25

找出某個tcp埠的程序

#lsof -i tcp:80

找到某個使用者的所有網路連線

# lsof -a -u hacker -i

-a引數可以將多個選項的組合條件由或變為與,使用-a將-u和-i選項組合可以讓lsof列出某個使用者的所有網路行為

輸出使用某些資源的程序pid

# lsof -t -i

-t選項輸出程序的pid,你可以將它和-i選項組合輸出使用某個埠的程序的pid,下面的命令將會殺掉所有使用網路的程序:

# kill -9 `lsof -t -i`

迴圈列出檔案

# lsof -r 1

-r選項讓lsof可以迴圈列出檔案直到被中斷,引數1的意思是每秒鐘重複列印一次,這個選項最好同某個範圍比較小的查詢組合使用,比如用來監測網路活動:

# lsof -r 1 -u john -i -a

來自:www.cszhi.com

如何檢視開啟指定檔案的程序

解決方案二 借助 proc 相關鏈結 有時候你會發現某些檔案在不停的增長嚴重占用了磁碟空間,你想找到罪魁禍首是誰,該怎麼做呢?涉及到的命令 fuser 本部分以archlinux系統為例 在archlinux上,fuser命令是屬於psmisc包中的,因此執行下面命令安裝 sudo pacman s...

Linux檢視 開啟 關閉防火牆操作

centos6自帶的防火牆是iptables,centos7自帶的防火牆是firewall。iptables 用於過濾資料報,屬於網路層防火牆。firewall 底層還是使用 iptables 對核心命令動態通訊包過濾的,簡單理解就是firewall是centos7下管理iptables的新命令。1...

檢視開啟了LYNC的使用者資訊

檢視開啟了lync的使用者資訊 查詢幫助資訊的方式 get help get csaduser full 下面是具體檢視使用者的sip位址 顯示名稱 upn名稱資訊 get csaduser select object displayname,sipaddress,userprincipalname...