Comment trouver quels fichiers occupent 80% de l'espace sur un serveur Web Linux?

15

Le lecteur se remplit constamment. Vous avez traqué tous les fichiers de rechange et aléatoires que vous pouvez. grep'd pour les fichiers coredump et même supprimé certaines des sauvegardes inutiles ...

Quel serait votre prochain coup.

Le serveur en question a 10 Go de fichiers de site Web et le système d'exploitation ne devrait pas prendre plus de 10 Go, alors comment pouvez-vous trouver ce qui remplit un lecteur (virtuel) de 50 Go?

Gareth
la source
unix.stackexchange.com/questions/125429/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

9

Je trouve que ncdu ( http://dev.yorhel.nl/ncdu ) est très utile pour cela.

Scott
la source
Parfait. Interface brillante et possibilité de manipuler des fichiers depuis le programme. À votre santé!
Gareth
23

Certes, il existe des moyens plus élaborés, mais celui dont je me souviens est

du --max-depth = 1 -h /

Maintenant, prenez le répertoire qui utilise le plus d'espace (du --max-depth=1 -h /yourdir)et allez plus loin jusqu'à ce que vous trouviez votre coupable.
Si vous souhaitez que votre sortie soit triée par taille et ne se soucie pas du format lisible par l'homme, vous pouvez également le fairedu --max-depth=1 /your_dir | sort -n

Marie Fischer
la source
Ouais. Je fais à peu près la même chose "du -S | sort -n -r | less". Je serais vraiment ravi de voir un programme qui ressemblait à htop et cron'd comme mlocate mais quand il a été exécuté, il vous a donné des informations précises et contemporaines sur les fichiers sur votre système.
Gareth
1
Au lieu de démarrer à partir de / sur le serveur Web, essayez de démarrer à partir de http_root. S'il n'y a pas de succès là-bas, alors on peut aller pour «/». Le répertoire exécutant du on '/' prendra beaucoup de temps.
Saurabh Barjatiya
4

J'utilise le programme Gnome baobab. Vous pouvez l'exécuter sur votre bureau et vous ne pouvez pas vous connecter via SSH au serveur. Il montre une carte graphique facile à lire de l'utilisation de l'espace disque. Il est installé sous Gnome comme "Disk Usage Analyzer"

Josh
la source
3

Essayez gt5 .

En pause jusqu'à nouvel ordre.
la source
J'appuie cela, il est idéal pour suivre où va l'espace car il montre les différences.
Josh
Charmant. Ce devrait être la bonne réponse. Quelle super trouvaille. Merci.
PKHunter
2

df -k montre quels fs sont le problème. Ensuite, passez au répertoire de niveau supérieur et exécutez du -xk | sort -n | tail -25 affichera les 25 dir supérieurs, triés, pour le soleil 9 ou plus tôt, remplacez le x par un d.

Ronald Pottol
la source
Oui, similaire à ce que je viens de mentionner dans la réponse de @Marie Fischer. Pourquoi utiliser le -k (taille de bloc) plutôt que -h pour l'homme?
Gareth
-k est utilisé pour que toutes les tailles soient reportées en Ko. Ceci est utile pour le tri, sinon le tri mettrait 10 Ko avant 20 Mo lors du tri.
Saurabh Barjatiya
1

Notez que les fichiers peuvent être supprimés pendant qu'ils sont toujours écrits, ils utilisent donc l'espace disque pendant l'exécution de leur processus de création, mais sans nom de fichier.

Cela le rend introuvable avec les outils habituels - vous pouvez utiliser lsof pour rechercher quels processus ont des fichiers ouverts.

Thorbjørn Ravn Andersen
la source
J'utilise /usr/sbin/lsof | grep deletedpour l'obtenir.
Kevin M
0

Si vous pouvez exécuter un logiciel sur le système, alors xdiskusage vous montrera graphiquement quels répertoires / fichiers mangent votre espace. Extrêmement utile.

Je crois que KDE contient quelque chose de similaire.

S'il s'agit uniquement de texte et que vous ne pouvez pas installer de logiciel supplémentaire, l'utilisation créative de y duarrivera probablement également.

sleske
la source
0
  1. cd vers le répertoire de base des serveurs Web (répertoire de base d'Apache)
  2. exécutez la commande "du -a | head -30 | sort -nr"
  3. il vous donnera les 30 plus gros fichiers / répertoires consommant le disque
  4. vous pouvez les trouver et les supprimer (si ce n'est pas utile)
Technologies ASEveryWhere
la source
Cela ne fonctionnera que si vous modifiez l'ordre de headet sort. Vous devez également utiliser les fonctionnalités de formatage.
kasperd
0

Vous pouvez utiliser les commandes suivantes pour trouver quels fichiers ou dossiers occupent trop d'espace.

Par exemple, pour afficher les 20 plus gros répertoires du dossier actuel, utilisez la ligne unique suivante:

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

ou:

du -a . | sort -rn | head -20

Pour les 20 plus gros fichiers du répertoire actuel (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

La deuxième commande pour fonctionner correctement sur OSX / BSD (comme ce sortn'est pas le cas -h), vous devez installer à sortpartir de coreutils. Ajoutez ensuite le dossier bin à votre PATH.

Vous pouvez définir ces commandes comme des alias (par exemple, ajouter à vos fichiers rc tels que .bash_profile):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

Ensuite, exécutez bigou big-filesà l'intérieur des dossiers que vous pensez avoir lieu (par exemple dans /home).

Kenorb
la source
0

voici quelque chose que j'ai bricolé pour traquer certains processus malveillants sur nos serveurs de base de données: rabbitfinder

#!/bin/sh
tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp

c'est un peu maladroit et pas très robuste, mais ça marche ainsi:

  1. générer une liste arborescente récursive du répertoire courant
  2. attendez 5 secondes
  3. générer une autre liste
  4. comparer les deux sorties
  5. fusionner les fichiers qui ont changé de taille et
  6. ps -lFp montrera aux fichiers quel processus les possède

    user@poseidon:~$ tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp
    ./tmp/output:       
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
    0 R 1000     14310 14275 23  80   0 -  1072 -        748   1 22:19 pts/2    00:00:06 dd if /dev/zero of ./output bs 1024 count 10000000
    
Greeblesnort
la source