Hierarchia katalogów w systemach unix-like

Materiał przygotowany z pomocą AI

Na pierwszy rzut oka korzeń systemu unixowego (/) wygląda jak zbiór trzyliterowych skrótów bez logiki. W rzeczywistości to dobrze przemyślany standard — Filesystem Hierarchy Standard (FHS) — który mówi, gdzie powinny leżeć programy, konfiguracja, dane użytkowników, logi i pliki tymczasowe. Dzięki niemu pakiety oprogramowania wiedzą, gdzie zainstalować pliki, a administrator wie, gdzie ich szukać. Wszystkie dystrybucje Linuksa i (w dużej mierze) macOS się go trzymają.

Ten artykuł pokazuje najważniejsze katalogi i wyjaśnia, do czego służą — żebyś po wpisaniu ls / nie patrzył w ścianę, tylko wiedział, którą furtkę otworzyć w danym zadaniu.

Korzeń (/) — widok ogólny

KatalogZawartość
/binpodstawowe polecenia dla wszystkich użytkowników (ls, cp, bash)
/sbinpodstawowe polecenia administracyjne (mount, fsck, iptables)
/usrdrugorzędna hierarchia: zainstalowane oprogramowanie, biblioteki, dokumentacja
/etcpliki konfiguracyjne systemu i usług
/vardane zmienne — logi, kolejki, cache, bazy pakietów
/homekatalogi domowe zwykłych użytkowników (na macOS: /Users)
/rootkatalog domowy użytkownika root
/tmppliki tymczasowe — czyszczone przy restarcie (lub po krótkim czasie)
/optopcjonalne, „samowystarczalne” pakiety zewnętrzne (np. /opt/google/chrome)
/devpliki specjalne reprezentujące urządzenia (/dev/sda, /dev/null)
/procwirtualny FS — informacje o procesach i jądrze (Linux)
/syswirtualny FS — interfejs do jądra i urządzeń (Linux)
/rundane procesów uruchomionych po starcie (PID files, sockety)
/bootjądro, initramfs, konfiguracja bootloadera (GRUB)
/lib, /lib64biblioteki systemowe niezbędne dla /bin i /sbin
/mnt„ręczne” punkty montowania (admin montuje tu dyski przy pracy)
/mediaautomatyczne montowanie nośników (USB, CD/DVD)

Najważniejsze katalogi w szczegółach

/bin i /sbin — niezbędne polecenia

/bin zawiera polecenia, które muszą być dostępne zawsze — także w trybie awaryjnym, zanim zamontowane zostaną pozostałe partycje. Stąd są tu ls, cp, mv, cat, bash. Programy w /sbin są analogiczne, ale przeznaczone dla administratora (shutdown, mount, fsck).

W nowoczesnych dystrybucjach /bin i /sbin są symlinkami do /usr/bin i /usr/sbin (tzw. usrmerge) — tradycyjny podział historyczny przestał mieć znaczenie praktyczne.

/usr — drugorzędna hierarchia

/usr zawiera całą resztę zainstalowanego oprogramowania. Sam w sobie jest mini-systemem:

PodkatalogZawartość
/usr/binwiększość poleceń użytkownika (python3, git, vim)
/usr/sbindodatkowe narzędzia administracyjne
/usr/libbiblioteki dla programów z /usr/bin
/usr/localoprogramowanie zainstalowane ręcznie/lokalnie (osobna hierarchia: /usr/local/bin, /usr/local/lib…)
/usr/sharedane niezależne od architektury — ikony, dokumentacja, lokalizacje
/usr/includenagłówki C/C++ dla developerów

/usr/local to twoja domena

Cokolwiek instalujesz spoza menedżera pakietów (kompilując ze źródeł, kopiując ręcznie), powinno trafić do /usr/local. Dzięki temu nie wchodzi w konflikt z plikami zarządzanymi przez apt/dnf. Na Linuksie z procesorem Intel Homebrew (jeśli używasz) także instaluje do /usr/local.

/etc — konfiguracja

Pliki konfiguracyjne systemu i usług, prawie zawsze zwykłe pliki tekstowe — to pierwsze miejsce, gdzie zaglądasz, kiedy coś trzeba dostroić.

Plik / katalogCo zawiera
/etc/hostnamenazwa hosta
/etc/hostslokalne mapowanie nazw na adresy IP
/etc/passwd, /etc/groupużytkownicy i grupy
/etc/fstabtrwałe punkty montowania (co montuje się przy starcie)
/etc/ssh/sshd_configkonfiguracja serwera SSH
/etc/nginx/konfiguracja nginx
/etc/systemd/system/własne unity systemd
/etc/cron.d/, /etc/crontabsystemowe zadania cron
/etc/profile, /etc/bash.bashrcglobalna konfiguracja powłoki

/etc to tylko pliki tekstowe

W przeciwieństwie do rejestru Windowsa, cała konfiguracja w unixach to zwykłe pliki, które można czytać i edytować dowolnym edytorem. To olbrzymia zaleta — backup polega na skopiowaniu katalogu, a różnice między hostami wykrywa diff.

/var — dane zmienne

Pliki, które rosną i zmieniają się w czasie pracy systemu — odróżniane od stałego oprogramowania w /usr.

PodkatalogZawartość
/var/log/logi systemu i usług — najważniejszy katalog do diagnostyki
/var/lib/trwałe dane usług (bazy pakietów, dane PostgreSQL/MySQL)
/var/cache/cache aplikacji — można usunąć, system odbuduje
/var/spool/kolejki (poczta, drukarka, cron przed wykonaniem)
/var/tmp/pliki tymczasowe przeżywające restart (w odróżnieniu od /tmp)
/var/www/typowo katalog plików serwowanych przez nginx/Apache

