the sheet online español commands cheat linux command-line

sheet - ¿Cómo crear un archivo con un tamaño dado en Linux?



the linux command line epub (13)

Algunas de estas respuestas lo tienen usando /dev/zero para la fuente de sus datos. Si la velocidad de carga de su red de prueba, esta puede no ser la mejor idea si su aplicación está realizando alguna compresión, un archivo lleno de ceros se comprime muy bien. Usando este comando para generar el archivo

dd if=/dev/zero of=upload_test bs=10000 count=1

Podría comprimir upload_test hasta unos 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 lugar de /dev/zero . No pude comprimir mucho la salida de /dev/urandom .

Para propósitos de prueba, tengo que generar un archivo de cierto tamaño (para probar un límite de carga).

¿Qué es un comando para crear un archivo de cierto tamaño en Linux?


Como comando de shell:

< /dev/zero head -c 1048576 > output


En OSX (y Solaris, al parecer), el comando mkfile está disponible:

mkfile 10g big_file

Esto hace un archivo de 10 GB llamado "big_file". Encontrado este enfoque here.


Esto generará un archivo de texto de 4 MB 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


Hay muchas respuestas, pero ninguna explica muy bien qué más se puede hacer. Al buscar páginas man para dd , es posible especificar mejor el tamaño de un archivo.

Esto va a crear /tmp/zero_big_data_file.bin lleno 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.bin lleno de 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

  • En todos los ejemplos, bs es el tamaño del bloque y el recuento es el número de bloques
  • BLOCKS y BYTES pueden ir seguidos de los siguientes sufijos multiplicativos: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024, y así sucesivamente para T, P, E, Z, Y.

Podrías hacerlo:

[dsm@localhost:~]$ perl -e ''print "/0" x 100'' > filename.ext

Donde reemplaza 100 con el número de bytes que desea escribir.


Por favor, lo moderno es más fácil y más rápido. En Linux, (elija uno)

truncate -s 10G foo fallocate -l 5G bar

Se debe indicar que truncate en un sistema de archivos que soporte archivos dispersos creará un archivo disperso y no se fallocate . Un archivo disperso es aquel en el que las unidades de asignación que componen el archivo no se asignan realmente hasta que se utilizan. Sin embargo, los metadatos del archivo 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 o truncate no establecerá el contenido del archivo a un valor especificado como dd , en su lugar el contenido de un archivo asignado con fallocate o truncate puede ser cualquier valor de basura que existió en las unidades asignadas durante la creación y este comportamiento puede o no ser deseado El dd es el más lento porque en realidad escribe el valor o el fragmento de datos en toda la secuencia de archivos tal como se especifica con sus opciones de línea de comando.

Este comportamiento podría ser potencialmente diferente, según el 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.


Puedes hacerlo programáticamente:

#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 enfoque es especialmente útil para posteriormente mmap el archivo en la memoria.

use el siguiente comando para verificar que el archivo tenga el tamaño correcto:

# du -B1 --apparent-size /tmp/foo.txt

Ten cuidado:

# du /tmp/foo.txt

probablemente imprima 0 porque está asignado como archivo disperso si es compatible con su sistema de archivos.

ver también: hombre 2 abierto y hombre 2 truncado


Solo para seguir Tom''s publicación Tom''s , puedes usar dd para crear también archivos dispersos:

dd if=/dev/zero of=the_file bs=1 count=0 seek=12345

Esto creará un archivo con un "agujero" 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.


Supongo que el enfoque más eficiente implicaría crear el archivo usando open (con los O_CREAT y O_WRONLY , a menos que desee leer del archivo en el mismo programa) y configurar el tamaño con ftruncate .


Use este comando:

dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS

Para crear un archivo grande (vacío), configure $INPUT-FILE=/dev/zero .
El tamaño total del archivo será $BLOCK-SIZE * $NUM-BLOCKS .
El nuevo archivo creado será $OUTPUT-FILE .


dd if=/dev/zero of=my_file.txt count=12345


dd if=/dev/zero of=upload_test bs=file_size count=1

Donde file_size es el tamaño de su archivo de prueba en bytes