• ベストアンサー

lsコマンドについて

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

  • 79562
  • お礼率68% (164/239)

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

  • ベストアンサー
  • 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% (2202/4052)
回答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% (2202/4052)
回答No.1

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

関連するQ&A

  • コマンド ls について

    linux初心者です。 調べたのですが、出てこなかったので知っている方がいらっしゃったら。 linux コマンドで ls というものがあると思いますが、オプションで -la をつけた際に表示される "." ".." の2つのディレクトリ??はいったい何を意味している(というより何?)のでしょうか。 パーミッションも付与されているみたいなので、ファイルかディレクトかなのでしょうか? ls で検索しても出てこなかったので(manも読みましたがそれらしいものはなかったので)、ちょっと無知な感じですがご回答よろしくお願いいたします。

  • lsコマンドについて。

    lsコマンドについて。 $lsを実行したときに、結果は各ファイル名が改行で区切られて出力されると思うのですが、コンソールにはスペースかタブで区切られているように表示されます。 これはシェルがlsコマンドの結果に含まれる改行をスペースなどに変えてコンソールに出力しているからなのでしょうか。 よろしくお願いします

  • Linuxコマンドの『du』について

    宜しくお願いします。 アップロードした画像ファイルの容量を調べたく、サーバにroot権限でログインし、Linuxコマンドの 『du -b imgfile』 で調べたのですが、FFFTPで見た容量と、Linuxコマンドの 『ls -l imgfile』 で調べた容量と誤差が出ます。具体的には、duコマンドで調べた容量が 24576Byte なのに対し、同じファイルをFFFTPで見たのと、lsコマンドで調べた場合は、 22019Byte という具合に、誤差が出ます。 容量の大きなファイル程、その差も大きくなります。 この問題を解決する方法をご存知でしたら、是非ご教授下さい。 宜しくお願い致します。

  • Cygwinのlsコマンドについて

    Cygwinの場合、以下のオプションでlsコマンドを実行すると $ ls --full-time -rwxr-xr-x 1 aaaa なし 139 2006-08-23 15:01:34.203125000 +0900 ls.sh と表示されます。 Linux(redhat)上で同様のコマンドを実行すると、 $ ls --full-time -rwxr-x--- 6 root root 4096 Wed Aug 09 16:59:03 2005 ls.sh と表示されます。 タイムスタンプの表示形式が異なっていますが、 Cygwin上で、Linuxのような表記をしたいのですが、 可能でしょうか。ご教授お願い致します。

  • コマンド"ls -l"で表示されるデータ量の単位

    タイトルのままなんですが、Linuxのコマンドで"ls -l(または-al)と入力すると、ファイルのデータ量などが表示されますよね。そのデータ量の単位を知りたいのですが。

  • execからのls grepコマンドについて

    PHPで階層になっているディレクトリ名をすべて取得するプログラムを作成しています。 ディレクトリ数、ファイル数が非常に多いので動作速度向上のためにlinuxコマンドで取得するために以下の命令を記述しました。 exec("ls -l | grep '^d' ./hogehoge/hugahuga/",$aDir); var_dump($aDir); これを実行しても $aDirに値が入りません。 どうすれば望みどおりの結果になるでしょうか。

    • 締切済み
    • PHP
  • lsコマンドで出てくるファイルのサイズとduコマンドを使ったときにでてくるファイルの使用状況との違いが分かりません。

    ls -lコマンドで出てくるファイルのサイズとduコマンドを使ったときにでてくるファイルの使用状況との違いが分かりません。 ファイルの使用状況とはメモリの使用状況というイミなのかが確信が持てずにいます。 質問させていただければと思います。 どうかよろしくお願いします。

  • hexdumpの表示内容とファイルサイズ

    linuxで「ls -l」あるファイルにのサイズを見たら100Byteでした。 hexdump -C で下記のように表示しされたので「xx」を1Byteとして数えたら85Byteぐらいで「ls -l」した結果と異なりました。こんなことってあるのでしょうか? ff d8 ff a0 10 46 49 46 ・・・・・・・・

  • DUとLSの表示の差

    ファイルのパーミッション等が下記の場合が関係しているのか不明ですがDUコマンドとLSコマンドで示されるDiskの使用量が一致しないのですが、理由を教えていただけませんか? % cd test001 % ls -l total 944 -rw-r-lr-- 1 own grp 524288000 Oct 15 09:12 File0 -rw-r-lr-- 1 own grp 524288000 Oct 15 09:11 File1 % % du 946 . % cd ../test002 % ls -l total 2049056 -rw-r-lr-- 1 own grp 524288000 Oct 17 14:12 File0 -rw-r-lr-- 1 own grp 524288000 Oct 12 21:16 File1 % % du 2049056 . DUの結果とLS -l で示される結果は一致しているのですが、ファイルサイズ(ls -lで示される値)の合計と一致しないのです。 OSはSolaris8です、よろしくお願いします。

  • HP-UXのlsコマンドで日時書式を統一する方法

    一般的にUNIX系OSで ls -l コマンド実行した場合6ヶ月以上前に修正したファイルは、 時刻までは出力されません。 下記のような表示になってしまします。 # ls -l foo -rwxr-x--- 1 root root 3223 Nov 10 2004 foo このようなとき Linux だと 下記のようにlsコマドを実行するとファイルの修正日時に関わらず "YYYY/MM/DD HH:MI:SS"形式で表示してくれます。 ls -al --time-style=+'%Y/%m/%d %H:%M:%S' Solarisの場合でも ls -E コマンドを使えば、同じようなことができそうです。 しかし、HP-UXのlsコマンドの場合は、--time-style や -E オプションが使えません。 何か良い方法はないでしょうか? ls でなくとも ファイルのタイムスタンプが "YYYY/MM/DD HH:MI:SS"形式で取得できまれば、方法は問いません。