'ls -l'コマンドの出力でのディレクトリのサイズとはどういう意味ですか?


回答:


45

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


3
ディレクトリは、数千のファイルが含まれている場合や、ディレクトリ自体のサイズを簡単に> 10キロバイトすることができ
グレン・ジャックマン

1
@txwikingerディレクトリには、実際のファイル名ではなく、iノードのリストが含まれていると思います。
ЯрославРахматуллин

6
@ЯрославРахматуллин ディレクトリエントリは、iノード番号とファイル名で構成されます。
200_success

2
だから、ディレクトリの「サイズ」は、ファイルのサイズではなく、内部のファイルの数にのみ関係していますか?
リー

1
@リー:はい、そうです。

14

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

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

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

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

  • ではWOFSディレクトリは常に「サイズ」0を報告し、使用して読み取ることができるコンテンツの種類必要はありません、ファイルシステム、私は設計されており、夏の1988年と1991年5月の間に実装read(2)コールを。これはWOFS、最初のCopy-on-Writeファイルシステムであり、WOFSファイル内ではディレクトリにリストされるのではなく、ファイルが存在するディレクトリを報告するためです。WOFSを使用してディレクトリを読み取る場合readdir()、目的のエントリのデータのみを取得し、.andのデータは取得しません..。上の空のディレクトリのリンクカウントWOFSは1で、全体の動作は完全にPOSIXに準拠しています。

  • ZFS、それはWOFS論文を読んだ後に実装されました。ZFSはコピーオンライトのファイルシステムであり、その作成者はから概念をコピーしたことを否定しませんWOFS。ZFSのディレクトリはnumber of directory entriesinを報告するst_sizeため、報告された「サイズ」は、ディレクトリデータの占有ディスク容量に関して実際の意味を持ちません。そこにはありません.し、..エントリがZFSディレクトリに、しかし、あなたが呼び出す場合readdir()、これらのエントリは、偽造し、最初の二つの操作のために返されます。ZFSは、ディレクトリ内のハードリンクをサポートしていない唯一のFSです。ただし、報告されるディレクトリのリンク数は常に2です。

  • ZFSと同様に、WAFLはすべてではありませんがいくつかのアイデアをからコピーしWOFSます。Netapp WAFLは、WOFS論文の発行から3年後に書かれたもので、WAFLはコピーオンライトですが、WAFLは、ディレクトリにコンテンツがあると仮定して、「実際のディレクトリサイズ」である「サイズ」値を報告するようです。


13

ディレクトリは、自身とそのコンテンツに関するメタデータ用に、少なくとも4096バイトを予約します。

また、4096バイトはext2 / ext3 / ext4ファイルシステムのデフォルトの割り当て単位(ブロック)であるため、ディレクトリをこれより小さくすることはできません。

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

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


1
どのメタデータを参照していますか?
ステファンシャゼル

1
詳細はファイルシステムに依存しますが、通常、ファイル名、iノード番号、ファイルタイプ(ファイル、dir、fifo、ソケット、デバイスノード、シンボリックリンクなど)、所有者、グループ、権限、属性、​​ACL、シンボリックリンクターゲットなどのメタデータが含まれます。
cas

6
@CraigSanders、ディレクトリにはオブジェクト名と対応するiノード番号のみが含まれます。iノードには、オブジェクトのタイプ、所有者/グループ、パーミッション、ACLおよび拡張属性が保持されている場所への参照などが含まれています。
フォンブランド

私のUFSは、ディレクトリごとに独自のメタデータ用に512バイトだけを予約しています。
-FUZxxl

4

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

そのデータを保存するにはディスク容量が必要です。データの割り当てと拡大、縮小の方法はファイルシステムに依存します。


保持するメタデータの実際の詳細と、サイズの増加に関するブロック割り当ての考慮事項を含めることができます。すでに与えられた素敵なall話で、より正確な答えを完成させます。:)
n611x007 14年

3
@naxa、それはファイルシステム依存であり、ファイルシステム(ext4など)内でも、どのオプションを有効にするかによって異なります。この質問に関連しています。
ステファンシャゼル14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.