du (od disk usage) to narzędzie, które mówi Ci, ile miejsca na dysku zajmują pliki i katalogi. Idealne, gdy serwer krzyczy „no space left on device”, a Ty nie masz pojęcia, który folder spuchł. du schodzi rekurencyjnie w głąb katalogów i sumuje rozmiary, więc w sekundę namierzysz tego jednego winowajcę, który zżarł 40 GB logami.
Składnia i najważniejsze opcje
Podstawowa składnia wygląda tak: du [OPCJE] [PLIK/KATALOG...]. Bez argumentu du liczy bieżący katalog.
-h— rozmiary w formacie czytelnym dla człowieka (K, M, G zamiast surowych bloków).-s— pokaż tylko podsumowanie dla każdego argumentu, bez listy podkatalogów.-a— licz też pojedyncze pliki, nie tylko katalogi.-c— dorzuć na końcu wiersz z sumą całkowitą (total).-d N/--max-depth=N— ogranicz głębokość raportowania do N poziomów.--apparent-size— pokaż rzeczywisty rozmiar danych zamiast zajętych bloków.-x— nie schodź na inne systemy plików (przydatne przy podmontowanych dyskach).--exclude=WZORZEC— pomiń pliki pasujące do wzorca, np.--exclude=*.log.
Przykłady użycia
du -sh /var/log— jedna liczba: ile waży cały katalog z logami. Najczęstsze użycie w życiu.du -h --max-depth=1 /var— rozmiar każdego podkatalogu w/varna jednym poziomie, bez zalewu setkami linii.du -ah /home/user | sort -rh | head -n 10— top 10 największych plików i katalogów, posortowane malejąco. Klasyk do polowania na żarłoków.du -sch *— rozmiar każdego elementu w bieżącym katalogu plus suma na końcu.du -sh --exclude='*.tmp' .— rozmiar katalogu z pominięciem plików tymczasowych.
Częste błędy i pułapki
Domyślne jednostki mylą. Bez -h dostajesz liczbę bloków (na GNU/Linux zwykle 1 KB), co łatwo wziąć za bajty. Zawsze dawaj -h, jak chcesz czytać oczami.
du liczy zajęte bloki, nie rozmiar pliku. Dlatego jego wynik bywa większy niż to, co pokazuje ls -l — to przez wyrównanie do bloków. Chcesz „prawdziwy” rozmiar danych? Użyj --apparent-size.
Różnice GNU kontra BSD/macOS. Na macOS i BSD nie ma --max-depth ani --apparent-size — głębokość ustawiasz przez -d N, a na Macu domyślnie dostajesz bloki 512-bajtowe (pomaga -h albo zmienna BLOCKSIZE). Jeśli skrypt z Linuksa nie działa na Macu, najpewniej to długie flagi.
du nie widzi miejsca zajętego przez procesy. Usunięty plik trzymany otwartym deskryptorem nie pojawi się w du, choć zżera dysk — tu lepszy bywa df albo lsof.
Powiązane komendy: df (wolne miejsce na partycjach), ls, ncdu (interaktywny du), find, sort.