Wie kann ich eine Datei mit zufälligen Daten füllen?

124

Wie kann ich eine neue Datei erstellen und sie mit zufälligen Daten im Wert von 1 Gigabyte füllen? Ich brauche das, um Software zu testen.

Ich würde lieber /dev/randomoder verwenden /dev/urandom.

Stefan Lasiewski
quelle
74
Öffnen Sie vimit vi -w randomfileund bitten Sie jemanden, der noch nie gesehen hat vi, das Programm zu beenden. ;)
Wildcard
1
Gerade gekommen, um den obigen Kommentar von Facebook-Post zu mögen! facebook.com/ProgrammersCreateLife/photos/a.241809332534619/…
Parixit

Antworten:

171

Auf den meisten Unices:

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

Wenn Sie headdas GSuffix nicht verstehen , können Sie die Größe in Byte angeben:

head -c 1073741824 </dev/urandom >myfile

Wenn du headdie -cOption nicht verstehst (es ist üblich, aber nicht POSIX; du hast wahrscheinlich OpenBSD):

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

Verwenden Sie nicht /dev/randomunter Linux, verwenden Sie /dev/urandom.

Gilles
quelle
1
Für das, was es wert ist, headnicht -cauf meinem Solaris 10-Rechner zu verstehen .
Rahmu
2
Interessant, dass headlesen kann /dev/urandom, aber tailnicht.
Stefan Lasiewski
22
@StefanLasiewski tailversucht zunächst, an das Ende der Eingabedatei zu gelangen, was (im wahrsten Sinne des Wortes) ewig dauert.
Gilles
Ah, wie "tail / dev / infinity", wenn es so ein Gerät gäbe.
Stefan Lasiewski
3
@StefanLasiewski Das hast du /dev/zeroauch, wenn du keine Abwechslung magst .
Gilles
35

Vorausgesetzt, dass pseudozufällige Daten ausreichen, dd if=/dev/urandom of=target-file bs=1M count=1000werden Sie tun, was Sie wollen.

dd (1) liest Datenblöcke aus einer Eingabedatei und schreibt sie in eine Ausgabedatei. Die Kommandozeilensprache ist etwas schrullig, aber sie ist eines der wirklich nützlichen Werkzeuge, deren Erlernen es sich lohnt, die Grundlagen zu beherrschen.

In diesem Fall ifist die Eingabedatei, ofdie Ausgabedatei, bsdie "Blockgröße" - und ich habe die GNU-Erweiterung verwendet, um die Größe bequemer einzustellen. (Sie können auch 1048576 verwenden, wenn Sie ddkeine GNU-Erweiterung haben.) countDie Anzahl der Blöcke, aus denen gelesen ifund in die geschrieben werden soll of.

/dev/urandomist eine bessere Wahl als, /dev/randomweil es unter Linux auf starke pseudozufällige Daten zurückgreift und nicht blockiert, wenn wirklich zufällige Daten erschöpft sind.

Möglicherweise möchten Sie auch http://www.random.org/ als einen anderen Weg betrachten, um zufällige Daten abzurufen, ohne sie selbst generieren zu müssen.

Daniel Pittman
quelle
3
Eine Note - Unit - Spezifikation wie 1Mgibt es nicht in jeder Standardvariante dd. Wenn Ihre Version von ddbetroffen ist, verwenden Sie bs=1048576.
Chris Down
4
Mit dem Beispielbefehl wird eine Datei mit einer Anzahl von 1.000.000 Blöcken mit einer Größe von jeweils 1 MB erstellt. Das ist ungefähr 1 TB (1M x 1MB), nicht 1 GB (das wäre 1K x 1MB). Bis zu einem gewissen Punkt führt das Erhöhen der Blockgröße und das Verringern der Blockanzahl zu einem besseren Durchsatz für eine gegebene Menge von Ausgabedaten.
ein Lebenslauf vom
2
while true;do head /dev/urandom | tr -dc A-Za-z0-9;done | head -c 5000K | tee  5000kb

Wird verwendet, um 5 MB zufällige Zeichendaten zu generieren. Wenn Sie eine andere Größe benötigen, ändern Sie den -cWert von head, ändern Sie den Outfile-Namen, führen Sie aus und warten Sie, bis die Ausführung abgeschlossen ist.

James Jithin
quelle