Filesystem Hierarchy Standard (FHS) to spisana konwencja, która mówi, jaki katalog w systemie uniksowym i linuksowym trzyma jaki rodzaj plików. To dzięki niej konfiguracja siedzi w /etc, programy i biblioteki w /usr, dane zmienne (logi, kolejki, cache) w /var, a katalogi domowe w /home. Standard utrzymuje Linux Foundation; aktualna wersja to FHS 3.0 z 2015 roku. Krótko: to mapa, dzięki której nie musisz zgadywać, gdzie cokolwiek leży.
Po co to komu
Wyobraź sobie, że każda dystrybucja chowałaby pliki gdzie popadnie. Twój skrypt działający na Debianie sypałby się na Fedorze, bo log byłby raz w /var/log, raz w /logs. FHS rozwiązuje ten chaos: ustala wspólny układ, więc i Ty, i programy, i administratorzy wiecie, czego się spodziewać. To kontrakt między dystrybucjami a oprogramowaniem.
Standard dzieli też katalogi według dwóch osi: czy dane są współdzielone czy lokalne dla maszyny, oraz czy są statyczne (np. binarki) czy zmienne (np. logi). Stąd np. /usr może być nawet montowane tylko do odczytu, a wszystko, co się zmienia, ląduje w /var.
Najważniejsze katalogi
/bin,/sbin— podstawowe polecenia (w nowoczesnych systemach to dowiązania do/usr/bin)/etc— pliki konfiguracyjne, zawsze lokalne dla danej maszyny/usr— programy, biblioteki i dane tylko do odczytu/var— dane zmienne: logi, bazy, kolejki, cache/home— katalogi użytkowników/tmp— pliki tymczasowe, często czyszczone przy restarcie/opt— dodatkowe oprogramowanie spoza menedżera pakietów
Z życia: gdzie szukać logów
Padła Ci usługa nginx? Zamiast pytać Google, gdzie ten log, idziesz prosto tam, gdzie każe FHS:
tail -f /var/log/nginx/error.log
Konfiguracja? /etc/nginx/nginx.conf. Binarka? which nginx niemal na pewno pokaże /usr/sbin/nginx. To nie magia — to standard, który pozwala Ci poruszać się po cudzym serwerze jak po własnym.
Na co uważać
FHS to zalecenie, nie żelazne prawo jądra. Dystrybucje świadomie odchodzą od litery standardu — głośny przykład to usr merge, gdzie /bin i /lib stały się dowiązaniami do /usr. Częsty błąd początkujących: wrzucanie własnych aplikacji do /usr ręcznie (kolizja z menedżerem pakietów) zamiast do /opt albo /usr/local. Druga mina to mylenie /etc z miejscem na dane — konfiguracja tak, baza danych nie.
Pojęcia powiązane: mount point, partycjonowanie, symlink, Linux Foundation, POSIX, menedżer pakietów (apt, dnf), uprawnienia plików.