如何使用linux lsof命令

如果Linux中的所有東西都是一個檔案,那麼除了硬碟上的檔案之外,還必須有更多的內容。本教程將向您展示如何使用lsof檢視作為檔案處理的所有其他裝置和程序。...

如果Linux中的所有東西都是一個檔案,那麼除了硬碟上的檔案之外,還必須有更多的內容。本教程將向您展示如何使用lsof檢視作為檔案處理的所有其他裝置和程序。

在linux上,一切都是一個檔案

經常被引用的一句話是,Linux中的所有東西都是一個檔案。檔案是位元組的集合。當它們被讀入程式或傳送到印表機時,它們似乎會生成一個位元組流。當它們被寫入時,它們接受位元組流。

許多其他系統元件接受或生成位元組流,例如鍵盤、套接字連線、印表機和通訊程序。因為它們要麼接受、生成,要麼接受並生成位元組流,所以這些裝置可以在非常低的級別上進行處理,就好像它們是檔案一樣。

這個設計概念簡化了Unix作業系統的實現。這意味著可以建立一小組處理程式、工具和api來處理各種不同的資源。

硬碟上的資料和程式檔案是普通的舊檔案系統檔案。我們可以使用ls命令列出它們並找出它們的一些細節。

我們如何找出所有被當作檔案處理的其他程序和裝置?我們使用lsof命令。列出系統中開啟的檔案。也就是說,它列出了正在處理的所有內容,就像它是一個檔案一樣。

相關:在Linux中,“一切都是檔案”是什麼意思?

lsof命令

lsof可以報告的許多程序或裝置屬於root或者是由root啟動的,因此您需要對lsof使用sudo命令。

因為這個列表會很長,所以我們將透過更少的管道來完成它。

sudo lsof | less

如何使用linux lsof命令

在lsof輸出出現之前,GNOME使用者可能會在終端視窗中看到一條警告訊息。

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete.

lsof嘗試處理所有裝入的檔案系統。引發此警告訊息的原因是lsof遇到了GNOME虛擬檔案系統(GVFS)。這是使用者空間檔案系統(FUSE)的一個特例。它充當了GNOME、其API和核心之間的橋樑。除了掛載它的所有者(在本例中是GNOME),沒有人甚至連根使用者都不能訪問這些檔案系統。您可以忽略此警告。

lsof的輸出很寬。最左邊的列是:

如何使用linux lsof命令

最右邊的列是:

如何使用linux lsof命令

列的lsof

並非所有列都適用於所有型別的開啟檔案。其中有些是空白是正常的。

  • Command:與開啟檔案的程序關聯的命令的名稱。
  • PID:開啟檔案的程序的程序標識號。
  • 任務(執行緒)標識號。空列表示它不是任務,而是程序。
  • User:程序所屬使用者的使用者ID或名稱,或lsof在/proc中查詢程序資訊的目錄所有者的使用者ID或登入名。
  • FD:顯示檔案的檔案描述符。檔案描述符描述如下。
  • 型別:與檔案關聯的節點的型別。注意型別如下所述。
  • 裝置:包含字元特殊、塊特殊、常規、目錄或NFS檔案的裝置號(用逗號分隔),或標識該檔案的核心引用地址。它還可能顯示Linux AX.25套接字裝置的基址或裝置名。
  • Size/Off:以位元組為單位顯示檔案大小或檔案偏移量。
  • 節點:顯示本地檔案的節點號,或伺服器主機中NFS檔案的inode號,或internet協議型別。它可能顯示流的STR或Linux AX.25套接字裝置的IRQ或inode號。
  • 名稱:顯示檔案所在的裝載點和檔案系統的名稱。

fd列

FD列中的檔案描述符可以是許多選項之一;手冊頁列出了所有選項。

FD列條目可以由三部分組成:檔案描述符、模式字元和鎖字元。一些常見的檔案描述符包括:

  • cwd:當前工作目錄。
  • 錯誤:FD資訊錯誤(請參閱“名稱”列)。
  • ltx:共享庫文字(程式碼和資料)。
  • m86:DOS合併對映檔案。
  • 記憶體對映檔案。
  • 記憶體對映裝置。
  • pd:父目錄。
  • rtd:根目錄。
  • txt:程式文字(程式碼和資料)
  • 表示檔案描述符的數字。

模式字元可以是以下之一:

  • r:讀訪問。
  • w:寫訪問。
  • u:讀寫訪問。
  • '':如果模式未知且沒有鎖定字元,則為空格字元。
  • –:模式未知,存在鎖定字元。

鎖定字元可以是以下字元之一:

  • r:讀取部分檔案的鎖。
  • R:讀取整個檔案的鎖。
  • w:在檔案的一部分寫鎖。
  • W:在整個檔案上寫鎖。
  • u:任意長度的讀寫鎖。
  • U:未知的鎖型別。
  • '':一個空格字元。沒有鎖。

“型別”列

