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コマンドを使ってみるのも良いでしょう。