Votre commande dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
crée un fichier à deux octets plutôt qu'un fichier à 10 octets en raison d'une interaction mal définie entre bs
et obs
. (Appelez cela un bogue de programme si vous voulez, mais c'est probablement mieux défini comme un bogue de documentation.) Vous êtes censé utiliser soit bs
ou ibs
et obs
.
Empiriquement, il apparaît que bs
remplace obs
, donc ce qui est exécuté est dd if=/dev/zero of=./foo count=1 bs=1 seek=1
, qui crée un fichier à deux octets comme vous l'avez vu.
Si vous aviez utilisé dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1
vous auriez obtenu un fichier de 10 octets comme prévu.
Comme alternative, si vous voulez créer un fichier vide qui ne prend pas d'espace de données sur le disque, vous pouvez utiliser le nom contre-intuitif truncate
commande :
truncate --size=10 foo
La page de manuel POSIX indique :
ibs=expr
Spécifiez la taille du bloc d'entrée, en octets, par expr (la valeur par défaut est 512).
obs=expr
Spécifiez la taille du bloc de sortie, en octets, par expr (la valeur par défaut est 512).
bs=expr
Définir à la fois l'entrée et la sortie tailles de bloc en octets expr, supersedingibs=et obs= . Si aucune conversion autre que sync, noerror et notrunc n'est spécifiée, chaque bloc d'entrée doit être copié dans la sortie en tant que bloc unique sans agréger les blocs courts.
dd
de Linux fonctionne de la même manière. Ainsi, utilisez ibs
à la place :
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1