Linuxでstatコマンドを使用する方法
公開: 2022-01-29
Linux stat
コマンドは、 ls
よりもはるかに詳細な情報を表示します。 この有益で構成可能なユーティリティで、カーテンの後ろを覗いてみてください。 使い方をご紹介します。
statはあなたを舞台裏に連れて行きます
ls
コマンドは、その機能に優れており、多くのことを実行しますが、Linuxの場合、より深く掘り下げて、表面の下にあるものを確認する方法が常にあるようです。 そして、多くの場合、それはカーペットの端を持ち上げる場合だけではありません。 床板を引き裂いてから穴を掘ることができます。 Linuxは玉ねぎのように剥がすことができます。
ls
は、ファイルに設定されているアクセス許可、ファイルの大きさ、ファイルかシンボリックリンクかなど、ファイルに関する多くの情報を表示します。 この情報を表示するために、 ls
はiノードと呼ばれるファイルシステム構造から情報を読み取ります。
すべてのファイルとディレクトリにはiノードがあります。 iノードは、ファイルが占めるファイルシステムブロックや、ファイルに関連付けられている日付スタンプなど、ファイルに関するメタデータを保持します。 iノードはファイルのライブラリカードのようなものです。 ただし、 ls
は一部の情報のみを表示します。 すべてを表示するには、 stat
コマンドを使用する必要があります。
ls
と同様に、 stat
コマンドには多くのオプションがあります。 これにより、エイリアスを使用するのに最適な候補になります。 stat
が必要な出力を提供する特定のオプションのセットを見つけたら、それをエイリアスまたはシェル関数でラップします。 これにより、使用がはるかに便利になり、コマンドラインオプションの難解なセットを覚えておく必要がなくなります。
関連: Linuxでファイルとディレクトリを一覧表示するためにlsコマンドを使用する方法
簡単な比較
ls
を使用して、人間が読めるファイルサイズ( -h
オプション)の長いリスト( -l
オプション)を提供しましょう。
ls -lh ana.h
左から右に、lsが提供する情報は次のとおりです。
- 最初の文字はハイフン「-」であり、これは、ファイルが通常のファイルであり、ソケット、シンボリックリンク、または別のタイプのオブジェクトではないことを示しています。
- 所有者、グループ、およびその他の権限は8進数形式で一覧表示されます。
- このファイルを指すハードリンクの数。 この場合、そしてほとんどの場合、それは1つになります。
- ファイルの所有者はdaveです。
- グループの所有者はデイブです。
- ファイルサイズは802バイトです。
- このファイルの最終更新日は2015年12月13日金曜日です。
- ファイル名は
ana.c
です。
stat
を見てみましょう:
stat ana.h
stat
から取得する情報は次のとおりです。
- ファイル:ファイルの名前。 通常、これはコマンドラインで
stat
に渡した名前と同じですが、シンボリックリンクを見ている場合は異なる場合があります。 - サイズ:ファイルのサイズ(バイト単位)。
- ブロック:ハードドライブに保存するためにファイルが必要とするファイルシステムブロックの数。
- IOブロック:ファイルシステムブロックのサイズ。
- ファイルタイプ:メタデータが記述するオブジェクトのタイプ。 最も一般的なタイプはファイルとディレクトリですが、リンク、ソケット、または名前付きパイプの場合もあります。
- デバイス:16進数および10進数のデバイス番号。 これは、ファイルが保存されているハードドライブのIDです。
- iノード:iノード番号。 つまり、このiノードのID番号です。 一緒に、iノード番号とデバイス番号はファイルを一意に識別します。
- リンク:この数は、このファイルを指すハードリンクの数を示します。 各ハードリンクには独自のiノードがあります。 したがって、この図について考える別の方法は、この1つのファイルを指すiノードの数です。 ハードリンクが作成または削除されるたびに、この数は上下に調整されます。 ゼロに達すると、ファイル自体が削除され、iノードが削除されます。 ディレクトリで
stat
を使用する場合、この数値は「。」を含むディレクトリ内のファイルの数を表します。 現在のディレクトリのエントリと親ディレクトリの「..」エントリ。 - アクセス:ファイルのアクセス許可は、8進数および従来の
rwx
(読み取り、書き込み、実行形式)で表示されます。 - Uid :所有者のユーザーIDとアカウント名。
- Gid :所有者のグループIDとアカウント名。
- アクセス:アクセスタイムスタンプ。 見た目ほど簡単ではありません。 最新のLinuxディストリビューションは、アクセス時間を更新するために必要なハードドライブの書き込みを最適化しようとする
relatime
と呼ばれるスキームを使用しています。 簡単に言えば、アクセス時間が変更された時間よりも古い場合は、アクセス時間が更新されます。 - 変更:変更のタイムスタンプ。 これは、ファイルの内容が最後に変更された時刻です。 (運が良ければ、このファイルの内容は4年前に最後に変更されました。)
- 変更:変更タイムスタンプ。 これは、ファイルの属性または内容が最後に変更された時刻です。 新しいファイル権限を設定してファイルを変更すると、変更タイムスタンプは更新されますが(ファイル属性が変更されたため)、変更されたタイムスタンプは更新されません(ファイルの内容が変更されなかったため)。
- Birth :ファイルの元の作成日を表示するために予約されていますが、これはLinuxでは実装されていません。
タイムスタンプを理解する
タイムスタンプはタイムゾーンに依存します。 各行の終わりにある-0500
は、このファイルが現在のコンピューターのタイムゾーンより5時間進んだ協定世界時(UTC)タイムゾーンでコンピューター上に作成されたことを示しています。 したがって、このコンピューターは、このファイルを作成したコンピューターより5時間遅れています。 実際、ファイルは英国のタイムゾーンコンピュータで作成されており、ここでは米国東部標準時のコンピュータで確認しています。
タイムスタンプの変更と変更は混乱を引き起こす可能性があります。これは、初心者には、それらの名前が同じ意味であるかのように聞こえるためです。
chmod
を使用して、 ana.c
というファイルのファイルパーミッションを変更してみましょう。 誰でも書けるようにします。 これはファイルの内容には影響しませんが、ファイルの属性には影響します。
chmod + w ana.c
次に、 stat
を使用してタイムスタンプを確認します。
stat ana.c
変更タイムスタンプは更新されましたが、変更されたタイムスタンプは更新されていません。
変更されたタイムスタンプは、ファイルの内容が変更された場合にのみ更新されます。 変更タイムスタンプは、コンテンツの変更と属性の変更の両方に対して更新されます。
複数のファイルでStatを使用する
一度に複数のファイルに関する統計レポートを作成するには、コマンドラインでファイル名をstat
に渡します。
stat ana.h ana.o
一連のファイルでstat
を使用するには、パターンマッチングを使用します。 疑問符「?」 任意の1文字を表し、アスタリスク「*」は任意の文字列を表します。 次のコマンドを使用して、拡張子が1文字の「ana」というファイルについてレポートするようにstat
に指示できます。
stat ana。?
statを使用してファイルシステムについてレポートする
stat
は、ファイルシステムのステータスとファイルのステータスをレポートできます。 -f
(ファイルシステム)オプションは、ファイルが存在するファイルシステムについてレポートするようにstat
に指示します。 ファイル名の代わりに「/」などのディレクトリをstat
に渡すこともできることに注意してください。
stat -f ana.c
stat
情報は次のとおりです。
- ファイル:ファイルの名前。
- ID :16進表記のファイルシステムID。
- Namelen :ファイル名の最大許容長。
- タイプ:ファイルシステムのタイプ。
- ブロックサイズ:最適なデータ転送速度のために読み取り要求を要求するデータの量。
- 基本ブロックサイズ:各ファイルシステムブロックのサイズ。
ブロック:
- 合計:ファイルシステム内のすべてのブロックの総数。
- Free :ファイルシステム内の空きブロックの数。
- 使用可能:通常の(root以外の)ユーザーが使用できる空きブロックの数。
iノード:
- 合計:ファイルシステム内のiノードの総数。
- Free :ファイルシステム内の空きiノードの数。
シンボリックリンクの間接参照
実際にシンボリックリンクであるファイルにstat
を使用すると、リンクについてレポートされます。 リンクが指すファイルについてstat
でレポートする場合は、 -L
(逆参照)オプションを使用します。 ファイルcode.c
は、 ana.c
へのシンボリックリンクです。 -L
オプションなしでそれを見てみましょう:
統計コード.c
ファイル名には、( ->
) ana.c
を指すcode.c
が表示されます。 ファイルサイズはわずか11バイトです。 このリンクの保存に専念するブロックはありません。 ファイルタイプはシンボリックリンクとしてリストされています。

