Linux stat命令:顯示檔案或檔案系統的詳細資訊

2020-07-16 10:04:31
在 Linux 中,檔案有存取時間、資料修改時間、狀態修改時間這三個時間,而沒有建立時間。stat 是査看檔案詳細資訊的命令,而且可以看到檔案的這三個時間,其基本資訊如下。
  • 命令名稱:stat。
  • 英文原意:display file or file system status。
  • 所在路徑:/usr/bin/stat。
  • 執行許可權:所有使用者。
  • 功能描述:顯示檔案或檔案系統的詳細資訊。

命令格式

[[email protected] ~]# stat [選項]檔名或目錄名

選項:
  • -f:査看檔案所在的檔案系統資訊,而不是査看檔案的資訊。

常見用法

【例 1】査看檔案的詳細資訊。

[[email protected] ~]# stat anaconda-ks.cfg
File: "anaconda-ks.cfg"
#檔名
Size: 1170  Blocks: 8 IO Block: 4096 普通檔案
#檔案大小   占用的block數 塊大小 檔案型別
Device: 803h/2051d Inode: 130834 Links: 1
#i節點號 連結數
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
#許可權 所有者 所屬組
Access: 2016-05-06 23:31:41.396893415 +0800
#存取時間
Modify: 2016-05-06 23:31:41.396893415 +0800
#資料修改時間
Change: 2016-05-06 23:31:41.411006937 +0800
#狀態修改時間


【例 2】 査看檔案系統資訊。
如果使用"-f"選項,就不再是査看指定檔案的資訊,而是査看這個檔案所在檔案系統的資訊,例如:

[[email protected] ~]#stat -f anaconda-ks.cfg
File: "anaconda-ks.cfg"
ID: c05ad05e0e3b0580 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 5045314 Free: 4356956 Available: 4100662 Inodes: Total: 1283632 Free: 1192731


【例 3】三種時間的含義。
査看系統當前時間,如下:

[[email protected] ~]# date
2016年05月07日星期六01:40:49 CST

再査看 bds 檔案的三種時間,可以看到,和當前時間是有差別的,如下:

[[email protected] ~]# stat bols
File: "bols"
Size: 0 Blocks: 0   IO Block: 4096 普通空檔案
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-05-07 00:10:23.794319970 +0800
Modify: 2016-05-07 00:10:23.794319970 +0800
Change: 2016-05-07 00:10:23.794319970 +0800
#這些時間都是最後一次修改檔案的時間,並不是當前時間

而如果用 cat 命令讀取一下這個檔案,就會發現檔案的存取時間 (Access Time) 變成了 cat 命令的執行時間,如下:

[[email protected] ~]# cat bols
[[email protected] ~]# stat bols
File: "bols"
Size: 0 Blocks: 0   I0 Block: 4096 普通空文
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid:(0/ root)
Access: 2016-05-07 01:41:08.202924900 +0800
#只有存取時間變為了cat命令的執行時間,其他兩個時間沒有改
Modify: 2016-05-07 00:10:23.794319970 +0800
Change: 2016-05-07 00:10:23.794319970 +0800

而如果用 echo 命令向檔案中寫入點資料,那麼檔案的資料修改時間(Modify Time)就會發生改變。但是檔案資料改變了,系統會認為檔案的狀態也會改變,所以狀態修改時間(Change Time)也會隨之改變,如下:

[[email protected] ~]# echo 9527> bols
[[email protected] ~]# stat bols
File: "bols"
Size: 6 Blocks: 8   I0 Block: 4096 普通檔案
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-05-07 01:41:08.202924900 +0800
#這個時間還是上次修改時間
Modify: 2016-05-07 01:42:42.459614017 +0800
Change: 2016-05-07 01:42:42.459614017 +0800 #而這兩個時間變為了 echo 命令的執行時間

而如果只修改檔案的狀態(比如改變檔案的所有者),而不修改檔案的資料,則只會更改狀態修改時間(ChangeTime),如下:

[[email protected] ~]# chown nobody bols
[[email protected] ~]# stat bols
File: "bols"
Size: 6 Blocks: 8   10 Block: 4096 普通檔案
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r-r-) Uid: ( 502/ nobody) Gid: ( 0/root)
Access: 2016-05-07 01:41:08.202924900 +0800
Modify: 2016-05-07 01:42:42.459614017 +0800
# 前兩個時間還是之前修改的時間
Change: 2016-05-07 01:43:09.676860399 +0800
#而狀態修改時間變為了chown命令的執行時間

而如果用 touch 命令再次觸控這個檔案,則這個檔案的三個時間 都會改變。touch 命令的作用就是這樣的,大家記住即可。如下:

[[email protected] ~]# touch bols
[[email protected] ~]# stat bols
File: "bols"
Size: 6 Blocks: 8   10 Block: 4096 普通檔案
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 502/ nobody) Gid: ( 0/root)
Access: 2016-05-07 01:54:14.466809236 +0800
Modify: 2016-05-07 01:54:14.466809236 +0800
Change: 2016-05-07 01:54:14.466809236 +0800
#三個時間都會變為touch命令的執行時間