\r\n\r\n
linuxstat コマンドは ls よりもはるかに詳細な情報を表示します。この情報量と設定可能なユーティリティを使えば、舞台裏を垣間見ることができます。その使い方をご紹介します。
lsコマンドは良い仕事をしてくれますし、たくさんのことをやってくれますが、Linuxでは、表面下にあるものをもう少し深く知る方法が常にあるようです。多くの場合、カーペットの端を持ち上げているだけの例ではありません。床をはがし、穴を掘ればいいのです。Linuxは玉ねぎと同じように皮をむくことができます。
lsは、ファイルに設定されているパーミッション、ファイルのサイズ、ファイルなのかシンボリックリンクなのかなど、ファイルに関する多くの情報を表示します。この情報を表示するために、lsはinodeと呼ばれるファイルシステムの構造から情報を読み取ります。
inode はファイルの図書館カードのようなものです.でも、いくつかの情報だけは教えてあげます。すべてを見るには、statコマンドを使う必要があります。
lsと同様に、statコマンドにも多くのオプションがあります。そのため、エイリアスを使うのに最適なのです。statが望む出力を提供できる特定のオプションのセットを見つけたら、それをエイリアスやシェル関数でラップすることができます。このため、コマンドラインオプションの不明瞭なセットを覚える必要がなく、使い勝手が格段に良くなっています。
関連:Linuxでlsコマンドを使ってファイルやディレクトリを一覧表示する方法
lsを使って、人間が読めるサイズの長いリスト(-lオプション)を出してみましょう(-hオプション)。
ls -lh ana.h左から順に、lsが提供する情報です。
統計を見てみよう。
stat ana.hスタットから得られる情報は
タイムスタンプはタイムゾーンに依存します。各行の末尾にある-0500は、このファイルが協定世界時(UTC)のタイムゾーンにあるコンピューターで作成されたことを示します(現在のコンピューターのタイムゾーンより5時間進んでいます)。つまり、このコンピュータは、このファイルを作成したコンピュータより5時間遅れているのです。実は、このファイルはイギリスのタイムゾーンにあるコンピューターで作成され、私たちはアメリカの東部標準時間帯にあるコンピューターでこのファイルを見ているのです。
タイムスタンプの修正と変更は、初期化されていない人にとっては、それらの名前が同じことを意味するかのように聞こえるため、混乱することがあります。
chmodを使って、ana.cというファイルのパーミッションを変更してみましょう。誰もが書き込めるようにする。これはファイルの内容には影響しませんが、ファイルの属性には影響します。
chmod +w ana.c次に、stat を使ってタイムスタンプを確認します:。
stat ana.c変更タイムスタンプは更新されましたが、変更タイムスタンプはまだ更新されていません。
変更タイムスタンプは、ファイルの内容が変更された場合のみ更新されます。変更タイムスタンプは、内容の変更と属性の変更の両方に対して更新されます。
複数のファイルに対して同時にSTATレポートを実行するには、コマンドラインで以下のようにファイル名をSTATに渡します。
stat ana.h ana.oファイル群に対してstatを使用するには、パターンマッチを使用します。クエスチョンマーク」?は任意の1文字、アスタリスク "*"は任意の文字列を示す。以下のコマンドで、拡張子が "ana "のファイルを報告するようにstatに指示することができます。
stat ana.?stat は、ファイルシステムの状態とファイルの状態を報告することができます。 f (filesystem) オプションは、ファイルが置かれているファイルシステムを報告するように stat に指示します。なお、statにはファイル名ではなく、"/"のようなディレクトリを渡すこともできる。
stat -f ana.cスタットからの私たちへのメッセージです。
妨げとなるもの
インデックスノード。
実際にシンボリックリンクであるファイルに対して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を呼び出してフォーマット文字列を渡すと、出力には要求したデータ要素のみが含まれます。
ファイルとファイルシステムは異なるフォーマット配列のセットを持っています。ファイルのリストは
"epoch "は、1970-01-01 00:00:00+0000 (UTC)に発生したUnixエポックである。
ファイルシステムの場合、フォーマットシーケンスは
フォーマットシーケンスで文字列を受け入れるには、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.?各ファイルのレポートは新しい行にリストされ、それは我々が要求するものです。我々は、ファイル名、ファイルサイズ、ファイルタイプを提供します。
カスタムフォーマットでは、標準の統計出力に含まれるものよりも多くのデータ要素にアクセスすることができます。
このように、特定のデータ要素を抽出する余地は十分にあるのです。また、より長く、より複雑な呪文にエイリアスを使用することを推奨する理由もご理解いただけると思います。