如何在linux上使用stat命令

linuxstat命令顯示的細節比ls多得多。透過這個資訊豐富且可配置的實用程式,您可以在幕後一瞥。我們會教你怎麼使用它。...

linuxstat命令顯示的細節比ls多得多。透過這個資訊豐富且可配置的實用程式,您可以在幕後一瞥。我們會教你怎麼使用它。

stat帶你到幕後

ls命令在做什麼方面做得很好,而且做得很多,但是對於Linux,似乎總有一種方法可以更深入地瞭解表面之下的內容。通常,這不僅僅是一個掀開地毯邊緣的例子。你可以把地板撕開,然後挖個洞。你可以像剝洋蔥一樣剝Linux。

ls將向您顯示有關檔案的大量資訊,例如對其設定了哪些許可權、檔案的大小以及檔案是檔案還是符號連結。為了顯示這個資訊,ls從一個叫做inode的檔案系統結構中讀取它。

每個檔案和目錄都有一個inode。inode儲存有關檔案的元資料,例如它佔用的檔案系統塊,以及與檔案關聯的日期戳。inode就像檔案的借書卡。但我只會告訴你一些資訊。要檢視所有內容,我們需要使用stat命令。

像ls一樣,stat命令有很多選項。這使它成為使用別名的最佳候選。一旦您發現了一組特定的選項,使得stat可以提供您想要的輸出,就可以將其包裝到別名或shell函式中。這使得它的使用更加方便,而且您不必記住一組晦澀難懂的命令列選項。

相關:如何使用ls命令列出Linux上的檔案和目錄

快速比較

讓我們使用ls給出一個長列表(-l選項),其中包含人類可讀的檔案大小(-h選項):

ls -lh ana.h

如何在linux上使用stat命令

從左到右,ls提供的資訊是:

  • 第一個字元是連字元“-”,它告訴我們檔案是一個常規檔案,而不是套接字、符號連結或其他型別的物件。
  • 所有者、組和其他許可權以八進位制格式列出。
  • 指向此檔案的硬連結數。在這種情況下,在大多數情況下,它將是一個。
  • 檔案所有者是戴夫。
  • 群的所有者是戴夫。
  • 檔案大小為802位元組。
  • 檔案最後一次修改是在2015年12月13日,星期五。
  • 檔名是ana.c。

讓我們看看統計:

stat ana.h

如何在linux上使用stat命令

我們從stat得到的資訊是:

  • 檔案:檔案的名稱。通常,它與我們在命令列上傳遞給stat的名稱相同,但是如果我們檢視符號連結,它可能會不同。
  • 大小:以位元組為單位的檔案大小。
  • Blocks:檔案儲存在硬碟上所需的檔案系統塊數。
  • IO塊:檔案系統塊的大小。
  • 檔案型別:元資料描述的物件的型別。最常見的型別是檔案和目錄,但也可以是連結、套接字或命名管道。
  • 裝置:十六進位制和十進位制的裝置編號。這是儲存檔案的硬碟的ID。
  • Inode:Inode編號。也就是這個inode的ID號。inode編號和裝置編號共同唯一地標識一個檔案。
  • 連結:這個數字表示有多少硬連結指向這個檔案。每個硬連結都有自己的inode。所以另一種思考這個數字的方法是有多少inode指向這個檔案。每次建立或刪除硬連結時,此數字都會上下調整。當它達到零時,檔案本身就被刪除了,inode也被刪除了。如果對目錄使用stat,則此數字表示目錄中的檔案數,包括當前目錄的“.”項和父目錄的“.”項。
  • 訪問:檔案許可權以八進位制和傳統的rwx(讀、寫、執行格式)顯示。
  • Uid:所有者的使用者名稱和帳戶名。
  • Gid:所有者的組ID和帳戶名。
  • 訪問:訪問時間戳。不像看上去那麼直截了當。現代Linux發行版使用一種稱為relatime的方案,它試圖最佳化更新訪問時間所需的硬碟寫入。簡單地說,如果訪問時間早於修改後的時間,則會更新訪問時間。
  • 修改:修改時間戳。這是上次修改檔案內容的時間。(幸運的是,這個檔案的內容最後一次更改是在四年前的今天。)
  • 更改:更改時間戳。這是上次更改檔案屬性或內容的時間。如果透過設定新的檔案許可權來修改檔案,則會更新更改時間戳(因為檔案屬性已更改),但不會更新修改的時間戳(因為檔案內容未更改)。
  • 出生:保留以顯示檔案的原始建立日期,但這在Linux中沒有實現。

瞭解時間戳

