Para fins de teste, tenho que gerar um arquivo de um determinado tamanho (para testar um limite de upload).
O que é um comando para criar um arquivo de um determinado tamanho no Linux?
linux
command-line
Grundlefleck
fonte
fonte
Respostas:
Onde
file_size
está o tamanho do seu arquivo de teste em bytesfonte
dd
tem um limite de 2 ^ 32 para os seus valores, de modo a criar um arquivo maior do que 4 GB, há um truque:dd if=/dev/zero of=test bs=1M count=<size in megabytes>
.Por favor, moderno é mais fácil e mais rápido. No Linux, (escolha uma)
É necessário declarar que
truncate
em um sistema de arquivos que suporta arquivos esparsos criará um arquivo esparso efallocate
não. Um arquivo esparso é aquele em que as unidades de alocação que compõem o arquivo não são realmente alocadas até serem usadas. Os metadados para o arquivo , no entanto, ocupam um espaço considerável, mas provavelmente nem perto do tamanho real do arquivo. Você deve consultar recursos sobre arquivos esparsos para obter mais informações, pois há vantagens e desvantagens nesse tipo de arquivo. Um arquivo não esparso tem seus blocos (unidades de alocação) alocados antecipadamente, o que significa que o espaço é reservado na medida em que o sistema de arquivos o vê. Além dissofallocate
, nemtruncate
não irá definir o conteúdo do arquivo para um valor especificado comodd
, em vez disso, o conteúdo de um arquivo alocado comfallocate
outruncate
pode ser qualquer valor do lixo que existia nas unidades alocadas durante a criação e esse comportamento pode ou não ser desejado. Odd
é o mais lento porque, na verdade, ele grava o valor ou a parte dos dados em todo o fluxo de arquivos, conforme especificado nas opções da linha de comando.Esse comportamento pode ser potencialmente diferente - dependendo do sistema de arquivos usado e da conformidade desse sistema de arquivos com qualquer padrão ou especificação. Portanto, é recomendável que a pesquisa apropriada seja feita para garantir que o método apropriado seja usado.
fonte
truncate
. Produziu um arquivo de tamanho zero usando a sintaxe acima. A 'página de manual' defallocate
diz que os arquivos que ele cria estão cheios despace
dados em vez de vazios . Parece que não seria útil para alguns casos esperados, como "quanto tempo leva para copiar um arquivo 1G".brew install coreutils
. Isto irá adicionar um g na frente do comando, então você tem que executá-lo como este:gtruncate -s 10G foo
. Espero que isto ajude!NTFS
partição.Apenas para acompanhar a publicação de Tom , você pode usar o dd para criar arquivos esparsos:
Isso criará um arquivo com um "buraco" na maioria dos unixes - os dados não serão gravados no disco ou ocuparão espaço até que algo diferente de zero seja gravado nele.
fonte
count=0
,bs * seek
torna-se o tamanho do arquivoNo OSX (e Solaris, aparentemente), o
mkfile
comando também está disponível:Isso cria um arquivo de 10 GB chamado "big_file". Encontrei essa abordagem aqui.
fonte
truncate
efallocate
não estão disponíveis.dd
também funciona como descrito acima, embora sejam
para megabytes, nãoM
.Use este comando:
Para criar um arquivo grande (vazio), defina
$INPUT-FILE=/dev/zero
.O tamanho total do arquivo será
$BLOCK-SIZE * $NUM-BLOCKS
.O novo arquivo criado será
$OUTPUT-FILE
.fonte
Você pode fazer isso programaticamente:
Essa abordagem é especialmente útil para subsequentemente mapear o arquivo na memória.
use o seguinte comando para verificar se o arquivo tem o tamanho correto:
Seja cuidadoso:
provavelmente imprimirá 0 porque está alocado como arquivo esparso se suportado pelo seu sistema de arquivos.
veja também: man 2 open e man 2 truncate
fonte
você poderia fazer:
Onde você substitui 100 pelo número de bytes que deseja gravar.
fonte
Algumas dessas respostas você usa
/dev/zero
para a fonte dos seus dados. Se o seu teste de upload de rede acelerar, essa pode não ser a melhor ideia se o seu aplicativo estiver fazendo uma compactação, um arquivo cheio de zeros será compactado muito bem. Usando este comando para gerar o arquivoEu poderia comprimir
upload_test
até 200 bytes. Assim, você pode se colocar em uma situação em que acha que está enviando um arquivo de 10 KB, mas na verdade seria muito menor.O que eu sugiro é usar em
/dev/urandom
vez de/dev/zero
. Não consegui comprimir muito a saída/dev/urandom
.fonte
/dev/zero
, então/dev/urandom
é bom.fonte
Existem muitas respostas, mas nenhuma explicou bem o que mais pode ser feito. Examinando as páginas de manual do dd , é possível especificar melhor o tamanho de um arquivo.
Isso criará o /tmp/zero_big_data_file.bin preenchido com zeros, com tamanho de 20 megabytes:
Isso criará /tmp/zero_1000bytes_data_file.bin preenchido com zeros, com tamanho de 1000 bytes:
ou
fonte
Como comando shell:
fonte
Isso gerará um arquivo de texto de 4 MB com caracteres aleatórios no diretório atual e seu nome "4mb.txt". Você pode alterar os parâmetros para gerar tamanhos e nomes diferentes.
fonte
Usar
fallocate
se você não quiser esperar pelo disco.Exemplo:
Uso:
fonte