W jaki sposób można znaleźć duże pliki / katalogi w celu usunięcia i zwolnienia miejsca?

202

Szukam serii poleceń, które pokażą mi największe pliki na dysku.

Ryan Detzel
źródło
Czy coś graficznego byłoby w porządku?
RolandiXor
5
nie, działający w linii poleceń przez ssh.
Ryan Detzel,
Dziwne jest to, że mam dwa serwery, na których działa to samo. Jedno z nich wykorzystuje 50% dysku, a drugie 99%. Nie mogę znaleźć przyczyny tego.
Ryan Detzel,
Więc jestem zdezorientowany, mówi 98% korzystało z du ale gdy uruchamiam aplikację GT5 uzyskać: grab.by/9Vv2
Ryan Detzel

Odpowiedzi:

275

Jeśli potrzebujesz tylko znaleźć duże pliki, możesz użyć findtej -sizeopcji. Następne polecenie wyświetli wszystkie pliki większe niż 10 MB ( nie mylić z 10 MB ):

find / -size +10M -ls

Jeśli chcesz znaleźć pliki o określonym rozmiarze, możesz połączyć je z wyszukiwaniem „rozmiar mniejszy niż”. Następne polecenie wyszukuje pliki między 10MiB a 12MiB:

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

apt-cache search 'disk usage'zawiera listę niektórych programów dostępnych do analizy użycia dysku. Jedną z aplikacji, która wygląda bardzo obiecująco, jest gt5.

Z opisu pakietu:

Minęły lata i dyski stają się coraz większe, ale nawet w tej niewiarygodnie wielkiej erze dysków twardych przestrzeń wydaje się z czasem znikać. Ten mały i skuteczny program zapewnia wygodniejszą listę niż domyślny du (1). Wyświetla to, co się wydarzyło od ostatniego uruchomienia, oraz rozmiar katalogu i całkowity procent. Możliwe jest nawigowanie i wchodzenie do katalogów za pomocą klawiszy kursora w przeglądarce tekstowej (linki, elinki, rysie itp.)

Zrzut ekranu z gt5

W sekcji „pokrewne pakiety” pakietu gt5 znalazłem ncdu. Z opisu opakowania:

Ncdu to przeglądarka oparta na ncurses. Zapewnia szybki i łatwy w użyciu interfejs za pośrednictwem słynnego narzędzia du. Pozwala przeglądać katalogi i wyświetlać procent wykorzystania dysku za pomocą biblioteki ncurses.

Zrzut ekranu z ncdu

Lekensteyn
źródło
3
ncdu jest bardzo szybki i właśnie tego potrzebowałem, dzięki! Próbowałem też GT5, ale po prostu go anulowałem, ponieważ „myślałem” zbyt długo bez żadnych opinii
Lukas
7
Cholera jasna, ncdu jest niesamowity, dziękuję za podzielenie się swoimi odkryciami!
While-E
Bardzo bym chciał, gdyby ncdu został wskazany silniejszy. Potrzebuję go od czasu do czasu i nie pamiętam nazwy.
Martin Thoma,
Dość pamiętania poleceń dzięki ncdu :)
Mr Coder
1
@matt Nie, format -lswyjściowy jest zakodowany na stałe (patrz kod źródłowy pred_flsi funkcje list_file ). Możesz spróbować przybliżyć dane wyjściowe za pomocą -printfopcji, przetworzyć dane wyjściowe za pomocą awk lub użyć czegoś takiegofind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn
33

Po prostu używam kombinacji dui 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

To jest przypadek płukania i powtórzenia . Kieruj na podkatalogi, które uważasz za zbyt duże, uruchom dla nich polecenie, a dowiesz się, co jest przyczyną problemu.

Uwaga: Używam du„s -xflagę zachować rzeczy ograniczone do jednego systemu plików (Mam dość skomplikowany układ poprzecznych zamontowane rzeczy między SSD i RAID5).

Uwaga 2: 2>/dev/nullprzekierowuje wszelkie komunikaty o błędach w zapomnienie. Jeśli ci nie przeszkadzają, nie jest to obowiązkowe.

Oli
źródło
1
Kiedy uruchamiam to polecenie, du schodzi do katalogów potomnych. Ze strony podręcznika du: „Podsumuj użycie dysku dla każdego PLIKU, rekurencyjnie dla katalogów”.
Jamie
26

Moje ulubione rozwiązanie wykorzystuje kombinację kilku dobrych odpowiedzi.

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

du argumenty:

  • -adla „wszystkich” plików i katalogów. Pozostaw to tylko dla katalogów
  • -BM wyprowadzać rozmiary w megabajtach (M) rozmiary bloków (B)
  • 2>/dev/null - wyklucz komunikaty o błędach „odmowa uprawnień” (dzięki @Oli)

sort argumenty:

  • -n dla „numerycznego”
  • -r dla „rewersu” (od największego do najmniejszego)

head argumenty:

  • -n 50 tylko 50 najlepszych wyników.
  • Przestań, morejeśli używasz mniejszej liczby

Uwaga: prefiks z, sudoaby dołączyć katalogi, do których twoje konto nie ma uprawnień dostępu.

