du -s どっかのディレクトリ
の値と、そのディレクトリに入ってるファイルのサイズの合計は 等しいか? また、異なるとすればどちらが大きいか?
答え。 一般的には du -s の方がでかい。
その理由は、ディスクは区画(ブロックという)に区切ってあって、 ファイルはそのブロックを何個か占有するかたちで存在しているので、 ちっこいファイルも使うブロックは一個。 また、ちょっとはみだしたら2個使う。 ブロックどれくらい使ったか、が du -s の値である。
使ったブロックの量ではなく データ量の合計すなわちファイルサイズの合計を得る事も可能で、 --aparent-size というオプションがある。 もっとも、これで 実際のデータの合計が判った所で、 使える領域が判るわけじゃないから、 ディスクをどれくらい使ったか、を知りたい場合は意味がない。
ブロックサイズという場合も厳密にはいろいろ難しい様子である。
00:33 <%xxxxx:nakanot> hole まで入れるとそうすねえ 00:34 <%xxxxx:nakanot> 連続してるなら、filesize を blocksize で切上げてから足せば 00:34 <%xxxxx:nakanot> だいたい良いのでしょうけど。 00:34 >%xxxxx:fujita< おお。ナルホ 00:55 >%xxxxx:fujita< ブロックサイズ * ブロック数の和の方が 00:56 >%xxxxx:fujita< 今度は du -s より僅かに大きいっす 00:56 >%xxxxx:fujita< 1024=1kだから? 00:58 <%xxxxx:nakanot> んー 00:59 >%xxxxx:fujita< ブロックサイズ * du -s に 1.024 をかけるとほぼ等しい値になる 00:59 >%xxxxx:fujita< ディレクトリもありますが 00:59 <%xxxxx:gotomium> ホールか 00:59 <%xxxxx:gotomium> ext3 なら ls -s とかでみるとか 01:00 <%xxxxx:nakanot> ブロック数はどうやってとるすか 01:00 >%xxxxx:fujita< File::Stat.blocks です(わら 01:01 <%xxxxx:gotomium> 厳密に求めるのは 01:01 <%xxxxx:gotomium> 難しいだろうな 01:02 <%xxxxx:gotomium> 例えば ext3 だったら indirect block への インデックスを持つためにファイルサイズ増えていくにしたがって data block 消費していくし 01:02 <%xxxxx:gotomium> 例えば ACL を持ってたりとか
ruby にはディレクトリを recursive に glob するメソドがあるが、 こいつがどうも .hoge/ は拾ってくれないようである。 自分なりにいろいろ試したが、どうもダメみたいだ。
そこで、そういうメソドを自分で書いた。 当然、再帰で書く。 当然、間違える。 その時判ったのだが、500段くらい呼出のスタックを積めるらしい。