Qu'est-ce qu'un moyen en ligne de commande pour rechercher des fichiers / répertoires volumineux afin de supprimer et de libérer de l'espace?

203

Vous recherchez une série de commandes qui me montreront les fichiers les plus volumineux sur un lecteur.

Ryan Detzel
la source
Est-ce que quelque chose de graphique conviendrait?
RolandiXor
5
Nope, en cours d'exécution sur la ligne de commande sur ssh.
Ryan Detzel
Ce qui est étrange, c'est que j'ai deux serveurs qui exécutent la même chose. L'un est à 50% d'utilisation du disque et l'autre à 99%. Je ne trouve pas ce qui cause ça.
Ryan Detzel
Donc, je suis confus, cela dit 98% utilisé avec du mais quand je lance l'application gt5 je reçois: grab.by/9Vv2
Ryan Detzel

Réponses:

277

Si vous avez juste besoin de trouver de gros fichiers, vous pouvez utiliser findcette -sizeoption. La commande suivante listera tous les fichiers de plus de 10 Mo (à ne pas confondre avec 10 Mo ):

find / -size +10M -ls

Si vous souhaitez rechercher des fichiers d'une taille donnée, vous pouvez les combiner avec une recherche de "taille inférieure à". La commande suivante recherche les fichiers entre 10 Mo et 12 Mo:

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

apt-cache search 'disk usage'répertorie certains programmes disponibles pour l'analyse de l'utilisation du disque. Une application qui semble très prometteuse est gt5.

De la description du paquet:

Les années ont passé et les disques sont devenus de plus en plus grands, mais même en cette ère de disque dur incroyablement énorme, l'espace semble disparaître avec le temps. Ce petit programme efficace fournit une liste plus pratique que le par défaut du (1). 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 dans les répertoires et de les remonter en utilisant les touches du curseur avec un navigateur textuel (liens, liens, liens, lynx, etc.)

Capture d'écran de gt5

Sur la section "packages associés" de gt5 , j'ai trouvé ncdu. De sa description du paquet:

Ncdu est une visionneuse basée sur des cursus. Il fournit une interface rapide et facile à utiliser via le célèbre utilitaire. Il permet de parcourir les répertoires et d’afficher les pourcentages d’utilisation du disque avec la bibliothèque ncurses.

Capture d'écran de ncdu

Lekensteyn
la source
3
Ncdu est très rapide et juste ce dont j'avais besoin, merci! J'ai aussi essayé gt5, mais je l'ai annulé parce qu'il "pensait" trop longtemps sans aucun retour
Lukas
7
Bon sang, ncdu est incroyable, merci de partager vos découvertes!
While-E
J'adorerais que le ncdu soit signalé plus fort. J'en ai besoin de temps en temps et je ne me souviens plus du nom.
Martin Thoma
Assez de souvenir des commandes grâce à ncdu :)
Mr Coder
1
@ Matt Nope, le format de sortie pour la -lssortie est hardcoded (voir le code source pred_flset list_file fonctions). Vous pouvez essayer d’approximer la sortie en utilisant l’ -printfoption, post-traiter la sortie avec awk ou utiliser quelque chose du genre:find ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn
33

Je viens d'utiliser une combinaison de duet 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

Ensuite, c'est un cas de rinçage et de répétition . Ciblez les sous-répertoires que vous jugez trop volumineux, exécutez la commande pour eux et vous découvrez la cause du problème.

Remarque: J'utilise l'option du's -xpour garder les choses limitées à un système de fichiers (j'ai un arrangement assez compliqué d'éléments croisés entre SSD et RAID5).

Note 2: 2>/dev/nullredirige tous les messages d'erreur dans l'oubli. S'ils ne vous dérangent pas, ce n'est pas obligatoire.

Oli
la source
1
Lorsque je lance cette commande, le du descend dans les répertoires enfants. A partir de la dupage de manuel: "Résumez l'utilisation du disque de chaque fichier, de manière récursive pour les répertoires."
Jamie
26

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:

  • -apour "tous" les fichiers et les répertoires. Ne le laissez que pour les répertoires
  • -BM pour afficher les tailles en mégaoctets (M) tailles de bloc (B)
  • 2>/dev/null - exclure les messages d'erreur "autorisation refusée" (merci @Oli)

sort arguments:

  • -n pour "numérique"
  • -r pour "inverse" (du plus grand au plus petit)

head arguments:

  • -n 50 pour le juste top 50 résultats.
  • Laisser moresi vous utilisez un nombre plus petit

Remarque: préfixez de manière sudoà inclure les répertoires auxquels votre compte n'est pas autorisé à 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
Dan King
la source
11

