Příkazy df
a du
jsou nástroje, které v prostředí Bash, typickém pro Linux, macOS a další systémy odvozené od Unixu, slouží k monitorování obsazenosti disku. S jejich pomocí lze snadno zjistit, jaké soubory a adresáře zabírají nejvíce místa ve vašem systému.
Přehled celkového, volného a využitého místa na disku
Bash nabízí dvojici praktických příkazů pro práci s diskovým prostorem. df
, neboli „disk free“ (volné místo na disku), zobrazuje přehled dostupného a využitého místa na disku. Na druhou stranu, du
, zkráceně „disk usage“ (využití disku), odhaluje, které soubory a složky nejvíce přispívají k obsazení disku.
Začněte tím, že do okna terminálu Bash zadáte příkaz df
a potvrdíte stisknutím klávesy Enter. Výsledkem bude výpis, který může na první pohled působit nepřehledně, ale ve skutečnosti je poměrně srozumitelný. Pokud použijete příkaz df
bez dalších parametrů, zobrazí se data o volném a využitém místě pro všechny připojené systémy souborů.
df
Každý řádek výpisu je tvořen šesti sloupci, které reprezentují:
Filesystem: | Název konkrétního systému souborů. |
1K-Blocks: | Celkový počet bloků o velikosti 1 KB dostupných v daném systému souborů. |
Used: | Počet bloků 1 KB, které byly v systému souborů využity. |
Available: | Počet bloků 1 KB, které jsou v systému souborů volné. |
Use%: | Procentuální podíl využitého místa v daném systému souborů. |
Mounted on: | Bod připojení systému souborů. |
Pro srozumitelnější výstup namísto počtu bloků 1 KB můžete použít volbu -B
(block size). Tato volba umožňuje zadat požadovanou velikost bloku, a to pomocí písmen K, M, G, T, P, E, Z nebo Y, které odpovídají násobkům 1024 (kilo, mega, giga, tera, peta, exa, zeta a yotta). Například, pro zobrazení dat v megabajtech, použijte:
df -BM
Volba -h
(human-readable) způsobí, že df
automaticky zvolí nejvhodnější jednotku pro každou velikost systému souborů. V následujícím výpisu můžete vidět, že jsou použity gigabajty, megabajty i kilobajty pro různé systémy.
df -h
Pokud vás zajímají informace o počtu inodů, použijte volbu -i
(inodes). Inody jsou datové struktury používané linuxovými systémy souborů k popisu souborů a uchovávání jejich metadat, jako je název, datum změny a pozice na disku. Pro běžného uživatele to pravděpodobně nebude užitečné, ale správci systému se občas na tyto informace potřebují podívat.
df -i
Ve výchozím nastavení df
zobrazí informace o všech připojených systémech souborů. To může vést k nepřehlednému výstupu. Například položky typu /dev/loop
jsou pseudo systémy souborů, které umožňují připojení souboru, jako by šlo o diskový oddíl. Zejména pokud používáte snap balíčky v Ubuntu, můžete mít takových položek mnoho. Místo na nich bývá vždy 0, protože se o skutečné systémy souborů nejedná, a proto je z výpisu můžeme vyloučit.
Příkazu df
můžeme nařídit, aby vynechal systémy souborů určitého typu. Nejprve je ale potřeba zjistit, jaký typ souborového systému chcete vynechat. Pro tento účel slouží volba -T
(print type), která do výstupu přidá i typ souborového systému.
df -T
Položky /dev/loop
jsou, jak vidíme, typu squashfs
. Tyto můžeme vyloučit následujícím příkazem:
df -x squashfs
Výsledkem je přehlednější výpis. Pokud chceme zobrazit i celkový součet, použijeme volbu --total
.
df -x squashfs --total
Podobně můžeme df
instruovat, aby zahrnul pouze systémy souborů konkrétního typu, pomocí volby -t
(type).
df -t ext4
Pokud potřebujeme zobrazit data pro konkrétní sadu systémů souborů, můžeme je zadat podle názvu. V Linuxu se diskové jednotky označují písmeny abecedy. První disk je /dev/sda
, druhý /dev/sdb
, atd. Jednotlivé oddíly jsou očíslovány. Takže /dev/sda1
je první oddíl na disku /dev/sda
. Informace o konkrétním systému souborů získáme tak, že jeho název předáme jako parametr příkazu df
. Zobrazme si data pro první oddíl na prvním disku.
df /dev/sda1
V názvu systémů souborů můžeme používat i zástupné znaky, kde *
zastupuje libovolný řetězec znaků a ?
zastupuje libovolný jeden znak. Pro zobrazení všech oddílů na prvním disku bychom mohli použít:
df /dev/sda*
Příkaz df
můžeme také požádat o zobrazení informací pro více konkrétních systémů souborů. Například pro zobrazení celkových velikostí systémů /dev
a /run
:
df -h --total /dev /run
Pro další úpravu výstupu můžeme df
nařídit, které sloupce má zahrnout. Toho dosáhneme pomocí volby --output
a seznamu požadovaných názvů sloupců oddělených čárkami (bez mezer). Níže je popis jednotlivých sloupců:
source: | Název systému souborů. |
fstype: | Typ systému souborů. |
itotal: | Celková velikost systému souborů v inodech. |
iused: | Obsazený prostor v systému souborů v inodech. |
iavail: | Volný prostor v systému souborů v inodech. |
ipcent: | Procentuální podíl obsazeného místa v systému souborů v inodech. |
size: | Celková velikost systému souborů (standardně v blocích 1K). |
used: | Obsazený prostor v systému souborů (standardně v blocích 1K). |
avail: | Volný prostor v systému souborů (standardně v blocích 1K). |
pcent: | Procentuální podíl obsazeného místa v systému souborů (standardně v blocích 1K). |
file: | Název systému souborů, pokud byl zadán v příkazovém řádku. |
target: | Bod připojení systému souborů. |
Pojďme požádat df
o zobrazení informací o prvním oddílu na prvním disku, v lidsky čitelné formě, se sloupci source
, fstype
, size
, used
, avail
a pcent
:
df -h /dev/sda1 --output=source,fstype,size,used,avail,pcent
Dlouhé příkazy jsou ideální pro vytvoření aliasu. Můžeme si vytvořit alias dfc
(pro „df custom“), a to zadáním:
alias dfc="df -h /dev/sda1 --output=source,fstype,size,used,avail,pcent"
Nyní zadání dfc
a stisknutí klávesy Enter bude mít stejný efekt jako zadání celého původního příkazu. Pro zachování aliasu i po restartu systému je nutné jej přidat do souboru .bashrc
nebo .bash_aliases
.
Ukázali jsme si, jak zpřesnit výstup příkazu df
tak, aby zobrazoval pouze potřebné informace. Můžeme ale zvolit i opačný přístup a nechat příkaz vypsat všechny dostupné informace. To lze docílit pomocí volby -a
(all) a --output
bez seznamu sloupců, jak je ukázáno níže:
df -a --output
Pokud je výstup z příkazu df
příliš rozsáhlý, lze jej snadno zpracovat pomocí programu less
:
df -a --output | less
Zjištění, co zabírá místo na disku
Nyní se podíváme na to, jak zjistit, co přesně zabírá nejvíce místa na disku. Začneme jedním z příkazů df
:
df -h -t ext4
Vidíme, že na prvním oddílu prvního pevného disku je využito 78% místa. Pomocí příkazu du
můžeme zjistit, které složky zabírají nejvíce místa. Pokud spustíme du
bez parametrů, vypíší se všechny adresáře a podadresáře pod adresářem, ve kterém jsme příkaz spustili. Pokud bychom to provedli z domovské složky, byl by výpis velmi dlouhý.
du
Formát výstupu je jednoduchý: každý řádek zobrazuje velikost a název adresáře. Velikost je implicitně zobrazena v blocích 1 KB. Pro změnu velikosti bloku použijeme volbu -B
(block size). Stejně jako u df
zadáváme po -B
písmena z řady K, M, G, T, P, E, Z a Y. Například pro zobrazení velikosti v 1 MB blocích použijeme příkaz:
du -BM
Stejně jako df
, i du
má lidsky čitelnou volbu -h
, která automaticky použije nejvhodnější jednotky pro každou velikost adresáře.
du -h
Volba -s
(summarize) zobrazí souhrnnou velikost každého adresáře, bez výpisu jeho podadresářů. Následující příkaz tedy zobrazí souhrnné informace v lidsky čitelné formě pro všechny adresáře v aktuálním pracovním adresáři:
du -h -s *
Zobrazíme-li si velikosti adresářů ve složce Pictures
, seřazené od největšího po nejmenší, zjistíme:
du -sm Pictures/* | sort -nr
Složka Pictures
tedy obsahuje zdaleka nejvíce dat. Díky seřazení můžeme snadno zjistit, které složky zabírají nejvíce místa.
Díky možnostem příkazů df
a du
můžeme snadno zjistit, kolik místa na disku je využito, a také, co konkrétně toto místo zabírá. Na základě těchto informací se můžeme rozhodnout, zda je nutné přesunout některá data na jiné úložiště, přidat nový pevný disk, nebo odstranit nadbytečná data. Tyto příkazy nabízejí mnoho dalších možností, zde jsme popsali ty nejběžnější. Kompletní seznam voleb pro příkaz df
a pro příkaz du
naleznete v manuálových stránkách Linuxu.