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.


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.


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.