Header Ads

Como obter o tamanho de um arquivo ou diretório no Linux

Fatmawati Achmad Zaenuri / Shutterstock

Ao usar o comando Linux du, você obtém o uso real do disco e o tamanho real de um arquivo ou diretório. Vamos explicar por que esses valores não são os mesmos.

Disco realUso e tamanho real

O tamanho de um arquivo e o espaço que ele ocupa no disco rígido raramente são os mesmos.O espaço em disco é alocado em blocos. Se um arquivo é menor que um bloco, um bloco inteiro ainda é alocado a ele, porque o sistema de arquivos não possui uma unidade menor de imóveis para uso.

A menos que um arquivo sejatamanho é um múltiplo exato de blocos, o espaço que ele usa no disco rígido sempre deve ser arredondado para o próximo bloco inteiro. Por exemplo, se um arquivo for maior que dois blocos, mas menor que três, ainda serão necessários três blocos de espaço para armazená-lo.

Duas medidas são usadas em relação ao tamanho do arquivo.O primeiro é o tamanho real do arquivo, que é o número de bytes de conteúdo que compõe o arquivo.O segundo é o tamanho efetivo do arquivo no disco rígido. Este é o número de blocos do sistema de arquivos necessários para armazenar esse arquivo.

Um exemplo

Vamos ver um exemplo simples. Redirecionaremos um único caractere para um arquivo para criar um arquivo pequeno:

 echo "1" >geek. txt 

Agora, usaremos a lista de formatos longos, ls, para verificar o tamanho do arquivo:

ls -l geek. txt 

O comprimento é o valor numérico que segue as entradas dave dave, que são dois bytes. Por que são dois bytes quando enviamos apenas um caractere para o arquivo?Vamos dar uma olhada no que está acontecendo dentro do arquivo.

Usaremos o comando hexdump, que fornecerá uma contagem exata de bytes e permitirá que #8220; ver ”caracteres não imprimíveis como valores hexadecimais. Também usaremos a opção -C (canônica) para forçar a saída a mostrar valores hexadecimais no corpo da saída, bem como seus equivalentes de caracteres alfanuméricos:

 hexdump -Cgeek. txt 

A saída mostra que, começando no deslocamento 00000000 no arquivo, há um byte que contém um valor hexadecimal 31 e um bytecontém um valor hexadecimal de 0A.A parte direita da saída mostra esses valores como caracteres alfanuméricos, sempre que possível.

O valor hexadecimal de 31 é usado para representar o dígito um.O valor hexadecimal de 0A é usado para representar o caractere de avanço de linha, que não pode ser mostrado como um caractere alfanumérico; portanto, é mostrado como um ponto (.).O caractere de avanço de linha é adicionado por eco. Por padrão, o echost inicia uma nova linha após exibir o texto que precisa ser gravado na janela do terminal.

Isso corresponde à saída de ls e concorda com o tamanho do arquivo de dois bytes.

RELATED: Como usar o comando ls para listar arquivos e diretórios no Linux

Agora, usaremos o comando du para verificar o tamanho do arquivo:

 du geek. txt 

Diz que o tamanho é quatro, mas quatro do que?

Existem blocos e depois existem blocos

Quando o relatório é dividido em tamanhos de arquivo em blocos, o tamanho usado depende de vários fatores. Você pode especificar qual tamanho de bloco ele deve usar na linha de comando. Se você não força o uso de um tamanho de bloco específico, segue um conjunto de regras para decidir qual usar.

Primeiro, ele verifica as seguintes variáveis ​​de ambiente:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Se houver alguma dessas opções, o tamanho do bloco será definido e o du interromperá a verificação. Se nenhum estiver definido, o padrão será o tamanho de um bloco de 1.024 bytes.A menos que seja definida uma variável de ambiente chamada POSIXLY_CORRECT. Se for esse o caso, o padrão é um tamanho de bloco de 512 bytes.

Então, como descobrimos qual deles está em uso?Você pode verificar cada variável de ambiente para resolvê-lo, mas existe uma maneira mais rápida. Vamos comparar os resultados com o tamanho do bloco que o sistema de arquivos usa.

Para descobrir o tamanho do bloco que o sistema de arquivos usa, usaremos o programa tune2fs. Em seguida, usaremos a opção -l (listar superbloco), canalizar a saída através do grep e, em seguida, imprimir linhas que contenham a palavra "bloco". 8218;

Neste exemplo, veremos o sistema de arquivos na primeira partição do primeiro disco rígido, sda1, e precisaremos usar o sudo:

sudo tune2fs -l / dev / sda1 |Bloco grep 

O tamanho do bloco do sistema de arquivos é de 4.096 bytes. Se dividirmos isso pelo resultado obtido de du (quatro), ele mostrará que o tamanho do bloco padrão du é 1.024 bytes. Agora sabemos várias coisas importantes.

