Ihr Befehl dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
erstellt eine Zwei-Byte-Datei anstelle einer 10-Byte-Datei aufgrund einer schlecht definierten Interaktion zwischen bs
und obs
. (Nennen Sie dies einen Programmfehler, wenn Sie möchten, aber es ist wahrscheinlich besser als Dokumentationsfehler definiert.) Sie sollten beides verwenden bs
oder ibs
und obs
.
Empirisch zeigt sich, dass bs
überschreibt obs
, also wird dd if=/dev/zero of=./foo count=1 bs=1 seek=1
ausgeführt , wodurch eine Zwei-Byte-Datei erstellt wird, wie Sie gesehen haben.
Wenn Sie dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1
verwendet hätten Sie hätten wie erwartet eine 10-Byte-Datei erhalten.
Wenn Sie alternativ eine leere Datei erstellen möchten, die keinen Speicherplatz auf der Festplatte belegt, können Sie den widersprüchlich benannten truncate
verwenden Befehl:
truncate --size=10 foo
Auf der POSIX-Manpage steht:
ibs=Ausdruck
Geben Sie die Eingangsblockgröße in Bytes mit expr an (Standard ist 512).
obs=Ausdruck
Geben Sie die Größe des Ausgangsblocks in Bytes mit expr an (Standard ist 512).
bs=Ausdruck
Legen Sie sowohl Eingabe als auch Ausgabe fest Blockgrößen in expr Bytes, supersedingibs=und obs= . Wenn keine andere Konvertierung als sync, noerror und notrunc angegeben ist, soll jeder Eingabeblock als einzelner Block in die Ausgabe kopiert werden, ohne kurze Blöcke zu aggregieren.
dd
von Linux funktioniert genauso. Verwenden Sie daher ibs
stattdessen:
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1