harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

[Linux]statコマンド

   


ファイル、および当該ファイルのファイルシステムのステータスを表示する。
実際には、指定したファイルのinode情報を表示するコマンドの様子。

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<format>	指定したフォーマットの情報のみを出力する。

つづけて、各オプションごとの実行例を記載。

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<format>

指定したフォーマットの情報のみを出力する。
以下、フォーマットとコマンド入力例の抜粋

  • %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以上の場合は複数のハードリンクがあることになる。

 

[改訂第3版]Linuxコマンドポケットリファレンス
沓名 亮典
技術評論社
売り上げランキング: 30,282

 

Linuxシステム[実践]入門 (Software Design plus)
沓名 亮典
技術評論社
売り上げランキング: 123,634

 

 - bash, command, GNU/Linux, 備忘録, 運用