歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> stat -- 獲取比 ls 更多的信息

stat -- 獲取比 ls 更多的信息

日期:2017/2/28 14:26:48   编辑:Linux教程

厭倦了 ls 命令,並且想查看更多有關你的文件的有趣的信息? 試一試 stat!

ls 命令可能是每一個 Unix 使用者第一個學習的命令之一, 但它僅僅顯示了 stat 命令能給出的信息的一小部分。

stat 命令從文件的索引節點獲取信息。 正如你可能已經了解的那樣, 每一個系統裡的文件都存有三組日期和時間, 它們包括最近修改時間(即使用 ls -l 命令時顯示的日期和時間), 最近狀態改變時間(包括對文件重命名)和最近訪問時間。

使用長列表模式查看文件信息, 你會看到類似下面的內容:

  1. $ ls -l trythis
  2. -rwx------1 shs unixdweebs 109Nov112013 trythis

使用 stat 命令, 你會看到下面這些:

  1. $ stat trythis
  2. File:`trythis'
  3. Size: 109 Blocks: 8 IO Block: 262144 regular file
  4. Device: 18h/24d Inode: 12731691 Links: 1
  5. Access: (0700/-rwx------) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs)
  6. Access: 2014-09-09 19:27:58.000000000 -0400
  7. Modify: 2013-11-11 08:40:10.000000000 -0500
  8. Change: 2013-11-11 08:40:10.000000000 -0500

在上面的情形中, 文件的狀態改變和文件修改的日期/時間是相同的, 而訪問時間則是相當近的時間。 我們還可以看到文件使用了 8 個塊, 以及兩種格式顯示的文件權限 -- 八進制(0700)格式和 rwx 格式。 在第三行顯示的索引節點是 12731681. 文件沒有其它的硬鏈接(Links: 1)。 而且, 這個文件是一個常規文件。

把文件重命名, 你會看到狀態改變時間發生變化。

這裡的 ctime 信息, 最早設計用來存儲文件的創建(create)日期和時間, 但後來不知道什麼時候變為用來存儲狀態修改(change)時間。

  1. $ mv trythis trythat
  2. $ stat trythat
  3. File:`trythat'
  4. Size: 109 Blocks: 8 IO Block: 262144 regular file
  5. Device: 18h/24d Inode: 12731691 Links: 1
  6. Access: (0700/-rwx------) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs)
  7. Access: 2014-09-09 19:27:58.000000000 -0400
  8. Modify: 2013-11-11 08:40:10.000000000 -0500
  9. Change: 2014-09-21 12:46:22.000000000 -0400

改變文件的權限也會改變 ctime 域。

你也可以配合通配符來使用 stat 命令以列出一組文件的狀態:

  1. $ stat myfile*
  2. File:`myfile'
  3. Size: 20 Blocks: 8 IO Block: 262144 regular file
  4. Device: 18h/24d Inode: 12731803 Links: 1
  5. Access: (0640/-rw-r-----) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs)
  6. Access: 2014-08-23 03:00:36.000000000 -0400
  7. Modify: 2014-08-22 12:02:12.000000000 -0400
  8. Change: 2014-08-22 12:02:12.000000000 -0400
  9. File: `myfile2'
  10. Size: 20 Blocks: 8 IO Block: 262144 regular file
  11. Device: 18h/24d Inode: 12731806 Links: 1
  12. Access: (0640/-rw-r-----) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs)
  13. Access: 2014-08-23 03:00:36.000000000 -0400
  14. Modify: 2014-08-22 12:03:30.000000000 -0400
  15. Change: 2014-08-22 12:03:30.000000000 -0400
  16. File: `myfile3'
  17. Size:40Blocks:8 IO Block:262144 regular file
  18. Device:18h/24dInode:12730533Links:1
  19. Access:(0640/-rw-r-----)Uid:(263/ shs)Gid:(100/ unixdweebs)
  20. Access:2014-08-2303:00:36.000000000-0400
  21. Modify:2014-08-2212:03:59.000000000-0400
  22. Change:2014-08-2212:03:59.000000000-0400

如果我們喜歡的話, 我們也可以通過其他命令來獲取這些信息。

向 ls -l 命令添加 "u" 選項, 你會看到下面的結果。 注意這個選項會顯示最後訪問時間, 而添加 "c" 選項則會顯示狀態改變時間(在本例中, 是我們重命名文件的時間)。

  1. $ ls -lu trythat
  2. -rwx------1 shs unixdweebs 109Sep919:27 trythat
  3. $ ls -lc trythat
  4. -rwx------1 shs unixdweebs 109Sep2112:46 trythat

stat 命令也可應用與文件夾。

在這個例子中, 我們可以看到有許多的鏈接。

  1. $ stat bin
  2. File:`bin'
  3. Size: 12288 Blocks: 24 IO Block: 262144 directory
  4. Device: 18h/24d Inode: 15089714 Links: 9
  5. Access: (0700/drwx------) Uid: ( 263/ shs) Gid: ( 100/ unixdweebs)
  6. Access: 2014-09-21 03:00:45.000000000 -0400
  7. Modify: 2014-09-15 17:54:41.000000000 -0400
  8. Change: 2014-09-15 17:54:41.000000000 -0400

