Wie findet man heraus, welche Dateien auf einem Linux-Webserver 80% des Speicherplatzes belegen?


15

Der Antrieb füllt sich ständig. Sie haben alle verfügbaren und zufälligen Dateien gefunden. Ich habe nach Coredump-Dateien gesucht und sogar einige der nicht benötigten Backups entfernt ...

Was wäre dein nächster Schritt?

Der fragliche Server verfügt über 10 GB Website-Dateien, und das Betriebssystem sollte nicht mehr als 10 GB aufnehmen. Wie können Sie also feststellen, was ein (virtuelles) Laufwerk mit 50 GB füllt?


Antworten:



23

Sicher gibt es ausgefeiltere Wege, aber der, an den ich mich erinnere, ist

du --max-depth = 1 -h /

Nehmen Sie nun das Verzeichnis, das den meisten Speicherplatz belegt, (du --max-depth=1 -h /yourdir)und gehen Sie tiefer, bis Sie Ihren Schuldigen gefunden haben.
Wenn Sie möchten, dass Ihre Ausgabe nach Größe sortiert wird und das lesbare Format nicht berücksichtigt wird, können Sie dies auch tundu --max-depth=1 /your_dir | sort -n


Ja. Ich mache so ziemlich das Gleiche wie "du -S | sort -n -r | less". Ich würde wirklich gerne ein Programm sehen, das aussah wie htop und cron'd like mlocate, aber wenn ran gab Ihnen genaue und aktuelle Informationen über die Dateien auf Ihrem System.
Gareth

1
Anstatt vom / auf dem Webserver zu starten, versuchen Sie, von http_root zu starten. Wenn es dort keinen Erfolg gibt, kann man sich für '/' entscheiden. Das Ausführen des Verzeichnisses auf '/' wird viel Zeit in Anspruch nehmen.
Saurabh Barjatiya

4

Ich benutze das Gnome-Programm baobab. Sie können dies auf Ihrem Desktop ausführen und über SSH eine Verbindung zum Server herstellen. Es zeigt eine einfach zu lesende grafische Karte der Speicherplatznutzung. Es ist unter Gnome als "Disk Usage Analyzer" installiert.



2

df -k zeigt, welche fs das Problem sind. Dann cd in das oberste Verzeichnis und starte du -xk | sort -n | tail -25 zeigt die oberen 25 dir, sortiert, für sonne 9 oder früher, ersetze das x mit einem d.


Ja, ähnlich dem, was ich gerade in der Antwort von @Marie Fischer erwähnt habe. Warum sollte man -k (Blockgröße) anstelle von -h für human verwenden?
Gareth

-k wird verwendet, damit alle Größen in KB angegeben werden. Dies ist nützlich, wenn Sie sortieren möchten, andernfalls würde sort beim Sortieren 10 KB vor 20 MB setzen.
Saurabh Barjatiya

1

Beachten Sie, dass Dateien gelöscht werden können, während sie noch geschrieben werden, sodass sie während des Erstellungsvorgangs Speicherplatz belegen, aber keinen Dateinamen haben.

Dies macht es mit den üblichen Tools nicht auffindbar - Sie können lsof verwenden, um zu untersuchen, bei welchen Prozessen Dateien geöffnet sind.


Ich benutze /usr/sbin/lsof | grep deleted, um das zu bekommen.
Kevin M

0

Wenn Sie Software auf dem System ausführen können, zeigt Ihnen xdiskusage grafisch an, welche Verzeichnisse / Dateien Ihren Speicherplatz belegen . Extrem nützlich.

Ich glaube, KDE enthält etwas Ähnliches.

Wenn es sich nur um Text handelt und Sie keine zusätzliche Software installieren können, duwerden Sie wahrscheinlich auch durch kreative Verwendung von dorthin gelangen.


0
  1. CD in das Home-Verzeichnis des Webservers (Apache's Home-Verzeichnis)
  2. führe den Befehl "du -a | head -30 | sort -nr" aus
  3. Sie erhalten 30 Dateien / Verzeichnisse mit dem größten Plattenverbrauch
  4. Sie können sie finden und löschen (wenn nicht nützlich)

Dies funktioniert nur, wenn Sie die Reihenfolge von headund ändern sort. Außerdem sollten Sie die Formatierungsfunktionen nutzen.
Kasperd

0

Mit den folgenden Befehlen können Sie feststellen, welche Dateien oder Ordner zu viel Speicherplatz beanspruchen.

Verwenden Sie beispielsweise den folgenden Einzeiler, um die 20 größten Verzeichnisse im aktuellen Ordner anzuzeigen:

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

oder:

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

Für die 20 größten Dateien im aktuellen Verzeichnis (rekursiv):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

oder mit vom Menschen lesbaren Größen:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Der zweite Befehl an die Arbeit auf OSX / BSD richtig (wie sortmuss nicht -h), müssen Sie die Installation sortvon coreutils. Fügen Sie dann den Ordner "bin" zu Ihrem hinzu PATH.

Sie können diese Befehle als Aliase definieren (z. B. zu Ihren RC- Dateien hinzufügen, z. B. .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'

Führen Sie dann bigoder big-filesin den Ordnern, die Ihrer Meinung nach stattfinden (zB in /home).


0

Hier ist etwas, das ich zusammengeschustert habe, um einige Schurkenprozesse auf unseren Datenbankservern aufzuspüren: 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

es ist ein bisschen kludgey und nicht sehr robust, aber es funktioniert so:

  1. Generieren Sie eine rekursive Baumliste des aktuellen Verzeichnisses
  2. warte 5 Sekunden
  3. eine weitere Liste erstellen
  4. Vergleichen Sie die beiden Ausgänge
  5. Fixieren Sie die Dateien, deren Größe sich geändert hat, und
  6. ps -lFp Zeigt den Dateien an, welcher Prozess sie besitzt

    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
    
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.