Erstellen Sie eine Testdatei mit vielen Null-Bytes

25

Ich kann eine leere Datei erstellen:

touch /var/tmp/nullbytes

aber wie kann ich mit bash eine 1MB-Datei erstellen, die nur Nullbytes in der Kommandozeile enthält?

rubo77
quelle
Bezieht SU Frage: superuser.com/q/609020/151431
terdon
1
+1. Interessante Frage. Könnte jemand freundlich erläutern, in welchen Szenarien eine solche Datei erforderlich wäre?
Kent Pawar
1
Ich brauchte es, um einen Absturz auf chkrootkit
rubo77

Antworten:

56

Mit GNU truncate:

truncate -s 1M nullbytes

(vorausgesetzt, nullbyteses existierte vorher nicht) würde eine 1-Mebibyte-Sparse-Datei erstellen. Dies ist eine Datei, die mit Nullen gefüllt erscheint, aber keinen Platz auf der Festplatte beansprucht.

Ohne truncatekönnen Sie ddstattdessen verwenden:

dd bs=1048576 seek=1 of=nullbytes count=0

(Bei einigen ddImplementierungen können Sie 1048576 durch ersetzen. 1M)

Wenn Sie möchten, dass der Speicherplatz auf Linux und einigen Dateisystemen zugewiesen wird, können Sie Folgendes tun:

fallocate -l 1M nullbytes

Dadurch wird der Speicherplatz zugewiesen, ohne dass tatsächlich Daten auf die Festplatte geschrieben werden (der Speicherplatz ist reserviert, aber als nicht initialisiert markiert).

dd < /dev/zero bs=1048576 count=1 > nullbytes

Schreibt die Nullen tatsächlich auf die Festplatte. Das ist am wenigsten effizient, aber wenn Sie beim Zugriff auf diese Datei eine Drehung Ihrer Laufwerke benötigen, ist dies diejenige, für die Sie sich entscheiden möchten.

Oder @ mikeservs Art, dddie NUL-Bytes zu erzeugen:

dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes

Eine Alternative mit GNU head, bei der keine Blockgröße angegeben werden muss (1 MB ist in Ordnung, 10 GB beispielsweise nicht):

head -c 1M < /dev/zero > nullbytes

Oder um einen Fortschrittsbalken zu erhalten:

pv -Ss 1M < /dev/zero > nullbytes
Stéphane Chazelas
quelle
Verwenden Sie diese Option nicht, truncateum eine leere Datei zu erstellen, die als Swap-Volume verwendet werden soll. Dies funktioniert nicht. Verwenden Sie ddin diesem Fall stattdessen.
Elias Probst
1
@EliasProbst, stattdessen ITYM- Kopie von / dev / zero , keine Sparse-Datei verwenden . ddkann spärliche Dateien erstellen, wie ich auch gezeigt habe.
Stéphane Chazelas
2
fallocate ist der beste und schnellste Weg, um zu erstellen, weil es den Speicherplatz reserviert und es schnell macht, aber es stört nicht, etwas zu schreiben ( stackoverflow.com/questions/257844/… )
curratore
... oder bs=1kx1k. Oder <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >filefür das wörtliche Schreiben auf die Festplatte. Nicht 100% davon, wie viel Effizienz beim Erzwingen des Lesefehlers verloren gehen könnte.
mikeserv
27
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
Zelda
quelle