型別列中可能會出現70多個條目。您將看到一些常見條目:

  • 常規檔案系統檔案。
  • 目錄:目錄。
  • 先進先出:先進先出。
  • 字元特殊檔案。
  • BLK:阻止特殊檔案。
  • INET:網際網路插座。
  • unix:unix域套接字

請參閱已開啟檔案的程序

要檢視已開啟某個檔案的程序,請將檔名作為lsof的引數提供。例如,檢視已開啟的程序核心日誌檔案,使用以下命令:

sudo lsof /var/log/kern.log

如何使用linux lsof命令

lsof透過顯示由使用者syslog啟動的單個程序rsyslogd來響應。

如何使用linux lsof命令

檢視從目錄開啟的所有檔案

要檢視從目錄中開啟的檔案以及開啟這些檔案的程序,請將目錄作為引數傳遞給lsof。必須使用+D(目錄)選項。

要檢視在/var/log/目錄中開啟的所有檔案,請使用以下命令:

sudo lsof +D /var/log/

如何使用linux lsof命令

lsof用該目錄中所有開啟檔案的列表來響應。

如何使用linux lsof命令

要檢視從/home目錄開啟的所有檔案,請使用以下命令:

sudo lsof +D /home

如何使用linux lsof命令

顯示已從/home目錄開啟的檔案。請注意,由於某些列中的描述較短,因此整個列表的範圍較窄。

如何使用linux lsof命令

列出程序開啟的檔案

要檢視由特定程序開啟的檔案,請使用-c(命令)選項。請注意,您可以一次向lsof提供多個搜尋項。

sudo lsof -c ssh -c init

如何使用linux lsof命令

lsof提供已由命令列上提供的任一程序開啟的檔案的列表。

如何使用linux lsof命令

檢視使用者開啟的檔案

要將顯示限制為特定使用者已開啟的檔案,請使用-u(使用者)選項。在本例中,我們將檢視由代表Mary擁有或啟動的程序開啟的檔案。

sudo lsof -u mary

如何使用linux lsof命令

列出的所有檔案都已代表使用者Mary開啟。這包括已被桌面環境開啟的檔案,例如,或者僅僅由於Mary已登入而開啟的檔案。

如何使用linux lsof命令

排除使用者開啟的檔案

要排除使用者已開啟的檔案,請使用“^”運算子。將使用者排除在列表之外可以更容易地找到您感興趣的資訊。必須像以前一樣使用-u選項,並在使用者名稱的開頭新增“^”字元。

sudo lsof +D /home -u ^mary

如何使用linux lsof命令

這次,/home目錄的列表不包括使用者Mary開啟的任何檔案。

如何使用linux lsof命令

列出程序開啟的檔案

要列出由特定程序開啟的檔案,請使用-p(程序)選項並提供程序ID作為引數。

sudo lsof - p 4610

如何使用linux lsof命令

您提供的程序ID已開啟的所有檔案都將列出。

如何使用linux lsof命令

列出已開啟檔案的程序ID

要檢視已開啟特定檔案的程序的程序ID,請使用-t(簡寫)選項並在命令列中提供檔名。

sudo lsof -t /usr/share/mime/mime.cache

如何使用linux lsof命令

程序ID顯示在一個簡單的列表中。

如何使用linux lsof命令

使用和或搜尋

讓我們列出使用者Mary開啟的與SSH程序相關的檔案。我們知道我們可以在命令列上提供多個搜尋項,所以這應該很容易。

sudo lsof -u mary -c ssh

如何使用linux lsof命令

現在讓我們看看lsof的輸出。這看起來不對;輸出中有由root啟動的條目。

如何使用linux lsof命令

這不是我們所期望的。怎麼搞的?

當您提供多個搜尋項時,lsof將返回與第一個搜尋項或第二個搜尋項匹配的任何檔案,依此類推。換句話說,它執行OR搜尋。

要使lsof執行AND搜尋,請使用-a(AND)選項。這意味著只列出與第一個搜尋項和第二個搜尋項匹配的檔案,依此類推。

讓我們再試一次,然後使用-a選項。

sudo lsof -u mary -c ssh -a

如何使用linux lsof命令

現在,清單中的每個檔案都是由Mary或代表Mary開啟的,並且與SSH命令關聯。

如何使用linux lsof命令

自動重新整理顯示

我們可以使用+|-r(repeat)選項將lsof置於repeat模式。repeat選項有兩種應用方式,+r或-r。我們還必須新增lsof在重新整理顯示之前要等待的秒數。

在任何一種格式中使用repeat選項都會使lsof像往常一樣顯示結果,但會在顯示的底部新增一條虛線。它等待命令列提供的秒數,然後用一組新的結果重新整理顯示。

對於-r選項,此操作將繼續,直到您按Ctrl+C為止。對於+r格式,此操作將繼續,直到沒有要顯示的結果,或者直到您按Ctrl+C為止。

sudo lsof -u mary -c ssh -a -r5

如何使用linux lsof命令