Przykład pokazujący 10 największych plików i katalogów w / var (łącznie z sumą całkowitą).

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
źródło
10

Odpowiedź qbi jest poprawna, ale będzie bardzo wolna, gdy będzie dużo plików, ponieważ rozpocznie nowy proces ls dla każdego elementu.

znacznie szybszą wersją używającą find bez odradzania procesów potomnych byłoby użycie printf do wydrukowania rozmiaru w bajtach (% s) i ścieżce (% p)

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

kon
źródło
1
Potwierdź, że jest to o wiele szybsze
Cookie
10

Aby wyświetlić największe 20 najlepszych katalogów (rekurencyjnie) w bieżącym folderze, użyj następującego jednowierszowego:

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

lub (bardziej zorientowany na Uniksa):

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

W przypadku 20 największych plików w bieżącym katalogu (rekurencyjnie):

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

lub w rozmiarach czytelnych dla ludzi:

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

Pamiętaj, że -hjest dostępny sorttylko dla GNU , więc aby działał poprawnie na OSX / BSD, musisz go zainstalować coreutils. Następnie dodaj jego folder do swojego PATH.

Więc te aliasy są przydatne w plikach rc (za każdym razem, gdy ich potrzebujesz):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
kenorb
źródło
8

To wydaje się być idealną aplikacją do find:

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

To polecenie znajdzie wszystkie pliki w katalogu $DIRECTORYi uruchomi ls -sje na nich. Ostatnie polecenie drukuje przydzielony rozmiar pliku plus nazwę pliku. Wynik jest sortowany numerycznie, a wyświetlanych jest pięć ostatnich wpisów. W rezultacie zobaczysz 5 największych plików w $DIRETORYdowolnym podkatalogu. Jeśli wejdziesz tail -n 1, zobaczysz tylko największy plik.

Ponadto możesz dużo się bawić find. Na przykład możesz szukać plików młodszych niż n dni ( -ctime -n) lub należących do specjalnych użytkowników ( -user johndoe).

qbi
źródło
5

Kiedy potrzebuję zrobić więcej wolnego miejsca na serwerach, używam tego polecenia. Znajduje wszystkie pliki większe niż 50 MB i „du -h” tworzy lepszą listę plików, a „sort -n” po potoku tworzy listę numerycznie posortowaną według rozmiaru pliku.

find / -size +50M -type f -exec du -h {} \; | sort -n
zorbon.cz
źródło
1

Wypróbuj Baobab, daje graficzny przegląd plików i folderów, możesz zobaczyć, gdzie są prawdziwe kosmiczne świnie i usunąć je jednym kliknięciem https://help.ubuntu.com/community/Baobab

Oliver Hoffmann
źródło
2
W tym konkretnym pytaniu OP preferuje metodę wiersza poleceń. Zobacz komentarze do pytania. Zmienię również pytanie.
1

Aby znaleźć wszystkie pliki GB, na przykład, użyłbym du i grep, chociaż inne metody tutaj wymienione również wydają się świetne.

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

Możesz także uzyskać upodobanie dzięki opcji --except, którą ma du.

dermen
źródło
0

Możesz także sortować pliki według rozmiaru:

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

Znajduje tylko pliki i uruchamia się du -hdla każdego pliku, co pokazuje rozmiar pliku. Na koniec sortujemy dane wyjściowe find/ duwedług pierwszej kolumny (w formacie czytelnym dla człowieka).

Ostatni wydrukowany plik jest największy.

Peregring-Łk
źródło
0

Możesz użyć tego polecenia, aby zobaczyć największe pliki podczas pomijania katalogów:

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

Aby znaleźć wszystkie pliki, które są większe niż 100 MB (nie jest to 100 MB, zobacz tutaj, jeśli jesteś zdezorientowany):

find / -size +100M -ls

poniższe polecenie wyświetli 5 największych plików w folderze $DIRECTORY:

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

UŻYWANIE du: Poniższe polecenie, które używa du, wyświetla katalogi z 20 największymi rozmiarami w domowym folderze roboczym:

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

Teraz, aby wyświetlić największe katalogi / pliki, w tym podfoldery, uruchom:

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

Używanie ls:

Aby wyświetlić 5 największych plików w katalogu / bin, wydaj poniższe polecenie:

ls -lSh /bin | head -5

Możesz także użyć narzędzia Disk Usage Analyzer lub Baobao, jak pokazano na przykład tutaj .

Zezo
źródło
0

Świetnym, przyjaznym dla użytkownika narzędziem wymienionym w odpowiedzi na podobne pytanie jest NCurses Disk Usagenarzędzie:

sudo ncdu /
janoside
źródło
Cóż, rozpoczynanie od katalogu głównego systemu plików było dla mnie dokładnie przeciwne do bezcelowego. Pozwoliło mi to zidentyfikować najważniejsze miejsca do oszczędzania miejsca w całym systemie plików. Niezależnie od tego możesz użyć wspomnianego, aby rozpocząć od dowolnego katalogu. Sprawdź dokumentację tego narzędzia. Ale, zgodnie z prośbą, oto link do odpowiedzi źródłowej .
janoside