Question Qu'est-ce qu'un moyen de ligne de commande pour trouver de gros fichiers / répertoires pour supprimer et libérer de l'espace?


Vous cherchez une série de commandes qui va me montrer les plus gros fichiers sur un lecteur.


158
2018-04-20 14:01


origine


Quelque chose de graphique serait bien? - RolandiXor♦
non, 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 cela. - Ryan Detzel
Donc, je suis confus, il dit 98% utilisé avec du mais quand je lance l'application gt5 je reçois: grab.by/9Vv2 - Ryan Detzel


Réponses:


Si vous avez juste besoin de trouver de gros fichiers, vous pouvez utiliser find avec le -size option. La prochaine commande listera tous les fichiers de plus de 10 Mo (à ne pas confondre avec 10MB):

find / -size +10M -ls

Si vous souhaitez rechercher des fichiers d'une certaine taille, vous pouvez les combiner avec une recherche "taille inférieure à". La prochaine commande trouve des fichiers entre 10MiB et 12MiB:

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 à cette époque de disque dur incroyablement énorme, l'espace semble disparaître avec le temps. Ce petit programme efficace fournit une liste plus pratique que celle par défaut du (1). Il affiche ce qui s'est passé depuis la dernière exécution et affiche la taille de dir et le pourcentage total. Il est possible de naviguer et de monter dans des répertoires en utilisant des touches de curseur avec un navigateur texte (liens, liens, lynx, etc.)

Screenshot of gt5

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

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

Screenshot of ncdu


222
2018-04-20 14:16



ncdu est très rapide et juste ce dont j'avais besoin, merci! J'ai aussi essayé le gt5, mais je l'ai juste annulé parce qu'il "pensait" trop longtemps sans aucun commentaire - Lukas
Sainte merde, ncdu est incroyable, merci de partager vos découvertes! - While-E
J'aimerais si ncdu a été souligné plus fort. J'en ai besoin de temps en temps et je ne me souviens plus du nom. - Martin Thoma


Je viens d'utiliser une combinaison de du et 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 un cas 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 flag pour 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/null redirige tout message d'erreur dans l'oubli. S'ils ne vous dérangent pas, ce n'est pas obligatoire.


29
2018-04-20 14:30



Lorsque je lance cette commande, descend dans des répertoires enfants. Du du page de manuel: "Résumez l'utilisation du disque de chaque fichier, de manière récursive pour les répertoires." - Jamie


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 pour les répertoires uniquement
  • -BM pour produire les tailles en mégaoctets (M) de taille de bloc (B)
  • 2>/dev/null - exclure les messages d'erreur "permission denied" (merci @Oli)

sort arguments:

  • -n pour "numeric"
  • -r pour "reverse" (plus grand au plus petit)

head arguments:

  • -n 50 pour les 50 premiers résultats.
  • Pars more si vous utilisez un nombre plus petit

Note: Préfixe avec sudo inclure des répertoires auxquels votre compte n'a pas l'autorisation d'accéder.

Exemple montrant les 10 plus gros fichiers et répertoires dans / var (y compris le total général).

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



aime ça, merci - electblake


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

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

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


8
2017-11-16 12:55



Confirmez que c'est beaucoup plus rapide - Cookie


Pour afficher les plus grands 20 premiers répertoires (de manière récursive) dans le dossier en cours, utilisez le one-liner suivant:

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

ou (plus orienté vers 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

S'il vous plaît noter que -h est disponible pour GNU sort seulement, pour que cela fonctionne correctement sur OSX / BSD, vous devez l’installer depuis coreutils. Puis ajoutez son dossier dans votre PATH.

Donc, ces alias sont utiles d'avoir dans votre rc fichiers (à 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'

7
2018-03-05 14:17





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 du répertoire $DIRECTORY et exécuter ls -s sur eux. 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 dans $DIRETORY ou n'importe quel sous-répertoire. Si vous entrez tail -n 1 vous ne verrez que le fichier le plus volumineux.

De plus, vous pouvez jouer beaucoup avec find. Par exemple, vous pouvez rechercher des fichiers plus jeunes que n journées (-ctime -n) ou appartenant à des utilisateurs spéciaux (-user johndoe).


6
2018-04-20 14:26





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

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

2
2017-10-11 20:40





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


1
2018-01-29 11:47



Dans cette question particulière, l'OP préfère une méthode de ligne de commande. Voir les commentaires à la question. Je vais aussi éditer la question.