`ls -l` がディレクトリに対して報告するサイズの原因となるコンテンツを表示するにはどうすればよいですか?

`ls -l` がディレクトリに対して報告するサイズの原因となるコンテンツを表示するにはどうすればよいですか?

ls -l報告されるサイズはディレクトリこれらのディレクトリの「メタデータ」が占めるスペースを反映します。また、このメタデータはバイナリ形式または人間が判読できない形式で存在すると考えられます。

このメタデータを人間が読める形式で表示する Unix コマンドはありますか?

編集: 上記の質問の答えがファイルシステムに大きく依存する場合、特定のファイルシステムの答えを検索するにはどのようなキーワードを使用すればよいですか? (nfs、ext3、ext4、vfat、gpfs、tmpfs、lustre など、さまざまな種類のファイルシステムの答えに興味があります)。たとえば、「ディレクトリのデータ/情報/コンテンツを表示する方法」などを検索すると、ディレクトリ内のファイルを一覧表示する方法に関する情報しか見つかりませんが、これは私が探しているものではありません。

答え1

lsデータはsizeディレクトリの inode のフィールドに格納されるため、その情報が表示されます。これはファイルシステムに依存します。特定のファイルシステムでは、そこに他の情報も保持できます。たとえば、ZFS は、そのフィールドにディレクトリ エントリの数を報告します。

もしあなたがそのレベルに興味があるなら、データの読み取りは簡単です。 lsと はstat、inode情報をさまざまな方法で表示するためのツールです。これらを調べて、データを取得して人間が読める形式で表示する方法を確認してください。統計(2)情報を照会するためのシステムコールです。

その数字を直接収集したい場合は、stat -c "%s"

% ls -ld /
drwxr-xr-x 44 root root 4096 Jun 10 17:11 /
% stat -c "%s" /
4096

答え2

はい、あります。それはls…と呼ばれています。

によって報告されるディレクトリのサイズlsは、ディレクトリの内容のサイズです。これはディレクトリのメタデータではなく、ディレクトリ内のファイルのメタデータです。そのほとんどは でリストされますls -la

cat一部の Unix 系 OS では、ディレクトリに対して(またはなど)を呼び出すことで、そのデータのバイナリ形式を表示できますod。これは Linux では当てはまりません。また、それが可能なシステムでは、そのデータの解釈はファイルシステムの種類に依存したり、正規化されることがあります (従来のファイルシステムの種類と互換性を保つため)。ディレクトリがファイルとして読み取りできなくなったのはいつですか?そしてディレクトリの8進ダンプ

によって報告されるサイズは、いくつかの理由により、lsで表示されるデータを保存するのに必要なサイズを超えています。ls

  • lsファイル内容のブロック リストなど、表示されないメタデータが存在する場合があります。
  • パディング(未使用ビットの配置、マシンワード境界への配置、固定サイズのフィールドに格納されたファイル名など)が存在する場合があります。
  • ファイル名のリストを整理するためのメタデータ(B ツリーや検索ツリー構造など)があります。
  • 通常、ファイルはブロックに編成され、ファイルは整数個のブロックを使用します。ファイル サイズがブロック サイズの倍数でない限り、最後のブロックは部分的にしか埋められません。
  • ext4 などの一部のファイルシステムでは、ディレクトリは、(多くのファイルが含まれていたために)大幅に拡大し、(多くのファイルが削除されたために)大幅に縮小した後、未使用のブロックを返しません。

ls表示されないものを知りたい場合は、ディレクトリの内容を直接確認する必要があります。Unixod系で可能な場合は、ディレクトリに対して または同様のものを実行するか、パーティションの16進ビューアなどの低レベルツールや、次のようなファイルシステムデバッガを使用してください。debugfsext2/ext3/ext4 の場合。この方法で表示される情報は、ファイルシステム形式に精通しているごく少数の人を除いて、「人間が読める」ものではありません。

関連情報