Szukam serii poleceń, które pokażą mi największe pliki na dysku.
Szukam serii poleceń, które pokażą mi największe pliki na dysku.
Odpowiedzi:
Jeśli potrzebujesz tylko znaleźć duże pliki, możesz użyć find
tej -size
opcji. 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.)
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.
-ls
wyjściowy jest zakodowany na stałe (patrz kod źródłowy pred_fls
i funkcje list_file ). Możesz spróbować przybliżyć dane wyjściowe za pomocą -printf
opcji, przetworzyć dane wyjściowe za pomocą awk lub użyć czegoś takiegofind ... -type f -exec ls -ldh {} \; | column -t
Po prostu używam kombinacji du
i 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 -x
flagę 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/null
przekierowuje wszelkie komunikaty o błędach w zapomnienie. Jeśli ci nie przeszkadzają, nie jest to obowiązkowe.
du
: „Podsumuj użycie dysku dla każdego PLIKU, rekurencyjnie dla katalogów”.
Moje ulubione rozwiązanie wykorzystuje kombinację kilku dobrych odpowiedzi.
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
du
argumenty:
-a
dla „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.more
jeśli używasz mniejszej liczbyUwaga: prefiks z, sudo
aby 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
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
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
-h
jest dostępnysort
tylko dla GNU , więc aby działał poprawnie na OSX / BSD, musisz go zainstalowaćcoreutils
. Następnie dodaj jego folder do swojegoPATH
.
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'
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 $DIRECTORY
i uruchomi ls -s
je 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 $DIRETORY
dowolnym 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
).
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
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
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 -h
dla każdego pliku, co pokazuje rozmiar pliku. Na koniec sortujemy dane wyjściowe find
/ du
według pierwszej kolumny (w formacie czytelnym dla człowieka).
Ostatni wydrukowany plik jest największy.
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 .
Świetnym, przyjaznym dla użytkownika narzędziem wymienionym w odpowiedzi na podobne pytanie jest NCurses Disk Usage
narzędzie:
sudo ncdu /