Najczęściej zaglądasz do /var/log/:

sudo tail -f /var/log/syslog          # Debian/Ubuntu - ogólny log systemu
sudo tail -f /var/log/auth.log        # logowania, sudo, SSH
sudo tail -f /var/log/nginx/error.log # błędy nginx

/home — pliki użytkownika

Każdy zwykły użytkownik ma podkatalog z własną nazwą — /home/piotr/, /home/anna/. To jedyny katalog, w którym możesz pisać bez sudo. Wewnątrz znajdziesz ukryte pliki (zaczynające się od kropki — dotfiles), w których aplikacje trzymają swoje per-user ustawienia:

Plik / katalogCo zawiera
~/.bashrc, ~/.zshrckonfiguracja powłoki
~/.ssh/klucze SSH, lista znanych hostów (known_hosts)
~/.config/konfiguracja programów (XDG Base Directory)
~/.local/bin/osobiste skrypty wykonywalne (warto dodać do PATH)
~/.local/share/dane aplikacji per-user
~/.cache/per-user cache

~ to skrót do /home/twojanazwa

Powłoka rozwija ~ do twojego katalogu domowego, a ~user do katalogu konkretnego użytkownika. cd ~ (lub samo cd) zawsze zabierze cię „do siebie”.

/tmp — pliki tymczasowe

Wspólny śmietnik dla wszystkich procesów. Zwykle czyszczony przy restarcie albo po określonym czasie (np. przez systemd-tmpfiles). Wszystko, co tu zapiszesz, traktuj jako ulotne — nie składuj tu niczego, co warto zatrzymać.

/var/tmp to wariant „przeżywający restart” — przydatny dla długich operacji (build, packaging) między sesjami.

/opt — pakiety zewnętrzne

Miejsce dla oprogramowania, które instaluje się jako jeden, samowystarczalny pakiet — często komercyjnego lub spakowanego inaczej niż apt/dnf. Każdy pakiet ma własny podkatalog z własnym układem (np. /opt/google/chrome/, /opt/zoom/).

Katalogi specjalne (Linux)

To wirtualne systemy plików — nie zajmują miejsca na dysku, treść generowana jest przez jądro w locie.

/proc — informacje o procesach

cat /proc/cpuinfo                    # informacje o procesorze
cat /proc/meminfo                    # informacje o pamięci
cat /proc/uptime                     # czas pracy systemu
ls /proc/$$/                         # info o bieżącej powłoce ($$ = PID)

Każdy proces ma swój katalog /proc/PID/ z plikami opisującymi jego stan, otwarte deskryptory, środowisko, mapowanie pamięci.

/sys — interfejs do jądra

Konfiguracja i statystyki sterowników, urządzeń, parametrów jądra:

cat /sys/class/thermal/thermal_zone0/temp   # temperatura CPU (w mili-stopniach)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward  # włącz forwarding pakietów

/dev — urządzenia jako pliki

Cała koncepcja unixowa: wszystko jest plikiem, w tym urządzenia.

PlikCo reprezentuje
/dev/sda, /dev/nvme0n1dyski twarde / SSD
/dev/sda1pierwsza partycja na dysku sda
/dev/null„kosz” — wszystko, co tam zapiszesz, znika
/dev/zeronieskończone strumień bajtów \0
/dev/random, /dev/urandomgeneratory liczb losowych
/dev/ttybieżący terminal użytkownika

macOS — różnice

macOS bazuje na BSD i większość katalogów jest taka sama, ale ma kilka swoich.

KatalogCo zawiera
/Users/katalogi domowe (zamiast /home/)
/Applications/aplikacje GUI zainstalowane przez użytkownika
/System/system operacyjny — chroniony przez SIP, tylko do odczytu
/Library/systemowa biblioteka (czcionki, preferencje, LaunchAgents/Daemons)
~/Library/per-user wariant /Library (preferencje, cache aplikacji GUI)
/Volumes/zamontowane wolumeny (dyski zewnętrzne, obrazy DMG)
/private/właściwa lokalizacja /etc, /var, /tmp — pozostałe to symlinki

Czego nie ma na macOS: /proc, /sys, /home (zamiast tego /Users), /boot (Apple zarządza rozruchem inaczej).

SIP chroni /System i /usr (poza /usr/local)

System Integrity Protection blokuje zapis do większości katalogów systemowych — także rootowi. Twoje miejsce na własne instalacje to /usr/local (lub /opt/homebrew przy Apple Silicon).

Gdzie szukać typowych plików — szybka ściąga

Szukasz…Sprawdź
logi systemu/var/log/syslog, journalctl (systemd)
logi nginx/var/log/nginx/access.log, error.log
konfiguracja SSH/etc/ssh/sshd_config (serwer), ~/.ssh/config (klient)
własne skrypty~/.local/bin/ lub /usr/local/bin/
zadania croncrontab -l (user), /etc/cron.d/ (system)
pliki uruchomieniowe usług/etc/systemd/system/, /lib/systemd/system/
pakiety zainstalowane przez apt/usr/bin/, /usr/lib/
pakiety zainstalowane przez Homebrew/opt/homebrew/ (Apple Silicon) lub /usr/local/ (Intel)
pliki klucza SSH~/.ssh/id_ed25519, ~/.ssh/id_rsa
temp z bieżącej sesji/tmp/
temp przeżywający restart/var/tmp/

Zobacz także