\r\n\r\n

linuxでのstatコマンドの使い方

linuxstat コマンドは ls よりもはるかに詳細な情報を表示します。この情報量と設定可能なユーティリティを使えば、舞台裏を垣間見ることができます。その使い方を紹介する...

linuxstat コマンドは ls よりもはるかに詳細な情報を表示します。この情報量と設定可能なユーティリティを使えば、舞台裏を垣間見ることができます。その使い方をご紹介します。

statが舞台裏を紹介

lsコマンドは良い仕事をしてくれますし、たくさんのことをやってくれますが、Linuxでは、表面下にあるものをもう少し深く知る方法が常にあるようです。多くの場合、カーペットの端を持ち上げているだけの例ではありません。床をはがし、穴を掘ればいいのです。Linuxは玉ねぎと同じように皮をむくことができます。

lsは、ファイルに設定されているパーミッション、ファイルのサイズ、ファイルなのかシンボリックリンクなのかなど、ファイルに関する多くの情報を表示します。この情報を表示するために、lsはinodeと呼ばれるファイルシステムの構造から情報を読み取ります。

inode はファイルの図書館カードのようなものです.でも、いくつかの情報だけは教えてあげます。すべてを見るには、statコマンドを使う必要があります。

lsと同様に、statコマンドにも多くのオプションがあります。そのため、エイリアスを使うのに最適なのです。statが望む出力を提供できる特定のオプションのセットを見つけたら、それをエイリアスやシェル関数でラップすることができます。このため、コマンドラインオプションの不明瞭なセットを覚える必要がなく、使い勝手が格段に良くなっています。

関連:Linuxでlsコマンドを使ってファイルやディレクトリを一覧表示する方法

クイック比較

lsを使って、人間が読めるサイズの長いリスト(-lオプション)を出してみましょう(-hオプション)。

ls -lh ana.h

左から順に、lsが提供する情報です。

  • 最初の文字はハイフン「-」で、ソケットやシンボリックリンクなどのオブジェクトではなく、通常のファイルであることを示します。
  • オーナー、グループ、その他のパーミッションは8進数で表示されます。
  • このファイルを指すハードリンクの数。この場合、ほとんどの場合、1つになります。
  • ドキュメントの所有者はDaveです。
  • グループのオーナーはDaveです。
  • ファイルサイズは802byteです。
  • この文書の最終更新日は2015年12月13日(金)です。
  • ファイル名は、ana.c です。

統計を見てみよう。

stat ana.h

スタットから得られる情報は

  • File:ファイル名。通常はコマンドラインでstatに渡したものと同じ名前になりますが、シンボリックリンクを見ると違う場合もあります。
  • サイズ:ファイルのサイズをバイト数で表したもの。
  • ブロック数:ファイルがハードディスクに保存されるために必要なファイルシステムのブロック数です。
  • IOブロック:ファイルシステムブロックのサイズ。
  • ファイルタイプ:メタデータによって記述されるオブジェクトのタイプ。最も一般的なタイプはファイルとディレクトリであるが、リンク、ソケット、名前付きパイプの場合もある。
  • デバイス:16進数および10進数のデバイス番号。ファイルが保存されているドライブのIDです。
  • Inode: Inode番号。inode番号とデバイス番号を合わせて、ファイルを一意に識別することができます。
  • リンク:この数字は、ファイルを指し示すハードリンクの数を示します。各ハードリンクはそれぞれinodeを持っているので、この数字を考える別の方法は、このファイルを指しているinodeがいくつあるかということです。この数値は、ハードリンクが作成または削除されるたびに、上下に調整されます。0になると、ファイル自体が削除され、inodeも削除される。ディレクトリに対して stat を使用する場合、この数値は、カレントディレクトリの "." と親ディレクトリの "." を含むディレクトリ内のファイル数を示す。の項目と、親ディレクトリの「.のエントリーをご覧ください。
  • アクセス:ファイルのパーミッションは8進数で表示され、従来のrwx(read, write, execute形式)です。
  • Uid:所有者のユーザー名とアカウント名。
  • Gid:所有者のグループID、アカウント名。
  • アクセス:アクセスのタイムスタンプ。一筋縄ではいきません。最近のLinuxディストリビューションでは、アクセスタイムの更新に必要なハードディスクの書き込みを最適化しようとするrelatimeと呼ばれるスキームが採用されている。簡単に言えば、アクセス時刻が修正時刻より早ければ、アクセス時刻が更新される。
  • 修正:タイムスタンプを修正する。ファイルの内容が最後に変更された時刻です。(幸い、このファイルの内容は4年前の今日、最後に変更されています)。
  • 変更:タイムスタンプを変更します。ファイルの属性または内容が最後に変更された時刻です。新しいファイルパーミッションを設定してファイルを変更した場合、変更タイムスタンプは更新されますが(ファイル属性が変更されたため)、変更タイムスタンプは更新されません(ファイルの内容が変更されていないため)。
  • Born:ファイルのオリジナル作成日を表示するために予約されているが、Linuxでは実装されていない。

