Linux で空のファイルが 0 バイトになるのはなぜですか?

Linux で空のファイルが 0 バイトになるのはなぜですか?

私も尋ねましたWindows に関する兄弟の質問


Linux の場合 (テストしたところ):

  • 空のフォルダのサイズは、名前に関係なく 4 KB と指定されます。
  • 空のファイルのサイズは0バイトとして示されます

ただし、ファイルとフォルダーには当然名前があり、それをどこかに保存する必要があります。

  • 大体どこに保管されているのでしょうか?
  • これらのデータを保存するために使用できる最大メモリは、事前に定義された数値ですか、それともディスク内の使用可能なスペースに依存しますか?
  • 短い名前の空のファイルは、長い名前の空のファイルよりも少ないスペースを占めますか? (または、これらの名前が格納されるデータ構造では、ファイルごとに固定のバイト数があり、残りのバイトがこれで埋められる可能性がありますか\0?)
  • 短い名前の空のフォルダーは、長い名前の空のフォルダーよりもスペースをあまり取りませんか?
  • という空のフォルダーは、foobarという空のファイルよりも少ないスペース、同じスペース、それともより多くのスペースを占めますかfoobar?
  • の空のファイルは、/etc/empty.txtの空のファイルよりも少ないスペース、同じスペース、それともより多くのスペースを占めますか/etc/long/nested/path/until/the/empty/file/is/reached/empty.txt?

答え1

ファイル名はディレクトリに保存されます。ディレクトリはディレクトリ エントリで構成され、各ディレクトリ エントリにはファイル名とファイルの inode 番号が含まれます。inode には、ファイルを所有するユーザー ID とグループ ID、inode が最後に変更された時刻など、さまざまなメタデータが含まれます。ファイル名が長いファイルは、ディレクトリ内でより多くのスペースを占めます。同じ inode 番号を参照するディレクトリ エントリが複数存在する場合があります (同じディレクトリまたは異なるディレクトリ内)。同じ inode を指す追加のディレクトリ エントリが作成されると、ハード リンクの作成と呼ばれます。

inode テーブルには固定数の inode があるため、多数の inode を作成すると、最終的に inode テーブルのスペースが不足する可能性があります。(「df -i」を使用すると、使用されている inode の数を確認できます。ファイル システム内の inode の平均サイズがデフォルトよりも小さいと予想される場合は、多数の inode を持つファイル システムを作成することもできます。)

ディレクトリも inode で構成され、次の例外を除いてファイルとほとんど同じように機能します。まず、「空の」ディレクトリであっても、ディレクトリ エントリは '.' (ディレクトリ自体) と ".." (親ディレクトリ) を持つため、「空の」ディレクトリであっても 4k のスペースを占有します。次に、ディレクトリにはハード リンクがない場合があります。つまり ('.' と '..' エントリを無視すると)、ディレクトリ inode を参照するディレクトリ エントリしか存在できません。これは、ディレクトリがツリーを形成し、一般化されたグラフを形成しないことを意味します。

答え2

ls コマンドは、ファイル サイズなどを表示します。

  1. ファイルがディレクトリの場合、表示されるサイズはシステムによって割り当てられたサイズです。(4K ブロックあたり: ext4 ファイル システムの場合は 4096 ビット) たとえ 0 バイトが含まれていてもです。

  2. 通常のファイルの場合、表示されるサイズはファイルが占めるサイズではなく、そのコンテンツのサイズです。

通常のファイルかディレクトリかを問わず、ファイルが占めるサイズを知るには、コマンド「du file_name」を使用します。

関連情報