STAT(1)

名称
stat, readlink - ファイルの状態の表示

書式
stat [-FLnq] [-f format | -l | -r | -s | -x] [-t timefmt] [file ...] readlink [-n] [file ...]

解説
stat ユーティリティは、 file で指定されるファイルの情報を表示します。 ファイルに対する、読み・書き・実行の権限は必要ではありませんが、 ファイルに到達するまでのパス名に列挙されているすべてのディレクトリは 検索可能であることが必要です。 引数を指定しないと、 stat は、標準入力のファイル記述子に関する情報を表示します。

readlink として起動すると、シンボリックリンクの対象のみが表示されます。 指定した引数がシンボリックリンクではない場合、 readlink は何も表示せず、エラーで終了します。

指定した引数で lstat(2) を呼び出し、返される構造体を評価することで、表示される情報を取得します。

オプションは次の通りです:

-F  ls(1) での表示と同様、ディレクトリである各パス名の直後にスラッシュ (‘/’) を、各実行形式の後にアスタリスク (‘*’) を、各シンボリックリンクの後にアット記号 (‘@’) を、各ホワイトアウトの後にパーセント記号 (‘%’) を、各ソケットの後に等号 (‘=’) を、各 FIFO の後に垂直棒 (‘|’) を表示します。 -F を指定すると、 -l を暗黙的に指定します。

-L  lstat(2) の代りに stat(2) を使用します。 stat が報告する情報は、 file がシンボリックリンクの場合、その対象を参照し、 file 自身を参照するものではありません。

-n  出力の各部分の最後に、改行を強制しません。

-q  stat(2) や lstat(2) の呼び出しが失敗しても、失敗のメッセージを抑制します。 readlink として実行すると、エラーメッセージは自動的に抑制されます。

-f format
    指定したフォーマットを使用して情報を表示します。 正しいフォーマットに関しては、 フォーマット 節を参照してください。

-l  ls -lT フォーマットで表示します。

-r  生の情報を表示します。 stat 構造体のすべてのフィールドに対し、生の数値 (例えば、基準時点から経過した秒数など) を表示します。

-s  変数の初期化に適した、 “シェル出力” で情報を表示します。

-x  ある種の Linux ディストリビューションで使われている冗長な方法で情報を表示します。

-t timefmt
    指定したフォーマットでタイムスタンプを表示します。 このフォーマットは直接 strftime(3) に渡されます。

  フォーマット
フォーマット文字列は printf(3) フォーマットに似ており、 % で開始し、それに一連のフォーマット文字が続き、 フォーマット対象の struct stat のフィールドを選択する 1 文字で終了します。 % の直後に n, t, %, @ が続くと、 改行文字、タブ文字、パーセント文字、現在のファイル番号が表示されます。 それ以外の場合、文字列は次のように解釈されます:

以下は省略可能なフラグです:

#   8 進数および 16 進数の出力に対し、別の出力形式を選択します。 非 0 の 8 進数は前に 0 が付き、非 0 の 16 進数は前に “0x” が付くようになります。

+   数値の正負を示す符号を常に表示するよう、指示します。 非負の数値は、通常は符号付きでは表示されません。

-   出力文字列を、フィールドの右ではなく左に揃えます。

0   フィールドの左側を埋める文字を、空白の代りに文字 ‘0’ にします。

空白  非負の符号付き出力フィールドの前の空白を保持します。 ‘+’ と空白の両方が指定された場合、 ‘+’ が優先します。

その後に下記のフィールドが続きます:

size
    省略可能な 10 進数文字列であり、最小のフィールド幅を指定します。

prec
    省略可能な精度であり、小数点 ‘’. と 10 進数文字列からなります。 文字列出力での最大長か、 浮動小数点数出力での小数点の後に続く桁数か、 数値出力での最小桁数を指定します。

fmt 省略可能な、出力フォーマット指示子です。 D, O, U, X, F, S のいずれかです。 それぞれ、 符号付き 10 進数出力、 8 進数出力、 符号無し 10 進数出力、 16 進数出力、 浮動小数点数出力、 文字列出力です。 フィールドによっては、使用できない出力フォーマットがあります。 浮動小数点数出力は、 timespec フィールド (a, m, c フィールド) に対してのみ使用可能です。

    使用可能ならば、特別な出力指示子 S を使用し、文字列フォーマットを指定可能です。 下記のものと組み合わせることができます:

    amc 日付を strftime(3) フォーマットで表示します。

    dr  実際のデバイス名を表示します。

    gu  グループまたはユーザの名前を表示します。

    p   file のモードを ls -lTd のフォーマットで表示します。

    N   file の名前を表示します。

    T   file のタイプを表示します。

    Y   出力に “ - ” を挿入します。 Y に対するデフォルトの出力フォーマットは文字列ですが、 明示的に指定された場合にはこれらの 4 文字が前に付くことに注意してください。