時間戳對時區敏感。每行末尾的-0500表示此檔案是在協調世界時(UTC)時區的計算機上建立的,該時區比當前計算機的時區早5小時。所以這臺電腦比建立這個檔案的電腦晚了五個小時。事實上,這個檔案是在一臺英國時區的計算機上建立的,我們正在美國東部標準時區的計算機上檢視它。

修改和更改時間戳可能會引起混淆,因為對於未初始化的人來說,它們的名稱聽起來好像是同一個意思。

讓我們使用chmod來修改名為ana.c的檔案的檔案許可權。我們將使每個人都可以寫它。這不會影響檔案的內容,但會影響檔案的屬性。

chmod +w ana.c

然後我們將使用stat檢視時間戳:

stat ana.c

如何在linux上使用stat命令

更改時間戳已更新,但修改的時間戳尚未更新。

修改後的時間戳只有在檔案內容更改時才會更新。內容更改和屬性更改的更改時間戳都會更新。

對多個檔案使用stat

要同時對多個檔案進行stat報告,請在命令列上將檔名傳遞給stat:

stat ana.h ana.o

如何在linux上使用stat命令

要對一組檔案使用stat,請使用模式匹配。“問號”?表示任何單個字元,星號“*”表示任何字串。我們可以告訴stat報告任何一個副檔名為“ana”的檔案,使用以下命令:

stat ana.?

如何在linux上使用stat命令

使用stat報告檔案系統

stat可以報告檔案系統的狀態以及檔案的狀態。f(filesystem)選項告訴stat報告檔案所在的檔案系統。注意,我們還可以將諸如“/”之類的目錄傳遞給stat,而不是檔名。

stat -f ana.c

如何在linux上使用stat命令

stat給我們的資訊是:

  • 檔案:檔案的名稱。
  • ID:以十六進位制表示的檔案系統ID。
  • Namelen:檔名允許的最大長度。
  • 型別:檔案系統的型別。
  • 塊大小:為獲得最佳資料傳輸速率而請求讀取請求的資料量。
  • 基本塊大小:每個檔案系統塊的大小。

阻礙:

  • Total:檔案系統中所有塊的總數。
  • Free:檔案系統中空閒塊的數量。
  • 可用:常規(非根)使用者可用的可用塊數。

索引節點:

  • Total:檔案系統中inode的總數。
  • Free:檔案系統中空閒inode的數目。

取消對符號連結的引用

如果您對一個實際是符號連結的檔案使用stat,它將報告該連結。如果希望stat報告連結指向的檔案,請使用-L(取消引用)選項。檔案code.c是指向ana.c的符號連結。讓我們看看沒有-L選項的情況:

stat code.c

如何在linux上使用stat命令

檔名顯示code.c指向(->)ana.c。檔案大小隻有11個位元組。沒有專門用於儲存此連結的塊。檔案型別列為符號連結。

很明顯,我們這裡沒有檢視實際的檔案。我們再來一次並新增-L選項:

stat -L code.c

如何在linux上使用stat命令

現在顯示符號連結指向的檔案的檔案詳細資訊。但是請注意,檔名仍然以code.c的形式給出。這是連結的名稱,而不是目標檔案。這是因為這是我們在命令列上傳遞給stat的名稱。

簡潔的報告

-t(簡潔)選項使stat提供一個簡明的摘要:

stat -t ana.c

如何在linux上使用stat命令

沒有提供任何線索。為了理解它,直到你記住了欄位序列,你需要交叉引用這個輸出到一個完整的stat輸出。

自定義輸出格式

從stat獲取不同資料集的更好方法是使用自定義格式。有一長串的標記稱為格式序列。每一個都代表一個數據元素。選擇要包含在輸出中的內容並建立格式字串。當我們呼叫stat並將格式字串傳遞給它時,輸出將只包含我們請求的資料元素。

檔案和檔案系統有不同的格式序列集。檔案列表為:

  • %a:八進位制的訪問許可權。
  • %答:人類可讀形式的訪問權(rwx)。
  • %b:分配的塊數。
  • %B:每個塊的位元組大小。
  • %d:十進位制的裝置編號。
  • %D:十六進位制的裝置編號。
  • %f:十六進位制的原始模式。
  • %檔案型別。
  • %g:所有者的組ID。
  • %G:所有者的組名。
  • %h:硬連結的數量。
  • %i:索引節點號。
  • %m:掛載點。
  • %n:檔名。
  • %N:引用的檔名,如果是符號連結,則包含取消引用的檔名。
  • %o:最佳I/o傳輸大小提示。
  • %總大小,以位元組為單位。
  • %t:十六進位制的主要裝置型別,用於字元/塊裝置特殊檔案。
  • %T:以十六進位制表示的次要裝置型別,用於字元/塊裝置特殊檔案。
  • %u:所有者的使用者ID。
  • %U:所有者的使用者名稱。
  • %w:檔案出生的時間,人類可讀,如果不知道,用連字元“-”表示。
  • %W:檔案誕生的時間,從Epoch開始的秒數;如果未知,則為0。
  • %x:最後一次訪問的時間,人類可讀。
  • %X:上次訪問的時間,自Epoch以來的秒數。
  • %y:上次修改資料的時間,可讀。
  • %Y:上次資料修改的時間,從Epoch開始的秒數。
  • %z:上次狀態更改的時間,人類可讀。
  • %Z:上次狀態更改的時間,從新紀元開始的秒數。

