Ao administrar sistemas Linux, muitas vezes me encontro lutando para localizar o culpado depois que uma partição fica cheia. Eu normalmente uso, du / | sort -nr
mas em um sistema de arquivos grande isso leva muito tempo antes que qualquer resultado seja retornado.
Além disso, isso geralmente é bem-sucedido em destacar o pior infrator, mas muitas vezes me vejo recorrendo du
sem os sort
casos mais sutis e depois tenho que vasculhar a saída.
Eu preferiria uma solução de linha de comando que se baseie nos comandos padrão do Linux, pois tenho que administrar alguns sistemas e instalar um novo software é um aborrecimento (especialmente quando não há espaço em disco!)
command-line
partition
disk-usage
command
Stephen Kitt
fonte
fonte
Respostas:
Experimente
ncdu
, um excelente analisador de uso de disco de linha de comando:fonte
sudo apt install ncdu
no ubuntu fica fácil. É ótimoncdu -x
para contar apenas arquivos e diretórios no mesmo sistema de arquivos que o diretório que está sendo verificado.sudo ncdu -rx /
deve fornecer uma leitura limpa apenas nos principais diretórios / arquivos na unidade de área raiz. (-r
= Somente leitura,-x
= permanecer no mesmo sistema de arquivos (ou seja: não atravessar outras montagens de sistema de arquivos))Não vá direto para
du /
. Usedf
para encontrar a partição que está machucando você e tentedu
comandos.Um que eu gosto de tentar é
porque imprime tamanhos em "forma legível por humanos". A menos que você tenha partições muito pequenas, o grepping para diretórios em gigabytes é um filtro muito bom para o que você deseja. Isso levará algum tempo, mas, a menos que você tenha cotas configuradas, acho que será assim.
Como @jchavannes aponta nos comentários, a expressão pode ser mais precisa se você encontrar muitos falsos positivos. Eu incorporei a sugestão, o que a torna melhor, mas ainda existem falsos positivos, então existem apenas trocas (expr mais simples, resultados piores; expr mais complexo e mais longo, melhores resultados). Se você tiver muitos diretórios pequenos aparecendo em sua saída, ajuste seu regex de acordo. Por exemplo,
é ainda mais preciso (nenhum diretório de <1 GB será listado).
Se você fazer têm quotas, você pode usar
para encontrar usuários que estão monopolizando o disco.
fonte
grep '[0-9]G'
continha muitos falsos positivos e também omitia decimais. Isso funcionou melhor para mim:sudo du -h / | grep -P '^[0-9\.]+G'
[GT]
em vez de apenasG
du -h | sort -hr | head
Para uma primeira olhada, use a visualização "resumo" de
du
:O efeito é imprimir o tamanho de cada um de seus argumentos, ou seja, todas as pastas raiz no caso acima.
Além disso, o GNU
du
e o BSDdu
podem ter restrições de profundidade ( mas o POSIXdu
não pode! ):GNU (Linux,…):
BSD (macOS,…):
Isso limitará a exibição da saída à profundidade 3. O tamanho calculado e exibido ainda é o total da profundidade total, é claro. Mas, apesar disso, restringir a profundidade da tela acelera drasticamente o cálculo.
Outra opção útil é
-h
(palavras no GNU e no BSD, mas, mais uma vez, não apenas no POSIXdu
) para saída "legível por humanos" (por exemplo, usando KiB, MiB etc. ).fonte
du
reclama sobre-d
tente--max-depth 5
em vez disso.du -hcd 1 /directory
. -h para legível por humanos, c para total ed para profundidade.du -hd 1 <folder to inspect> | sort -hr | head
du --max-depth 5 -h /* 2>&1 | grep '[0-9\.]\+G' | sort -hr | head
para filtrar Permissão negadaVocê também pode executar o seguinte comando usando
du
:-s
opção resume e exibe o total para cada argumento.h
imprime Mio, Gio, etc.x
= fica em um sistema de arquivos (muito útil).P
= não segue links simbólicos (que podem fazer com que os arquivos sejam contados duas vezes, por exemplo).Tenha cuidado, o
/root
diretório não será mostrado, você deve executar~# du -Pshx /root 2>/dev/null
para obtê-lo (uma vez, lutei muito sem apontar que meu/root
diretório estava cheio).Editar: opção corrigida -P
fonte
du -Pshx .* * 2>/dev/null
+ diretórios ocultos / sistemaEncontrar os maiores arquivos no sistema de arquivos sempre levará muito tempo. Por definição, você precisa percorrer todo o sistema de arquivos procurando arquivos grandes. A única solução é provavelmente executar uma tarefa cron em todos os seus sistemas para que o arquivo esteja pronto com antecedência.
Outra coisa, a opção x do du é útil para evitar que o du siga os pontos de montagem em outros sistemas de arquivos. Ou seja:
O comando completo que eu costumo executar é:
Os
-m
meios retornam resultados em megabytes esort -rn
classificam primeiro o maior número de resultados. Você pode abrir o arquivo use.txt em um editor e as pastas maiores (começando com /) estarão no topo.fonte
-x
bandeira!ncdu
- pelo menos mais rápido quedu
oufind
(dependendo da profundidade e dos argumentos) ..sudo du -xm / | sort -rn > ~/usage.txt
Eu sempre uso
du -sm * | sort -n
, que fornece uma lista classificada de quanto os subdiretórios do diretório de trabalho atual usam, em mebibytes.Você também pode experimentar o Konqueror, que possui um modo de "exibição de tamanho", semelhante ao que o WinDirStat faz no Windows: fornece uma representação visual de quais arquivos / diretórios ocupam a maior parte do seu espaço.
Atualização: nas versões mais recentes, você também pode usar o
du -sh * | sort -h
que mostrará o tamanho dos arquivos legíveis por humanos e classificar por eles. (os números terão o sufixo K, M, G, ...)Para quem procura uma alternativa à exibição do tamanho do arquivo Konqueror do KDE3, pode dar uma olhada na luz do arquivo, embora não seja tão bom.
fonte
Eu uso isso para os 25 piores criminosos abaixo do diretório atual
fonte
-h
, ele provavelmente vai mudar o efeito dosort -nr
comando - o que significa o tipo deixarão de funcionar, e então ohead
comando será também não funcionam maisEm uma empresa anterior, costumávamos ter um trabalho cron que era executado da noite para o dia e identificávamos qualquer arquivo com um determinado tamanho, por exemplo,
encontre / -tamanho + 10000k
Você pode ser mais seletivo sobre os diretórios que está pesquisando e estar atento a quaisquer unidades montadas remotamente que possam ficar offline.
fonte
-x
opção find para garantir que você não encontre arquivos em outros dispositivos além do ponto de partida do seu comando find. Isso corrige o problema das unidades montadas remotamente.Uma opção seria executar o comando du / sort como um trabalho cron e enviar para um arquivo, para que ele já esteja lá quando você precisar.
fonte
Para a linha de comando, acho que o método du / sort é o melhor. Se você não estiver em um servidor, consulte o Baobab - Analisador de uso de disco . Esse programa também leva algum tempo para ser executado, mas você pode encontrar facilmente o subdiretório bem no fundo, onde estão todos os ISOs antigos do Linux.
fonte
eu uso
e altero a profundidade máxima para atender às minhas necessidades. A opção "c" imprime totais para as pastas e a opção "h" imprime os tamanhos em K, M ou G, conforme apropriado. Como já foi dito, ele ainda verifica todos os diretórios, mas limita a saída de uma maneira que acho mais fácil encontrar os diretórios grandes.
fonte
Eu vou para o segundo
xdiskusage
. Mas vou acrescentar que, na verdade, é um du frontend e pode ler a saída du de um arquivo. Para que você possa executardu -ax /home > ~/home-du
no servidor,scp
o arquivo de volta e analisá-lo graficamente. Ou canalize-o através do ssh.fonte
Tente alimentar a saída do du em um script awk simples que verifique se o tamanho do diretório é maior que algum limite, caso contrário, ele será impresso. Você não precisa esperar que a árvore inteira seja percorrida antes de começar a obter informações (em comparação com muitas das outras respostas).
Por exemplo, o seguinte exibe todos os diretórios que consomem mais de cerca de 500 MB.
Para tornar o exposto um pouco mais reutilizável, você pode definir uma função no seu .bashrc (ou pode transformá-lo em um script independente).
Portanto,
dubig 200 ~/
procura no diretório pessoal (sem seguir os links simbólicos desativados no dispositivo) os diretórios que usam mais de 200 MB.fonte
du -k
fará com que seja absolutamente certo de que du está usando unidades KBdu -kx $2 | awk '$1>'$(($1*1024))
(se você especificar apenas um padrão condição aka para awk a ação padrão éprint $0
)du -kx / | awk '$1 > 500000'
du -kx / | tee /tmp/du.log | awk '$1 > 500000'
. Isto é muito útil porque se o seu primeiro filtragem acaba por ser infrutífera você pode tentar outros valores como esteawk '$1 > 200000' /tmp/du.log
ou inspecionar a saída completa como estasort -nr /tmp/du.log|less
sem re-digitalizar todo o sistema de arquivosEu gosto do bom e velho xdiskusage como uma alternativa gráfica ao du (1).
fonte
Prefiro usar o seguinte para obter uma visão geral e detalhar a partir daí ...
Isso exibirá resultados com saída legível por humanos, como GB, MB. Também impedirá a navegação através de sistemas de arquivos remotos. A
-s
opção mostra apenas o resumo de cada pasta encontrada, para que você possa detalhar mais se estiver interessado em mais detalhes de uma pasta. Lembre-se de que esta solução mostrará apenas pastas, portanto, você desejará omitir o / após o asterisco se também desejar arquivos.fonte
Não mencionado aqui, mas você também deve verificar lsof no caso de arquivos excluídos / suspensos. Eu tinha um arquivo tmp excluído de 5,9 GB de um cronjob de fuga.
https://serverfault.com/questions/207100/how-can-i-find-phantom-storage-usage Me ajudou a encontrar o proprietário do processo do referido arquivo (cron) e, em seguida, consegui ir
/proc/{cron id}/fd/{file handle #}
menos ao arquivo pergunta para obter o início da fuga, resolva isso e, em seguida, ""> faça eco do arquivo para liberar espaço e deixar que o cron se feche graciosamente.fonte
A partir do terminal, você pode obter uma representação visual do uso do disco com dutree
É muito rápido e leve porque é implementado no Rust
Veja todos os detalhes de uso no site
fonte
Para a linha de comando du (e suas opções) parece ser o melhor caminho. O DiskHog também usa informações du / df de um trabalho cron, portanto a sugestão de Peter é provavelmente a melhor combinação de simples e eficaz.
( FileLight e KDirStat são ideais para GUI.)
fonte
Você pode usar ferramentas padrão como
find
esort
para analisar o uso do espaço em disco.Liste os diretórios classificados por tamanho:
Listar arquivos classificados por tamanho:
fonte
Talvez seja importante notar que
mc
(Midnight Commander, um gerenciador de arquivos clássico em modo de texto), por padrão, mostra apenas o tamanho dos inodes de diretório (geralmente4096
), mas com CtrlSpaceou com o menu Ferramentas, você pode ver o espaço ocupado pelo diretório selecionado em um arquivo legível por humanos. formato (por exemplo, alguns como103151M
).Por exemplo, a imagem abaixo mostra o tamanho total das distribuições de baunilha TeX Live de 2018 e 2017, enquanto as versões de 2015 e 2016 mostram apenas o tamanho do inode (mas elas têm realmente perto de 5 Gb cada).
Ou seja, CtrlSpacedeve ser feito um por um, apenas para o nível de diretório real, mas é tão rápido e prático quando você está navegando com
mc
que talvez você não precisencdu
(que de fato, apenas para esse fim é melhor). Caso contrário, você também pode executar ancdu
partir demc
. sem sairmc
ou iniciar outro terminal.fonte
Inicialmente, verifico o tamanho dos diretórios, assim:
fonte
Se você souber que os arquivos grandes foram adicionados nos últimos dias (por exemplo, 3), use o comando find em conjunto com "
ls -ltra
" para descobrir os arquivos adicionados recentemente:Isso fornecerá apenas os arquivos ("
-type f
"), não os diretórios; apenas os arquivos com tempo de modificação nos últimos 3 dias ("-mtime -3
") e execute "ls -lart
" em cada arquivo encontrado (-exec
parte " ").fonte
Para entender o uso desproporcional do espaço em disco, geralmente é útil iniciar no diretório raiz e percorrer alguns de seus maiores filhos.
Podemos fazer isso
Isso é:
agora digamos / usr parece muito grande
Agora, se / usr / local é suspeitamente grande
e assim por diante...
fonte
Eu usei este comando para encontrar arquivos maiores que 100Mb:
fonte
Tive sucesso em rastrear o (s) pior (s) infrator (es), canalizando a
du
saída em forma legível para humanosegrep
e correspondendo a uma expressão regular.Por exemplo:
o que deve devolver tudo 500 megas ou mais.
fonte
du -k | awk '$1 > 500000'
. É muito mais fácil entender, editar e corrigir na primeira tentativa.Se você deseja velocidade, é possível ativar cotas nos sistemas de arquivos que deseja monitorar (não é necessário definir cotas para nenhum usuário) e usar um script que use o comando quota para listar o espaço em disco que está sendo usado por cada usuário. Por exemplo:
daria a você o uso do disco em blocos para o usuário específico no sistema de arquivos específico. Dessa forma, você poderá verificar os usos em questão de segundos.
Para habilitar cotas, você precisará adicionar usrquota às opções do sistema de arquivos no seu arquivo / etc / fstab e, em seguida, provavelmente reiniciar para que o quotacheck possa ser executado em um sistema de arquivos inativo antes que a quotaon seja chamada.
fonte
Aqui está um pequeno aplicativo que usa amostragem profunda para encontrar tumores em qualquer disco ou diretório. Ele percorre a árvore de diretórios duas vezes, uma vez para medi-la e a segunda vez para imprimir os caminhos para 20 bytes "aleatórios" no diretório.
A saída fica assim no meu diretório Arquivos de Programa:
Diz-me que o diretório é 7,9gb, dos quais
É simples o suficiente perguntar se algum deles pode ser descarregado.
Ele também fala sobre os tipos de arquivos distribuídos pelo sistema de arquivos, mas juntos representam uma oportunidade para economizar espaço:
Ele mostra muitas outras coisas lá também, que eu provavelmente poderia prescindir, como suporte a "SmartDevices" e "ce" (~ 15%).
Leva tempo linear, mas não precisa ser feito com frequência.
Exemplos de coisas que encontrou:
fonte
Eu tive um problema semelhante, mas as respostas nesta página não foram suficientes. Eu achei o seguinte comando o mais útil para a listagem:
du -a / | sort -n -r | head -n 20
O que me mostraria os 20 maiores infratores. No entanto, apesar de eu ter executado isso, ele não me mostrou o problema real, porque eu já havia excluído o arquivo. O problema foi que ainda havia um processo em execução que fazia referência ao arquivo de log excluído ... então eu tive que interromper esse processo primeiro e depois o espaço em disco apareceu como livre.
fonte
Você pode usar o DiskReport.net para gerar um relatório on-line da web de todos os seus discos.
Com muitas execuções, ele mostra o gráfico do histórico de todas as suas pastas, fácil de encontrar o que cresceu
fonte
Há um belo software gratuito entre plataformas chamado JDiskReport, que inclui uma GUI para explorar o que está ocupando todo esse espaço.
Exemplo de captura de tela:
Obviamente, você precisará limpar um pouco de espaço manualmente antes de poder fazer o download e instalá-lo, ou faça o download para uma unidade diferente (como um pendrive USB).
(Copiado aqui da resposta do mesmo autor na pergunta duplicada)
fonte