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?


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.