Linuxコマンド

statコマンドでファイルの情報を表示する

更新日:

statコマンドはファイルやファイルシステムの情報を表示するコマンドです。

私自身は今までファイルの情報、それも最終アクセス日時、最終修正日時、最終状態変更日時の確認にしか使ったことはありませんでした。これらのタイムスタンプの詳細は「最終アクセス日時(atime)、最終修正日時(ctime)、最終状態変更日時(mtime)とは」で説明していますので、よろしかったら参照してみてください。

今回あらためて調べてみて、いろいろな情報が表示できることわかりました。自分の好きなフォーマットでも出力できるので、スクリプトで解析しやすい形式で出力し、スクリプトで集計するといったこともできそうです。

ここで紹介する構文は次の通りです。多くの場合は、これで事足りるでしょう。

# stat ファイル名
# stat -c フォーマット文字列 ファイル名
# stat ファイル名 --printf=フォーマット文字列 ファイル名
# stat -f ファイル名

では使い方を順に見ていきましょう。

stat ファイル名

最初にオプションなしでファイルの情報を表示してみます。

# stat /etc/passwd
  File: `/etc/passwd'
  Size: 798       	Blocks: 8          IO Block: 4096   通常ファイル
Device: fd00h/64768d	Inode: 17279590    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2021-06-17 22:48:31.226000000 +0900
Modify: 2021-06-16 19:47:33.479000000 +0900
Change: 2021-06-16 19:47:33.480000000 +0900
 Birth: -

ラベル付きで表示されるので、出力内容は大体想像できるでしょう。lsコマンドで確認できる内容も多くあります。よく参照する内容は次の「最終アクセス日時(Access)」、「最終修正日時(Modify)」、「最終状態変更日時(Change)」です。

Access: 2021-06-17 22:48:31.226000000 +0900
Modify: 2021-06-16 19:47:33.479000000 +0900
Change: 2021-06-16 19:47:33.480000000 +0900

stat -c フォーマット文字列 ファイル名

statコマンドは好きな情報を好きなフォーマットで出力できます。それには出力フォーマットを「-c」オプションに指定します。

次の例では「最終アクセス日時」、「最終修正日時」、「最終状態変更日時」を空白で区切って出力しています。

# stat -c "Access: %x Modify: %x Change: %z" /etc/passwd
Access: 2021-06-17 22:48:31.226000000 +0900 Modify: 2021-06-17 22:48:31.226000000 +0900 Change: 2021-06-16 19:47:33.480000000 +0900

出力する内容は「%1文字」で指定します。使用できる文字はmanページで確認してください。

しかし、出力される文字列が長くて見づらいですね。次にこれを改善してみましょう。

stat --printf=フォーマット文字列 ファイル名

「--printf」オプションは「-c」と同様、必要な情報をフォーマットを指定して出力できます。しかし「--printf」ではエスケープシーケンスが使えます。

よく使うエスケープシーケンスは、改行を表す「%n」とタブを表す「%t」でしょう。例を見てみましょう。

# stat --printf="%n\t%s\nAccess: %x\nModify: %x\nChange: %z\n" /etc/passwd
/etc/passwd	798
Access: 2021-06-17 22:48:31.226000000 +0900
Modify: 2021-06-17 22:48:31.226000000 +0900
Change: 2021-06-16 19:47:33.480000000 +0900

1行目はファイル名とファイルのサイズをタブ区切りで表示しています。「最終アクセス日時」、「最終修正日時」、「最終状態変更日時」は改行して1つの項目を1行ずつ表示しています。

「-c」と異なり最後は改行されないので、フォーマット文字列の最後は「\n」で改行しています。

stat -f ファイル名

最後にファイルシステムの情報を表示して見ましょう。

# stat -f /etc/passwd
File: "/etc/passwd"
ID: fd0000000000 Namelen: 255     Type: xfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 5115392    Free: 4794290    Available: 4794290
Inodes: Total: 10235904   Free: 10208722

こんな情報も出力できるのですね。私自身は使わないので、ここでの説明は割愛させて頂きます。

おわりに

statコマンドはファイルについて多くの情報を取得できることがわかりました。出力内容や出力フォーマットを制御できるのもstatコマンドの大きな利点でしょう。

ファイルの情報取得にlsの代わりにstatコマンドを使ってみるのも良いでしょう。

-Linuxコマンド

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.