Por favor, defina o que você quer dizer com tamanho "físico".
Jörg W Mittag
Respostas:
28
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.
Nesse caso, essa diferença é importante? você pode fazer um exemplo prático? Agradeço antecipadamente.
D'Arcy Nader
1
@ D'ArcyNader Veja a resposta atualizada.
Kusalananda
Corrija-me se eu entendi errado alguma coisa, mas parece que a primeira frase é o contrário: stackoverflow.com/a/31437673/3701431du mostraria a quantidade de dados realmente lidos, enquanto lsmostra a extensão em que os setores do disco estão alocados.
Sergiy Kolodyazhnyy 15/01/19
2
@SergiyKolodyazhnyy (desculpe-me por responder tarde) Não, 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).
Kusalananda
Essa foi uma resposta muito boa.
Lizardx
3
Eu recebo o tamanho do arquivo em bytes como este:
Respostas:
ls -l
fornecerá o tamanho aparente do arquivo, que é o número de bytes que um programa leria se lesse o arquivo do início ao fim.du
daria a você 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 manualdu
do seu sistema.Observe que, com o GNU coreutil
du
(provavelmente o que você tem no Linux),-b
obter bytes implica a--apparent-size
opçã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=1
ou-B 1
.Com o GNU
ls
, você também pode fazerls -s --block-size=1
no arquivo. Isso fornecerá o mesmo númerodu -B 1
do arquivo.Exemplo:
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
fallocate
do seu sistema Linux.fonte
du
mostraria a quantidade de dados realmente lidos, enquantols
mostra a extensão em que os setores do disco estão alocados.du
mostra a quantidade de disco atualmente em uso pelo arquivo, enquanto o tamanho aparente (tamanho lógico) mostrado porls
é 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).Eu recebo o tamanho do arquivo em bytes como este:
fonte