Primeiro, sabemos que a menor quantidade de espaço no sistema de arquivos que pode ser dedicada ao armazenamento de um arquivo é de 4.096 bytes. Isso significa que mesmo o nosso arquivo minúsculo de dois bytes ocupa 4 KB de espaço no disco rígido.

A segunda coisa a ter em mente são os aplicativos dedicados a gerar relatórios sobre estatísticas do disco rígido e do sistema de arquivos, como du, ls e tune2fs, podem ter noções diferentes do que “ bloco ”significa.O aplicativo tune2fs relata os tamanhos reais dos blocos do sistema de arquivos, enquanto ls e du podem ser configurados ou forçados a usar outros tamanhos de blocos. Esses tamanhos de bloco não se destinam a se relacionar com o tamanho do bloco do sistema de arquivos;eles são apenas 'pedaços' ”esses comandos usam em sua saída.

Finalmente, além de usar tamanhos de bloco diferentes, as respostas de du e tune2fs transmitem o mesmo significado.O resultado do tune2fs foi um bloco de 4.096 bytes e o resultado du foi de quatro blocos de 1.024 bytes.

Usando du

Sem parâmetros ou opções de linha de comando, du lista o disco totalcoloque o espaço no diretório atual e em todos os subdiretórios.

Vamos dar uma olhada em um exemplo:

 du 

O tamanho é relatado no tamanho padrão do bloco de 1.024 bytes por bloco.A árvore inteira do subdiretório é atravessada.

Usando o du em um diretório diferente

Se você deseja que o du relate em um diretório diferente do atual, você pode passar o caminho para o diretóriona linha de comando:

 du ~ / . cach / evolution / 

Usando du em um arquivo específico

Se você deseja reportar um arquivo específico, passe o caminho para esse arquivo na linha de comando. Você também pode passar um padrão de shell para selecionar um grupo de arquivos, como * . txt:

 du ~ / . bash_aliases 

Relatórios sobre arquivos em diretórios

Para obter um relatório sobre os arquivos no diretório e subdiretórios atuais, use a opção -a (todos os arquivos):

 du -a

Para cada diretório, o tamanho de cada arquivo é relatado, bem como um total para cada diretório.

Limitando a profundidade da árvore de diretórios

Você pode dizer ao du para listar a árvore de diretórios com uma certa profundidade. Para fazer isso, use a opção -d (profundidade máxima) e forneça um valor de profundidade como parâmetro. Observe que todos os subdiretórios são verificados e usados ​​para calcular os totais relatados, mas eles não estão todos listados. Para definir uma profundidade máxima de diretório de um nível, use este comando:

 du-d 1 

A saída lista o tamanho total deesse subdiretório no diretório atual e também fornece um total para cada um.

Para listar os diretórios um nível mais profundo, use este comando:

 du -d 2 

Definindo o tamanho do bloco

Você pode usar a opção de bloqueio para definir um tamanho de bloco para du na operação atual. Para usar um tamanho de bloco de um byte, use o seguinte comando para obter o tamanho exato dos diretórios e arquivos:

 du --block = 1 

Se você deseja usar o tamanho de um bloco de um megabyte, pode usar a opção -m (megabyte), que é igual a --block = 1M:

 du-m 

Se desejar os tamanhos relatados no tamanho de bloco mais apropriado, de acordo com o espaço em disco usado pelos diretórios e arquivos, use o -h (legível por humanos)opção:

 du -h 

Para ver o tamanho aparente do arquivo em vez da quantidade de espaço no disco rígido usada para armazenar o arquivo., use a opção --apparent-size:

 du --apparent-size 

Você pode combinar isso com a opção -a(todos) para ver o tamanho aparente de cada arquivo:

 du --apparent-size -a 

Cada arquivo é listado, juntamente com seu tamanho aparente.

Exibindo apenas totais

Se você deseja apenas relatarPara o total do diretório, use a opção -s (resumir). Você também pode combinar isso com outras opções, como a opção -h (legível por humanos):

 du -h -s 

Aqui, nós o usaremos com a opção --apparent-size:

 du --apparent-size -s 

Exibindo horários de modificação

Para ver a data e hora da criação ou da última modificação, use oopção --time:

 du --time -d 2 

Resultados estranhos?

Se você vê resultados estranhos de du, especialmente quando você faz referência cruzada de tamanhos à saída de outros comandos, geralmente é devido aos diferentes tamanhos de bloco nos quais diferentes comandos podem ser definidos ou aquelespara o qual eles padrão. Também pode ser devido às diferenças entre os tamanhos reais dos arquivos e o espaço em disco necessário para armazená-los.

Se você precisar corresponder à saída de outros comandos, experimente a opção --block no du.

Via: How to Geek

Veja Também:

Nenhum comentário