Váš příkaz dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
vytvoří dvoubajtový soubor místo 10bajtového souboru kvůli špatně definované interakci mezi bs
a obs
. (Pokud chcete, říkejte tomu chyba programu, ale pravděpodobně je lépe definovat jako chybu dokumentace.) Měli byste použít buď bs
nebo ibs
a obs
.
Empiricky to vypadá, že bs
přepíše obs
, takže to, co se spustí, je dd if=/dev/zero of=./foo count=1 bs=1 seek=1
, který vytvoří dvoubajtový soubor, jak jste viděli.
Pokud jste použili dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1
podle očekávání byste dostali 10bajtový soubor.
Alternativně, pokud chcete vytvořit prázdný soubor, který nezabere žádné místo na disku, můžete použít kontraintuitivně nazvaný truncate
příkaz:
truncate --size=10 foo
Manuálová stránka POSIX uvádí:
ibs=expr
Zadejte velikost vstupního bloku v bajtech pomocí výrazu (výchozí je 512).
obs=expr
Zadejte velikost výstupního bloku v bajtech pomocí výrazu (výchozí hodnota je 512).
bs=expr
Nastavte vstup i výstup velikosti bloků na expr bajty, supersedingibs=a obs= . Pokud není specifikována žádná konverze jiná než sync, noerror anotrunc, každý vstupní blok se zkopíruje na výstup jako jeden blok bez agregace krátkých bloků.
Linux dd
funguje stejným způsobem. Použijte tedy ibs
místo toho:
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1