在這裡, 我們還可以查看一個文件系統。

  1. $ stat -f /dev/cciss/c0d0p2
  2. File:"/dev/cciss/c0d0p2"
  3. ID:0Namelen:255Type: tmpfs
  4. Block size:4096Fundamental block size:4096
  5. Blocks:Total:259366Free:259337Available:259337
  6. Inodes:Total:223834Free:223531

注意 Namelen (文件��長度)域, 如果文件名長於 255 個字符的話, 你會很幸運地在文件名處看到心形符號!

stat 命令還可以一次顯示所有我們想要的信息。 下面的例子中, 我們只想查看文件類型, 然後是硬連接數。

  1. $ stat --format=%F trythat
  2. regular file
  3. $ stat --format=%h trythat
  4. 1

在下面的例子中, 我們查看了文件權限 -- 分別以兩種可用的格式 -- 然後是文件的 SELinux 安全環境。最後,我們我們可以以從 Epoch 開始的秒數格式來查看文件訪問時間。

  1. $ stat --format=%a trythat
  2. 700
  3. $ stat --format=%A trythat
  4. -rwx------
  5. $ stat --format=%C trythat
  6. (null)
  7. $ stat --format=%X bin
  8. 1411282845

下面全部是可用的選項:

  1. %a 八進制表示的訪問權限
  2. %A 可讀格式表示的訪問權限
  3. %b 分配的塊數(參見%B)
  4. %B %b 參數顯示的每個塊的字節數
  5. %d 十進制表示的設備號
  6. %D 十六進制表示的設備號
  7. %f 十六進制表示的Raw模式
  8. %F 文件類型
  9. %g 屬主的組 ID
  10. %G 屬主的組名
  11. %h 硬連接數
  12. %i Inode號
  13. %n 文件名
  14. %N 如果是符號鏈接,顯示器所鏈接的文件名
  15. %o I/O 塊大小
  16. %s 全部占用的字節大小
  17. %t 十六進制的主設備號
  18. %T 十六進制的副設備號
  19. %u 屬主的用戶 ID
  20. %U 屬主的用戶名
  21. %x 最後訪問時間
  22. %X 最後訪問時間,自Epoch開始的秒數
  23. %y 最後修改時間
  24. %Y 最後修改時間,自Epoch開始的秒數
  25. %z 最後改變時間
  26. %Z 最後改變時間,自Epoch開始的秒數

針對文件系統還有如下格式選項:

  1. %a 普通用戶可用的塊數
  2. %b 文件系統的全部數據塊數
  3. %c 文件系統的全部文件節點數
  4. %d 文件系統的可用文件節點數
  5. %f 文件系統的可用節點數
  6. %C SELinux的安全上下文
  7. %i 十六進制表示的文件系統 ID
  8. %l 文件名的最大長度
  9. %n 文件系統的文件名
  10. %s 塊大小(用於更快的傳輸)
  11. %S 基本塊大小(用於塊計數)
  12. %t 十六進制表示的文件系統類型
  13. %T 可讀格式表示的文件系統類型

這些信息都可以得到,stat 命令也許可以幫你以稍微不同的角度來了解你的文件。

不同應用場景的10個Linux面試問題與解答 http://www.linuxidc.com/Linux/2014-04/99710.htm

10個核心的Linux面試問題與答案 http://www.linuxidc.com/Linux/2014-04/100447.htm

Copyright © Linux教程網 All Rights Reserved