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?
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?
Respuestas:
Con GNU truncate
:
truncate -s 1M nullbytes
(suponiendo nullbytes
que 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 dd
en su lugar:
dd bs=1048576 seek=1 of=nullbytes count=0
(con algunas dd
implementaciones, 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 dd
para generar los bytes NUL:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Una alternativa con GNU head
que 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
truncate
para crear un archivo vacío para usarlo como volumen de intercambio ... ¡esto no funcionará! Use dd
en este caso en su lugar.
dd
puede crear archivos dispersos como mostré también.
bs=1kx1k
. O <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file
para 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.