Cree un archivo de prueba con muchos bytes cero

25

Sé cómo crear un archivo vacío:

touch /var/tmp/nullbytes

pero ¿cómo puedo crear un archivo de 1 MB que solo contenga nullbytes en la línea de comandos con bash?

rubo77
fuente
Se relaciona pregunta SU: superuser.com/q/609020/151431
terdon
1
+1. Interesante pregunta. ¿Podría alguien explicar amablemente en qué escenarios se requeriría tal archivo ...?
Kent Pawar
1
Lo necesitaba para simular un bloqueo en chkrootkit
rubo77

Respuestas:

56

Con GNU truncate:

truncate -s 1M nullbytes

(suponiendo nullbytesque no existiera de antemano) crearía un archivo disperso de 1 mebibyte. Ese es un archivo que aparece lleno de ceros pero que no ocupa espacio en el disco.

Sin truncate, puedes usar dden su lugar:

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

(con algunas ddimplementaciones, puede reemplazar 1048576 con 1M)

Si prefiere que se asigne el espacio en disco , en Linux y en algunos sistemas de archivos, puede hacer lo siguiente:

fallocate -l 1M nullbytes

Eso asigna el espacio sin escribir datos en el disco (el espacio está reservado pero marcado como no inicializado).

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

Realmente escribirá los ceros en el disco. Eso es lo menos eficiente, pero si necesita que sus unidades giren al acceder a ese archivo, ese es el que querrá buscar.

O la forma de @ mikeserv de engañar ddpara generar los bytes NUL:

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

Una alternativa con GNU headque no implica tener que especificar un tamaño de bloque (1M está bien, pero 10G, por ejemplo, no):

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

O para obtener una barra de progreso:

pv -Ss 1M < /dev/zero > nullbytes
Stéphane Chazelas
fuente
No lo use truncatepara crear un archivo vacío para usarlo como volumen de intercambio ... ¡esto no funcionará! Use dden este caso en su lugar.
Elias Probst
1
@EliasProbst, copia ITYM de / dev / zero en su lugar , no use un archivo disperso . ddpuede crear archivos dispersos como mostré también.
Stéphane Chazelas
2
Falocate es la mejor y más rápida forma de crear porque reserva el espacio y lo hace rápido pero no se molesta en escribir nada ( stackoverflow.com/questions/257844/… )
curratore
... o bs=1kx1k. O <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >filepara la cosa literal de escribir en el disco. Sin embargo, no es del 100% de cuánta eficiencia se puede perder al forzar el error de lectura.
mikeserv
27
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
Zelda
fuente