Çok sayıda sıfır bayt olan bir test dosyası oluşturun


25

Boş bir dosyanın nasıl oluşturulacağını biliyorum:

touch /var/tmp/nullbytes

ama sadece bash ile komut satırında nullbyte içeren 1 MB'lık bir dosya nasıl oluşturabilirim?


SU sorusu ile ilgilidir: superuser.com/q/609020/151431
terdon

1
+1. İlginç soru. Birisi bu tür bir dosyanın hangi senaryolarda gerekli olduğunu lütfen söyleyebilir mi?
Kent Pawar

1
Chkrootkit'teki bir çöküşü simüle etmek için ihtiyacım vardı: unix.stackexchange.com/questions/86866/…
rubo77

Yanıtlar:


56

GNU ile truncate:

truncate -s 1M nullbytes

( nullbytesönceden var olmadığını varsayarak ) 1 mebibit seyrek dosya oluşturacaktı. Bu, sıfırlarla dolu görünen ancak diskte yer kaplamayan bir dosyadır.

Olmadan truncate, ddyerine kullanabilirsiniz :

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

(bazı dduygulamalarda, 1048576'yı ile değiştirebilirsiniz 1M)

Disk alanının ayrılmasını tercih ederseniz , Linux ve bazı dosya sistemlerinde şunları yapabilirsiniz:

fallocate -l 1M nullbytes

Bu aslında diske veri yazmadan alanı tahsis eder (alan ayrılır ancak başlatılmamış olarak işaretlenir).

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

Aslında sıfırları diske yazacak. Bu en az verimli, ancak bu dosyaya erişirken sürücülerinizin dönmesi gerekiyorsa, gitmek isteyeceğiniz şey budur.

Ya da @ mikeserv'in ddNUL baytlarını oluşturmayı kandırma yolu :

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

Bir headblok büyüklüğü belirtmek zorunda olmayan GNU'lu bir alternatif (1M normaldir, ancak örneğin 10G olmaz):

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

Veya bir ilerleme çubuğu almak için:

pv -Ss 1M < /dev/zero > nullbytes

truncateTakas hacmi olarak kullanılacak boş bir dosya oluşturmak için kullanmayın … bu işe yaramaz! Kullanım ddyerine bu durumda.
Elias Probst

1
@EliasProbst, ITYM yerine / dev / sıfırdan kopyalamak , seyrek dosyayı kullanmayın . ddBen de gösterdiğim gibi seyrek dosyaları oluşturabilirsiniz.
Stéphane Chazelas

2
fallocate yaratmanın en iyi ve en hızlı yoludur çünkü alanı ayırır ve hızlı yapar ancak hiçbir şey yazmaya zahmet etmez ( stackoverflow.com/questions/257844/… )
curratore

... ya bs=1kx1k. Veya <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >filekelimenin tam anlamıyla diske yazma. Yine de okuma hatasını zorlamada ne kadar verimlilik kaybı olabileceği% 100 değil.
mikeserv

27
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.