Je sais comment créer un fichier vide:
touch /var/tmp/nullbytes
mais comment puis-je créer un fichier de 1 Mo qui ne contient que des octets null sur la ligne de commande avec bash?
Je sais comment créer un fichier vide:
touch /var/tmp/nullbytes
mais comment puis-je créer un fichier de 1 Mo qui ne contient que des octets null sur la ligne de commande avec bash?
Réponses:
Avec GNU truncate
:
truncate -s 1M nullbytes
(en supposant qu'il nullbytes
n'existait pas auparavant) créerait un fichier fragmenté de 1 mégaoctet. C'est un fichier qui semble rempli de zéros mais qui ne prend pas de place sur le disque.
Sans truncate
, vous pouvez utiliser à la dd
place:
dd bs=1048576 seek=1 of=nullbytes count=0
(avec certaines dd
implémentations, vous pouvez remplacer 1048576 par 1M
)
Si vous préférez que l'espace disque soit alloué , sous Linux et certains systèmes de fichiers, vous pouvez faire:
fallocate -l 1M nullbytes
Cela alloue l'espace sans réellement écrire de données sur le disque (l'espace est réservé mais marqué comme non initialisé).
dd < /dev/zero bs=1048576 count=1 > nullbytes
Écrira en fait les zéros sur le disque. C'est le moins efficace, mais si vous avez besoin que vos disques tournent pour accéder à ce fichier, c'est celui que vous voudrez.
Ou la manière de @ mikeserv de tromper dd
pour générer les octets NUL:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Une alternative avec GNU head
qui n'implique pas d'avoir à spécifier une taille de bloc (1M est OK, mais 10G par exemple ne le ferait pas):
head -c 1M < /dev/zero > nullbytes
Ou pour obtenir une barre de progression:
pv -Ss 1M < /dev/zero > nullbytes
truncate
pour créer un fichier vide à utiliser comme volume d'échange… cela ne fonctionnera pas! Utilisez dd
dans ce cas à la place.
dd
peut également créer des fichiers clairsemés comme je l'ai montré.
bs=1kx1k
. Ou <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file
pour l'écriture littérale sur le disque. Pas 100% sur la perte d'efficacité en forçant l'erreur de lecture.