[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.3 stat: ファイルやファイルシステムの状態を報告する

stat は指定されたファイルに関する情報を表示する。

書式:

 
stat [option]… [file]…

オプションなしで実行すると、stat は指定されたファイルについてすべての情報を報告する。また、stat を使って、指定されたファイルが存在しているファイルシステムの情報を報告させることもできる。 ファイルがリンクの場合は、リンクが指しているファイルについて情報を提供させることも可能だ。

シェルの組み込み機能の stat やエイリアスのために、 stat に何の修飾も付けずに対話的に使ったり、スクリプトの中で使ったりすると、 動作がここで述べているものとは違うことがあるかもしれない。 シェルによる干渉を避けるためには、env 経由で stat を起動すればよい (すなわち、env stat … のようにだ)。

-L
--dereference

stat がシンボリックリンクを処理する方法を変更する。 このオプションを付けると、stat は、引数中の各シンボリックリンクが参照しているファイルを操作の対象にする。 このオプションがないと、stat が対象にするのは、引数のシンボリックリンクそのものになる。

-f
--file-system

指定されたファイルそのものについての情報ではなく、 そのファイルが存在しているファイルシステムについての情報を報告する。 このオプションを指定すると、自動的に ‘-L’ オプションも指定される。

-c
--format=format

デフォルトの書式の代わりに、format を使用する。 format の末尾には自動的に改行が付けられるので、 下記のようなコマンドを 2 個以上の file オペランドに対して実行すると、 各オペランドあたり 1 行の出力を生じることになる。

 
$ stat --format=%d:%i / /usr
2050:2
2057:2
--printf=format

デフォルトの書式の代わりに、format を使用する。‘--format’ に似ているが、バックスラッシュ・エスケープを解釈して変換する。 また、行末に自動的に改行を付けることもしない。そこで、改行がしたければ、 format 中で ‘\n’ を指定する必要がある。 ‘--printf’ を使って ‘/’ と ‘/usr’ のデバイス番号と inode 番号を表示するには、こんなふうにする。

 
$ stat --printf='%d:%i\n' / /usr
2050:2
2057:2
-t
--terse

情報を簡潔な形式で表示する。他のプログラムで解析するときに都合がよい。

下記の二つのコマンドの出力は全く同じである。また、下記の ‘--format’ は、デフォルトの出力書式が (もっと詳細な形で) 表示する項目とほぼ同じものを指定している。 もっとも、SELinux セキュリティ・コンテキストが有効になっている場合には、 このフォーマット文字列の末尾に、もう一つ ‘%C’ を付け加えることになるだろうが。

 
$ stat --format="%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" ...
$ stat --terse ...

--file-system’ モードのときの簡潔形式の出力を上と同じように説明的に表現すると、

 
$ stat -f --format="%n %i %l %t %s %S %b %f %a %c %d" ...
$ stat -f --terse ...

--format’ や ‘--printf’ の format 中で、 ファイルに対して使用できる書式指定子には以下のものがある。

%a’ という書式はファイルのモードを 8 進数で表示するので、 printf の ‘#’ と ‘0’ フラグを使って、出力の先頭のゼロ埋めをコントロールするとよい。 たとえば、先頭を 0 で埋めて、表示を少なくとも 3 桁にし、それより大きい数値も、 8 進数であることをはっきりさせるには、‘%#03a’ を使えばよい。

%N’ の書式は、環境変数 QUOTING_STYLE によって設定することができる。 その環境変数が設定されていない場合、デフォルトの値は、‘shell-escape’ である。使用できるクォーティングスタイルには、以下のものがある。

literal

文字列に手を加えず、そのまま出力する。これは、‘-N’ や ‘--literal’ オプションと同じである。

shell

文字列にシェルのメタ文字がある場合や、出力が誤解を招くものになりそうな場合に、 シェル向けのクォートを施す。このクォート方法は、bash のような POSIX 互換のシェルにはふさわしいものだが、 csh のような非互換のシェルでは、必ずしもうまく働くとはかぎらない。

shell-always

普通ならクォートが不要な場合でも、文字列にシェル向けのクォートを施す。

shell-escape

shell’ に似ているが、非表示文字のクォーティングに POSIX 提唱の ‘$''’ という書式を使用する。ほとんどのシェルに適している。 (訳注: ファイル名中に空白 (0x20) がある場合は、ファイル名全体をシングルクォートで囲む。)

shell-escape-always

shell-escape’ に似ているが、普通ならクォートが不要な場合でも、 文字列にクォートを施す。

c

C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。 文字列をダブル・クォートで囲むことも行う。 これは、‘-Q’ や ‘--quote-name’ オプションと同じである。

escape

C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。 ただし、文字列をダブル・クォートで囲むことはしない。 これは、‘-b’ や ‘--escape’ と同じである。

clocale

C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。 ただし、文字列を囲む引用符には、ロケールにふさわしいものを使う。

locale

C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。 ただし、文字列を囲む引用符には、ロケールにふさわしいものを使い、 さらに、デフォルトの C ロケールで言うと、"like this" ではなく、 ’like this’ のようにクォートを行う。この方が見栄えのよいディスプレイが多い。

%t’ や ‘%T’ という書式指定子は、stat(2) 構造体の st_rdev メンバ に対応するものであり、従って、キャラクタ・スペシャルファイルや ブロック・スペシャルファイルに対してしか動作が定義されていない。 システムやファイルタイプによっては、st_rdev が他のものを表現する ために使われていることもありえる。

%W’, ‘%X’, ‘%Y’, ‘%Z’ では、ピリオドに続けて精度を書くことで、 小数点以下何桁まで表示するかを指定することができる。たとえば、‘%.3X’ と指定すると、最終アクセス日時がミリ秒の精度で出力される。ピリオド だけ指定して、精度を省略すると、stat は 9 桁を使用する。従って、 ‘%.X’ は ‘%.9X’ と同じことになるわけだ。なお、余分な精度を捨てる際、 タイムスタンプは負の無限大方向に切り下げられる (訳注: 平たく言うと、 タイムスタンプのような正の数値の場合、指定された桁数より下の部分は切り捨てられるということ。 以下の例を参照)。

 
0 で埋める:
  $ stat -c '[%015Y]' /usr
  [000001288929712]
スペースで位置を揃える:
  $ stat -c '[%15Y]' /usr
  [     1288929712]
  $ stat -c '[%-15Y]' /usr
  [1288929712     ]
精度指定:
  $ stat -c '[%.3Y]' /usr
  [1288929712.114]
  $ stat -c '[%.Y]' /usr
  [1288929712.114951834]

%m’ によって表示されるマウントポイントは、df によるマウントポイントの出力とほぼ同じである。ただし、以下の点で異なっている。

ファイルシステムの情報をリストする際には (すなわち、‘--file-system’ (‘-f’) 使用時には)、書式指定子の別の一群を使わなければならない。

タイムスタンプは、タイムゾーンのルールに従って表示されるが、 そのルールを指定しているのは、環境変数 TZ である。 TZ が設定されていない場合は、システムのデフォルトのルールに従って表示される。 See (libc)TZ Variable section ‘Specifying the Time Zone with TZ’ in The GNU C Library Reference Manual.

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.