明らかに、ここでは実際のファイルを見ていません。 それをもう一度行い、 -L
オプションを追加しましょう。
stat -L code.c
これにより、シンボリックリンクが指すファイルのファイルの詳細が表示されます。 ただし、ファイル名は引き続きcode.c
として指定されていることに注意してください。 これはリンクの名前であり、ターゲットファイルではありません。 これは、これがコマンドラインでstat
に渡した名前であるために発生します。
簡潔なレポート
-t
(簡潔)オプションを使用すると、 stat
は要約された要約を提供します。
stat -t ana.c
与えられた手がかりはありません。 それを理解するには、フィールドシーケンスを記憶するまで、この出力を完全なstat
出力に相互参照する必要があります。
カスタム出力フォーマット
stat
から別のデータセットを取得するためのより良い方法は、カスタム形式を使用することです。 フォーマットシーケンスと呼ばれるトークンの長いリストがあります。 これらはそれぞれデータ要素を表します。 出力に含めるものを選択し、フォーマット文字列を作成します。 stat
を呼び出してフォーマット文字列を渡すと、出力には要求したデータ要素のみが含まれます。
ファイルとファイルシステムには、さまざまなフォーマットシーケンスのセットがあります。 ファイルのリストは次のとおりです。
- %a :8進数のアクセス権。
- %A :人間が読める形式のアクセス権(
rwx
)。 - %b :割り当てられたブロックの数。
- %B :各ブロックのバイト単位のサイズ。
- %d :10進数のデバイス番号。
- %D :16進数のデバイス番号。
- %f :16進数のrawモード。
- %Fファイルタイプ。
- %g :所有者のグループID。
- %G :所有者のグループ名。
- %h :ハードリンクの数。
- %i :iノード番号。
- %m :マウントポイント。
- %n :ファイル名。
- %N :引用符で囲まれたファイル名。シンボリックリンクの場合はファイル名が逆参照されます。
- %o :最適なI / O転送サイズのヒント。
- %s :合計サイズ(バイト単位)。
- %t :文字/ブロックデバイスの特殊ファイル用の16進数の主要なデバイスタイプ。
- %T :文字/ブロックデバイスの特殊ファイル用の16進数のマイナーデバイスタイプ。
- %u :所有者のユーザーID。
- %U :所有者のユーザー名。
- %w :ファイルの作成時刻、人間が読める形式、または不明な場合はハイフン「-」。
- %W :ファイルの作成時刻、エポックからの秒数。 不明な場合は0。
- %x :人間が読める形式の最後のアクセス時刻。
- %X :最後のアクセスの時間(エポックからの秒数)。
- %y :人間が読める形式の最後のデータ変更の時刻。
- %Y :最後のデータ変更の時間(エポックからの秒数)。
- %z :人間が読める形式の最後のステータス変更の時刻。
- %Z :最後のステータス変更の時間。エポックからの秒数。
「エポック」は、1970-01-01 00:00:00 +0000(UTC)に発生したUnixエポックです。
ファイルシステムの場合、フォーマットシーケンスは次のとおりです。
- %a :通常の(root以外の)ユーザーが使用できる空きブロックの数。
- %b :ファイルシステム内のデータブロックの総数。
- %c :ファイルシステム内のiノードの総数。
- %d :ファイルシステム内の空きiノードの数。
- %f :ファイルシステム内の空きブロックの数。
- %i :16進数のファイルシステムID。
- %l :ファイル名の最大長。
- %n :ファイル名。
- %s :ブロックサイズ(最適な書き込みサイズ)。
- %S :ファイルシステムブロックのサイズ(ブロック数の場合)。
- %t :16進数のファイルシステムタイプ。
- %T :人間が読める形式のファイルシステムタイプ。
フォーマットシーケンスの文字列を受け入れる2つのオプションがあります。 これらは--format
と--printf
です。 それらの違いは、 --printf
は改行\n
やタブ\t
などのCスタイルのエスケープシーケンスを解釈し、出力に改行文字を自動的に追加しないことです。
フォーマット文字列を作成してstat
に渡します。 使用するフォーマットシーケンスは、ファイル名が%n
、ファイルのサイズが%s
、ファイルタイプが%F
です。 文字列の最後に\n
エスケープシーケンスを追加して、各ファイルが新しい行で処理されるようにします。 フォーマット文字列は次のようになります。
「ファイル%nは%sバイトであり、%Fです\ n」
--printf
オプションを使用してこれをstat
に渡します。 code.c
というファイルとanaに一致するファイルのセットについてレポートするようにstat
に依頼しますana.?
。 これは完全なコマンドです。 --printf
とフォーマット文字列の間の等号「 =
」に注意してください。
stat --printf = "File%nは%sバイトであり、%F \ n" code.c ana / ana。?
各ファイルのレポートは、私たちが要求したものである新しい行にリストされます。 ファイル名、ファイルサイズ、およびファイルタイプが提供されます。
カスタムフォーマットを使用すると、標準のstat
出力に含まれているよりもさらに多くのデータ要素にアクセスできます。
ファイングレインコントロール
ご覧のとおり、関心のある特定のデータ要素を抽出するための非常に広い範囲があります。 長くて複雑な呪文にエイリアスを使用することをお勧めした理由もわかるでしょう。
Linuxコマンド | ||
ファイル | tar・pv・cat・tac・chmod・grep・diff・sed・ar・man・pushd・popd・fsck・testdisk・seq・fd・pandoc・cd・$ PATH・awk・join・jq・fold・uniq・journalctl・tail・stat・ls・fstab・echo・less・chgrp・chown・rev・look・strings・type・rename・zip・unzip・mount・umount・install・fdisk・mkfs・rm・rmdir・rsync・df・gpg・vi・nano・mkdir・du・ln・patch・convert・rclone・shred・srm | |
プロセス | エイリアス・screen・top・nice・renice・progress・strace・systemd・tmux・chsh・history・at・batch・free・which・dmesg・chfn・usermod・ps・chroot・xargs・tty・pinky・lsof・vmstat・タイムアウト・wall・yes・kill・sleep・sudo・su・time・groupadd・usermod・groups・lshw・shutdown・reboot・halt・poweroff・passwd・lscpu・crontab・date・bg・fg | |
ネットワーキング | netstat・ping・traceroute・ip・ss・whois・fail2ban・bmon・dig・finger・nmap・ftp・curl・wget・who・whoami・w・iptables・ssh-keygen・ufw |
関連:開発者と愛好家のための最高のLinuxラップトップ