Was ist eine Befehlszeilenmethode zum Auffinden großer Dateien / Verzeichnisse zum Entfernen und Freigeben von Speicherplatz?

203

Suchen Sie nach einer Reihe von Befehlen, die mir die größten Dateien auf einem Laufwerk anzeigen.

Ryan Detzel
quelle
Wäre etwas Grafisches in Ordnung?
RolandiXor
5
Nein, läuft auf der Kommandozeile über ssh.
Ryan Detzel
Seltsamerweise habe ich zwei Server, auf denen dasselbe ausgeführt wird. Einer ist zu 50% belegt und der andere zu 99%. Ich kann nicht finden, was das verursacht.
Ryan Detzel
Also bin ich verwirrt, es heißt, dass 98% mit du verwendet werden, aber wenn ich die gt5-App starte, erhalte ich: grab.by/9Vv2
Ryan Detzel

Antworten:

276

Wenn Sie nur große Dateien finden müssen, können Sie findmit der -sizeOption. Der nächste Befehl listet alle Dateien auf, die größer als 10 MB sind ( nicht zu verwechseln mit 10 MB ):

find / -size +10M -ls

Wenn Sie Dateien mit einer bestimmten Größe suchen möchten, können Sie diese mit einer Suche mit einer "Größe unter" kombinieren. Der nächste Befehl findet Dateien zwischen 10MiB und 12MiB:

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

apt-cache search 'disk usage'listet einige Programme auf, die für die Analyse der Festplattennutzung verfügbar sind. Eine sehr vielversprechende Anwendung ist gt5.

Aus der Paketbeschreibung:

Jahre sind vergangen und die Festplatten sind immer größer geworden, aber selbst in dieser unglaublich großen Festplatten-Ära scheint der Speicherplatz mit der Zeit zu verschwinden. Dieses kleine und effektive Programm bietet eine komfortablere Auflistung als das Standardprogramm du (1). Es zeigt an, was seit der letzten Ausführung passiert ist, und zeigt die Verzeichnisgröße und den Gesamtprozentsatz an. Mit den Cursortasten des textbasierten Browsers (Links, Elinks, Luchse usw.) können Sie in Verzeichnissen navigieren und zu diesen aufsteigen.

Screenshot von gt5

Im Abschnitt "Verwandte Pakete" von gt5 habe ich gefunden ncdu. Aus seiner Paketbeschreibung:

Ncdu ist ein auf ncurses basierender du viewer. Es bietet eine schnelle und einfach zu bedienende Benutzeroberfläche durch das berühmte Hilfsprogramm du. Es ermöglicht das Durchsuchen der Verzeichnisse und das Anzeigen des Prozentsatzes der Festplattennutzung mit der ncurses-Bibliothek.

Screenshot von ncdu

Lekensteyn
quelle
3
ncdu ist sehr schnell und genau das, was ich brauchte, danke! Ich habe auch gt5 ausprobiert, habe es aber abgebrochen, weil es zu lange ohne Feedback "nachgedacht" hat
Lukas
7
Heiliger Mist, ncdu ist unglaublich, danke, dass du deine Erkenntnisse geteilt hast!
Während-E
Ich würde es lieben, wenn ncdu stärker hervorgehoben würde. Ich brauche es ab und zu und kann mich nicht an den Namen erinnern.
Martin Thoma
Genug Befehle dank ncdu zu merken :)
Mr Coder
1
@matt Nein, das Ausgabeformat für die -lsAusgabe ist fest codiert (siehe Quellcode für pred_flsund list_file- Funktionen). Sie können versuchen, die Ausgabe mit der -printfOption zu approximieren , die Ausgabe mit awk find ... -type f -exec ls -ldh {} \; | column -t
nachzubearbeiten
33

Ich benutze nur eine Kombination von duund 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

Dann ist es ein Fall von Spülen und Wiederholen . Zielen Sie auf die Unterverzeichnisse ab, die Sie für zu groß halten, führen Sie den Befehl für sie aus und finden Sie heraus, was das Problem verursacht.

Hinweis: Ich benutze dudas -xFlag von 's' , um die Dinge auf ein Dateisystem zu beschränken (ich habe eine ziemlich komplizierte Anordnung von übergreifenden Dingen zwischen SSD und RAID5).

Hinweis 2: 2>/dev/nullLeitet alle Fehlermeldungen in Vergessenheit. Wenn sie dich nicht stören, ist es nicht obligatorisch.

Oli
quelle
1
Wenn ich diesen Befehl ausführe, steigt du in untergeordnete Verzeichnisse ab. Auf der duManpage: "Datenträgerverwendung jeder DATEI rekursiv für Verzeichnisse zusammenfassen."
Jamie
26

Meine Lieblingslösung verwendet eine Mischung aus mehreren dieser guten Antworten.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du Argumente:

  • -afür "alle" Dateien und Verzeichnisse. Lassen Sie es nur für Verzeichnisse aus
  • -BM Ausgabe der Größen in Megabyte (M) Blockgrößen (B)
  • 2>/dev/null - Fehlermeldungen "Berechtigung verweigert" ausschließen (danke @Oli)

sort Argumente:

  • -n für "numerisch"
  • -r für "umgekehrt" (vom größten zum kleinsten)

head Argumente:

  • -n 50 für die nur Top 50 Ergebnisse.
  • Lassen Sie es aus, morewenn Sie eine kleinere Zahl verwenden

