Procurando por uma série de comandos que me mostrem os maiores arquivos de uma unidade.
Procurando por uma série de comandos que me mostrem os maiores arquivos de uma unidade.
Respostas:
Se você só precisa encontrar arquivos grandes, pode usar find
com a -size
opção O próximo comando listará todos os arquivos maiores que 10MiB ( não confunda com 10MB ):
find / -size +10M -ls
Se você deseja encontrar arquivos entre um determinado tamanho, é possível 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 do disco. Um aplicativo que parece muito promissor é gt5
.
Na descrição do pacote:
Os anos se passaram e os discos tornaram-se cada vez maiores, mas mesmo nesta era incrivelmente grande do disco rígido, o espaço parece desaparecer com o tempo. Esses programas pequenos e eficazes fornecem uma listagem mais conveniente do que o du (1) padrão. 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 teclas de cursor com navegador baseado em texto (links, elinks, lynx etc.)
Na seção "pacotes relacionados" do gt5 , eu encontrei ncdu
. Na descrição do pacote:
Ncdu é um visualizador baseado em ncurses. Ele fornece uma interface rápida e fácil de usar através do famoso utilitário du. Ele permite navegar pelos diretórios e mostrar porcentagens de uso do disco com a biblioteca ncurses.
-ls
saída é codificado (ver o código fonte pred_fls
e list_file funções). Você pode tentar aproximar a saída usando a -printf
opção, pós-processar a saída com awk ou usar algo comofind ... -type f -exec ls -ldh {} \; | column -t
Eu apenas 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 enxágue e repita . Segmente os subdiretórios que você considera grandes demais, execute o comando para eles e descubra o que está causando o problema.
Nota: Eu uso du
o -x
sinalizador para manter as coisas limitadas a um sistema de arquivos (eu tenho um arranjo bastante complicado de coisas montadas em conjunto entre SSD e RAID5).
Nota 2: 2>/dev/null
redireciona todas as mensagens de erro para o esquecimento. Se eles não incomodam você, não é obrigatório.
du
página do manual: "Resuma o uso do disco de cada ARQUIVO, recursivamente para diretórios".
Minha solução favorita usa uma combinação 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 para apenas diretórios-BM
para produzir os tamanhos em megabytes (M) de 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 o menor)head
argumentos:
-n 50
pelos 50 melhores resultados.more
estiver usando um número menorNota: Prefixe 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
A resposta do qbi está correta, mas será muito lenta quando houver muitos arquivos, pois iniciará um novo processo ls para cada item.
uma versão muito mais rápida usando processos filhos sem gerar filhos 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
Para exibir os 20 principais diretórios principais (recursivamente) na pasta atual, use a seguinte linha:
du -ah . | sort -rh | head -20
ou (mais orientado para Unix):
du -a . | sort -rn | head -20
Para os 20 maiores arquivos do diretório atual (recursivamente):
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
ou com tamanhos legíveis por humanos:
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
Observe que
-h
está disponívelsort
apenas para GNU ; portanto, para fazê-lo funcionar corretamente no OSX / BSD, você deve instalá-locoreutils
. Em seguida, adicione sua pasta ao seuPATH
.
Portanto, esses aliases são úteis nos arquivos rc (sempre 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'
Parece ser o aplicativo perfeito para find
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
Este comando encontrará todos os arquivos no diretório $DIRECTORY
e será executado ls -s
neles. O último comando imprime o tamanho alocado de um arquivo mais o nome do arquivo. O resultado é classificado numericamente e as cinco últimas entradas são mostradas. Portanto, como resultado, você verá os cinco maiores arquivos $DIRETORY
ou em qualquer subdiretório. Se você digitar, tail -n 1
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 pertencentes a usuários especiais ( -user johndoe
).
Quando preciso liberar mais espaço nos servidores, uso este comando. Ele encontra todos os arquivos maiores que 50 MB e "du -h" cria uma lista melhor de arquivos e "sort -n" após o pipe torna a lista classificada numericamente por tamanho de arquivo.
find / -size +50M -type f -exec du -h {} \; | sort -n
Experimente o Baobab, ele fornece uma visão geral gráfica de arquivos e pastas, você pode ver onde estão os porcos do espaço real e excluí-los com um clique https://help.ubuntu.com/community/Baobab
Você também pode classificar os arquivos por tamanho:
find . -type f -exec du -h {} \; | sort -k1 -h
Ele encontra apenas arquivos e é executado du -h
para cada arquivo, o que mostra o tamanho do arquivo. Por fim, classificamos a saída de find
/ de du
acordo com a primeira coluna (em formato legível por humanos).
O último arquivo impresso é o maior.
Você pode usar o comando para ver os maiores arquivos enquanto ignora os diretórios:
sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10
Para encontrar todos os arquivos maiores que 100MiB (isso não é 100MB, veja aqui se você estiver confuso):
find / -size +100M -ls
o comando abaixo exibirá os 5 maiores arquivos da pasta $DIRECTORY
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
USANDO du
: O comando abaixo, que usa du, exibe os diretórios com os 20 maiores tamanhos na pasta de trabalho:
sudo du -a /home | sort -n -r | head -n 20
Agora, para exibir agora os maiores diretórios / arquivos, incluindo subpastas, execute:
du -Sh | sort -rh | head -n 10
Usando ls
:
Para listar os 5 principais arquivos maiores no diretório / bin, emita o comando abaixo:
ls -lSh /bin | head -5
Você também pode usar o Disk Usage Analyzer ou o Baobao, como mostrado aqui, por exemplo.
Uma ferramenta excelente e fácil de usar referida na resposta a uma pergunta semelhante é a NCurses Disk Usage
ferramenta:
sudo ncdu /