web-dev-qa-db-ja.com

「ls -l」コマンドの出力でディレクトリのサイズは何を意味しますか?

ls -lコマンドの出力で、ディレクトリのサイズは何を意味しますか?

67
Hemant

これは、ディレクトリのメタ情報(このディレクトリに属する​​ファイルのテーブル)を格納するために使用されるディスク上のスペースのサイズです。つまり1024の場合、これはディスク上の1024バイトがこの目的で使用されることを意味します(常にフルブロックを割り当てます)。

46
txwikinger

_ls -l_で出力される「ディレクトリのサイズ」は、(他のファイルタイプと同様に)_statbuf.st_size_のstat()呼び出しによって報告される値です。

これが_st_size_がディレクトリに対して何を意味するかは、ファイルシステムのタイプに完全に依存します。ファイルシステムのタイプを理解し、その概念を理解していない限り、_st_size_の値から何も推測できません。

  • 現在通常_v7-fs_という名前の歴史的なUNIXファイルシステムでは、ディレクトリは、16ビットのiノード番号と14バイトのファイル名を含む16バイトのエントリが繰り返されていました。ディレクトリの「サイズ」はread(2)操作に関して意味があり、常にそのままであるか、そのままです。 _._および_.._エントリは、現在および上位レベルのディレクトリに対して手動でハードリンクすることによって作成されます。正気の空の乙女ディレクトリのリンク数は2です。

  • 1989年以降(SVr4)がufsと呼ばれるBSD-4.2ファイルシステムでは、ディレクトリは一連の可変長レコードであり、安定であることが許可されていないフォーマットを使用しているため、ユーザー空間コマンドは読み取ることができません。このフォーマット。報告される「サイズ」は、v7-fsと同様にバイト単位のサイズです。サイズは通常、そのままか、そのままですが、ファイルシステムの新しいバージョンでは、状況によってはサイズが縮小される場合がありますが、これが常に期待できるとは限りません。空のディレクトリについて報告されるリンク数は、_v7-fs_と同様に2です。

  • 1988年夏から1991年5月の間に設計および実装したファイルシステムWOFSでは、ディレクトリは常に「サイズ」0を報告し、read(2)呼び出しを使用して読み取ることができるタイプのコンテンツはありません。これは、WOFSが最初のコピーオンライトファイルシステムであり、WOFSファイルでは、ディレクトリにリストされるのではなく、そのディレクトリを報告するためです。 readdir()を使用してWOFSディレクトリを読み取る場合、目的のエントリのデータのみを取得し、_._および_.._のデータは取得しません。 WOFS上の空のディレクトリのリンク数は1で、全体の動作は完全にPOSIXに準拠しています。

  • ZFSでは、WOFSの論文を読んだ後に実装されました。 ZFSはコピーオンライトファイルシステムであり、作成者はWOFSからコンセプトをコピーしたことを否定しません。 ZFSのディレクトリは_number of directory entries_の_st_size_を報告するため、報告された「サイズ」は、ディレクトリデータの占有ディスクスペースに関して実際の意味を持ちません。 ZFSディレクトリには_._および_.._エントリはありませんが、readdir()を呼び出すと、これらのエントリは偽装され、最初の2つの操作で返されます。 ZFSは、リスト内の唯一のFSは、ディレクトリをハードリンクすることをサポートしていませんが、報告されるディレクトリのリンク数は常に2です。ZFSのこれら2つの不規則性は、 POSIX歴史的プログラム。

  • ZFSと同様に、WAFLはWOFSからすべてではなく一部のアイデアをコピーします。 NetappのWAFLWOFS論文が発行されてから3年後に作成されたもので、WAFLはコピーオンライトですが、WAFLは「サイズ」の値を報告するようです。ディレクトリにコンテンツがあるという前提。

14
schily

ディレクトリは、それ自体とその内容に関するメタデータ用に(最低でも)4096バイトを予約します。

また、4096バイトがext2/ext3/ext4ファイルシステムのデフォルトのアロケーションユニット(ブロック)であるため、ディレクトリをこれ以上小さくすることはできません。

異なるファイルシステムでは、異なるデフォルトサイズのディレクトリが見つかる場合があります。これは、ファイルシステムのデフォルトのブロックサイズが原因です。

ディレクトリのサイズは、いっぱいになると動的に大きくなる可能性もありますが、いったんいっぱいになると、ディレクトリを削除せずにメタデータ用に予約されたスペースを再割り当てすることはできません。

13
h3rrmiller

ディレクトリは、電話帳のような単なるディレクトリです。それは、番号のリストとそれらの隣に名前が付いたファイルです。各番号はファイルシステム内のファイル(iノード番号)を参照し、名前はファイル名です。

そのデータを保存するためのディスク容量が必要です。データがどのように割り当てられ、拡張され、縮小されるかは、ファイルシステムに依存します。

4