タイムスタンプを理解する

タイムスタンプはタイムゾーンに依存します。各行の末尾にある-0500は、このファイルが協定世界時(UTC)のタイムゾーンにあるコンピューターで作成されたことを示します(現在のコンピューターのタイムゾーンより5時間進んでいます)。つまり、このコンピュータは、このファイルを作成したコンピュータより5時間遅れているのです。実は、このファイルはイギリスのタイムゾーンにあるコンピューターで作成され、私たちはアメリカの東部標準時間帯にあるコンピューターでこのファイルを見ているのです。

タイムスタンプの修正と変更は、初期化されていない人にとっては、それらの名前が同じことを意味するかのように聞こえるため、混乱することがあります。

chmodを使って、ana.cというファイルのパーミッションを変更してみましょう。誰もが書き込めるようにする。これはファイルの内容には影響しませんが、ファイルの属性には影響します。

chmod +w ana.c

次に、stat を使ってタイムスタンプを確認します:。

stat ana.c

変更タイムスタンプは更新されましたが、変更タイムスタンプはまだ更新されていません。

変更タイムスタンプは、ファイルの内容が変更された場合のみ更新されます。変更タイムスタンプは、内容の変更と属性の変更の両方に対して更新されます。

複数のファイルに対してstatを使用する

複数のファイルに対して同時にSTATレポートを実行するには、コマンドラインで以下のようにファイル名をSTATに渡します。

stat ana.h ana.o

ファイル群に対してstatを使用するには、パターンマッチを使用します。クエスチョンマーク」?は任意の1文字、アスタリスク "*"は任意の文字列を示す。以下のコマンドで、拡張子が "ana "のファイルを報告するようにstatに指示することができます。

stat ana.?

statを使ったファイルシステムに関するレポート

stat は、ファイルシステムの状態とファイルの状態を報告することができます。 f (filesystem) オプションは、ファイルが置かれているファイルシステムを報告するように stat に指示します。なお、statにはファイル名ではなく、"/"のようなディレクトリを渡すこともできる。

stat -f ana.c

スタットからの私たちへのメッセージです。

  • File:ファイル名。
  • ID:16進数で表記したファイルシステムID。
  • Namelen:ファイル名に許される最大長。
  • Type: ファイルシステムの種類。
  • ブロックサイズ:最適なデータ転送速度を得るために、読み取り要求時に要求されるデータ量。
  • ベースブロックサイズ:各ファイルシステムブロックのサイズ。

妨げとなるもの

  • Total:ファイルシステム内の全ブロックの総数。
  • Free:ファイルシステム内の空きブロック数。
  • Available:一般ユーザー(非ルートユーザー)が利用可能なブロック数。

インデックスノード。

  • Total:ファイルシステムのinodeの総数。
  • Free:ファイルシステム内の空きinodeの数。

アンクォートのシンボリックリンク

実際にシンボリックリンクであるファイルに対してstatを使用すると、そのリンクが報告されます。statにリンク先のファイルを報告させたい場合は、-L (dereference) オプションを使用します。code.cは、ana.cへのシンボリックリンクです。では、-Lオプションがない場合の状況を見てみましょう。

stat code.c

ファイル名はcode.cが(->)ana.cを指していることを示しています。このリンクを格納するための専用ブロックはありません。ファイルの種類はシンボリックリンクと表示されます。

明らかに、ここでは実際のファイルを見ていない。もう一度、-Lオプションを付けてやってみよう。

stat -L code.c

シンボリックリンクの指し示すファイルの詳細が表示されるようになりました。ただし、ファイル名はcode.cのままであることに注意してください。これはリンク先のファイル名であり、ターゲットファイルではありません。これは、コマンドラインでstatに渡した名前がこれだったからです。

簡潔なレポート

t (concise) オプションを使用すると、stat は以下の簡潔な要約を提供することができます。

stat -t ana.c

フィールドの並びを覚えるまで理解するためには、この出力とフルスタット出力を照らし合わせる必要があるため、手がかりはありません。

