Buat file uji dengan banyak nol byte

25

Saya tahu cara membuat file kosong:

touch /var/tmp/nullbytes

tetapi bagaimana saya bisa membuat file 1MB yang hanya berisi nullbytes pada commandline dengan bash?

rubo77
sumber
Menghubungkan
1
+1. Pertanyaan menarik. Bisakah seseorang dengan baik hati menguraikan dalam skenario mana file seperti itu diperlukan ..?
Kent Pawar
1
Saya membutuhkannya untuk mensimulasikan crash pada chkrootkit: unix.stackexchange.com/questions/86866/…
rubo77

Jawaban:

56

Dengan GNU truncate:

truncate -s 1M nullbytes

(dengan asumsi nullbytestidak ada sebelumnya) akan membuat file jarang 1 mebibyte. Itu adalah file yang muncul diisi dengan nol tetapi itu tidak memakan ruang pada disk.

Tanpa truncate, Anda bisa menggunakan dd:

dd bs=1048576 seek=1 of=nullbytes count=0

(dengan beberapa ddimplementasi, Anda dapat mengganti 1048576 dengan 1M)

Jika Anda lebih suka ruang disk dialokasikan , di Linux dan beberapa sistem file, Anda bisa melakukan:

fallocate -l 1M nullbytes

Itu mengalokasikan ruang tanpa benar-benar menulis data ke disk (ruang dicadangkan tetapi ditandai sebagai tidak diinisialisasi).

dd < /dev/zero bs=1048576 count=1 > nullbytes

Akan benar-benar menulis nol ke disk. Itu yang paling efisien, tetapi jika Anda perlu drive Anda untuk berputar ketika mengakses file itu, itu yang Anda ingin pergi untuk.

Atau cara @ mikeserv untuk mengelabui ddmenghasilkan byte NUL:

dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes

Alternatif dengan GNU headyang tidak melibatkan harus menentukan ukuran blok (1M OK, tapi 10G misalnya tidak mau):

head -c 1M < /dev/zero > nullbytes

Atau untuk mendapatkan bilah kemajuan:

pv -Ss 1M < /dev/zero > nullbytes
Stéphane Chazelas
sumber
Jangan gunakan truncateuntuk membuat file kosong untuk digunakan sebagai volume swap ... ini tidak akan berhasil! Gunakan dddalam hal ini sebagai gantinya.
Elias Probst
1
@ ElliProbst, alih-alih ITYM dari / dev / zero , jangan gunakan file yang jarang . dddapat membuat file jarang seperti yang saya tunjukkan juga.
Stéphane Chazelas
2
fallocate adalah cara terbaik dan cepat untuk membuat karena cadangan ruang dan melakukannya dengan cepat tetapi tidak repot untuk menulis apa pun ( stackoverflow.com/questions/257844/… )
curratore
... atau bs=1kx1k. Atau <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >fileuntuk literal menulis ke disk. Tidak 100% pada seberapa banyak efisiensi yang mungkin hilang dalam memaksa kesalahan baca.
mikeserv
27
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
Zelda
sumber