Frage Was ist eine Befehlszeile, um große Dateien / Verzeichnisse zu finden, die entfernt und freigegeben werden können?


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


158
2018-04-20 14:01


Ursprung


Wäre etwas Grafisches in Ordnung? - RolandiXor♦
Nein, läuft auf der Kommandozeile über ssh. - Ryan Detzel
Was komisch ist, ist, dass ich zwei Server habe, die dasselbe ausführen. Einer ist bei 50% Festplattennutzung und der andere ist 99%. Ich kann nicht finden, was das verursacht. - Ryan Detzel
Also ich bin verwirrt, es sagt 98% mit du verwendet, aber wenn ich die GT5-App ausführen, bekomme ich: grab.by/9Vv2 - Ryan Detzel


Antworten:


Wenn Sie nur große Dateien finden müssen, können Sie verwenden find mit dem -size Möglichkeit. Der nächste Befehl listet alle Dateien auf, die größer als 10MiB sind (nicht mit 10 MB zu verwechseln):

find / -size +10M -ls

Wenn Sie Dateien zwischen einer bestimmten Größe finden möchten, können Sie sie mit einer "Größe kleiner als" -Suche 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 Anwendung, die sehr vielversprechend aussieht gt5.

Aus der Paketbeschreibung:

Jahre sind vergangen und die Festplatten sind immer größer geworden, aber selbst in dieser unglaublich riesigen Festplatten-Ära scheint der Raum im Laufe der Zeit zu verschwinden. Diese kleine und effektive Programme bietet eine bequemere Auflistung als die Standard-du (1). Es zeigt an, was seit dem letzten Lauf passiert ist und zeigt die Größe und den Gesamtprozentsatz an. Es ist möglich, zu navigieren und zu Verzeichnissen aufzusteigen, indem man Cursortasten mit textbasiertem Browser benutzt (Links, Elinks, Luchs etc.)

Screenshot of gt5

Auf der "verwandten Pakete" Abschnitt von gt5, Ich fand ncdu. Aus seiner Paketbeschreibung:

Ncdu ist ein ncurses-basierter du viewer. Es bietet eine schnelle und einfach zu bedienende Benutzeroberfläche durch berühmte du Dienstprogramm. Es ermöglicht das Durchsuchen der Verzeichnisse und zeigt Prozentsätze der Festplattennutzung mit der ncurses-Bibliothek.

Screenshot of ncdu


222
2018-04-20 14:16



ncdu ist sehr schnell und genau das, was ich brauchte, danke! Ich habe auch gt5 ausprobiert, aber ich habe es einfach abgebrochen, weil es zu lange gedauert hat, ohne Feedback - Lukas
Heiliger Mist, ncdu ist unglaublich, danke für das Teilen deiner Erkenntnisse! - While-E
Ich würde gerne wenn ncdu wurde stärker betont. Ich brauche es hin und wieder und ich kann mich nicht an den Namen erinnern. - Martin Thoma


Ich benutze nur eine Kombination von du und 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, von denen Sie denken, dass sie zu groß sind, führen Sie den Befehl für sie aus und Sie finden heraus, was das Problem verursacht.

Hinweis: Ich benutze duist es -x Flag, um die Dinge auf ein Dateisystem zu beschränken (Ich habe eine ziemlich komplizierte Anordnung von Cross-Mounted-Dingen zwischen SSD und RAID5).

Anmerkung 2: 2>/dev/null leitet alle Fehlermeldungen in Vergessenheit. Wenn sie dich nicht stören, ist das nicht obligatorisch.


29
2018-04-20 14:30



Wenn ich diesen Befehl ausführe, steigt Du in untergeordnete Verzeichnisse ab. Von dem du man-Seite: "Fassen Sie die Festplattenbelegung jeder Datei rekursiv für Verzeichnisse zusammen." - Jamie


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

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

du Argumente:

  • -a für "alle" Dateien und Verzeichnisse. Lass es für nur Verzeichnisse weg
  • -BM Ausgabe der Größen in Megabyte (M) Blockgrößen (B)
  • 2>/dev/null - Fehlermeldung "Berechtigung verweigert" ausschließen (Danke @Oli)

sort Argumente:

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

head Argumente:

  • -n 50 für die nur Top 50 Ergebnisse.
  • Aufhören more wenn Sie eine kleinere Nummer verwenden

Hinweis: Präfix mit sudo um Verzeichnisse einzuschließen, auf die Ihr Konto keine Zugriffsrechte hat.

Beispiel mit den 10 größten Dateien und Verzeichnissen in / var (einschließlich 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

16
2017-07-03 23:24



liebe es, danke - electblake


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

Eine viel schnellere Version mit Suchen ohne untergeordnete Kindprozesse wäre 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


8
2017-11-16 12:55



Bestätigen Sie, dass dies viel schneller ist - Cookie


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

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

oder (mehr Unix-orientiert):

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

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

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

oder mit menschenlesbaren Größen:

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

Bitte beachte, dass -h ist für GNU verfügbar sort Nur, damit OSX / BSD ordnungsgemäß funktioniert, müssen Sie es installieren coreutils. Dann füge seinen Ordner in deinen ein PATH.

Also diese Aliase sind nützlich, um in Ihrem rc Dateien (jedes Mal wenn Sie es brauchen):

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





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 $DIRECTORY und ausführen ls -s auf sie. Der letzte Befehl gibt die zugewiesene Größe einer Datei und den Dateinamen aus. Das Ergebnis wird numerisch sortiert und die letzten fünf Einträge werden angezeigt. Als Ergebnis sehen Sie die größten 5 Dateien in $DIRETORY oder irgendein Unterverzeichnis. Wenn Sie eingeben tail -n 1 Sie sehen nur die größte Datei.

Außerdem kannst du viel mit ihm spielen find. Zum Beispiel können Sie nach Dateien suchen, die jünger sind als n Tage (-ctime -n) oder die zu besonderen Benutzern gehören (-user johndoe).


6
2018-04-20 14:26





Wenn ich mehr freien Speicherplatz auf Servern brauche, benutze ich diesen Befehl. Es findet alle Dateien größer als 50 MB und "du-h" erstellt eine bessere Liste von Dateien und "sort -n" nach der Pipe-Liste numerically sortiert nach Dateigröße.

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

2
2017-10-11 20:40