“epoch”是Unix epoch,發生在1970-01-01 00:00:00+0000(UTC)。

對於檔案系統,格式序列為:

  • %a:常規(非根)使用者可用的空閒塊數。
  • %b:檔案系統中的總資料塊。
  • %c:檔案系統中的索引節點總數。
  • %檔案系統中空閒inode的數量。
  • %f:檔案系統中空閒塊的數量。
  • %i:十六進位制的檔案系統ID。
  • %l:檔名的最大長度。
  • %n:檔名。
  • %s:塊大小(最佳寫入大小)。
  • %S:檔案系統塊的大小(用於塊計數)。
  • %t:十六進位制的檔案系統型別。
  • %T:人類可讀形式的檔案系統型別。

有兩個選項接受格式序列的字串。它們是--format和--printf。它們之間的區別是——printf解釋C樣式的轉義序列,例如換行符和製表符,並且不會自動向其輸出中新增換行符。

我們建立一個格式字串並將其傳遞給stat。要使用的格式序列是%n表示檔名,%s表示檔案大小,%F表示檔案型別。我們將在字串的結尾新增轉義序列,\n以確保在新行中處理每個檔案。我們的格式字串如下所示:

"File %n is %s bytes, and is a %F\n"

我們將使用--printf選項將其傳遞給stat。我們將要求stat報告一個名為code.c的檔案和一組與ana匹配的檔案。?。這是完整的命令。注意--printf和格式字串之間的等號“=”:

stat --printf="File %n is %s bytes, and is a %F\n" code.c ana/ana.?

如何在linux上使用stat命令

每個檔案的報告都列在新行中,這是我們要求的。我們提供了檔名、檔案大小和檔案型別。

自定義格式允許您訪問比標準stat輸出中包含的資料元素更多的資料元素。

細粒度控制

如您所見,提取您感興趣的特定資料元素有很大的空間。你也許也能理解為什麼我們建議對更長更復雜的咒語使用別名。

  • 發表於 2021-04-02 19:25
  • 閱讀 ( 54 )
  • 分類:網際網路

你可能感興趣的文章

如何在linux上安裝和使用powershell

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

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

如何在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
  • 閲讀 ( 65 )

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

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

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

如何在linux中新增使用者

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

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

ascii和unicode文字之間有什麼區別?

... 由於其範圍,Unicode代表的字元遠遠多於ASCII。標準ASCII使用7位範圍對128個不同字元進行編碼。另一方面,Unicode是如此之大,以至於我們需要使用不同的術語來討論它! ...

  • 發佈於 2021-03-28 12:00
  • 閲讀 ( 44 )

如何在linux上使用dig命令

...想知道,當我們在瀏覽器中鍵入網站名稱時,這種神奇是如何發生的。透過dig,你可以探索網路變戲法的過程。

  • 發佈於 2021-04-02 10:09
  • 閲讀 ( 47 )

linux檔案時間戳:atime、mtime和ctime

...們談論Linux檔案時間戳時。在本指南中,我們將解釋系統如何更新它們,以及如何自己修改它們。 atime、mtime和ctime的區別 每個Linux檔案都有三個時間戳:訪問時間戳(atime)、修改時間戳(mtime)和更改時間戳(ctime)。 訪問時...

  • 發佈於 2021-04-02 16:01
  • 閲讀 ( 61 )

你想知道的關於linux上inodes的一切

...上是指向現有檔案或目錄的快捷方式。讓我們看看他們是如何管理的,以及如何使用這三個元素來實現這一點。 假設我們有一個包含兩個檔案的目錄:一個是指令碼,另一個是應用程式,如下所示。 我們可以使用ln命令和-s(...

  • 發佈於 2021-04-02 18:04
  • 閲讀 ( 43 )
drnsmfjgyzg
drnsmfjgyzg

0 篇文章

作家榜

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

相關推薦