EN JA
STAT(1)
STAT(1) FreeBSD General Commands Manual STAT(1)

名称

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

書式

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

readlink [ -fn][ file ...]

解説

stat ユーティリティは、 file で指定されるファイルの情報を表示します。指定されたファイルの読み込み、書き込みまたは実行パーミッションは、要求されませんが、ファイルに至るパス名でリストされているすべてのディレクトリは、検索可能でなければなりません。引数を指定しないと、 stat は、標準入力のファイル記述子に関する情報を表示します。

readlink として起動すると、シンボリックリンクの対象のみが表示されます。与えられた引数がシンボリックリンクでなく、 -f オプションが指定されないなら、 readlink は、何も表示せず、エラーで終了します。 -f オプションが指定されるなら、出力は、再帰的に与えられたパスのあらゆる構成要素のあらゆるシンボリックリンクをたどることによって、正規化されます。 readlink は、絶対パスと相対パスの両方を解決して、 file に対応する絶対パス名を返します。この場合、引数は、シンボリックリンクである必要はありません。

指定した引数で lstat(2) を呼び出し、返される構造体を評価することで、表示される情報を取得します。デフォルトの形式は、 st_dev, st_ino, st_mode, st_nlink, st_uid, st_gid, st_rdev, st_size, st_atime, st_mtime, st_ctime, st_birthtime, st_blksize, st_blocksst_flags フィールドの順序で表示します。

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

-F
ls(1) での表示と同様、ディレクトリである各パス名の直後にスラッシュ (‘ /’) を、各実行形式の後にアスタリスク (‘ *’) を、各シンボリックリンクの後にアット記号 (‘ @’) を、各ホワイトアウトの後にパーセント記号 (‘ %’) を、各ソケットの後に等号 (‘ =’) を、各 FIFO の後に垂直棒 (‘ |’) を表示します。 -F を指定すると、 -l を暗黙的に指定します。
-L
lstat(2) の代りに stat(2) を使用します。 stat が報告する情報は、 file がシンボリックリンクの場合、その対象を参照し、 file 自身を参照するものではありません。リンクが壊れているか、またはターゲットが存在しないなら、 lstat(2) のエラーが表示され、リンクに関する情報を報告します。
-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
実際のデバイス名を表示します。
f
ls -lTdo のように file のフラグを表示します。
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 が存在するデバイス ( st_dev。)
i
file の inode 番号。
p
ファイルタイプとパーミッション ( st_mode。)
l
file へのハードリンク数 ( st_nlink。)
u, g
file の所有者のユーザ ID とグループ ID ( st_uid, st_gid。)
r
キャラクタスペシャルデバイスファイルとブロックスペシャルデバイスファイルに対するデバイス番号 ( st_rdev。)
a, m, c, B
それぞれ、 file の最終アクセス時刻、変更時刻、 inode の最終変更時刻、 inode の生成時刻 ( st_atime, st_mtime, st_ctime, st_birthtime。)
z
バイト単位の file のサイズ ( st_size。)
b
file に対して割り付けられているブロック数 ( st_blocks。)
k
ファイルシステム I/O 操作での最適なブロックサイズ ( st_blksize。)
f
file に対するユーザ定義のフラグ。
v
inode の世代番号 ( st_gen。)

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

N
ファイル名。
R
ファイルに対応する絶対パス名。
T
ファイルタイプであり、 ls -F フォーマットか、 sub フィールド指示子 H が指定された場合は、より記述的なフォーマット。
Y
シンボリックリンクの対象。
Z
キャラクタスペシャルデバイスまたはブロックスペシャルデバイスの rdev フィールドからは、“major,minor”に展開、他のものに対しては、サイズ出力。

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

終了ステータス

The stat and readlink utilities exit 0 on success, and >0 if an error occurs.

使用例

オプションが指定されないなら、デフォルトの形式は、 "%d %i %Sp %l %Su %Sg %r %z \"%Sa\"\"%Sm\"\"%Sc\"\"%SB\" %k %b %#Xf %N"です。

> stat /tmp/bar 
0 78852 -rw-r--r-- 1 root wheel 0 0 "Jul  8 10:26:03 2004" "Jul  8 10:26:03 2004" "Jul  8 10:28:13 2004" "Jan  1 09:00:00 1970" 16384 0 0 /tmp/bar

“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

ファイルの変更時間を表示するために:

> stat -f %m /tmp/foo 
1177697733

読み込み可能な形式で同じ変更時間を表示するために:

> stat -f %Sm /tmp/foo 
Apr 27 11:15:33 2007

読み込み可能でソート可能な形式で同じ変更時間を表示するために:

> stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo 
20070427111533

UTC で同じように表示するために:

> sh 
$ TZ= stat -f %Sm -t %Y%m%d%H%M%S /tmp/foo 
20070427181533

歴史

stat ユーティリティは、 NetBSD 1.6FreeBSD 4.10 で登場しました。

作者

stat ユーティリティは、 Andrew Brown <atatat@NetBSD.org>によって書かれました。このマニュアルページは、 Jan Schaumann <jschauma@NetBSD.org>によって書かれました。
April 22, 2012 FreeBSD