du

Szacuje miejsce zajmowane przez pliki i katalogi na dysku.

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 /var na 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.