sub 省略可能なサブフィールド指示子 (高・中・低) です。 p, d, r, T 出力フォーマットに対してのみ使用可能です。 サブフィールド指示子は次のいずれかです:

    H   “高” — r, d に対してはデバイスのメジャー番号、 p の文字列フォーマットに対しては権限の “user” 部分、 p の数値フォーマットに対してはファイルの “type” 部分、 T に対しては長い出力フォーマット。

    L   “低” — r, d に対してはデバイスのマイナ番号、 p の文字列フォーマットに対しては権限の “other” 部分、 p の数値フォーマットに対してはファイルの “user”, “group”, “other” 部分、 T に対してはファイルタイプを表現する ls -F スタイルの出力文字 (これに対する L は省略可能です)。

    M   “中” — p の文字列フォーマットに対しては権限の “group” 部分、 p の数値フォーマットに対してはファイルの “suid”, “sgid”, “sticky” 部分。

datum
    必須のフィールド指示子であり、下記のいずれかひとつです:

    d   file が存在するデバイス。

    i   file の inode 番号。

    p   ファイルタイプと権限。

    l   file に対するハードリンク数。

    u, g
        file 所有者のユーザ ID とグループ ID。

    r   キャラクタスペシャルデバイスファイルとブロックスペシャルデバイスファイル に対する、デバイス番号。

    a, m, c, B
        それぞれ、 file の最終アクセス時刻、 file の最終変更時刻、 inode の最終変更時刻、 inode の生成時刻。

    z   バイト単位での file の大きさ。

    b   file に対して割り当てられているブロック数。

    k   ファイルシステム I/O 操作での最適なブロックサイズ。

    f   file に対するユーザ定義のフラグ。

    v   inode の世代番号。

    下記の 4 個のフィールド指示子は、 struct stat から直接取り出せるものではありませんが、指定可能です:

    N   ファイル名。

    T   ファイルタイプであり、 ls -F フォーマットか、 sub フィールド指示子 H が指定された場合はより記述的なフォーマット。

    Y   シンボリックリンクの対象。

    Z   キャラクタスペシャルデバイスまたはブロックスペシャルデバイスの rdev フィールドからは “major,minor” に展開、他のものに対してはサイズ出力。

% とフィールド指示子のみが必須です。 ほとんどのフィールド指示子の出力フォーマットのデフォルトは U です。 例外は次の通りです。 p のデフォルトは O であり、 a, m, c のデフォルトは D であり、 Y, T, N のデフォルトは S です。

終了状態

使用例
foo が /tmp/foo から / を指すシンボリックリンクの場合、 stat を次のように使用できます:

     stat -F /tmp/foo
    lrwxrwxrwx 1 jschauma cs 1 Apr 24 16:37:28 2002 /tmp/foo@ - /
     stat -LF /tmp/foo
    drwxr-xr-x 16 root wheel 512 Apr 19 10:57:54 2002 /tmp/foo/

シェル変数を初期化するために、 -s 変数を次のように使用できます:

     csh
    % eval set `stat -s .cshrc`
    % echo $st_size $st_mtimespec
    1148 1015432481
     sh
    $ eval $(stat -s .profile)
    $ echo $st_size $st_mtimespec
    1148 1015432481

ファイルの種類の一覧を、 ファイルがシンボリックリンクの場合には指されるファイルを含めて表示するには、 次のフォーマットを使用可能です:

    $ stat -f "%N: %HT%SY" /tmp/*
    /tmp/bar: Symbolic Link - /tmp/foo
    /tmp/output25568: Regular File
    /tmp/blah: Directory
    /tmp/foo: Symbolic Link - /

デバイス一覧を、それらのタイプ・メジャーデバイス番号・マイナデバイス番号 付きで表示し、タブと改行で整形するには、次のフォーマットを使用可能です:

    stat -f "Name: %N%n%tType: %HT%n%tMajor: %Hr%n%tMinor: %Lr%n%n" /dev/*
    [...]
    Name: /dev/wt8
            Type: Block Device
            Major: 3
            Minor: 8
    Name: /dev/zero
            Type: Character Device
            Major: 2
            Minor: 12

ファイルに対して設定されたそれぞれの権限を特定するには、 次のフォーマットを使用可能です:

     stat -f "%Sp - owner=%SHp group=%SMp other=%SLp" .
    drwxr-xr-x - owner=rwx group=r-x other=r-x

最も最近修正された 3 個のファイルを特定するには、 次のフォーマットを使用可能です:

     stat -f "%m%t%Sm %N" /tmp/* | sort -rn | head -3 | cut -f2-
    Apr 25 11:47:00 2002 /tmp/blah
    Apr 25 10:36:34 2002 /tmp/bar
    Apr 24 16:47:35 2002 /tmp/foo

関連項目
file(1), ls(1), lstat(2), readlink(2), stat(2), printf(3), strftime(3)

歴史
stat ユーティリティは NetBSD 1.6 に登場しました。

作者
-nosplit stat ユーティリティは Andrew Brown <atatat@NetBSD.org> が記述しました。 このマニュアルページは Jan Schaumann <jschauma@NetBSD.org> が記述しました。