Linux中國

使用 Linux stat 命令創建靈活的文件列表

stat 命令提供了很多關於文件的詳細信息。

它不僅提供了文件最近變化的日期/時間,還顯示了最近訪問文件的時間和許可權變化。它可以同時告訴你文件的位元組大小和塊的數量。它可以顯示文件使用的 inode 以及文件類型。它包括了文件所有者和相關用戶組的名稱和 UID/GID。它以 「rwx」(被稱為 「人類可讀」 格式)和數字方式顯示文件許可權。在某些系統中,它甚至可能包括文件創建的日期和時間(稱為「出生」)。

除了提供所有這些信息外,stat 命令還可以用來創建文件列表。這些列表非常靈活,你可以選擇包含上述任何或全部信息。

要生成一個自定義列表,你只需要使用 stat 命令的 -c(或 --format)選項,並指定你想要包含的欄位。例如,要創建一個以兩種格式顯示文件許可權的列表,使用這個命令:

$ stat -c '%n %a %A' my*
my.banner 664 -rw-rw-r--
mydir 775 drwxrwxr-x
myfile 664 -rw-rw-r--
myjunk 777 lrwxrwxrwx
mykey 664 -rw-rw-r--
mylog 664 -rw-rw-r--
myscript 755 -rwxr-xr-x
mytext 664 -rw-rw-r--
mytext.bak 664 -rw-rw-r--
mytwin 50 -rw-r--mywords 664 -rw-rw-r--

如上例所示,%n 代表文件名,%a 代表八進位的許可權,%A 代表 rwx 形式的許可權。完整的列表如後面所示。

要為這個命令創建一個別名,輸入這個命令,或在 .bashrc 文件中添加這個定義。

$ alias ls_perms="stat -c '%n %a %A'"

要創建一個非常接近 ls -l 提供的長列表,可以這樣做:

$ stat -c '%A %h %U %G %s %y %n' my*
-rw-rw-r-- 1 shs shs 255 2020-04-01 16:20:00.899374215 -0400 my.banner
drwxrwxr-x 2 shs shs 4096 2020-09-07 12:50:20.224470760 -0400 mydir
-rw-rw-r-- 1 shs shs 6 2020-05-16 11:12:00.460355387 -0400 myfile
lrwxrwxrwx 1 shs shs 11 2020-05-28 18:49:21.666792608 -0400 myjunk
-rw-rw-r-- 1 shs shs 655 2020-01-14 15:56:08.540540488 -0500 mykey
-rw-rw-r-- 1 shs shs 8 2020-03-04 17:13:21.406874246 -0500 mylog
-rwxr-xr-x 1 shs shs 201 2020-09-07 12:50:41.316745867 -0400 myscript
-rw-rw-r-- 1 shs shs 40 2019-06-06 08:54:09.538663323 -0400 mytext
-rw-rw-r-- 1 shs shs 24 2019-06-06 08:48:59.652712578 -0400 mytext.bak
-rw-r----- 2 shs shs 228 2019-04-12 19:37:12.790284604 -0400 mytwin
-rw-rw-r-- 1 shs shs 1983 2020-08-10 14:39:57.164842370 -0400 mywords

不同之處包括: 1、不試圖將欄位排成可辨認的一列,2、日期是 yy-mm-dd 格式,3、時間欄位更精確,4、增加了時區(-0400 是 EDT)。

如果你想根據最後一次訪問的日期來列出文件(例如,用 cat 命令來顯示),使用這樣的命令:

$ stat -c '%n %x' my* | sort -k2
mytwin 2019-04-22 11:25:20.656828964 -0400
mykey 2020-08-20 16:10:34.479324431 -0400
mylog 2020-08-20 16:10:34.527325066 -0400
myfile 2020-08-20 16:10:57.815632794 -0400
mytext.bak 2020-08-20 16:10:57.935634379 -0400
mytext 2020-08-20 16:15:42.323391985 -0400
mywords 2020-08-20 16:15:43.479407259 -0400
myjunk 2020-09-07 10:04:26.543980300 -0400
myscript 2020-09-07 12:50:41.312745815 -0400
my.banner 2020-09-07 13:22:38.105826116 -0400
mydir 2020-09-07 14:53:10.171867194 -0400

stat 列出文件細節時,可用的選項包括:

  • %a - 八進位的訪問許可權(注意 #0 的 printf 標誌)
  • %A – 人類可讀的訪問許可權
  • %b – 分配的塊數(見 %B
  • %B%b 報告的每個塊的位元組數
  • %C – SELinux 安全上下文字元串
  • %d – 十進位的設備編號
  • %D – 十六進位的設備編號
  • %f – 十六進位的原始模式
  • %F – 文件類型
  • %g – 所有者的組 ID
  • %G – 所有者的組名
  • %h – 硬鏈接的數量
  • %i – inode 編號
  • %m – 掛載點
  • %n – 文件名
  • %N – 如果是符號鏈接,會解引用為指向的文件名
  • %o – 最佳 I/O 傳輸大小提示
  • %s – 以位元組為單位的總大小
  • %t – 十六進位的主要設備類型,用於字元/塊設備特殊文件
  • %T – 十六進位的次要設備類型,用於字元/塊設備特殊文件
  • %u – 所有者的用戶 ID
  • %U – 所有者的用戶名
  • %w – 文件創建時間,以人類可讀形式; 如果未知,則為 -
  • %W – 文件創建時間,以 UNIX 紀元以來的秒數形式;如果未知,則為 0
  • %x – 上次訪問時間,以人類可讀形式
  • %X – 上次訪問時間,以 UNIX 紀元以來的秒數形式
  • %y – 上次數據修改時間,以人類可讀形式
  • %Y – 上次數據修改時間,以 UNIX 紀元以來的秒數形式
  • %z – 上次狀態改變的時間,以人類可讀形式
  • %Z – 上次狀態改變的時間,以 UNIX 紀元以來的秒數形式

這些欄位的選擇都列在手冊頁中,你可以選擇任何一個,不過用你喜歡的選項創建一些別名應該可以省去很多麻煩。有些選項,如 SELinux 安全上下文字元串,除非在系統中有使用,它將不可用。文件創建時間只有在你的系統保留該信息的情況下才可用。

via: https://www.networkworld.com/article/3573802/using-the-linux-stat-command-to-create-flexible-file-listings.html

作者:Sandra Henry-Stocker 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國