Hinweis: Das Präfix soll sudoVerzeichnisse enthalten, auf die Ihr Konto nicht zugreifen darf.

Beispiel mit den 10 größten Dateien und Verzeichnissen in / var (einschließlich der Gesamtsumme).

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
quelle
10

qbis Antwort ist richtig, aber es wird sehr langsam sein, wenn es viele Dateien gibt, da es für jedes Element einen neuen ls-Prozess startet.

Eine viel schnellere Version, die find verwendet, ohne untergeordnete Prozesse zu erzeugen, ist printf, um die Größe in Bytes (% s) und den Pfad (% p) zu drucken.

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

kon
quelle
1
Stellen Sie sicher, dass dies viel schneller ist
Cookie
10

Verwenden Sie den folgenden Einzeiler, um die größten Top-20-Verzeichnisse (rekursiv) im aktuellen Ordner anzuzeigen:

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

oder (eher Unix-orientiert):

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

Bitte beachten Sie, dass dies -hnur für GNU verfügbar ist. Damit sortes unter OSX / BSD ordnungsgemäß funktioniert, müssen Sie es von installieren coreutils. Dann fügen Sie den Ordner in Ihren PATH.

Daher sind diese Aliase nützlich, um sie in Ihren RC- Dateien zu haben (jedes Mal, wenn Sie sie brauchen):

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

Dies scheint die perfekte Anwendung für find:

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

Dieser Befehl findet alle Dateien im Verzeichnis $DIRECTORYund führt ls -ssie aus. Der letzte Befehl gibt die zugewiesene Größe einer Datei plus den Dateinamen aus. Das Ergebnis wird numerisch sortiert und die letzten fünf Einträge werden angezeigt. Als Ergebnis sehen Sie die 5 größten Dateien in einem $DIRETORYbeliebigen Unterverzeichnis. Wenn Sie eingeben tail -n 1, wird nur die größte Datei angezeigt.

Außerdem kann man viel mit spielen find. Sie können beispielsweise nach Dateien suchen, die jünger als n Tage sind ( -ctime -n) oder die bestimmten Benutzern gehören ( -user johndoe).

qbi
quelle
5

Wenn ich mehr freien Speicherplatz auf Servern schaffen muss, verwende ich diesen Befehl. Alle Dateien, die größer als 50 MB sind, und "du -h" machen eine bessere Liste der Dateien und "sort -n" nach der Pipe machen Liste numerisch sortiert nach Dateigröße.

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

Probieren Sie Baobab aus, es gibt Ihnen einen grafischen Überblick über Dateien und Ordner, Sie können sehen, wo sich die echten Weltraumfresser befinden und sie mit einem Klick löschen https://help.ubuntu.com/community/Baobab

Oliver Hoffmann
quelle
2
In dieser speziellen Frage bevorzugt das OP eine Befehlszeilenmethode. Siehe die Kommentare zu der Frage. Ich werde die Frage auch bearbeiten.
1

Um beispielsweise alle GB-Dateien zu finden, würde ich du und grep verwenden, obwohl die anderen hier erwähnten Methoden ebenfalls großartig erscheinen.

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

Sie können auch mit der Option --except, die Sie haben, ausgefallen werden.

dermen
quelle
0

Sie können Dateien auch nach Größe sortieren:

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

Es werden nur Dateien gefunden und du -hfür jede Datei ausgeführt, die die Größe der Datei angibt. Zuletzt sortieren wir die Ausgabe von find/ dunach der ersten Spalte (in lesbarem Format).

Die zuletzt gedruckte Datei ist die größte.

Peregring-lk
quelle
0

Mit dem Befehl können Sie die größten Dateien anzeigen, während Sie die Verzeichnisse überspringen:

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

Um alle Dateien zu finden, die größer als 100 MB sind (dies ist nicht 100 MB, sehen Sie hier, wenn Sie verwirrt sind):

find / -size +100M -ls

Mit dem folgenden Befehl werden die 5 größten Dateien im Ordner angezeigt $DIRECTORY:

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

USING du: Mit dem folgenden Befehl, der du verwendet, werden die Verzeichnisse mit den 20 größten Größen im Basisarbeitsordner angezeigt:

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

Um nun die größten Verzeichnisse / Dateien einschließlich der Unterordner anzuzeigen, führen Sie Folgendes aus:

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

Verwenden von ls:

Führen Sie den folgenden Befehl aus, um die fünf größten Dateien im Verzeichnis / bin aufzulisten:

ls -lSh /bin | head -5

Sie können auch den hier gezeigten Disk Usage Analyzer oder Baobao verwenden .

Zezo
quelle
0

Ein großartiges, benutzerfreundliches Tool, auf das in der Antwort auf eine ähnliche Frage verwiesen wird , ist NCurses Disk Usagetool:

sudo ncdu /
janoside
quelle
Nun, an der Wurzel des Dateisystems anzufangen, war für mich genau das Gegenteil von sinnlos. Auf diese Weise konnte ich die wichtigsten Zielorte für die Platzersparnis im gesamten Dateisystem identifizieren. Unabhängig davon können Sie die genannten verwenden, um in einem beliebigen Verzeichnis zu starten. Lesen Sie die Dokumentation zu diesem Tool. Aber wie gewünscht, hier ist der Link zur Quellantwort .
Janoside