Comment puis-je remplir un fichier avec des données aléatoires?

124

Comment créer un nouveau fichier et le remplir avec 1 Go de données aléatoires? J'ai besoin de cela pour tester certains logiciels.

Je préférerais utiliser /dev/randomou /dev/urandom.

Stefan Lasiewski
la source
74
Ouvrez viavec vi -w randomfileet demandez à quelqu'un qui n'a jamais été vu vide quitter le programme. ;)
Wildcard
1
Je viens juste d’aimer le commentaire ci-dessus de Facebook! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Réponses:

171

Sur la plupart des unices:

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

Si vous headne comprenez pas le Gsuffixe, vous pouvez spécifier la taille en octets:

head -c 1073741824 </dev/urandom >myfile

Si vous headne comprenez pas l' -coption (c'est courant mais pas POSIX; vous avez probablement OpenBSD):

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

Ne pas utiliser /dev/randomsous Linux, utilisez /dev/urandom.

Gilles
la source
1
Pour ce que cela vaut, headne comprend pas -csur mon ordinateur Solaris 10.
rahmu
2
Intéressant qui headpeut lire /dev/urandom, mais tailne peut pas.
Stefan Lasiewski
22
@StefanLasiewski tailtente d'abord d'aller à la fin du fichier d'entrée, ce qui prend une éternité (littéralement).
Gilles
Ah, comme 'tail / dev / infinity`, s'il existait un tel dispositif.
Stefan Lasiewski
3
@StefanLasiewski Vous avez /dev/zeroaussi, si vous n'aimez pas la variété.
Gilles
35

En supposant que les données pseudo-aléatoires suffisent, vous dd if=/dev/urandom of=target-file bs=1M count=1000ferez ce que vous voulez.

dd (1) lira des blocs de données d'un fichier d'entrée et les écrira dans un fichier de sortie. Le langage de ligne de commande est un peu bizarre, mais c’est l’un de ces outils vraiment utiles qui valent la peine d’être maîtrisés.

Dans ce cas if, le fichier d'entrée, le fichier de ofsortie, bscorrespond à la "taille du bloc" - et j'ai utilisé l'extension GNU pour définir la taille plus facilement. (Vous pouvez également utiliser 1048576 si vous ddn'avez pas l'extension GNU.) countEst le nombre de blocs à lire ifet à écrire of.

/dev/urandomC'est un meilleur choix que /dev/randomparce que , sous Linux, il retombera sur des données pseudo-aléatoires fortes plutôt que de bloquer lorsque des données réellement aléatoires sont épuisées.

Vous pouvez également vouloir regarder http://www.random.org/ comme un autre moyen d’obtenir des données aléatoires sans avoir à les générer vous-même.

Daniel Pittman
la source
3
Remarque - Les spécifications de l’unité telles que 1Mne sont pas disponibles dans toutes les ddvariantes standard . Si votre version de ddest affectée, utilisez bs=1048576.
Chris Down
4
L'exemple de commande créera un fichier de 1 000 000 blocs de 1 Mo chacun. C'est environ 1 To (1M x 1Mo), pas 1 Go (ce qui serait 1K x 1Mo). Par ailleurs, jusqu’à un certain point, l’augmentation de la taille des blocs et la réduction du nombre de blocs ont tendance à produire un meilleur débit pour une quantité donnée de données de sortie.
un CVn
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Utilisé pour générer 5 Mo de données de caractères aléatoires. Si vous avez besoin d'une taille différente, changez la -cvaleur de head, changez le nom du fichier de sortie, exécutez-le et attendez la fin de l'exécution.

James Jithin
la source