Crea un file di test con molti byte zero


25

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?


Si riferisce alla domanda SU: superuser.com/q/609020/151431
terdon

1
+1. Domanda interessante. Qualcuno potrebbe gentilmente elaborare in quali scenari sarebbe richiesto un tale file ...?
Kent Pawar,

1
Ne avevo bisogno per simulare un arresto anomalo su chkrootkit: unix.stackexchange.com/questions/86866/…
rubo77

Risposte:


56

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

Non utilizzare truncateper creare un file vuoto da utilizzare come volume di scambio ... questo non funzionerà! Utilizzare ddin questo caso invece.
Elias Probst,

1
@EliasProbst, copia ITYM da / dev / zero invece , non usa un file sparse . ddposso creare file sparsi come ho mostrato anche.
Stéphane Chazelas,

2
fallocate è il modo migliore e più veloce per creare, perché si riserva lo spazio e farlo in fretta, ma non si preoccupa di nulla di scrittura ( stackoverflow.com/questions/257844/... )
curratore

... o 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.
Mikeserv,

27
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.