Localizando todos os arquivos grandes no sistema de arquivos raiz

124

Eu tenho um servidor linux, que atualmente possui espaço abaixo do uso:

/dev/sda3              20G   15G  4.2G  78% /
/dev/sda6              68G   42G   23G  65% /u01
/dev/sda2              30G  7.4G   21G  27% /opt
/dev/sda1              99M   19M   76M  20% /boot
tmpfs                  48G  8.2G   39G  18% /dev/shm

Como você pode ver. /está em 78%. Quero verificar quais arquivos ou pastas estão consumindo espaço.

Eu tentei isso:

find . -type d -size +100M

O que mostra resultados como este:

./u01/app/june01.dbf
./u01/app/temp01.dbf
./u01/app/smprd501.dbf
./home/abhishek/centos.iso
./home/abhishek/filegroup128.jar

Agora, este é o meu problema. Eu quero apenas o nome dos arquivos localizados em pastas que estão consumindo espaço /e não em /u01ou /home. Como /é base de tudo, está me mostrando todos os arquivos do meu servidor.

É possível obter arquivos grandes que contribuem com 78% deles /?

Abhishek dot py
fonte
3
Veja o -xdevpredicado de localização. Veja também du -kx / | xdu(ou xdiskusage).
Stéphane Chazelas
1
relevantefind . -type f -print | xargs du -sk | sort -rn
user13107
Related: stackoverflow.com/questions/12522269/…
Ciro Santilli escreveu:

Respostas:

217

Experimentar:

find / -xdev -type f -size +100M

Ele lista todos os arquivos com tamanho maior que 100M.

Se você quiser saber sobre o diretório, pode tentar ncdu.

Se você não está executando o Linux, pode ser necessário usar -size +204800ou -size +104857600c, como o Msufixo significa megabytes, não está no POSIX.

find / -xdev -type f -size +102400000c
cuonglm
fonte
1
-xdevapenas impede a localização de percorrer os sistemas de arquivos; portanto, você só pesquisará sua unidade física atual. Se não é isso que você deseja, basta remover o -xdevargumento.
hobs
49

Além da resposta @Gnouc, você também pode adicionar ls -lapara obter mais detalhes. Você deveria ter sudo privilegesque fazer isso.

$ find / -xdev -type f -size +100M -exec ls -la {} \; | sort -nk 5

Para ver apenas os arquivos que estão no gigbyte, faça:

root# du -ahx / | grep -E '\d+G\s+'


1.8G    /.Spotlight-V100/Store-V2/A960D58E-A644-4497-B3C1-866A529BF919
1.8G    /.Spotlight-V100/Store-V2
zee
fonte
44

O comando a seguir não apenas encontra os 50 maiores arquivos (> 100M) do seu sistema de arquivos, mas também classifica (GNU sort) pelo maior:

find / -xdev -type f -size +100M -exec du -sh {} ';' | sort -rh | head -n50

-xdev Não desça diretórios em outros sistemas de arquivos.

No BSD, finduse o -xequivalente ao -xdevprimário descontinuado .

Para todos os arquivos e diretórios, é ainda mais fácil:

du -ahx / | sort -rh | head -20

(o -xsinalizador é o que é necessário para restringir dua um único sistema de arquivos)

Se você não estiver usando o GNU sort(de coreutils), use-o sem -h:

du -ax / | sort -rn | head -20

Somente no diretório atualmente (para resultados mais rápidos), substitua /por ..

kenorb
fonte
1
Eu mencionaria que esse método é bom porque -hmostra uma saída legível por humanos e adiciona uma saída de amostra.
Ciro Santilli escreveu:
Solução muito boa. Obrigado.
Tigin