Pour afficher les 20 plus grands répertoires (récursivement) dans le dossier en cours, utilisez la ligne 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 en cours (récursivement):

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 -hn’est disponible que pour GNU . Pour l’ sortinstaller correctement sous OSX / BSD, vous devez l’installer à partir de coreutils. Ajoutez ensuite son dossier dans votre PATH.

Il est donc utile d’avoir ces alias dans vos fichiers 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'
Kenorb
la source
10

La réponse de qbi est correcte mais elle sera très lente s'il y a beaucoup de fichiers, car un nouveau processus ls sera lancé pour chaque élément.

Une version beaucoup plus rapide utilisant find sans générer de processus enfants serait d'utiliser printf pour imprimer la taille en octets (% s) et le chemin d'accès (% p)

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

kon
la source
1
Confirmez que c'est beaucoup plus rapide
Cookie le
8

Cela semble être l'application idéale pour find:

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

Cette commande trouvera tous les fichiers dans le répertoire $DIRECTORYet s’exécutera ls -sdessus. La dernière commande imprime la taille allouée d'un fichier plus le nom du fichier. Le résultat est trié numériquement et les cinq dernières entrées sont affichées. Donc, comme résultat, vous verrez les 5 plus gros fichiers $DIRETORYou n’importe quel sous-répertoire. Si vous entrez, tail -n 1vous ne verrez que le fichier le plus volumineux.

En outre, vous pouvez jouer beaucoup avec find. Par exemple, vous pouvez rechercher des fichiers de moins de n jours ( -ctime -n) ou appartenant à des utilisateurs spéciaux ( -user johndoe).

qbi
la source
5

Lorsque j'ai besoin de libérer de l'espace sur les serveurs, j'utilise cette commande. Il trouve tous les fichiers de plus de 50 Mo et "du -h" fait une meilleure liste de fichiers et "sort -n" après la liste de tubes crée numericcaly triée par taille.

find / -size +50M -type f -exec du -h {} \; | sort -n
zorbon.cz
la source
1

Essayez Baobab, il vous donne un aperçu graphique des fichiers et des dossiers, vous pouvez voir où se trouvent les vrais porcs et les supprimer en un clic https://help.ubuntu.com/community/Baobab

Oliver Hoffmann
la source
2
Dans cette question particulière, l'OP préfère une méthode de ligne de commande. Voir les commentaires à la question. Je vais également modifier la question.
1

Par exemple, pour trouver tous les fichiers GB, je voudrais utiliser du et grep, bien que les autres méthodes mentionnées ici semblent également très bien.

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

Vous pouvez aussi vous amuser avec l'option --except que du a.

les dermen
la source
0

Vous pouvez également trier les fichiers par taille:

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

Il ne trouve que les fichiers et s’exécute du -hpour chaque fichier, ce qui indique la taille du fichier. Enfin, nous trions la sortie de find/ duselon la première colonne (au format lisible par l'homme).

Le dernier fichier imprimé est le plus gros.

Peregring-lk
la source
0

Vous pouvez utiliser la commande pour voir les fichiers les plus volumineux tout en sautant les répertoires:

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

Pour trouver tous les fichiers de plus de 100 Mo (ceci n'est pas 100 Mo, voyez ici si vous êtes confus):

find / -size +100M -ls

la commande ci-dessous affichera les 5 plus gros fichiers du dossier $DIRECTORY:

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

USING du: La commande ci-dessous qui utilise du, affiche les répertoires avec les 20 plus grandes tailles dans le dossier de travail initial:

sudo du -a /home | sort -n -r | head -n 20

Maintenant, afin d'afficher les plus grands répertoires / fichiers, y compris les sous-dossiers, exécutez:

du -Sh | sort -rh | head -n 10

Utilisant ls:

Pour répertorier les 5 plus gros fichiers du répertoire / bin, lancez la commande ci-dessous:

ls -lSh /bin | head -5

Vous pouvez également utiliser l'analyseur d'utilisation du disque ou Baobao, comme indiqué ici, par exemple.

Zezo
la source
0

Un excellent outil convivial référencé dans la réponse à une question similaire est l' NCurses Disk Usageoutil:

sudo ncdu /
janoside
la source
Bien, commencer à la racine du système de fichiers était exactement l'opposé d'inutile pour moi. Cela m'a permis d'identifier les endroits les plus importants à cibler pour gagner de la place sur l'ensemble du système de fichiers. Indépendamment, vous pouvez utiliser le mentionné pour commencer à n’importe quel répertoire. Consultez la documentation de cet outil. Mais, comme demandé, voici le lien vers la réponse source .
janoside