Last Updated on 2023年5月4日 by かんりにん
ファイル、および当該ファイルのファイルシステムのステータスを表示する。
実際には、指定したファイルのinode情報を表示するコマンドの様子。
-参考にしたサイト
お世話になっております!
Linux and Unix stat command
Linux stat Command
statコマンドで確認できる情報
表示される情報は以下のとおり。
File: ファイル名 Size サイズ Blocks ブロック IO Block I/Oブロック (パラメータなし) ファイルの種類 Device デバイス Inode Iノード Link 対象ファイルへのリンク数 Access ファイルパーミッション Uid ユーザーID、オーナー名 Gid グループID、グループ名 Access 最終アクセス時刻 Modify 最終更新時刻(ファイルの中身の更新時刻) Change 最終更新時刻(パーミッション、inodeなどの更新時刻)
※パーミッション、最終アクセス時刻のパラメータが両方とも”Access”になってるので、紛らわしい…
オプション別の動作
オプションなしで実行すると、パラメーターと値が表示されるが
そのほか、よく使われると思われるオプションを以下に記載。
-t 簡易フォーマットでの表示 -f ファイルシステム情報を表示 -L シンボリックリンク先のファイルを表示 -c 指定したフォーマットの情報のみを出力する。
つづけて、各オプションごとの実行例を記載。
1)オプションなし
デフォルトのファイル情報を表示。
– 実行例:ファイルのステータス表示
オプションを指定しない場合、全ステータスが表示される。
$ stat EXAMPLE.txt File: `EXAMPLE.txt' Size: 1894 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 1146909 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 500/admin) Gid: ( 500/admin) Access: 2012-08-17 12:45:46.000000000 +0900 Modify: 2012-08-17 12:44:30.000000000 +0900 Change: 2012-08-17 12:44:30.000000000 +0900
2)オプション -t
簡易フォーマットでの表示
– 実行例:簡易フォーマットでの表示
$ stat -t EXAMPLE.txt EXAMPLE.txt 1894 8 81b4 500 500 fd00 1146909 1 0 0 1345175146 1345175070 1345175070 4096
違い:・パラメータが表示されない
・表示するステータスの順序がデフォルトのフォーマットと異なる
・それぞれのタイムスタンプがUNIX時間で表示される。
正直、あまり使いやすい印象はなかったが、CSVへの出力用、といった感じだろうか?
3)オプション -f
ファイルシステム情報を表示
– 実行例
$ stat -f EXAMPLE.txt File: "EXAMPLE.txt" ID: 0 Namelen: 255 Type: ext2/ext3 Block size: 4096 Fundamental block size: 4096 Blocks: Total: 2031470 Free: 1212315 Available: 1107458 Inodes: Total: 2097152 Free: 1972423
オプション ”stat -tf” とすると、簡易版としての表示も可能。
4)オプション -L
シンボリックリンク先のファイルを表示
statでシンボリックリンクを指定した場合、シンボリックリンクの情報が表示される。
リンク先の情報を得たい場合は、オプション-Lをつけると出力できる。
– 実行例1:オプションなしの場合
$ stat /usr/bin/zsoelim File: `/usr/bin/zsoelim' -> `soelim' Size: 6 Blocks: 8 IO Block: 4096 symbolic link Device: fd00h/64768d Inode: 568957 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2012-08-17 13:23:13.000000000 +0900 Modify: 2012-05-17 04:21:21.000000000 +0900 Change: 2012-05-17 04:21:21.000000000 +0900
– 実行例2:オプションありの場合
リンク先の実ファイルの情報が出力される。
$ stat -L /usr/bin/zsoelim File: `/usr/bin/zsoelim' Size: 23932 Blocks: 48 IO Block: 4096 regular file Device: fd00h/64768d Inode: 574036 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2012-08-12 04:03:30.000000000 +0900 Modify: 2012-02-23 23:22:55.000000000 +0900 Change: 2012-05-18 04:07:08.000000000 +0900
5)オプション -c
指定したフォーマットの情報のみを出力する。
以下、フォーマットとコマンド入力例の抜粋
-%g Group ID of owner(オーナーのグループID)
— 実行例
$ stat -c%g EXAMPLE.txt 500
-%s Total size, in bytes(トータルサイズ)
— 実行例
$ stat -c%s EXAMPLE.txt 1894
-%x Time of last access(最終アクセス時刻)
— 実行例
$ stat -c%x EXAMPLE.txt 2012-08-17 12:45:46.000000000 +0900
-%y Time of last modification(最終更新時刻)
— 実行例
$ stat -c%y EXAMPLE.txt 2012-08-17 12:44:30.000000000 +0900
-%z Time of last change(最終変更時刻)
— 実行例
$ stat -c%x EXAMPLE.txt 2012-08-17 12:45:46.000000000 +0900
そのほか、指定可能なフォーマット/情報は多数あるので、そのほかの引数については”man stat”で確認のこと。
そのほか、イロイロ試して気づいたこと
以下、参考程度に。
1)各タイムスタンプの動作の違いを確認
1.Access
– 事前に最終Access時刻をチェック
$ stat -c%x EXAMPLE.txt 2012-08-17 12:45:46.000000000 +0900
-ファイルの内容を表示してみる
$ cat EXAMPLE.txt ←ファイルを表示
– 出力後、再度最終Access時刻をチェック
$ stat -c%x EXAMPLE.txt 2012-08-17 16:08:31.000000000 +0900 ←最終アクセス時刻が更新されている。
2.Modify
– 事前に最終Modify時刻をチェック
$ stat -c%y EXAMPLE.txt 2012-08-17 12:44:30.000000000 +0900
-ファイルを編集・更新してみる
$ vi EXAMPLE.txt ←ファイルを編集し、上書き保存。
– 更新後、再度最終Modify時刻をチェック
$ stat -c%y EXAMPLE.txt 2012-08-17 16:09:41.000000000 +0900 ←最終更新時刻が更新されている。
3.Change
– 事前に最終change時刻をチェック
$ stat -c%z EXAMPLE.txt 2012-08-17 15:48:19.000000000 +0900
-ファイルのパーミッションを変更してみる
$ chmod 755 EXAMPLE.txt ←ファイルの属性を変更し、上書き保存。
– 変更後、再度最終change時刻をチェック
$ stat -c%z EXAMPLE.txt 2012-08-17 15:49:23.000000000 +0900 ←最終更新時刻が更新されている。
2)パラメータLinkについて
Linkのカウント対象となるのはハードリンクのみとなる。
シンボリックリンクはLinkにカウントされず、ファイルの種類がsymbolic linkとなる。
このパラメータの値が2以上の場合は複数のハードリンクがあることになる。