Para fines de prueba, tengo que generar un archivo de un cierto tamaño (para probar un límite de carga).¿Cómo crear un archivo con un tamaño dado en Linux?
¿Qué es un comando para crear un archivo de cierto tamaño en Linux?
Para fines de prueba, tengo que generar un archivo de un cierto tamaño (para probar un límite de carga).¿Cómo crear un archivo con un tamaño dado en Linux?
¿Qué es un comando para crear un archivo de cierto tamaño en Linux?
dd if=/dev/zero of=upload_test bs=file_size count=1
Dónde file_size
es el tamaño de su archivo de prueba en bytes
Oh, eso podría ser más eficiente que mi enfoque porque lo hace todo en un solo bloque. Buena idea. –
En realidad, usar un gran tamaño de bloques funcionará mucho peor una vez que se vuelve muy grande, ya que asignará y leerá esa cantidad en la memoria antes de escribir. Si esto es algo así como bs = 4GiB, probablemente termines intercambiando. – Brian
¿Qué tal si usas un archivo como plantilla y copias su comienzo (con 'head -c file_size> desired_file') o su finalización (con' tail -c file_size> desired_file')? ¿Sería más rápido? También sería "aleatorio". – Carcamano
Use este comando:
dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS
Para crear un archivo de gran tamaño (vacío), establece $INPUT-FILE=/dev/zero
.
El tamaño total del archivo será $BLOCK-SIZE * $NUM-BLOCKS
.
El nuevo archivo creado será $OUTPUT-FILE
.
¿Por qué se hace la pregunta? –
Tuve que buscar la respuesta de Google, así que lo puse aquí, para que pueda ser discutido y actualizado ... ya sabes, ¿el objetivo de todo el sitio? – Grundlefleck
Sé que la gente está votando a @Grundlefleck por las prostituciones de XP, pero tiene un punto: una de las maneras de usar este sitio como lo concibieron Jeff y Joel es poner una pregunta y responder por algo que acaba de descubrir. –
dd if=/dev/zero of=my_file.txt count=12345
Recuerde que el tamaño de bloque predeterminado de dd es de 512 bytes, por lo que este comando hará que un archivo tenga un tamaño de 12345 * 512 bytes. –
que podría hacer:
[[email protected]:~]$ perl -e 'print "\0" x 100' > filename.ext
Cuando reemplace 100 con el número de bytes que desea volcar.
Y el byte de relleno real también. Necesito "\ xff" y funciona bien. ¡Gracias! :) – Ray
Sólo para dar seguimiento a Tom's posterior, puede utilizar dd para crear archivos dispersos, así:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Esto creará un archivo con un "orificio" en la mayoría de las Unixes: los datos no se escribirán en el disco, o ocuparán espacio hasta que se escriba algo distinto de cero.
Configuración de recuento = 0 evita tener que restar un byte del tamaño del archivo. – andrewdotn
Así lo hace. Gracias, lo he actualizado. – Brian
con 'count = 0',' bs * seek' se convierte en el tamaño de archivo – Jayen
Puede hacerlo mediante programación:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
Este método es especialmente útil para posteriormente mmap el archivo en memoria.
utilizar el siguiente comando para comprobar que el archivo tiene el tamaño correcto:
# du -B1 --apparent-size /tmp/foo.txt
Tenga cuidado:
# du /tmp/foo.txt
probablemente imprimir porque se asigna como Sparse file si apoyado por su sistema de archivos.
ver también: man 2 open y man 2 truncate
supongo que el enfoque más eficaz implicaría crear el archivo con open
(con las banderas O_CREAT
y O_WRONLY
, a menos que desee leer el archivo en el mismo programa) y el ajuste el tamaño con ftruncate.
en OSX (y Solaris, al parecer), el comando mkfile
está disponible, así:
mkfile 10g big_file
Esto hace que un archivo de 10 GB llamado "big_file".Encontrado este enfoque here.
Esto es útil para situaciones como OS X donde los comandos 'truncate' y' fallocate' no están disponibles. 'dd' también funciona como se describe arriba aunque es' m' para megabytes, no 'M'. – user535673
Por favor, moderno es más fácil y más rápido. En Linux, (escoger uno)
truncate -s 10G foo
fallocate -l 5G bar
Se necesita a afirmar que truncate
en un sistema de archivos que soporte archivos dispersos creará un archivo disperso y fallocate
no lo hará. Un archivo disperso es aquel en el que las unidades de asignación que componen el archivo no son realmente asignadas hasta que se usen. Los metadatos para el archivo serán, sin embargo, ocuparán un espacio considerable, pero probablemente no estén cerca del tamaño real del archivo. Debe consultar los recursos sobre los archivos dispersos para obtener más información, ya que existen ventajas y desventajas para este tipo de archivo. Un archivo no disperso tiene asignados sus bloques (unidades de asignación) con anticipación, lo que significa que el espacio está reservado en la medida en que lo vea el sistema de archivos. También fallocate
ni truncate
no va a fijar el contenido del archivo a un valor especificado comodd
, en vez del contenido de un archivo asignado con fallocate
o truncate
puede ser cualquier valor de la basura que existía en las unidades asignadas durante la creación y este comportamiento puede o puede no ser deseado. El dd
es el más lento porque en realidad escribe el valor o el fragmento de datos en todo el flujo de archivos como se especifica con sus opciones de línea de comando.
Este comportamiento podría ser potencialmente diferente, dependiendo del sistema de archivos utilizado y la conformidad de ese sistema de archivos con cualquier estándar o especificación. Por lo tanto, se recomienda realizar una investigación adecuada para garantizar que se utiliza el método apropiado.
Intenté 'truncar'. Produjo un archivo de tamaño cero utilizando la sintaxis anterior.La 'página de manual' de 'fallocate' dice que los archivos que crea están llenos de' espacio 'vacío en lugar de datos. Parece que no sería útil para algunos casos esperados, como "cuánto tiempo lleva copiar un archivo 1G". –
fallocate parece funcionar bien para mí. Crea un archivo del tamaño correcto. –
Esta es la mejor respuesta a esta pregunta. El truncate/fallocate no toma mucho tiempo, porque no escribe todos los bloques del archivo. Pero, si tuviera que subir el archivo resultante a alguna parte, leería ceros para todo el asunto. –
Como comando shell:
< /dev/zero head -c 1048576 > output
Algunas de estas respuestas has utilizando /dev/zero
para la fuente de los datos. Si la red de prueba carga velocidades, esta puede no ser la mejor idea si su aplicación está haciendo alguna compresión, un archivo lleno de ceros comprime realmente. El uso de este comando para generar el archivo
dd if=/dev/zero of=upload_test bs=10000 count=1
pude comprimir upload_test
abajo a cerca de 200 bytes. Así que podrías ponerte en una situación en la que creas que estás cargando un archivo de 10 KB pero en realidad sería mucho menos.
Lo que sugiero es usar /dev/urandom
en lugar de /dev/zero
. No pude comprimir mucho la salida de /dev/urandom
.
Mi sistema incorporado no tiene '/ dev/zero', entonces'/dev/urandom' es bueno. –
Hay muchas respuestas, pero ninguna explica muy bien qué más se puede hacer. Examinando man pages for dd, es posible especificar mejor el tamaño de un archivo.
Esto va a crear /tmp/zero_big_data_file.bin llena de ceros, que tiene un tamaño de 20 megabytes:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
Esto va a crear/tmp/zero_1000bytes_data_file.compartimiento llenado con ceros, que tiene un tamaño de 1000 bytes:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
o
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
Esto generará 4 MB archivo de texto con caracteres aleatorios en el directorio actual y su nombre "4mb.txt" Puede cambiar los parámetros para generar diferentes tamaños y nombres.
base64 /dev/urandom | head -c 4000000 > 4mb.txt
gran tamaño http://stackoverflow.com/questions/257844/quickly-create-a-large-file-on-a-linux-system –