カスタマイズされた出力フォーマット

statから異なるデータセットを取得するためのより良い方法は、カスタムフォーマットを使用することです。フォーマットシーケンスと呼ばれる長いタグのリストがあります。それぞれがデータエレメントを表しています。出力に含めたいものを選択し、フォーマット文字列を作成します。statを呼び出してフォーマット文字列を渡すと、出力には要求したデータ要素のみが含まれます。

ファイルとファイルシステムは異なるフォーマット配列のセットを持っています。ファイルのリストは

  • a:8進数でアクセスします。
  • 答え:人間が読める形式のアクセス(rwx)
  • b:割り当てられたブロック数です。
  • B:各ブロックのサイズ(バイト)です。
  • d: デバイス番号(10進数)。
  • D:デバイス番号(16進数)。
  • f:オリジナルモード(16進数)。
  • % ファイルタイプ。
  • g:所有者のグループID。
  • G:所有者のグループ名です。
  • h:ハードリンクの数です。
  • i:インデックス・ノード番号。
  • m:マウントポイント。
  • n:ファイル名。
  • N:参照されるファイルの名前、またはシンボリックリンクの場合は参照されないファイルの名前です。
  • o: 最適な I/o 転送サイズに関するヒント。
  • バイト単位の合計サイズ。
  • t:キャラクタ/ブロック・デバイスの特殊ファイルに対する16進数の主デバイス・タイプ。
  • T:キャラクタ/ブロック・デバイスの特殊ファイルに対するセカンダリ・デバイス・タイプ(16進数)です。
  • u:所有者のユーザーIDです。
  • U:所有者のユーザー名です。
  • w:ファイルの誕生時刻。可読性があり、不明な場合はハイフン"-"で表示されます。
  • W:ファイルが生成された時間。Epochからの秒数で、不明の場合は0。
  • x:最終訪問時刻、可読性。
  • X:前回訪問時の時刻、エポックからの秒数。
  • y:データが最後に更新された時刻、読み取り可能な時刻。
  • Y:最後にデータが変更された時刻、エポックからの秒数。
  • z:最後に状態が変化した時刻、可読性。
  • Z:最後に状態が変化した時刻、新しいエポックの開始からの秒数。

"epoch "は、1970-01-01 00:00:00+0000 (UTC)に発生したUnixエポックである。

ファイルシステムの場合、フォーマットシーケンスは

  • a:通常の (ルートでない) ユーザーが使用できる空きブロックの数です。
  • b:ファイルシステム内の総データブロック数。
  • c:ファイル・システム内のインデックス・ノードの合計数です。
  • ファイルシステム内の空きinodeの数。
  • f: ファイル・システムの空きブロック数です。
  • i: ファイル・システム ID (16進数)。
  • l: ファイル名の最大長。
  • n:ファイル名。
  • s: ブロックサイズ (最適な書き込みサイズ)
  • S: ファイル・システム・ブロックのサイズ (ブロック・カウント用)。
  • t: 16進数で表したファイル・システム・タイプ。
  • T: ファイル・システム・タイプ(可読形式)。

フォーマットシーケンスで文字列を受け入れるには、2つのオプションがあります。両者の違いは、--printfは改行やタブなどのC言語のエスケープシーケンスを解釈し、出力に自動的に改行を加えないことです。

フォーマット文字列を作成し、statに渡す。使用するフォーマットシーケンスは、ファイル名が%n、ファイルサイズが%s、ファイルタイプが%Fである。ここでは、各ファイルが改行されて処理されるように、文字列の末尾にエスケープシーケンス「 \n 」を追加しています。フォーマット文字列は次のようになります。

"File %n is %s bytes, and is a %F\n"

これを --printf オプションを使って stat に渡します。stat に code.c というファイルと ana にマッチする一連のファイルを報告するよう依頼します。これがコマンドの全文です。なお、--printfとフォーマット文字列の間には、等号「=」が入ります。

stat --printf="File %n is %s bytes, and is a %F\n" code.c ana/ana.?

各ファイルのレポートは新しい行にリストされ、それは我々が要求するものです。我々は、ファイル名、ファイルサイズ、ファイルタイプを提供します。

カスタムフォーマットでは、標準の統計出力に含まれるものよりも多くのデータ要素にアクセスすることができます。

微細な粒子制御

このように、特定のデータ要素を抽出する余地は十分にあるのです。また、より長く、より複雑な呪文にエイリアスを使用することを推奨する理由もご理解いただけると思います。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