トップ «前の日記(2010-12-05(Sun)) 最新 次の日記(2010-12-16(Thu))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2010-12-15(Wed) 今日もいい天気

FreeBSDとの違いはどこに

truncate(2)。といってもtruncate(1)は見当たらないし、 Cでどう書くのかよくわからないので Perl。

$ touch foo.txt ; perl -e 'truncate("foo.txt", 1000000);'
$ ls -alFh foo.txt
-rw-r--r-- 1 user group 977K 2010-12-15 11:34 foo.txt
$ du -h foo.txt
0       foo.txt
 
$ cp foo.txt bar.txt
$ ls -alFh bar.txt
-rw-r--r-- 1 user group 977K 2010-12-15 11:34 bar.txt
$ du -h bar.txt
0       bar.txt
 
$ rsync -a foo.txt baz.txt
$ du -h baz.txt
984K    baz.txt
 
$ dd if=foo.txt of=qux.txt
1953+1 records in
1953+1 records out
1000000 bytes (1.0 MB) copied, 0.02885 s, 34.7 MB/s
$ du -h qux.txt
984K    qux.txt

truncate でディスクサイズに関係なくファイルサイズを指定 できるらしいが、FreeBSDではcp(1)したら、コピーされた ファイルは、そのとおりの大きさに膨らんでしまう。 (過去日記)
これはFreeBSD-8.1 でも確認できた(同じ方法で追試)。
Linux(Debian Lenny)では、cp(1)では変らない。rsync(1)したり、 ネットワークで転送したりすると大きくなってしまうけど。

scp(1)でローカルにコピーしてみたが、どちらもcp(1)と同様だった。
あと、touch(1)で新規作成した空っぽのファイルを truncate で伸ばしても、 FreeBSDのdu では 0 とは表示されなかった。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。