Linux lsof命令詳解

2022-01-19 20:38:18 字數 3393 閱讀 2967

lsof命令簡介:

lsof(list open files)是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以,lsof的功能很強大。一般root使用者才能執行lsof命令,普通使用者可以看見/usr/sbin/lsof命令,但是普通使用者執行會顯示「permission denied」。因此通過lsof工具能夠檢視這個列表對系統監測以及排錯將是很有幫助的。

在終端下輸入lsof即可顯示系統開啟的檔案,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份執行它才能夠充分地發揮其功能。

每行顯示乙個開啟的檔案,若不指定條件預設將顯示所有程序開啟的所有檔案。lsof輸出各列資訊的意義如下:

command:程序的名稱

pid:程序識別符號

user:程序所有者

fd:檔案描述符,應用程式通過檔案描述符識別該檔案。如cwd、txt等

type:檔案型別,如dir、reg等

device:指定磁碟的名稱

size:檔案的大小

node:索引節點(檔案在磁碟上的標識)

name:開啟檔案的確切名稱

檔案描述符列表:

cwd:表示current work dirctory,即:應用程式的當前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改

txt:該型別的檔案是程式**,如應用程式二進位制檔案本身或共享庫,如上列表中顯示的 /sbin/init 程式

lnn:library references (aix);

er:fd information error (see name column);

jld:jail directory (freebsd);

ltx:shared library text (code and data);

pd:parent directory;

rtd:root directory;

tr:kernel trace file (openbsd);

0:表示標準輸出

1:表示標準輸入

2:表示標準錯誤

一般在標準輸出、標準錯誤、標準輸入後還跟著檔案狀態模式:

u:表示該檔案被開啟並處於讀取/寫入模式。

r:表示該檔案被開啟並處於唯讀模式。

w:表示該檔案被開啟並處於。

空格:表示該檔案的狀態模式為unknow,且沒有鎖定。

-:表示該檔案的狀態模式為unknow,且被鎖定。

n:for a solaris nfs lock of unknown type;

r:for read lock on part of the file;

r:for a read lock on the entire file;

w:for a write lock on part of the file;(檔案的部分寫鎖)

w:for a write lock on the entire file;(整個檔案的寫鎖)

u:for a read and write lock of any length;

u:for a lock of unknown type;

x:for an sco openserver xenix lock on part      of the file;

x:for an sco openserver xenix lock on the      entire file;

space:if there is no lock.

檔案型別:

dir:表示目錄。

chr:表示字元型別。

blk:塊裝置型別。

unix: unix 域套接字。

fifo:先進先出 (fifo) 佇列。

ipv4:網際協議 (ip) 套接字。

device:指定磁碟的名稱

size:檔案的大小

node:索引節點(檔案在磁碟上的標識)

name:開啟檔案的確切名稱

-a:列出開啟檔案存在的程序;

-c《程序名》:列出指定程序所開啟的檔案;

-g:列出gid號程序詳情;

-d《檔案號》:列出占用該檔案號的程序;

+d《目錄》:列出目錄下被開啟的檔案;

+d《目錄》:遞迴列出目錄下被開啟的檔案;

-n《目錄》:列出使用nfs的檔案;

-i《條件》:列出符合條件的程序。(4、6、協議、:埠、 @ip )

-p《程序號》:列出指定程序號所開啟的檔案;

-u:列出uid號程序詳情;

-h:顯示幫助資訊;

-v:顯示版本資訊。

lsof指令的用法如下:

lsof abc.txt 顯示開啟檔案abc.txt的程序

lsof 目錄名 查詢誰在使用檔案目錄系統

lsof -i :22 知道22埠被哪個程序占用

lsof -c abc 顯示abc程序現在開啟的檔案

lsof -g gid 顯示歸屬gid的程序情況

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

lsof -p 12 看程序號為12的程序開啟了哪些檔案

lsof -u username 檢視使用者開啟哪些檔案

lsof -i @192.168.1.111 檢視遠端已開啟的網路連線(連線到192.168.1.111)

--------------------------------------

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 -> 埠號 (可以不只乙個)

--------------------------------------

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

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

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

例子:不斷檢視目前ftp連線的情況:lsof -i [email protected]:ftp -r

Linux Lsof命令詳解

一般root使用者才能執行lsof命令,普通使用者可以看見 usr sbin lsof命令,但是普通使用者執行會顯示 permission denied 我總結一下lsof指令的用法 lsof abc.txt 顯示開啟檔案abc.txt的程序 lsof i 22 知道22埠現在執行什麼程式 lsof...

linux lsof命令詳解

lsof list open files 是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 tcp 和使用者資料報協議 udp 套接字等,系統在後台都為該應用程式分配了乙個檔案描述符,無論這...

Linux lsof命令詳解

lsof list open files 是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。在終端下輸入lsof即可顯示系統開啟的檔案,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者...