Linux / Comando du: medir o espaço usado por arquivos e diretórios
du é um comando que calcula e exibe o espaço que arquivos e diretórios especificados usam no sistema de arquivos. Use du -h --max-depth=1 . para mostrar os totais dos subdiretórios imediatos e do diretório atual. Com du -sh ., aparece apenas o total.
du -h --max-depth=1 .
du -sh .
O comportamento padrão do du é baseado nos blocos reais alocados no sistema de arquivos, não no tamanho aparente do conteúdo do arquivo. No caso de arquivos esparsos, sistemas de arquivos compactados, links físicos (hard links) e ambientes Copy-on-Write (CoW, cópia na gravação), os números podem diferir daqueles produzidos por outras ferramentas.
O que o comando du calcula?
du vem de disk usage, isto é, uso de disco, e ele percorre árvores de arquivos e diretórios para somar o uso do disco. Como é afetado não apenas pelo conteúdo dos arquivos, mas também pelo método de alocação de blocos do sistema de arquivos, ele nem sempre coincide com o tamanho do arquivo mostrado por ls -l.
Opções e limitações de cálculo podem ser encontradas na documentação oficial de du do GNU Coreutils.
Os exemplos usam as opções do GNU Coreutils. Confira du --version e du --help no sistema em uso. Os caminhos como /var, ./data e sample.img são exemplos; substitua-os pelos arquivos e diretórios que deseja examinar.
Comandos básicos mais usados
Verificar o tamanho total do diretório atual
du -sh .
-s mostra apenas o total de cada argumento. -h usa potências de 1024, com sufixos como K, M e G, correspondentes à escala KiB, MiB e GiB. Arquivos ocultos e diretórios ocultos também estão incluídos no total do diretório atual.
Verificar os totais dos subdiretórios imediatamente abaixo
du -h --max-depth=1 .
--max-depth=1 exibe o total do ponto de partida e os totais de seus subdiretórios imediatos. Os arquivos regulares entram no cálculo, mas não aparecem individualmente nessa forma; acrescente -a se quiser listá-los também. No GNU du, a forma curta é -d 1; outras variantes Unix podem diferir.
O limite de profundidade controla a exibição, sem dispensar a leitura dos níveis mais profundos necessária para calcular os totais. A linha . representa o diretório inteiro e já inclui os subdiretórios: não some novamente todas as linhas como parcelas independentes.
Encontrar itens grandes ordenando
du -h --max-depth=1 /var | sort -h
sort -h ordena considerando unidades legíveis por humanos. Para exibir itens grandes no topo, use sort -hr.
du -h --max-depth=1 /var | sort -hr
Diretórios sem permissão podem gerar erros, e o total pode estar incompleto. Execute com as permissões apropriadas apenas para o escopo necessário, e não apenas oculte erros e interprete os resultados como valores completos.
Resumo das principais opções
| Opção | Função | Exemplos de uso |
|---|---|---|
-h |
Exibir em unidades legíveis por humanos | du -h /var/log |
-s |
Mostrar apenas o total de cada argumento | du -sh /var/log |
-a |
Exibir não apenas diretórios, mas também arquivos | du -ah ./data |
-c |
Adicionar um total geral ao final | du -ch file1 file2 |
-d N |
Especificar a profundidade máxima de diretórios a exibir | du -h -d 2 . |
-x |
Não atravessar para outros sistemas de arquivos | du -xhd1 / |
--exclude |
Excluir caminhos que correspondam a um padrão | du -sh --exclude='*.log' . |
--apparent-size |
Mostrar tamanho aparente em vez de espaço alocado | du -sh --apparent-size file |
Pesquisar arquivos e diretórios em detalhes
Exibir todos os arquivos
du -ah ./data | sort -hr | head -n 20
Essa lista ajuda a identificar os maiores arquivos e diretórios dentro do escopo escolhido, incluindo totais de diretórios e tamanhos de arquivos. Eles se sobrepõem, portanto não some as 20 linhas como um total adicional. Em sistemas de arquivos grandes, pode exigir muita atividade de entrada/saída (E/S) de disco e memória, pois percorre e classifica todos os caminhos.
Exibir itens que atingem um tamanho mínimo
du -h --threshold=1G ./data
No GNU du, um valor positivo de --threshold inclui os totais maiores ou iguais ao limite. Aqui, 1G equivale a 1 GiB. A opção filtra o que é exibido; sem -a, os arquivos encontrados dentro do diretório não são listados individualmente. Pode não ser suportado em algumas distribuições ou outras implementações Unix, então verifique o du --help se portabilidade for necessária.
Excluir arquivos ou diretórios específicos
du -sh --exclude='*.log' --exclude='cache' .
É seguro colocar o padrão para --exclude entre aspas simples para evitar que o shell o expanda primeiro. Se houver muitas regras de exclusão, você pode criar um arquivo com uma regra por linha e usar o --exclude-from.
du -sh --exclude-from=du-exclude.txt .
Diferença entre espaço alocado e tamanho aparente
Uso básico de disco
O du básico resume os blocos alocados para arquivos pelo sistema de arquivos. Arquivos pequenos podem ocupar um bloco completo ou ser armazenados de outra maneira, conforme o sistema de arquivos, e os metadados do arquivo ou a estrutura interna do sistema de arquivos podem não estar totalmente refletidos no resultado.
Tamanho aparente
--apparent-size usa o comprimento lógico dos arquivos regulares, com arredondamento se você escolher uma unidade de exibição. Para expressá-lo em bytes, o GNU du -b equivale a --apparent-size --block-size=1.
du -h sample.img
du -h --apparent-size sample.img
Arquivos esparsos contêm regiões lógicas sem blocos de dados alocados. Por isso, podem ter um comprimento muito grande e consumir poucos blocos. Por outro lado, em ambientes com compressão de sistema de arquivos, deduplicação, snapshots ou blocos compartilhados Copy-on-Write, o du básico também pode diferir do consumo real no dispositivo físico.
Links físicos
Se vários caminhos são links físicos para o mesmo arquivo, com o mesmo inode no mesmo sistema de arquivos, o GNU du, por padrão, conta o espaço do mesmo arquivo apenas uma vez. Dependendo da ordem em que múltiplos argumentos são passados, a utilização pode ser atribuída a caminhos diferentes. O inode é a estrutura que guarda informações do arquivo. A opção -l ou --count-links conta cada link separadamente, podendo produzir uma soma maior que o espaço ocupado pelos blocos únicos.
Como limitar a busca a um sistema de arquivos
Evitar atravessar para outros sistemas de arquivos
Ao examinar o sistema de arquivos raiz, usar -x ou --one-file-system evita descer para outros sistemas de arquivos.
du -xhd1 /
Esta opção reduz a chance de atravessar acidentalmente sistemas de arquivos de rede, volumes de dados separados ou sistemas de arquivos virtuais. A exclusão se aplica às fronteiras entre sistemas de arquivos; não deve ser entendida como um filtro universal de qualquer ponto de montagem. O uso dos outros sistemas de arquivos excluídos precisa ser examinado separadamente, conforme o objetivo da investigação.
Como tratar links simbólicos
Por padrão, o du não segue os alvos de links simbólicos em argumentos de linha de comando ou dentro de diretórios. Um link simbólico aponta para outro caminho. No GNU du, -D segue os links informados diretamente como argumentos; -L também segue os encontrados durante a busca. Isso pode ampliar bastante o escopo, então confira os destinos antes de escolher essas opções.
Razões pelas quais os resultados de du e df diferem
Os alvos do cálculo são diferentes
du resume os arquivos nos diretórios que pode acessar, enquanto df (guia em inglês) informa o uso de todo o sistema de arquivos. Diferenças podem ocorrer devido a metadados do sistema de arquivos, blocos reservados, snapshots ou caminhos que não podem ser lidos devido a permissões.
Arquivos excluídos que permanecem abertos
Em um sistema de arquivos local, se o último nome de um arquivo for removido enquanto algum processo o mantém aberto, du não o encontra pela árvore de diretórios. O espaço pode continuar ocupado até a última referência aberta ser liberada, por isso df ainda o contabiliza. Você pode procurar esses arquivos com:
lsof +L1
Segundo o manual de lsof, +L1 seleciona arquivos abertos cuja contagem de links é menor que 1. A visibilidade depende do sistema e das permissões, e o programa precisa estar instalado.
Não encerre o processo alvo à força. Em vez disso, verifique o reinício normal do serviço e os procedimentos de reabertura de logs. Manipular arbitrariamente o descritor de arquivo de um arquivo excluído pode causar perda de dados ou interrupção do serviço.
Como investigar com precisão
- Primeiro, use
df -hpara identificar o sistema de arquivos com pouco espaço; depois executeduno ponto de montagem correspondente. - Ao investigar a partir da raiz, decida se deve excluir outros sistemas de arquivos usando
-x. - Para diretórios grandes, escolha uma subárvore menor e investigue durante períodos de menor carga. Reduzir a profundidade exibida facilita a leitura, mas não elimina a varredura necessária ao total.
- Se houver erros de permissão, registre o fato de que os resultados estão incompletos e use apenas as permissões mínimas necessárias.
- Antes de excluir um arquivo, verifique o processo proprietário, o backup, a política de retenção e se a recuperação é possível.
- Os nomes de arquivos podem conter caracteres especiais, como quebras de linha, portanto, considere usar uma combinação de ferramentas que suportem separação NUL (byte zero) na automação, como
du -0esort -z, para não tratar quebras de linha no nome como novos registros.
Perguntas frequentes
Arquivos ocultos estão incluídos nos resultados do du?
Se você especificar o diretório em si, como du -sh ., arquivos ocultos estão incluídos no total. No entanto, o * do shell por padrão não corresponde a itens ocultos, portanto os resultados do du -sh * podem excluí-los.
Como posso encontrar rapidamente os maiores diretórios?
Verifique passo a passo usando du -h --max-depth=1 target | sort -hr. Isso reduz a quantidade de linhas enviadas à ordenação, mas du ainda precisa percorrer os descendentes para somar seus tamanhos. Para reduzir a varredura, restrinja também o diretório inicial ou exclua subárvores que não façam parte da investigação.
Por que os tamanhos são diferentes entre du -sh e ls -lh?
ls -lh mostra principalmente o comprimento lógico dos arquivos, enquanto o du padrão mostra os blocos alocados do sistema de arquivos. Diferenças podem ocorrer devido a arquivos esparsos, arquivos pequenos e tamanhos de bloco.
É aceitável ocultar o erro 'Permissão negada'?
Embora possa tornar a tela mais limpa, o fato de os resultados estarem incompletos também desaparece. Em investigações de capacidade, é mais seguro primeiro verificar o caminho onde o erro ocorreu e revisar a razão e o escopo das permissões necessárias.
Resumo
du -sh path mostra o total, e du -h --max-depth=1 path mostra os totais dos subdiretórios imediatos e do ponto inicial, sem listar cada arquivo regular. Ao procurar itens grandes, combine com sort -hr e use -x para excluir outros sistemas de arquivos.
O valor de du é uma estimativa afetada pela estrutura do sistema de arquivos e pelo método de alocação. Se houver uma diferença com df, é necessário verificar arquivos abertos deletados, blocos reservados, snapshots e problemas de permissão.




