Questão O que é uma maneira de linha de comando para localizar arquivos / diretórios grandes para remover e liberar espaço?


Procurando por uma série de comandos que me mostrará os maiores arquivos em uma unidade.


158
2018-04-20 14:01


origem


Alguma coisa gráfica estaria bem? - RolandiXor♦
Não, executando na linha de comando sobre o ssh. - Ryan Detzel
O que é estranho é que eu tenho dois servidores que estão executando a mesma coisa. Um tem 50% de uso de disco e o outro é de 99%. Não consigo encontrar o que está causando isso. - Ryan Detzel
Então estou confuso, ele diz 98% usado com du mas quando eu executo o aplicativo gt5 eu recebo: grab.by/9Vv2 - Ryan Detzel


Respostas:


Se você só precisa encontrar arquivos grandes, você pode usar find com o -size opção. O próximo comando listará todos os arquivos maiores que 10 MiB (não deve ser confundido com 10MB):

find / -size +10M -ls

Se você quiser encontrar arquivos entre um determinado tamanho, poderá combiná-lo com uma pesquisa "tamanho menor que". O próximo comando encontra arquivos entre 10MiB e 12MiB:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage' lista alguns programas disponíveis para análise de uso de disco. Uma aplicação que parece muito promissora é gt5.

A partir da descrição do pacote:

Os anos se passaram e os discos se tornaram cada vez maiores, mas mesmo nessa era incrivelmente imensa do disco rígido, o espaço parece desaparecer com o tempo. Estes programas pequenos e eficazes fornecem uma listagem mais conveniente do que o padrão du (1). Ele exibe o que aconteceu desde a última execução e exibe o tamanho do diretório e a porcentagem total. É possível navegar e subir para diretórios usando as teclas de cursor com o navegador baseado em texto (links, elinks, lynx etc.)

Screenshot of gt5

Na seção "pacotes relacionados" do gt5, Eu encontrei ncdu. A partir da descrição do pacote:

O Ncdu é um visualizador baseado em ncurses. Ele fornece uma interface rápida e fácil de usar através do famoso utilitário du. Permite navegar pelos diretórios e mostrar porcentagens de uso de disco com a biblioteca ncurses.

Screenshot of ncdu


223
2018-04-20 14:16



O ncdu é muito rápido e é exatamente o que eu precisava, obrigado! Eu tentei gt5 também, mas apenas cancelei porque estava "pensando" muito tempo sem qualquer feedback - Lukas
Caramba, ncdu é incrível, obrigado por compartilhar suas descobertas! - While-E
Eu adoraria se ncdu foi apontado mais forte. Eu preciso disso de vez em quando e não consigo lembrar o nome. - Martin Thoma


Eu só uso uma combinação de du e sort.

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

Então é um caso de enxague e repita. Segmente os subdiretórios que você acha que são muito grandes, execute o comando para eles e descubra o que está causando o problema.

Nota: eu uso du's -x flag para manter as coisas limitadas a um sistema de arquivos (eu tenho um arranjo bastante complicado de coisas cruzadas entre o SSD e o RAID5).

Nota 2: 2>/dev/null redireciona qualquer mensagem de erro para o esquecimento. Se não te incomodarem, não é obrigatório.


29
2018-04-20 14:30



Quando eu executo esse comando du desce para diretórios filhos. De du Página man: "Resuma o uso de disco de cada FILE, recursivamente para diretórios." - Jamie


Minha solução favorita usa uma mistura de várias dessas boas respostas.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du argumentos:

  • -a para "todos" arquivos e diretórios. Deixe apenas para diretórios
  • -BM para produzir os tamanhos em megabytes (M) tamanhos de bloco (B)
  • 2>/dev/null - excluir mensagens de erro "permissão negada" (obrigado @Oli)

sort argumentos:

  • -n para "numérico"
  • -r para "reverso" (maior para menor)

head argumentos:

  • -n 50 para os apenas 50 melhores resultados.
  • Deixe fora more se estiver usando um número menor

Nota: prefixo com sudo para incluir diretórios que sua conta não tem permissão para acessar.

Exemplo mostrando os 10 maiores arquivos e diretórios em / var (incluindo o total geral).

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache

16
2017-07-03 23:24



amor, obrigado - electblake


A resposta do qbi está correta, mas será muito lenta quando houver muitos arquivos, pois iniciará um novo processo de ls para cada item.

uma versão muito mais rápida usando localizar sem gerar processos filho seria usar printf para imprimir o tamanho em bytes (% s) e o caminho (% p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries


8
2017-11-16 12:55



Confirme que isso é muito mais rápido - Cookie


Para exibir os maiores diretórios top-20 (recursivamente) na pasta atual, use o seguinte one-liner:

du -ah . | sort -rh | head -20

ou (mais orientado para Unix):

du -a . | sort -rn | head -20

Para os 20 maiores arquivos no diretório atual (recursivamente):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

ou com tamanhos legíveis para humanos:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Por favor note que -h está disponível para o GNU sort apenas, então, para fazê-lo funcionar corretamente no OSX / BSD, é necessário instalá-lo coreutils. Em seguida, adicione sua pasta ao seu PATH.

Então, esses aliases são úteis para ter em seu rc arquivos (toda vez que você precisar):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

7
2018-03-05 14:17





Esta parece ser a aplicação perfeita para find:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

Este comando irá encontrar todos os arquivos no diretório $DIRECTORY e executar ls -s neles. O último comando imprime o tamanho alocado de um arquivo mais o nome do arquivo. O resultado é classificado numericamente e as últimas cinco entradas são mostradas. Então, como resultado, você verá os 5 maiores arquivos em $DIRETORY ou qualquer subdiretório. Se você entrar tail -n 1 você verá apenas o maior arquivo.

Além disso, você pode brincar muito com find. Por exemplo, você pode procurar arquivos com menos de n dias (-ctime -n) ou que pertencem a utilizadores especiais (-user johndoe).


6
2018-04-20 14:26





Quando eu preciso criar mais espaço livre nos servidores, eu uso esse comando. Ele encontra todos os arquivos maiores que 50 MB e "du -h" faz uma lista melhor de arquivos e "sort -n" depois que o pipe faz a lista numericcaly ordenada por tamanho de arquivo.

find / -size +50M -type f -exec du -h {} \; | sort -n

2
2017-10-11 20:40





Experimente o Baobab, ele fornece uma visão geral gráfica de arquivos e pastas, você pode ver onde estão os verdadeiros chefes do espaço e excluí-los com um clique https://help.ubuntu.com/community/Baobab


1
2018-01-29 11:47



Nesta questão em particular, o OP prefere um método de linha de comando. Veja os comentários para a questão. Eu vou editar a questão também.


Para encontrar todos os arquivos GB, por exemplo, eu usaria du e grep, embora os outros métodos mencionados aqui também sejam ótimos.

du -h -a /dir | grep "[0-9]G\b"  

Você também pode obter fantasia com a opção --except que du tem.


1
2018-06-11 19:04





Você também pode classificar arquivos por tamanho:

find . -type f -exec du -h {} \; | sort -k1 -h

Encontra apenas arquivos e executa du -h para cada arquivo, que mostra o tamanho do arquivo. Por fim, classificamos a saída de find/du de acordo com a primeira coluna (em formato legível por humanos).

O último arquivo impresso é o maior.


0
2017-09-08 12:28