Eu sei como criar um arquivo vazio:
touch /var/tmp/nullbytes
mas como posso criar um arquivo de 1 MB que contenha apenas bytes nulos na linha de comando com bash?
Eu sei como criar um arquivo vazio:
touch /var/tmp/nullbytes
mas como posso criar um arquivo de 1 MB que contenha apenas bytes nulos na linha de comando com bash?
Respostas:
Com o GNU truncate:
truncate -s 1M nullbytes
(supondo nullbytesque não existisse anteriormente) criaria um arquivo esparso de 1 mebibyte. Esse é um arquivo que aparece preenchido com zeros, mas que não ocupa espaço no disco.
Sem truncate, você pode usar dd:
dd bs=1048576 seek=1 of=nullbytes count=0
(com algumas ddimplementações, você pode substituir 1048576 por 1M)
Se você preferir que o espaço em disco seja alocado , no Linux e em alguns sistemas de arquivos, você pode:
fallocate -l 1M nullbytes
Isso aloca o espaço sem realmente gravar dados no disco (o espaço é reservado, mas marcado como não inicializado).
dd < /dev/zero bs=1048576 count=1 > nullbytes
Na verdade, escreverá os zeros no disco. Essa é a menos eficiente, mas se você precisar que suas unidades girem ao acessar esse arquivo, é para isso que você deve procurar.
Ou a maneira do @ mikeserv de enganar ddpara gerar os bytes NUL:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
Uma alternativa ao GNU headque não envolve a necessidade de especificar um tamanho de bloco (1M é OK, mas 10G, por exemplo, não):
head -c 1M < /dev/zero > nullbytes
Ou para obter uma barra de progresso:
pv -Ss 1M < /dev/zero > nullbytes
truncatepara criar um arquivo vazio para ser usado como volume de troca ... isso não funcionará! Use ddneste caso.
ddpode criar arquivos esparsos como mostrei também.
bs=1kx1k. Ou <&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >filepara a coisa literal de gravação em disco. Não é 100% sobre quanta eficiência pode ser perdida ao forçar o erro de leitura.