Je recherche une série de commandes qui me montreront les fichiers les plus volumineux sur un disque.
Réponses
Trop de publicités?Si vous avez juste besoin de trouver des fichiers volumineux, vous pouvez utiliser find
avec le -size
option. La commande suivante listera tous les fichiers de plus de 10MiB ( à ne pas confondre avec 10MB ):
find / -size +10M -ls
Si vous voulez trouver des fichiers d'une certaine taille, vous pouvez la combiner avec une recherche "taille inférieure à". La commande suivante recherche les fichiers entre 10MiB et 12MiB :
find / -size +10M -size -12M -ls
apt-cache search 'disk usage'
énumère certains programmes disponibles pour l'analyse de l'utilisation du disque. Une application qui semble très prometteuse est gt5
.
D'après la description du paquet :
Les années ont passé et les disques sont devenus de plus en plus grands, mais même sur cette ère de disques durs incroyablement énormes, l'espace semble disparaître avec le temps. Ce petit programme efficace fournit un listing plus pratique que le du(1) par défaut. Il affiche ce qui s'est passé depuis la dernière exécution et affiche la taille du répertoire et le pourcentage total. Il est possible de naviguer et de monter dans les répertoires en utilisant les touches du curseur avec un navigateur basé sur le texte (links, elinks, lynx etc.).
Dans la section "paquets liés" de gt5 J'ai trouvé ncdu
. D'après la description de son emballage :
Ncdu est un visualisateur de du basé sur ncurses. Il fournit une interface rapide et facile à utiliser à travers le célèbre utilitaire du. Il permet de parcourir les répertoires et de montrer les pourcentages d'utilisation du disque avec la bibliothèque ncurses.
Ma solution préférée utilise un mélange de plusieurs de ces bonnes réponses.
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
du
arguments :
-
-a
pour "tous" les fichiers et répertoires. Laissez-le désactivé pour les répertoires seulement -
-BM
pour afficher les tailles en mégaoctets (M) et les tailles de blocs (B) -
2>/dev/null
- exclure les messages d'erreur "permission denied" (merci @Oli)
sort
arguments :
-
-n
pour "numérique -
-r
pour "inverse" (du plus grand au plus petit)
head
arguments :
-
-n 50
pour les 50 premiers résultats seulement. - Laissez tomber
more
si vous utilisez un nombre plus petit
Note : Préfixer avec sudo
pour inclure les répertoires auxquels votre compte n'a pas le droit d'accéder.
Exemple montrant les 10 plus gros fichiers et répertoires dans /var (y compris le grand total).
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
J'utilise juste une combinaison de du
y 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
Alors c'est une affaire de rincer et répéter . Ciblez les sous-répertoires que vous pensez être trop gros, exécutez la commande pour eux et vous découvrirez la cause du problème.
Note : J'utilise du
's -x
drapeau pour garder les choses limitées à un seul système de fichiers (j'ai un arrangement assez compliqué de choses montées en croisé entre SSD et RAID5).
Note 2 : 2>/dev/null
redirige tout message d'erreur vers l'oubli. S'ils ne vous dérangent pas, ce n'est pas obligatoire.
Pour afficher les 20 plus grands répertoires (de manière récursive) dans le dossier actuel, utilisez la phrase suivante :
du -ah . | sort -rh | head -20
ou (plus orienté Unix) :
du -a . | sort -rn | head -20
Pour les 20 plus gros fichiers du répertoire actuel (de manière récursive) :
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
ou avec des tailles lisibles par l'homme :
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
Veuillez noter que
-h
est disponible pour GNUsort
uniquement, donc pour qu'il fonctionne correctement sous OSX/BSD, vous devez l'installer à partir de la page d'accueil du site.coreutils
. Ensuite, ajoutez son dossier dans votrePATH
.
Ainsi, ces alias sont utiles pour avoir dans votre rc (à chaque fois que vous en avez besoin) :
alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
La réponse de qbi est correcte mais elle sera très lente lorsqu'il y a beaucoup de fichiers car elle lancera un nouveau processus ls pour chaque élément.
une version beaucoup plus rapide de find sans créer de processus enfant serait d'utiliser printf pour afficher la taille en octets (%s) et le chemin (%p).
find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries
- Réponses précédentes
- Plus de réponses