• ベストアンサー

lsコマンドについて

linux 初心者です。lsコマンドの-sをしようした場合ファイルのサイズがわかると言うことですが、まずファイルの詳細がわかるという-lで調べたらサイズ5994byteと出ていたのですが、次に-sで調べたら8(kbyte)と出てしまうのですがどちらが正しいのでしょうか?またどうしてこのような結果が出てきたのかわかる方いたらご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • k_izumo
  • ベストアンサー率50% (68/134)
回答No.5

その77925byteは1回で作成しましたか? 先ほど5994byteを例にしますが #2の通り2198byteです。 そのファイルは1ブロックサイズ(4kbyte)分はディスク割り当て量としてアローケーションされていますが 次にファイルにデータを追加することでファイルのホールに書き込むのではなく次のブロックサイズを新規に作成します。 例で行くと77925 - 5994 = 71931分を追加した場合のファイルサイズの動きです。 (1)ファイル作成 0byte + 2blksize(5994byte/8192byte) = 2blksize(5994byte/8192byte) (2)ファイルにデータを追加 2blksize(5994byte/8192byte) + 18blksize(71931byte/73728byte) = 20blksize(77925byte/81920byte) となります。 この例での-sオプションは80kbyteとなります。 おそらくファイルにデータ追加を2回行っていますか? もとい。 (2)ファイルにデータを追加1 2blksize(5994byte/8192byte) + 14blksize(55555byte/57344byte) = 16blksize(61549byte/65536byte) (3)ファイルにデータを追加2 16blksize(61549byte/65536byte) + 5blksize(16376byte/20480byte) = 21blksize(77925byte/86016byte) この手順だと現在のファイルサイズ(84kbyte)に妥当性が高いです。 こうして余分にアローケーションされたホールが余ることでディスク割り当て量は更に大きな値になります。

79562
質問者

お礼

そうです。そうです。確かに2回データを追加しました。なぜわかったのでしょうか!?

その他の回答 (5)

  • k_izumo
  • ベストアンサー率50% (68/134)
回答No.6

> そうです。そうです。確かに2回データを追加しました。なぜわかったのでしょうか!? #5での説明の通りなのですが・・・ 実際のファイルサイズには依存せずホールはファイルにデータを追加する度に増え続けます。 なので何度追加したのかはおおよそ予測できますよ。

79562
質問者

お礼

そうなんですか。ご回答ありがとうございました。

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.4

せっかく宿題として、「ホール」のことを調べて欲しかったのに、 こうも皆さん親切な方が多いとは。 とほほ。 ファイルの一部を、ブランクで埋めたり、ゼロパッキングをしたり、 プログラムを組んだときに、マトリックス空間を作ったりしますが、 このとき、実際は、ディスクエリアを確保しません。 しかし後にこれらの部分に値が入れば、大きくなります。 このような、「あな 穴」をホールと呼ぶのですけど。 俗に、ダミー空間と呼ばれているものです。 ところで、ディストリビュションは何でしょうか。 -sについて、このホールについて書いているのは、余り見かけないですね。 Debianぐらいしか書かれてないみたいですよ。

  • SN1701
  • ベストアンサー率76% (16/21)
回答No.3

ホールの意味は、このあたりを見てください。 http://q.hatena.ne.jp/1180507637 http://search.luky.org/fol.2001/msg00376.html ファイルを書き込むとき、ディスク容量は、一定サイズのブロック(例えば4Kバイト)単位で割り当てられます。 -s オプションは、その実際の割当量を表示するので、通常はファイルサイズよりちょっと大きくなります。 ファイルの最後の部分のブロックは、途中までしか使われていないことが多いからです。 1つのブロック全体を使っていなくても、そのブロックは割り当てられているので、その分ディスク容量を消費していることになります。 逆に、ファイルの内容が0になっている部分は、ブロックが割り当てられずに、ディスク容量を消費していない場合があって、その場合はファイルサイズより、実際の割当量が小さくなります。 というわけで、-s で表示されるサイズは、常にブロックサイズの倍数になります。

79562
質問者

お礼

ご回答ありがとうございます。わかりやすい説明ありがとうございました。

  • k_izumo
  • ベストアンサー率50% (68/134)
回答No.2

ホールの意味ですが -sオプション自体は1024byte単位で表示する仕様なのですが おそらくファイルのディスク割り当て量は4kbyte単位で作成してると思います。 8192 - 5994 = 2198 よってホールのサイズは2198byteです。

79562
質問者

お礼

回答ありがとうございます。ホールの意味は調べてわかったのですが、でも77925byteでやるとなぜか-sでは84kbyteと出ていてとても4kbyte単位ではないような気がします。これはどういうことなのでしょうか?

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.1

man ls を読みましたか。 ls -l は、バイト単位で表示し、 ls -s は、1,024バイト単位で表示される。ホールがあるときは、そのホール の分も入る。 このホールとは何かは、調べてください。