Question Comment créer un fichier aléatoire de 1 Go sous Linux?


J'utilise le shell bash et je voudrais expulser la commande openssl rand -base64 1000 à la commande dd tel que dd if={output of openssl} of="sample.txt bs=1G count=1. Je pense que je peux utiliser des variables mais je ne suis toutefois pas sûr de la meilleure façon de le faire. La raison pour laquelle je voudrais créer le fichier est que je voudrais un fichier de 1 Go avec du texte aléatoire.


72
2017-09-06 18:03


origine




Réponses:


if= n'est pas nécessaire, vous pouvez canaliser quelque chose dans dd au lieu:

something... | dd of=sample.txt bs=1G count=1

Ce ne serait pas utile ici depuis openssl rand nécessite de spécifier le nombre d'octets de toute façon. Donc, vous n'avez pas vraiment besoin dd - ce travaillerait:

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 ))

1 gigaoctet est généralement 230 octets (bien que vous puissiez utiliser 10**9 pour 109 octets à la place). le * 3/4 les comptes partiels pour la surcharge Base64, rendant le encodé sortie 1 Go.

Alternativement, vous pouvez utiliser /dev/urandom, mais ce serait un peu plus lent que OpenSSL:

dd if=/dev/urandom of=sample.txt bs=1G count=1

Personnellement, j'utiliserais bs=64M count=16 ou similaire:

dd if=/dev/urandom of=sample.txt bs=64M count=16

102
2017-09-06 18:17



J'ai posté une question concernant la compression de gros fichiers à superuser.com/questions/467697/ et a été informé que l'utilisation /dev/urandom génère un fichier binaire et non un vrai fichier texte. - PeanutsMonkey
@PeanutsMonkey: Droite; vous auriez besoin de quelque chose comme dd if=/dev/urandom bs=750M count=1 | uuencode my_sample > sample.txt. - Scott
@PeanutsMonkey: Il n'y a pas de "scénario réel", certains scénarios peuvent concerner des gigaoctets de texte, d'autres - des gigaoctets de fichiers JPEG, ou des gigaoctets de logiciels compilés ... Si vous voulez beaucoup de texte, téléchargez un Vidage de Wikipedia par exemple. - grawity
@PeanutsMonkey: Le dd lit 750 000 000 octets /dev/urandom et les tuyaux dans uuencode. uuencode encode son entrée dans une forme d'encodage en base64 (pas nécessairement compatible avec les autres programmes). En d'autres termes, les données binaires sont converties en texte. J'ai utilisé 750M parce que je fais confiance à la déclaration de grawity selon laquelle l'encodage base64 étend les données de 33⅓%, vous devez donc demander ¾ autant de données binaires que vous voulez dans votre fichier texte. - Scott
@leighmcc: FYI: utiliser > la redirection fait ne pas faire passer les écritures via bash - cela équivaut à ouvrir le fichier directement. - grawity


Créez un fichier de contenu aléatoire de 1 Go.bin:

dd if = / dev / urandom = 1GB.bin bs = 64M count = 16 iflag = fullblock


17
2018-05-21 14:52





Essayez ce script.

#!/bin/bash
openssl rand -base64 1000 | dd of=sample.txt bs=1G count=1

Ce script peut fonctionner tant que cela ne vous dérange pas d'utiliser /dev/random.

#!/bin/bash
dd if=/dev/random of="sample.txt bs=1G count=1"

0
2017-09-06 18:12



Je ne recommanderais pas de gaspiller /dev/random à ce sujet, à moins qu'il y ait une très bonne raison de le faire. /dev/urandom est beaucoup moins cher. - Ansgar Wiechers
Aussi, $var=(command) n'est pas une syntaxe valide dans ce contexte. - grawity
@grawity - Quand vous dites que ce n'est pas valide, que voulez-vous dire? - PeanutsMonkey
Je veux dire exactement cela - c'est incorrect. - grawity
@grawity, @PeanutsMonkey: il a fait une faute de frappe; il voulait dire random=$(openssl rand -base64 1000). Bien que je me demande si bashvous permettrait d'attribuer une valeur d'un gigaoctet à une variable. Et même si vous dites random=$(openssl rand -base64 1000), la suite if=$random n'a pas de sens. - Scott


Si vous voulez exactement 1 Go, vous pouvez utiliser les éléments suivants:

openssl rand -out $ testfile -base64 792917038; truncate -s-1 $ testfile

La commande openssl rend un fichier de 1 octet trop gros. La commande tronquée supprime cet octet.


0
2017-07-06 21:48