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 nullbytesche 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 ddinvece:
dd bs=1048576 seek=1 of=nullbytes count=0
(con alcune ddimplementazioni, è 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 ddgenerazione dei byte NUL:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Un'alternativa con GNU headche 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
truncateper creare un file vuoto da utilizzare come volume di scambio ... questo non funzionerà! Utilizzare ddin questo caso invece.
ddposso creare file sparsi come ho mostrato anche.
bs=1kx1k. O <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >fileper la cosa letterale scrivere su disco. Tuttavia, non al 100% su quanta efficienza si potrebbe perdere nel forzare l'errore di lettura.