コンテンツにスキップ

ファイルの詳細情報を確認したい

概要

statコマンドは、ファイルに関する詳細な情報を表示するために使用されるコマンドラインツールです。ls -lコマンドでは、ファイルの所有者やパーミッションなどファイルに関するより詳細な情報を提供しますが、statコマンドはさらに細かい情報を確認できます。

Linuxのstatコマンドの構文は、以下のとおりです。

stat [OPTION] ファイル名1 ファイル名2...

コマンドの詳細については、helpオプションを使用して確認できます。

stat --help

引数無しのstatコマンド

パラメータを指定しないでstatコマンドを実行すると、デフォルトの出力を表示します。この出力には、ファイルのサイズと種類、デバイスの種類、inode番号、UID、GID、リンク数、アクセス/更新日時などが含まれます。 たとえば、現在のホームディレクトリにあるファイルの詳細を表示するには、次のように実行します。

$ stat file1.txt

各項目の内容は以下のとおりです。

項目 説明
File ファイル名
Size ファイルの大きさ(Bytes)
Block ファイルに割り当てられているブロックの数
IO Block ブロックごとのバイトサイズ
Device デバイス番号(16進数または10進数)
Inode ファイルのinode番号
Links ファイルに関連するハードリンクの数
Access シンボル形式または数値形式のファイルパーミッション
Uid 所有者のユーザーIDおよび名前
Gid グループIDおよび所有者の名前
Context SELinuxのセキュリティコンテキスト
File Type ファイルの種類(通常のファイルか、シンボリックリンクかなど)
Access ファイルが最後にアクセスされた時刻
Modify ファイルの内容が最後に変更された日時
Change ファイルのメタデータ(パーミッションや所有権など)が最後に変更された日時

ファイルシステムの状態を表示する

-fオプションを使用すると、ファイルが置かれているファイルシステムの状態を確認することができます。ブロックサイズ、総ブロック数、空きブロック数など、いくつかの属性が表示されます。

stat -f /home

実行結果

  File: "/var"
    ID: fd0300000000 Namelen: 255     Type: xfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 132848765  Free: 129860959  Available: 129860959
Inodes: Total: 265827328  Free: 265631487

簡潔な表現で情報を表示する

tオプションは、以下のように、情報を簡潔なフォーマットで表示するために使用されます。シェルで出力結果を連携して処理するのに向いています。

$ stat -t /etc/hosts

実行結果

/etc/hosts 158 8 81a4 0 0 fd03 268444994 1 0 0 1646368204 1536580263 1619747299 1584771715 4096

シンボリックリンクの追跡を有効にする

通常、シンボリックリンクに対してstatコマンドを実行すると、リンクに関する情報のみが得られ、リンクが指し示すファイルに関する情報は得られません。例えば、/etc/system-releaseというシンボリックリンクがあるとします。

stat /etc/system-release

実行結果

  File: /etc/system-release -> almalinux-release
  Size: 17              Blocks: 0          IO Block: 4096   シンボリックリンク
Device: fd03h/64771d    Inode: 268444971   Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-03-05 05:10:05.744408221 +0900
Modify: 2021-12-22 04:51:00.000000000 +0900
Change: 2021-12-26 04:36:42.830507826 +0900
 Birth: 2021-12-26 04:36:42.830507826 +0900

上記の例では、シンボリックリンクの /etc/system-release が almalinux-release を指しています。 リンクが指すファイルの情報を得るには、-Lオプション(dereferenceオプションとも呼ばれる)を使用します。

stat -L /etc/system-release

実行結果

  File: /etc/system-release
  Size: 38              Blocks: 8          IO Block: 4096   通常ファイル
Device: fd03h/64771d    Inode: 268569981   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-03-01 05:10:19.091125110 +0900
Modify: 2021-12-22 04:51:00.000000000 +0900
Change: 2021-12-26 04:36:42.822508121 +0900
 Birth: 2021-12-26 04:36:42.822508121 +0900

リンクではなく、ファイルに関する情報を表示するようになりました。

書式の順序付け

特定の情報が必要な場合、フォーマット・シーケンスを使用して出力をカスタマイズし、必要なものだけを表示することができます。 出力をカスタマイズするためによく使われる表現には、-printfまたは-formatオプションがあります。

例えば、ファイルのinodeのみを表示する場合は、図のように%iの書式列を使用します。nオペランドは、改行を表示します。

stat --printf='%in' file1.txt

アクセス権やuid(ユーザーID)を表示するには、%aおよび%uの書式シーケンスを使用します。

stat --printf='%a:%un' file1.txt

format オプションは、追加のオペランドを必要とせずに、新しい行を出力します。

stat --format='%a:%F' file1.txt

以下は使用できる書式シーケンスの全リストです。

オペランド 項目
%a アクセス権(8進数)
%A アクセス権(人間が読みやすい形式)
%b 割り当てられたブロックの数
%B %bによって報告される各ブロックのサイズ(バイト)
%C SELinuxセキュリティコンテキスト文字列
%d デバイス番号(10進数)
%D デバイス番号(16進数)
%f rawモード(16進数)
%F ファイルタイプ
%g 所有者のグループID
%G 所有者のグループ名
%h ハードリンクの数
%i inode番号
%m マウントポイント
%n ファイルのファイル名
%N シンボリックリンクの場合、デリファレンスで引用されたファイル名
%o 最適なI/O転送サイズのヒント
%s 総サイズ(バイト)
%t メジャー・デバイス・タイプ(16進数、キャラクタ/ブロックデバイス特殊ファイルの場合)
%T マイナーデバイスの種類(16進数、キャラクタ/ブロックデバイス特殊ファイルの場合)
%u 所有者のユーザーIDを表示
%U 所有者のユーザー名を表示
%w ファイルが作成された時刻
%W ファイルが作成された時刻(エポックからの秒数)
%x 最後にアクセスした時刻
%X 最終アクセス時刻(エポックからの秒数)
%y 最終更新時刻
%Y 最終更新時刻(エポックからの秒数)
%z 最終変更時刻
%Z 最終更新時刻(エポックからの秒数)