So come creare un file vuoto:
touch /var/tmp/nullbytes
ma come posso creare un file da 1 MB che contiene solo nullbyte sulla riga di comando con bash?
So come creare un file vuoto:
touch /var/tmp/nullbytes
ma come posso creare un file da 1 MB che contiene solo nullbyte sulla riga di comando con bash?
Risposte:
Con GNU truncate
:
truncate -s 1M nullbytes
(supponendo nullbytes
che non esistesse prima) creerebbe un file sparse di 1 mebibyte. Questo è un file che appare pieno di zeri ma che non occupa spazio sul disco.
Senza truncate
, puoi usare dd
invece:
dd bs=1048576 seek=1 of=nullbytes count=0
(con alcune dd
implementazioni, è possibile sostituire 1048576 con 1M
)
Se preferisci assegnare lo spazio su disco , su Linux e alcuni filesystem, potresti fare:
fallocate -l 1M nullbytes
Ciò alloca lo spazio senza effettivamente scrivere i dati sul disco (lo spazio è riservato ma contrassegnato come non inizializzato).
dd < /dev/zero bs=1048576 count=1 > nullbytes
Scriverà effettivamente gli zeri sul disco. Questo è il meno efficiente, ma se hai bisogno che le tue unità girino quando accedi a quel file, è quello che vorrai fare.
O il modo di @ mikeserv per ingannare la dd
generazione dei byte NUL:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Un'alternativa con GNU head
che non implica la necessità di specificare una dimensione del blocco (1M è OK, ma 10G per esempio no):
head -c 1M < /dev/zero > nullbytes
O per ottenere una barra di avanzamento:
pv -Ss 1M < /dev/zero > nullbytes
truncate
per creare un file vuoto da utilizzare come volume di scambio ... questo non funzionerà! Utilizzare dd
in questo caso invece.
dd
posso creare file sparsi come ho mostrato anche.
bs=1kx1k
. O <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file
per la cosa letterale scrivere su disco. Tuttavia, non al 100% su quanta efficienza si potrebbe perdere nel forzare l'errore di lettura.