私はls -l
ディレクトリの物理サイズを報告し、同時にファイルの論理サイズも報告することを発見しました。たとえば、次の例の出力は次のようになりますls -l
。
drwxr-xr-x 2 chris chris 36864 2017-04-23 18:14 dir1
-rw-r--r-- 1 chris chris 6 2017-04-23 18:10 file1.txt
dir1
サイズは36864バイトで4096バイトの倍数です(したがって物理サイズである可能性が高い)。
そしてfile1.txt
サイズは6バイト(論理サイズ)です。
答え1
実際にls
カーネルが指示するすべての内容を報告します。つまり、ファイルがディレクトリであるかどうかに応じて、サイズに関して他の操作は実行されません。 Linuxは論理サイズを報告します。しかし、ディレクトリの論理サイズはそれほど興味深い属性ではありません。これはファイルシステムの形式によって異なります。
ほとんどのLinuxディストリビューションでは、デフォルトのファイルシステムタイプはおそらくあなたが使用しているext4です。 Ext4はディレクトリにブロック全体を割り当て、必要に応じてそのブロック内のスペースを管理します。ディレクトリが縮小されるとブロックも解放されません(dir1
その中のファイルをすべて削除しても9ブロックは残ります)。ディレクトリであるファイルのサイズを尋ねる場合、ext4はディレクトリに割り当てられたサイズを返します。これは常に整数ブロックです。
ファイルシステムの種類によって異なります。たとえば、Btrfsの場合、実験によると、ディレクトリサイズは2の倍数になります。
答え2
これはブロック全体のディレクトリサイズを報告するext2
//ext3
ファイルシステムの機能です。ext4
XFSで同じ操作を試すと、より細かいサイズが表示されます。
それは本当に重要ではありません。ファイルの場合、アプリケーションはファイルサイズ(最大1バイト)を知ることに依存する可能性があるため、「論理」サイズが関連します。末尾のゴミが関連しているか、または一部のデータ構造がファイルの末尾に比較的配置される可能性があります。ファイル(例:.zipアーカイブ)。
ディレクトリの場合、内部構造はよく知られており、Linuxユーザー空間プログラムはディレクトリの内容を直接読み取ることもできないため、「論理的」サイズは重要ではありません。代わりに、読み取りはこの目的のために作成されたシステムコールを経なければなりません。そして、これらのシステムコールはディレクトリの内部構造を処理します。