ls -l
fornecerá o tamanho aparente do arquivo, que é o número de bytes que um programa lerá se ler o arquivo do início ao fim. du
lhe daria o tamanho do arquivo "no disco".
Por padrão, du
fornece o tamanho do arquivo em número de blocos de disco, mas você pode usar -h
para obter uma unidade legível por humanos. Veja também o manual para du
em seu sistema.
Note que com o du
do GNU coreutil (que é provavelmente o que você tem no Linux), usar -b
para obter bytes implica na opção --apparent-size
. Não é isso que você deseja usar para obter o número de bytes. Em vez disso, use --block-size=1
ou -B 1
.
Com o GNU ls
, você também pode fazer ls -s --block-size=1
no arquivo. Isso dará o mesmo número que du -B 1
para o arquivo.
Exemplo:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
Isso significa que este é um arquivo de 512 MB que leva cerca de 24 KB em disco. É um arquivo escasso (principalmente zeros que não são realmente gravados no disco, mas representados como "buracos" lógicos no arquivo). Arquivos esparsos são comuns quando se trabalha com arquivos grandes pré-alocados, por exemplo, imagens de disco para máquinas virtuais, etc. Criar um arquivo esparso é rápido, enquanto preenchê-lo com zeros é lento (e desnecessário).
Veja também o manual de fallocate
em seu sistema Linux.