Ao empregar o comando `du` no Linux, você consegue visualizar o uso real de espaço em disco e o tamanho efetivo de um arquivo ou diretório. Vamos explorar a razão pela qual esses valores frequentemente divergem.
Utilização Real de Disco vs. Tamanho Efetivo
O tamanho de um arquivo e a quantidade de espaço que ele ocupa no disco rígido raramente coincidem. Isso ocorre porque o espaço em disco é gerenciado em blocos. Se um arquivo for menor que o tamanho de um bloco, mesmo assim, um bloco inteiro é alocado para ele, pois o sistema de arquivos não dispõe de unidades de espaço menores para utilizar.
A menos que o tamanho de um arquivo seja um múltiplo exato do tamanho do bloco, o espaço que ele utiliza no disco rígido sempre será arredondado para o próximo bloco completo. Por exemplo, se um arquivo for maior que dois blocos, mas menor que três, três blocos de espaço serão necessários para seu armazenamento.
Duas medidas são relevantes quando falamos sobre o tamanho de um arquivo. A primeira é o tamanho real do arquivo, que representa o número de bytes que o compõem. A segunda é o espaço efetivo que o arquivo ocupa no disco rígido, ou seja, o número de blocos do sistema de arquivos necessários para armazená-lo.
Um Exemplo Prático
Vamos analisar um exemplo simples. Criaremos um pequeno arquivo redirecionando um único caractere para um arquivo:
echo "1" > geek.txt
Agora, utilizaremos o comando `ls` com a opção `-l` para examinar o tamanho do arquivo:
ls -l geek.txt
O tamanho do arquivo é o valor numérico que segue as entradas `dave dave`, que neste caso é de dois bytes. Mas por que dois bytes se nós inserimos apenas um caractere no arquivo? Vamos analisar o conteúdo do arquivo para entender o que está acontecendo.
Usaremos o comando `hexdump`, que nos fornecerá uma contagem precisa de bytes e nos permitirá visualizar caracteres não imprimíveis como valores hexadecimais. Utilizaremos também a opção `-C` (canônico) para forçar a saída a exibir os valores hexadecimais.