Posso usar ls -lpara obter o tamanho lógico de um arquivo, mas existe uma maneira de obter o tamanho físico de um arquivo?
Posso usar ls -lpara obter o tamanho lógico de um arquivo, mas existe uma maneira de obter o tamanho físico de um arquivo?
Respostas:
ls -lfornecerá o tamanho aparente do arquivo, que é o número de bytes que um programa leria se lesse o arquivo do início ao fim. dudaria a você o tamanho do arquivo "no disco".
Por padrão, dufornece o tamanho do arquivo em número de blocos de disco, mas você pode usar -hpara obter uma unidade legível por humanos. Veja também o manual dudo seu sistema.
Observe que, com o GNU coreutil du(provavelmente o que você tem no Linux), -bobter bytes implica a --apparent-sizeopção. Não é isso que você deseja usar para obter o número de bytes realmente usados no disco. Em vez disso, use --block-size=1ou -B 1.
Com o GNU ls, você também pode fazer ls -s --block-size=1no arquivo. Isso fornecerá o mesmo número du -B 1do 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 ocupa cerca de 24 KB no disco. É um arquivo esparso (principalmente zeros que não são realmente gravados no disco, mas representados como "buracos" lógicos no arquivo). Arquivos esparsos são comuns ao trabalhar com arquivos grandes pré-alocados, por exemplo, imagens de disco para máquinas virtuais ou arquivos de troca etc. A criação de um arquivo esparso é rápida, enquanto o preenchimento de zeros é lento (e desnecessário).
Consulte também o manual fallocatedo seu sistema Linux.
du mostraria a quantidade de dados realmente lidos, enquanto lsmostra a extensão em que os setores do disco estão alocados.
dumostra a quantidade de disco atualmente em uso pelo arquivo, enquanto o tamanho aparente (tamanho lógico) mostrado por lsé quantos bytes um programa poderia ler a partir dele. Se o arquivo for escasso, alguns dos bytes lidos serão zeros, mas ainda assim serão entregues ao programa que os lê (mas não do disco).