Comportamento inesperado com o sinalizador -h passado para du

0

Desde que eu esteja vivendo no mundo * nix, eu vivi sob a suposição de que, quando um comando aceitou um -h , a única coisa que eu estava mudando era efetivamente a formatação de uma declaração impressa. Eu não costumo reexaminar isso, mas definitivamente acho que este é o caso em geral.

Hoje tive uma experiência muito estranha ao medir o tamanho de um diretório para o qual eu estava escrevendo ativamente.

>>> du -s
15565160    .
>>> du -sh
7.4G    .

No começo eu pensei que eu estava apenas pegando o diretório em um lugar estranho, mas descobri que ambos os valores eram bastante persistentes, retornando apenas valores ligeiramente aumentados / diminuídos conforme eu continuava escrevendo no diretório. Minha primeira suposição foi de que era algum estranho estado intermediário, mas, nesse caso, eu teria esperado oscilações violentas no resultado de du -s que não observei.

O que está acontecendo aqui? Qual é o número 155... ? Não parece que é bytes. Parece haver uma proporção bastante consistente entre os dois de cerca de 450. Ou seja, se eu multiplicar o resultado de du -s por 450, fico muito próximo do número de bytes implícito por du -sh .

A grande questão é se eu estiver errado o tempo todo. Por que adicionar o sinal -h neste contexto fazendo algo diferente de alterar o formato de impressão?

    
por Slater Victoroff 25.06.2018 / 23:12

1 resposta

4

Primeiro, você está correto. O -h flag (quando não usado para imprimir texto de ajuda) é usado para informar a vários aplicativos para converter a saída para "formato legível por humanos". Isso é importante ... vamos voltar a isso. Para du em particular, o -s flag fornece um resumo de sua saída normal "por diretório". Basicamente, ele adiciona tudo junto.

du é o padrão para retornar o número de blocos lógicos que um diretório e seu conteúdo ocupam na mídia de armazenamento. A contagem de blocos ocupados é útil para muitos utilitários de disco e scripts ... mas não é muito "legível por humanos". O sinalizador -h converte a contagem de blocos de volta em um número de bytes e, em seguida, arredonda para o fator mais próximo de 1024 (e algumas outras travessuras ... acabamos com gigabytes e um dígito além do decimal no seu caso).

Dado o que você disse, estou disposto a apostar que seu sistema está configurado para um tamanho de bloco de 512 bytes porque:

É importante observar que du assume que o tamanho do bloco é igual a (em ordem), o valor definido pelo sinalizador --block-size= , o valor do ambiente DU_BLOCK_SIZE , BLOCK_SIZE ou BLOCKSIZE variáveis, ou 1024 . 1024 bytes é o tamanho de bloco padrão comum usado pela maioria dos sistemas de arquivos modernos. Mas blocos de 512 bytes não são particularmente raros. Verifique estas variáveis, provavelmente, uma delas está configurada para 512. Ou você pode ter uma versão particularmente antiga de du .

    
por 26.06.2018 / 00:06