Bagaimana cara membuat file dengan "FF" menggunakan dd?

20

Bagaimana cara membuat file dengan 0xFFmenggunakan dd?

Perintah ini akan mengisi file output dengan nol sampai ukuran file mencapai 100 KB:

dd if=inputFile.bin ibs=1k count=100 of=paddedFile.bin conv=sync

Namun, saya ingin membuat file dengan 0xFFs alih-alih 0x00.

XP1
sumber

Jawaban:

29

Sejauh yang saya tahu tidak ada cara untuk memberitahu ddpad menggunakan 0xFF. Tapi ada solusinya.

Pertama buat file dengan panjang yang dibutuhkan diisi dengan 0xFF:

$ dd if=/dev/zero ibs=1k count=100 | tr "\000" "\377" >paddedFile.bin
100+0 records in
200+0 records out
102400 bytes (102 kB) copied, 0,0114595 s, 8,9 MB/s

trdigunakan untuk mengganti nol dengan 0xFF. trmengharapkan argumen dalam oktal. 0xFFdi oktal adalah \377.

Hasil:

$ hexdump -C paddedFile.bin 
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00019000

Kemudian masukkan file input di awal file "empuk":

$ dd if=inputFile.bin of=paddedFile.bin conv=notrunc
0+1 records in
0+1 records out
8 bytes (8 B) copied, 7,4311e-05 s, 108 kB/s

Perhatikan conv=notruncyang memberitahu dduntuk tidak memotong file output.

Contoh file input:

$ hexdump -C inputFile.bin 
00000000  66 6f 6f 0a 62 61 72 0a                           |foo.bar.|
00000008

Hasil:

$ hexdump -C paddedFile.bin 
00000000  66 6f 6f 0a 62 61 72 0a  ff ff ff ff ff ff ff ff  |foo.bar.........|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00019000
lesmana
sumber
2
Langkah 1 bekerja di Linux, tetapi di osx file paddedFile.bindiisi dengan c3 bf. Kenapa ya? sunting: superuser.com/questions/1349494/...
Synesso
1

Kemungkinan peningkatan pada jawaban lesmana adalah beroperasi pada file di tempat. Ini bisa menjadi jauh lebih cepat untuk file input besar dan juga akan membuat file jarang. Namun, dalam banyak situasi Anda tidak ingin memodifikasi file input Anda, sehingga metode ini tidak cocok.

Contoh berikut dimulai dengan file input yang besar dan jarang, kemudian mengisi hingga 1GB dengan karakter FF. Cukup ubah newsizeke nilai yang Anda inginkan. Seperti yang Anda lihat, ddporsinya hanya membutuhkan sepersekian detik meskipun file ini sangat besar.

$ ls -ld inputFile.bin
-rw-rw-r-- 1   …   1073741700   …   inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000
3fffff84

$ newsize=$((1024 * 1024 * 1024))
$ filesize=$(stat -c "%s" inputFile.bin)
$ padcount=$((newsize - filesize))
$ dd if=/dev/zero ibs=1 count="$padcount" | tr "\000" "\377" >> inputFile.bin
124+0 records in
0+1 records out
124 bytes (124 B) copied, 0.000162309 s, 764 kB/s

$ ls -ld inputFile.bin
-rw-rw-r-- 1   …   1073741824   …   inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000 ffff ffff ffff ffff ffff ffff
3fffff90 ffff ffff ffff ffff ffff ffff ffff ffff
*
40000000
asdf
sumber