Otwierasz terminal, wpisujesz ls / i widzisz dwadzieścia katalogów o zagadkowych trzyliterowych nazwach. /bin, /etc, /usr, /var – żaden nie przypomina znajomego C:\Program Files ani „Pulpitu”. Jeśli przesiadasz się z Windowsa na Linuksa, ten widok budzi uzasadnione pytanie: kto to wymyślił i po co?
Odpowiedź sięga roku 1971 i laboratorium Bell Labs, gdzie Ken Thompson i Dennis Ritchie budowali Uniksa na dyskach o pojemności 2,5 MB. Filesystem Hierarchy Standard (FHS) porządkuje ten układ od ponad 30 lat, a decyzje projektowe z tamtej epoki żyją w każdej współczesnej dystrybucji.
TL;DR: Linux organizuje pliki według standardu FHS 3.0 wydanego w 2015 roku. Katalog root (/) zawiera ok. 20 podkatalogów – od /bin (programy) przez /etc (konfiguracja) po /home (dane użytkownika). Nazwy pochodzą z wczesnego Uniksa z lat 70. Nowoczesne dystrybucje łączą /bin z /usr/bin w ramach procesu zwanego usr merge.
Czym jest FHS i kto decyduje o układzie katalogów?
Filesystem Hierarchy Standard (FHS) to specyfikacja określająca, gdzie w systemie Linux i Unix powinny znajdować się pliki i katalogi. Aktualną wersję – FHS 3.0 – opublikowała Linux Foundation w czerwcu 2015 roku. Standard definiuje układ ok. 20 katalogów root i zapewnia spójność między dystrybucjami.
Prace nad standaryzacją rozpoczęły się w sierpniu 1993 roku na liście mailingowej Linux Mail-Net. Pierwszą wersję – FSSTND 1.0 – koordynował Daniel Quinlan i wydano ją 14 lutego 1994 roku. Początkowo standard dotyczył wyłącznie Linuksa, ale od 1995 roku objął też inne systemy uniksowe (dołączyła społeczność BSD) i zmienił nazwę na FHS.
Dzięki FHS programiści wiedzą, gdzie instalować pliki, administratorzy wiedzą, gdzie ich szukać, a menedżery pakietów (apt, dnf, pacman) rozmieszczają pliki automatycznie według tego standardu. W naszej praktyce, gdy migrowaliśmy klientowi pakiet wewnętrzny z CentOS-a 7 na Debiana 12, brak ścisłego trzymania się FHS w starym pakiecie zajął nam dwa dni dłużej niż reszta migracji – cała sprawa rozbiła się o pliki konfiguracyjne wepchnięte do /usr/local/etc zamiast /etc.
Dokumentację hierarchii możesz otworzyć bezpośrednio w terminalu:
man hier
Jak wygląda drzewo katalogów root?
Katalog root (/) to korzeń całego systemu plików w Linuksie – odpowiednik „Tego komputera” w Windowsie, tyle że bez liter dysków. Wszystkie partycje, pendrive’y i pliki konfiguracyjne są zamontowane gdzieś pod /. FHS 3.0 wymaga obecności 14 katalogów w root i dopuszcza kilka opcjonalnych.
Aby zobaczyć pierwszą warstwę struktury, wpisz w terminalu:
tree -L 1 /
albo po prostu:
ls /
Poniższa tabela przedstawia wszystkie główne katalogi root zdefiniowane w FHS 3.0.
| Katalog | Pochodzenie nazwy | Co zawiera | Przykład zawartości |
|---|---|---|---|
/bin | binaries | Podstawowe programy użytkownika | ls, cp, bash, cat |
/sbin | system binaries | Programy administracyjne (root) | fsck, reboot, iptables |
/etc | et cetera | Konfiguracja systemu (pliki tekstowe) | fstab, hosts, passwd |
/home | home | Katalogi domowe użytkowników | /home/anna/Dokumenty |
/root | root | Katalog domowy superużytkownika | .bashrc, .ssh/ |
/var | variable | Dane zmienne – logi, cache, kolejki | /var/log/syslog |
/tmp | temporary | Pliki tymczasowe (czyszczone przy restarcie) | pliki sesji, buildy |
/usr | user → Unix System Resources | Programy i dane systemowe (read-only) | /usr/bin/python3 |
/opt | optional | Oprogramowanie firm trzecich | /opt/google/chrome |
/boot | boot | Jądro systemu i bootloader | vmlinuz, initramfs, GRUB |
/lib | library | Biblioteki współdzielone i moduły jądra | libc.so, /lib/modules/ |
/lib64 | library 64-bit | Biblioteki 64-bitowe | ld-linux-x86-64.so |
/dev | devices | Pliki urządzeń (dyski, terminale) | sda, null, tty, random |
/proc | process | Wirtualny FS – procesy i jądro | cpuinfo, meminfo, uptime |
/sys | system | Wirtualny FS – urządzenia i sterowniki | informacje o sprzęcie |
/mnt | mount | Punkt montowania (ręczny) | ręcznie zamontowany dysk |
/media | media | Nośniki wymienne (automontowanie) | pendrive, CD-ROM, karta SD |
/run | runtime | Dane uruchomieniowe na tmpfs | PID-y, sockety systemd |
/srv | service | Dane usług sieciowych | /srv/www, /srv/ftp |
Gdzie system trzyma programy? /bin, /sbin i /usr
Programy w Linuksie mieszkają w trzech głównych katalogach: /bin przechowuje podstawowe komendy jak ls czy cp, /sbin gromadzi narzędzia administracyjne wymagające uprawnień roota, a /usr/bin zawiera większość oprogramowania zainstalowanego przez menedżer pakietów. Ten historyczny podział nowoczesne dystrybucje zacierają poprzez usr merge.
Katalog /bin zawiera programy niezbędne do startu systemu i pracy w trybie awaryjnym: ls, cp, mv, cat, mount, bash. Początkujący korzysta z niego przy każdym wpisaniu podstawowej komendy. Katalog /sbin gromadzi narzędzia takie jak fsck (naprawa systemu plików), iptables (firewall) czy reboot – odwiedzisz go, gdy będziesz administrować systemem z uprawnieniami roota.
Największym katalogiem jest /usr – FHS definiuje go jako „drugą główną gałąź systemu plików”. Podkatalogi /usr odzwierciedlają strukturę roota:
/usr/bin– programy użytkownika (python3,gcc,vim,firefox)/usr/sbin– dodatkowe programy administracyjne/usr/lib– biblioteki współdzielone aplikacji/usr/share– dane niezależne od architektury (stronyman, ikony, szablony)/usr/local– oprogramowanie instalowane ręcznie, poza menedżerem pakietów
Osobny katalog /opt to przestrzeń dla oprogramowania firm trzecich. Google Chrome instaluje się np. jako /opt/google/chrome, a komercyjne IDE od JetBrains trafiają do /opt/jetbrains. W jednym z naszych projektów wdrożeniowych aplikacja CRM klienta lądowała w /opt/firma-crm – oddzielenie od /usr uprościło późniejsze backupy i upgrade’y.
Skąd nazwa /etc i co tam znajdziesz?
Katalog /etc (od łacińskiego „et cetera” – „i inne rzeczy”) przechowuje systemowe pliki konfiguracyjne w formacie tekstowym. We wczesnym Uniksie /etc pełnił rolę szuflady na wszystko, co nie pasowało do /bin ani /dev – z czasem wyspecjalizował się jako centrum konfiguracji systemu.
Kernighan i Pike w książce The UNIX Programming Environment (1984) opisali /etc jako katalog zawierający „różne pliki administracyjne, takie jak plik haseł i niektóre programy systemowe”. Według FHS 3.0 katalog /etc nie powinien już zawierać plików wykonywalnych – wyłącznie konfigurację. Kluczowe pliki, z którymi zetkniesz się jako początkujący:
/etc/fstab– tabela partycji montowanych automatycznie przy starcie systemu/etc/hosts– lokalne mapowanie nazw domenowych na adresy IP/etc/hostname– nazwa komputera w sieci/etc/passwd– lista kont użytkowników (wbrew nazwie, hasła są w/etc/shadow)/etc/apt/sources.list– repozytoria pakietów (Debian/Ubuntu)/etc/ssh/sshd_config– konfiguracja serwera SSH
Sprawdź informacje o swojej dystrybucji jedną komendą:
cat /etc/os-release
Popularne backronimy – „Editable Text Configuration” czy „Extended Tool Chest” – to późniejsze reinterpretacje, nie oryginalne znaczenie nazwy /etc.
Co przechowują /var, /tmp i /run?
Katalog /var (od ang. „variable”) gromadzi dane zmieniające się podczas normalnej pracy systemu: logi, cache, kolejki drukowania i bazy danych pakietów. Gdy katalog /usr jest zamontowany jako read-only, /var pozostaje głównym miejscem na zapisy. To pierwszy katalog do sprawdzenia, gdy brakuje miejsca na dysku.
Kluczowe podkatalogi /var, które odwiedzisz jako początkujący:
/var/log– logi systemowe (syslog,auth.log,kern.log) – zajrzysz tu przy debugowaniu problemów/var/cache– cache menedżera pakietów i aplikacji/var/lib– dane stanu programów (/var/lib/apt,/var/lib/docker,/var/lib/mysql)/var/tmp– pliki tymczasowe przetrwujące restart systemu/var/www– pliki serwera WWW (na dystrybucjach z Apache/Nginx)
Gdy dysk się zapełnia, sprawdź rozmiar /var komendą:
du -sh /var
W praktyce serwerowej zdecydowana większość alertów o pełnym dysku, które obsłużyliśmy, sprowadzała się do dwóch katalogów: /var/log (rozjechany journald bez rotacji) lub /var/lib/docker (nieużywane obrazy i wolumeny). Komenda journalctl --vacuum-size=500M rozwiązywała pierwszy problem w sekundę.
Katalog /tmp przechowuje pliki tymczasowe dostępne dla wszystkich użytkowników. Wiele dystrybucji montuje /tmp jako tmpfs (system plików w pamięci RAM), czyszczony przy każdym restarcie.
Katalog /run pojawił się w FHS 3.0. Przechowuje ulotne dane uruchomieniowe (pliki PID, sockety) na tmpfs. Wcześniej dane te trafiały do /var/run, ale katalog /var bywa niedostępny we wczesnej fazie startu systemu – /run rozwiązuje ten problem.
Gdzie mieszkasz w Linuksie? /home i /root
Katalog /home zawiera katalogi domowe zwykłych użytkowników – tu trafiają dokumenty, projekty, pliki konfiguracyjne aplikacji i osobiste ustawienia. Każdy użytkownik otrzymuje własny podkatalog (np. /home/anna). Umieszczenie /home na osobnej partycji pozwala przeinstalować system bez utraty danych.
Konfiguracja aplikacji trafia do ukrytych plików i katalogów, tzw. dotfiles: .bashrc (ustawienia powłoki), .ssh/ (klucze SSH), .config/ (konfiguracja programów według specyfikacji XDG). Początkujący spędza w /home większość czasu – to odpowiednik folderu C:\Users\Anna w Windowsie.
Katalog /root to katalog domowy superużytkownika. Znajduje się bezpośrednio pod /root (nie w /home/root), aby był dostępny nawet gdy partycja /home nie jest jeszcze zamontowana. Odwiedzisz go rzadko – wyłącznie pracując jako administrator systemu.
Sprawdź rozkład partycji i wykorzystanie dysków komendą:
df -h
Dlaczego sprzęt ma swoje pliki? /dev, /proc i /sys
W filozofii Linuksa wszystko jest plikiem – dyski twarde, klawiatura, a nawet informacje o procesorze. Katalogi /dev, /proc i /sys realizują tę fundamentalną zasadę uniksową, prezentując sprzęt i parametry jądra jako pliki w drzewie katalogów. Dzięki temu wystarczy komenda cat, by odczytać parametry CPU.
Katalog /dev (devices) zawiera pliki urządzeń zarządzane przez podsystem udev. Zajrzysz tu, gdy będziesz partycjonować dysk lub formatować pendrive:
/dev/sda– pierwszy dysk SATA (partycje:/dev/sda1,/dev/sda2…)/dev/null– „czarna dziura” pochłaniająca wszelkie dane (przydatna w skryptach)/dev/random– generator liczb losowych oparty o entropię systemową
Katalog /proc to wirtualny system plików (procfs) – nie zajmuje miejsca na dysku. Jądro Linuksa generuje jego zawartość dynamicznie. Każdy uruchomiony proces ma tu swój katalog (/proc/<PID>/), a pliki systemowe udostępniają informacje o sprzęcie:
cat /proc/cpuinfo
Katalog /sys (sysfs) pojawił się w jądrze Linux 2.6 i udostępnia uporządkowane informacje o urządzeniach i sterownikach. Pełni podobną rolę do /proc, ale ma czytelniejszą, hierarchiczną strukturę.
Jak Linux montuje dyski? /mnt, /media i /boot
Katalog /mnt to tradycyjny punkt montowania dla ręcznie podłączanych systemów plików, a /media – nowsze miejsce, gdzie system automatycznie montuje nośniki wymienne: pendrive’y, płyty CD i karty SD. Podział wynika z ewolucji sprzętu – /media pojawił się dopiero w FHS 2.3 w 2004 roku, gdy hot-plug USB stał się normą.
W erze, gdy podłączanie dysków „na gorąco” nie istniało, wystarczał /mnt. Ręczne montowanie wygląda tak:
sudo mount /dev/sdb1 /mnt
Środowisko graficzne (GNOME, KDE) montuje pendrive automatycznie np. jako /media/anna/DYSK_USB – bez potrzeby wpisywania komend.
Katalog /boot przechowuje pliki niezbędne do uruchomienia systemu: jądro Linuksa (vmlinuz), obraz initramfs i konfigurację bootloadera GRUB. Na maszynach z UEFI katalog /boot często obejmuje partycję EFI System Partition. Usunięcie zawartości /boot uniemożliwi start systemu – odwiedzisz ten katalog przy aktualizacji jądra lub konfiguracji GRUB-a.
Dlaczego /bin i /usr/bin istnieją osobno? Historia z 1971 roku
Podział na /bin i /usr/bin to nie przemyślany projekt architektoniczny – to wynik braku miejsca na dysku w Bell Labs około 1971 roku. Ken Thompson i Dennis Ritchie rozwijali Uniksa na maszynie PDP-11 wyposażonej w dwa dyski RK05 o pojemności zaledwie 2,5 MB każdy. Gdy system urósł, programy „wyciekły” na drugi dysk.
Pierwszy dysk RK05 zawierał system operacyjny z katalogami /bin, /sbin i /lib. Drugi dysk – zamontowany jako /usr – przechowywał katalogi domowe użytkowników: /usr/ken (Thompson) i /usr/dmr (Ritchie). Nazwa /usr oznaczała po prostu „user”.
Gdy system przestał mieścić się na pierwszym dysku, twórcy przenieśli część programów na drugi dysk, tworząc /usr/bin, /usr/sbin i /usr/lib. Zasada podziału była prosta: na pierwszym dysku zostawić tylko to, co potrzebne do zamontowania drugiego – bo program mount musiał działać, zanim /usr stał się dostępny.
Rob Landley, deweloper BusyBox, podsumował to zjawisko na liście mailingowej wprost: podział /bin vs /usr/bin to artefakt implementacyjny z lat 70., powielany przez dekady bez głębszego uzasadnienia.
Gdy pojawił się trzeci dysk, zamontowano go jako /home i przeniesiono katalogi domowe. Nazwa /usr straciła pierwotne znaczenie – dziś bywa interpretowana jako Unix System Resources, co jest wygodnym, choć niehistorycznym backronimem.
Co to jest usr merge i jak zmienia Linuksa?
Usr merge to proces łączenia katalogów /bin, /sbin i /lib z odpowiednikami w /usr za pomocą dowiązań symbolicznych – faktyczne odwrócenie historycznego podziału z lat 70. Po scaleniu /bin staje się symlinkiem do /usr/bin, a wszystkie pliki binarne fizycznie rezydują w jednym miejscu.
Sprawdź, czy Twoja dystrybucja ma usr merge:
ls -la /bin
Jeśli wynik zawiera lrwxrwxrwx ... /bin -> usr/bin, system korzysta ze scalonego układu.
Fedora wprowadziła usr merge jako pierwsza duża dystrybucja w 2012 roku (Fedora 17). Arch Linux dołączył w 2013, Red Hat Enterprise Linux 7 w 2014, a Debian – po wieloletniej dyskusji społeczności – w wydaniu Bookworm w 2023 roku. Dziś praktycznie wszystkie popularne dystrybucje stosują usr merge.
Korzyści scalenia obejmują uproszczenie pakietowania, lepszą kompatybilność skryptów między dystrybucjami, możliwość montowania /usr jako read-only oraz łatwiejsze tworzenie kontenerów i snapshotów. Lennart Poettering opisał pełną argumentację w dokumencie „The Case for the /usr Merge” na stronie freedesktop.org.
Podsumowanie
Struktura katalogów Linux to nie chaos – to dojrzały, ustandaryzowany układ z ponad 50-letnią historią. Standard FHS 3.0 precyzyjnie definiuje, gdzie trafiają programy (/usr/bin), konfiguracja (/etc), dane zmienne (/var) i pliki użytkowników (/home). Nazwy jak /etc czy /usr to żywe echa wczesnego Uniksa z Bell Labs, a proces usr merge powoli prostuje historyczne naleciałości z epoki dysków RK05.
Kluczowe wnioski:
- FHS 3.0 to obowiązujący standard układu katalogów we wszystkich dużych dystrybucjach.
- Większość programów żyje dziś w
/usr/bin, a/binw nowych systemach to symlink. - Trzy katalogi –
/etc,/var,/home– pokrywają 90% codziennej pracy administratora. /proci/systo wirtualne FS – nie zajmują miejsca, ale zawierają realny stan systemu.
Najlepsza metoda nauki to eksploracja. Otwórz terminal i zacznij od dwóch komend:
tree -L 1 /
man hier
FAQ
Jaka jest różnica między /bin a /usr/bin?
Historycznie /bin zawierał programy niezbędne do startu systemu, a /usr/bin – pozostałe aplikacje. W dystrybucjach z usr merge (Fedora, Debian 12+, Ubuntu, Arch) oba katalogi wskazują na ten sam katalog fizyczny – /usr/bin. Podział ma dziś znaczenie wyłącznie historyczne.
Czym różni się struktura katalogów Linux od Windows?
Linux nie używa liter dysków (C:, D:). Cały system plików zaczyna się od jednego katalogu root (/). Dyski i partycje są montowane jako podkatalogi – np. pendrive jako /media/anna/USB. Programy nie trafiają do jednego folderu „Program Files”, lecz rozkładają się między /usr/bin (binaria), /etc (konfiguracja) i /usr/share (dane).
Gdzie instalować własne programy i czy mogę usunąć /tmp?
Programy kompilowane ze źródeł trafiają domyślnie do /usr/local, oprogramowanie komercyjne (IDE, przeglądarki) do /opt, a pakiety z repozytorium menedżer pakietów sam umieszcza w /usr/bin. Pliki w /tmp możesz bezpiecznie usuwać – wiele dystrybucji robi to automatycznie przy restarcie. Nie kasuj jednak /tmp w trakcie pracy aplikacji, które mogą tam trzymać aktywne pliki sesji.
Jaka jest różnica między /tmp a /var/tmp?
Pliki w /tmp mogą zostać usunięte przy każdym restarcie systemu, a w wielu dystrybucjach /tmp jest tmpfs w RAM-ie. Pliki w /var/tmp przetrwują restart i są czyszczone rzadziej – zazwyczaj dopiero po 30 dniach nieaktywności. Stąd /var/tmp nadaje się na dłuższe buildy, a /tmp na ulotne dane sesji.
Dlaczego /home warto trzymać na osobnej partycji?
Osobna partycja /home pozwala przeinstalować system operacyjny lub zmienić dystrybucję bez utraty danych użytkowników – dokumentów, kluczy SSH, ustawień aplikacji i konfiguracji powłoki. W naszej praktyce ten układ zaoszczędził klientom kilka godzin migracji przy przejściu Ubuntu 22.04 → Fedora 40.