請注意清單底部的虛線。當輸出被重新整理時,這將分隔每個新的資料顯示。

如何使用linux lsof命令

顯示與internet連線關聯的檔案

i(internet)選項允許您檢視與網路和internet連線相關聯的程序開啟的檔案。

lsof -i

如何使用linux lsof命令

將顯示透過網路和internet連線開啟的所有檔案。

如何使用linux lsof命令

按程序id顯示與internet連線關聯的檔案

要檢視與特定程序ID關聯的internet連線開啟的檔案,請新增-p選項和-a選項。

在這裡,我們正在尋找透過internet或網路連線開啟的檔案,透過ID為606的程序。

sudo lsof -i -a -p 606

如何使用linux lsof命令

顯示由程序ID 606開啟的與因特網或網路連線相關聯的所有檔案。

如何使用linux lsof命令

顯示與internet連線和命令關聯的檔案

我們可以使用-c(command)選項來查詢由特定程序開啟的檔案。要查詢已由internet或與ssh程序關聯的網路連線開啟的檔案,請使用以下命令:

lsof -i -a -c ssh

如何使用linux lsof命令

由於ssh程序而開啟的所有檔案都列在輸出中。

如何使用linux lsof命令

顯示與internet連線和埠關聯的檔案

我們可以在特定埠上對透過internet或網路連線開啟的檔案進行lsof報告。為此,我們使用:字元後跟埠號。

在這裡,我們要求lsof列出透過網路或internet連線使用埠22開啟的檔案。

lsof -i :22

如何使用linux lsof命令

所有列出的檔案都是由與埠22(SSH連線的預設埠)關聯的程序開啟的。

如何使用linux lsof命令

顯示與internet連線和協議相關的檔案

我們可以要求lsof顯示與使用特定協議的網路和internet連線相關聯的程序所開啟的檔案。我們可以從TCP、UDP和SMTP中進行選擇。讓我們使用TCP協議,看看我們得到了什麼。

sudo lsof -i tcp

如何使用linux lsof命令

列出的檔案只有那些由使用TCP協議的程序開啟的檔案。

如何使用linux lsof命令

我們只觸及了表面

在lsof的一些常見用例中,這是一個很好的基礎,但是還有更多的地方。手冊頁的長度超過2800行,這就可以判斷出還有多少內容。

lsof命令可以用來深入到開啟檔案和偽檔案的地層中。我們提供了一張示意圖,地圖冊在手冊頁上。

  • 發表於 2021-04-03 10:30
  • 閱讀 ( 46 )
  • 分類:網際網路

你可能感興趣的文章

如何在linux上安裝和使用powershell

... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...

  • 發佈於 2021-03-16 02:34
  • 閲讀 ( 53 )

如何在android和termux上使用linux命令列

...許您在Android裝置上安裝誠實善良的Linux應用程式。下面是如何使用Termux應用程式。 ...

  • 發佈於 2021-03-18 07:26
  • 閲讀 ( 63 )

如何在windows10上獲得linux bash shell

... 如何在windows10上安裝linux bash shell ...

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 60 )

linux下如何重新命名檔案

要在Linux中重新命名檔案嗎?如果您知道如何在Windows、macOS或Chrome作業系統中完成這項工作,那麼您就知道如何在這裡完成這項工作。在大多數版本的Linux上,您只需右鍵單擊一個檔案並選擇Rename選項。 ...

  • 發佈於 2021-03-22 02:48
  • 閲讀 ( 67 )

linux正在吃掉你的公羊嗎?如何管理你的記憶

...記憶體。為了理解到底發生了什麼,我們必須看看Linux是如何管理記憶體的。 ...

  • 發佈於 2021-03-23 08:31
  • 閲讀 ( 57 )

如何在linux上使用groupadd管理使用者組

... 相關:如何在Linux中更改密碼 ...

  • 發佈於 2021-03-26 17:15
  • 閲讀 ( 43 )

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那麼獲取與儲存上的檔案相關的詳細資訊是很困難的。在這裡,我們將討論Linux上與ls命令相關的所有內容,以及它使用的一些不同的標誌。 ...

  • 發佈於 2021-03-26 18:01
  • 閲讀 ( 56 )

啟動linux的9個基本命令

... 如何在linux下開啟終端 ...

  • 發佈於 2021-03-26 18:33
  • 閲讀 ( 59 )

如何在linux中新增使用者

想在Linux系統上新增使用者但不知道如何新增?在Linux上使用命令列介面管理使用者無疑是一項複雜的工作。而對於初學者來說,即使新增新使用者也是一場噩夢。 ...

  • 發佈於 2021-03-26 23:29
  • 閲讀 ( 69 )

如何更改linux密碼

...但幸運的是,更改Linux密碼很容易。今天我們將向您展示如何通過幾個簡單的命令更改當前使用者的密碼、其他使用者的密碼和超級使用者的密碼。 ...

  • 發佈於 2021-03-28 02:28
  • 閲讀 ( 44 )
nkheyc0345
nkheyc0345

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