ls -sh
私は1997年からファイルサイズを確認してきましたが、今日は奇妙なことが起こりました。
ninja@vm:foo$ ls -sh
total 98M
1,0M app
64M app_fake_signed.sbp
800K loader
804K loader_fake_signed.sbp
1,0M web
32M web_fake_signed.sbp
app
ファイルがweb
署名されたファイルよりはるかに小さくてはいけないので、署名プログラムをデバッグするのに数時間かかりました。何も見つからなかった後、偶然にSamba共有のファイルを見てみましたが、サイズが非常に似ていることがわかりました。もう一度確認しました。
ninja@vm:foo$ ls -lh
total 98M
-rw-rw-r-- 1 ninja ninja 63M lut 4 14:13 app
-rw-rw-r-- 1 ninja ninja 64M lut 4 14:13 app_fake_signed.sbp
-rw-rw-r-- 1 ninja ninja 800K lut 4 14:13 loader
-rw-rw-r-- 1 ninja ninja 801K lut 4 14:13 loader_fake_signed.sbp
-rw-rw-r-- 1 ninja ninja 31M lut 4 14:13 web
-rw-rw-r-- 1 ninja ninja 32M lut 4 14:14 web_fake_signed.sbp
私の言葉が詰まっていますか?実際にはそれぞれ63MBと32MBなのにサイズが1MBと1MBでls -s
表示されるのはなぜですか?app
web
これは、WindowsのVirtualBoxで実行されるXubuntu 14.04です。
編集する:app
、web
およびファイルはすべてループで実行されるbashスクリプト(私のデザインではありません)loader
によって生成されます。dd if=/dev/urandom of=app bs=$BLOCK count=1 seek=...
Cで書かれた署名プログラムはこれらのファイルをインポートし、署名されたバージョンをディスクに書き込み、各ファイルの前後にバイナリ署名を追加します。
ベストアンサー1
使用している-s
オプションですls
。
ファイルサイズとファイルが占めるディスク領域の量は異なる場合があります。たとえば、新しいファイルを開いてその中で1Gを見つけて「何か」と書くと、オペレーティングシステムはディスクに1G(「何か」のためのスペースを含む)を割り当てずに「何か」と書きます。スペースを割り当てます。これを呼び出します。スパースファイル。
私は次のようなファイルを生成するために小さなCプログラムを書いた。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = open("/tmp/foo.dat", O_CREAT | O_WRONLY, 0600);
if (fd > 0) {
const off_t GIG = 1024 * 1024 * 1024;
// Seek 1G into the file
lseek(fd, GIG, SEEK_SET);
// Write something
write(fd, "hello", sizeof "hello");
close(fd);
}
return 0;
}
私が得るプログラムを実行すると、次のようになります。
$ ls -lh /tmp/foo.dat
-rw------- 1 user group 1.1G Feb 4 15:25 /tmp/foo.dat
ただし、 を使用すると、-s
次のような結果が得られます。
$ ls -sh /tmp/foo.dat
4.0K /tmp/foo.dat
したがって、「hello」を保存するためにディスクに4Kブロックが割り当てられます(4Kは私のファイルシステムの最小割り当て単位です)。
あなたの場合は非常に希薄なファイルのapp
ように見えます。web