僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
既存のイメージに追加する場合は、seek=$NUMBER とかのオプション をつければ、ブロックサイズ x $NUMBER だけ隙間ができる(上書き しない)ようだ。
$ dd if=/dev/urandom of=foo.img bs=512 count=10 10+0 records in 10+0 records out 5120 bytes (5.1 kB) copied, 0.00170951 s, 3.0 MB/s $ cp foo.img bar.img $ dd if=/dev/zero of=foo.img seek=10 bs=512 count=10 10+0 records in 10+0 records out 5120 bytes (5.1 kB) copied, 8.1365e-05 s, 62.9 MB/s $ ls -l foo.img bar.img -rw-r--r-- 1 user group 5120 2011-04-14 11:13 bar.img -rw-r--r-- 1 user group 10240 2011-04-14 11:14 foo.img $ md5sum bar.img 8afb5cae73c1090b2d1e860f0691148d bar.img $ dd if=foo.img bs=512 count=10 | md5sum 8afb5cae73c1090b2d1e860f0691148d - 10+0 records in 10+0 records out 5120 bytes (5.1 kB) copied, 0.000239765 s, 21.4 MB/s
ただし、これはブロックサイズの整数倍きっちりの場合だけ。
bsを適当にして1倍すれば計算は要らないが、今度は最終的な
サイズ調整が面倒そうだ。
そのあたりに融通を利かせたいなら、標準入出力を利用したほうが
簡単かもしれない。
$ cp bar.img foo.img $ dd if=/dev/zero bs=513 count=10 >> foo.img 10+0 records in 10+0 records out 5130 bytes (5.1 kB) copied, 9.7149e-05 s, 52.8 MB/s $ md5sum bar.img 8afb5cae73c1090b2d1e860f0691148d bar.img $ dd if=foo.img bs=512 count=10 | md5sum 8afb5cae73c1090b2d1e860f0691148d - 10+0 records in 10+0 records out 5120 bytes (5.1 kB) copied, 0.000235365 s, 21.8 MB/s
ちなみに seek と bs で指定したサイズが元データより大きいと、 間の分が隙間になって しまうようだ(小さいと、元データの末尾が書き換えられる)。
$ cp bar.img foo.img $ dd if=/dev/zero of=foo.img seek=43 bs=3MB count=11 11+0 records in 11+0 records out 33000000 bytes (33 MB) copied, 0.137683 s, 240 MB/s $ ls -lh *.img -rw-r--r-- 1 user group 5.0K 2011-04-14 11:13 bar.img -rw-r--r-- 1 user group 155M 2011-04-14 11:26 foo.img $ du -h *.img 8.0K bar.img 32M foo.img
ls(1)で、パス指定したファイルとしないファイルを指定すると、パス指定
のないファイル名の出力は、後回しになった。
Debian GNU/Linux Squeeze と FreeBSD-8.1 で確認。
$ echo 1 > 1.txt $ echo 2 > 2.txt $ ls -1 1.txt ./2.txt ./2.txt 1.txt $ ls -1 ./2.txt 1.txt ./2.txt 1.txt $ cat 2.txt ./1.txt 2 1 $ cat ./2.txt 1.txt 2 1
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。