ディレクトリのサイズが労力に見合わない

これはまったく役に立たず、実際のアプリケーションでは不要ですが、*nix システムのディレクトリに関する面白い小さな投稿です。 それは金曜日だ。

面接では、inode (すべてがファイルである) に関する退屈な質問がよく出ますが、これにまともに答えられる人はほとんどいません。 しかし、もう少し深く掘り下げてみると、興味深いことがわかります。

この投稿を理解するには、いくつかのポイントがあります。

  • すべてがファイルです。 ディレクトリもファイルです
  • i ノードにはファイルのメタデータが保存されますが、ファイル名は保存されません。
  • ファイル名はディレクトリデータに保存されます
  • ディレクトリのサイズは、ls に表示されているものと同じで、デフォルトでは 4Kb で、ディレクトリ内のファイルの数とその名前の長さによって異なります。
  • 明らかに、ファイルが多いほどディレクトリのサイズは大きくなります

ここからが興味深い部分です。XNUMX 万個のファイルを含むディレクトリを作成し、ディレクトリのサイズを確認し、すべてのファイルを削除してディレクトリのサイズを調べます。

$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

ご覧のとおり、ディレクトリのサイズは変わっていないように見えますが:)

ディレクトリのサイズを (削除せずに) 修正できるのは、アンマウント状態で fsck (および -D オプション) を使用した場合のみです。

しかし、なぜそうなったのか調べてみると、10年前にはすでにそのような行為が行われていたことがわかりました。 議論する lmlで。 そして開発者によれば、この修正には労力を費やす価値はまったくありません。

出所: habr.com

コメントを追加します