¿Cómo puedo llenar un archivo con datos aleatorios?

124

¿Cómo puedo crear un nuevo archivo y llenarlo con 1 Gigabyte de datos aleatorios? Necesito esto para probar algún software.

Preferiría usar /dev/randomo /dev/urandom.

Stefan Lasiewski
fuente
74
Abrir vicon vi -w randomfiley pida a alguien que nunca ha visto vipara salir del programa. ;)
Comodín
1
¡Acabo de recibir Me gusta en el comentario anterior de la publicación de Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Respuestas:

171

En la mayoría de las unidades:

head -c 1G </dev/urandom >myfile

Si headno comprende el Gsufijo, puede especificar el tamaño en bytes:

head -c 1073741824 </dev/urandom >myfile

Si headno entiende la -copción (es común pero no POSIX; probablemente tenga OpenBSD):

dd bs=1024 count=1048576 </dev/urandom >myfile

No lo use /dev/randomen Linux, use /dev/urandom.

Gilles
fuente
1
Por lo que vale, headno entiende -cen mi máquina Solaris 10.
rahmu
2
Interesante que headpuede leer /dev/urandom, pero tailno puede.
Stefan Lasiewski
22
@StefanLasiewski tailprimero intenta ir al final del archivo de entrada, lo que lleva una eternidad (literalmente).
Gilles
Ah, como 'tail / dev / infinity', si existiera tal dispositivo.
Stefan Lasiewski
3
@StefanLasiewski También tienes /dev/zero, si no te gusta la variedad.
Gilles
35

Suponiendo que los datos pseudoaleatorios son suficientes, dd if=/dev/urandom of=target-file bs=1M count=1000hará lo que desee.

dd (1) leerá bloques de datos de un archivo de entrada y los escribirá en un archivo de salida. El lenguaje de línea de comandos es un poco peculiar, pero es una de esas herramientas realmente útiles que vale la pena dominar los conceptos básicos.

En este caso ifes un archivo de entrada, ofes un archivo de salida, bses "tamaño de bloque", y utilicé la extensión GNU para establecer el tamaño más convenientemente. (También puede usar 1048576 si ddno tiene la extensión GNU.) countEs el número de bloques para leer ify escribir of.

/dev/urandomes una mejor opción que /dev/randomporque, en Linux, recurrirá a datos pseudoaleatorios fuertes en lugar de bloquear cuando se agoten los datos realmente aleatorios.

También puede considerar http://www.random.org/ como otra ruta para obtener algunos datos aleatorios sin tener que generarlos usted mismo.

Daniel Pittman
fuente
3
Una nota: las especificaciones de la unidad como 1Mno están disponibles en todas las ddvariantes estándar . Si su versión de ddse ve afectada, use bs=1048576.
Chris Down
44
El comando de ejemplo creará un archivo de recuento de 1,000,000 de bloques cada uno de tamaño 1 MB. Eso es aproximadamente 1 TB (1M x 1MB), no 1 GB (que sería 1K x 1MB). Por otro lado, hasta cierto punto, aumentar el tamaño del bloque y reducir el recuento de bloques tiende a producir un mejor rendimiento para una cantidad dada de datos de salida.
un CVn
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Lo usé para generar datos de caracteres aleatorios de 5 MB. Si necesita un tamaño diferente, cambie el -cvalor de head, cambie el nombre del archivo, ejecute y espere hasta que se complete la ejecución.

James Jithin
fuente