
Podstawy Linuksa – drzewo katalogów

Artykuł otwiera serię poradników traktujących o podstawach działania oraz zarządzania systemami GNU/Linux. Dzisiaj przyjrzymy się strukturze katalogów. Postaramy się odpowiedzieć na pytanie, dlaczego standaryzacja jest ważna oraz poznamy specyficzne dla Enterprise Linuksa katalogi „rozszerzające” standard.
Artykuł otwiera serię poradników traktujących o podstawach działania oraz zarządzania systemami GNU/Linux. Dzisiaj przyjrzymy się strukturze katalogów. Postaramy się odpowiedzieć na pytanie, dlaczego standaryzacja jest ważna oraz poznamy specyficzne dla Enterprise Linuksa katalogi „rozszerzające” standard.
W 1994 r. opublikowany został FSSTND (ang. FileSystem STaNdarD) jako standard struktury katalogów w systemie Linux. Na jego bazie powstał rozszerzony standard dla szerszej gamy systemów Uniksowych – FHS (ang. Filesystem Hierarchy Standard).
Obydwa dokumenty zostały opublikowane, aby usystematyzować rozkład katalogów w systemie. Główną zaletą takiej standaryzacji jest jednolitość, a co za tym idzie uproszczenie administracji oraz procesu rozwoju oprogramowania dla różnych systemów Uniksowych.
Sam standard definiuje podstawowe drzewo katalogów oraz to, co powinno się znajdować w poszczególnych katalogach. Daje to pewną elastyczność w dokładnym rozmieszczeniu pozostałych komponentów systemowych.
Solidna podstawa
Logika stojąca za prezentowanym poniżej podziałem systemu plików na katalogi opiera się na założeniu, że w systemie będą występowały różne rodzaje plików dzielące się na cztery kategorie w oparciu na dwie cechy rozróżniające. Po pierwsze pliki mogą być współdzielone lub przypisane do konkretnej maszyny. Z drugiej strony mamy pliki statyczne, czyli takie, które nie powinny być zmieniane bez udziału administratora systemu oraz pliki, które będę dowolnie często modyfikowane. Poniższa tabelka zestawia ten koncept wraz z przykładami w poszczególnych grupach.
współdzielone | niewspółdzielone | |
---|---|---|
statyczne | pliki binarne | pliki konfiguracyjne |
zmienne | tymczasowe pliki wiadomości e-mail | pliki blokad (ang. lock) |
Poniżej prezentujemy skrótowe objaśnienie katalogów definiowanych przez standard FHS. Lista ta nie jest wyczerpująca, a sam standard definiuje opcjonalne katalogi oraz pozostawia wolną rękę w niektórych kwestiach.
Katalog | Angielska nazwa źródłowa | Opis |
---|---|---|
/ | root | Główny katalog w systemach uniksowych zwany korzeniem (ang. root). Cała struktura katalogów umiejscowiona jest w tym katalogu. |
/boot | boot process | Pliki programu rozruchowego |
/bin | binaries | Podstawowe pliki wykonywalne dostępne dla wszystkich użytkowników |
/dev | devices | Pliki urządzeń |
/etc | et cetera | Pliki konfiguracyjne. Dawniej znajdowały się tutaj różne pliki nieprzynależące do pozostałych kategorii |
/home | home directory | Katalogi domowe użytkowników |
/lib | libraries | Biblioteki programów i moduły jądra. Nowa wersja standardu definiuje również możliwość dodania katalogów dla innych architektur np. lib64 dla x86_64 |
/mnt | mount point | Tymczasowy punkt montowania |
/media | media | Punkty montowań dla pamięci zewnętrznych |
/opt/ | optional | Dodatkowe oprogramowanie |
/proc/ | process | Wirtualny system plików informujący o stanie systemu |
/root/ | Katalog domowy superużytkownika root | |
/run | runing | Informacje o działaniu systemu od ostatniego jego uruchomienia |
/sbin | system binaries | Pliki wykonywalne do zarządzania systemem |
/srv/ | served | Rzadko używany katalog zawierający dane udostępniane często tylko do odczytu przez system |
/tmp | temporary | Pliki tymczasowe |
/usr | user | Drugorzędowa hierarchia. Tutaj umiejscowione są głównie pliki wykonywalne użytkowników |
/usr/bin/ | binary | Jak w hierarchii pierwszorzędowej, ale nie wymagane do uruchomienia czy naprawy systemu |
/usr/include | include | Standardowe pliki nagłówkowe |
/usr/lib | library | Jak w hierarchii pierwszorzędowej, ale nie wymagane do uruchomienia czy naprawy systemu |
/usr/local/ | local data | Trzeciorzędowa hierarchia danych lokalnych |
/usr/share/ | shared | Dane współdzielone między architekturami |
/usr/sbin/ | system binaries | Jak w hierarchii pierwszorzędowej, ale nie wymagane do uruchomienia czy naprawy systemu |
/var | variable | Często modyfikowane pliki np. logi, bazy danych |
/var/cache/ | cache | Pliki pamięci podręcznej programów |
/var/lock/ | lock | Pliki blokady zasobów będących w użyciu |
/var/log/ | logging | Logi aplikacji |
/var/mail/ | mailboxes | Skrzynki pocztowe |
Więcej na temat standardu można poczytać w dokumentacji man 7 hier. Pełna treść jego obecnej wersji (3.0) znajduje się tutaj.
Trzy słowa o katalogach tymczasowych
Standard definiuje dwie lokalizacje przeznaczone na pliki tymczasowe: /tmp oraz /var/tmp. Główna różnica polega na „długowieczności” zawartych w nich plików. Założenie jest takie, że pliki umieszczone w /tmp nie przetrwają restartu komputera. W rzeczywistości mogą „żyć” nawet krócej i w niektórych implementacjach usuwane są od razu, kiedy proces wykorzystujący je zakończy swoje działanie. Coraz częściej montuje się również /tmp jako tmpfs. Zawartość katalogu /var/tmp przeżywa między kolejnymi restartami systemu. Nie powinniśmy natomiast traktować go jako miejsca na pliki, które powinny „żyć” wiecznie, jako że część systemów czyści również i te katalogi z dużo mniejszą częstotliwością.
Drugą różnicą jest dostępność podczas inicjalizacji systemu. Katalog /tmp dostępny jest w bardzo wczesnej fazie uruchamiania, natomiast nie możemy tego zakładać o /var/tmp.
Drzewo katalogów w Enterprise Linux
Systemy klasy Enterprise przyjęły rozszerzenia niezdefiniowane bezpośrednio w standardzie. Oprogramowanie w tych systemach zarządzane jest przy pomocy programów rpm i yum. Obydwa posiadają specjalne katalogi, w których przechowują różne pliki. Katalogami tymi są /var/lib/rpm oraz /var/cache/yum.
Drugim specyficznym dla Enterprise Linuksów katalogiem jest /etc/sysconfig, w którym przechowywana jest konfiguracja niektórych składników systemu.
Trochę praktyki
Do wyświetlania drzewa katalogów w linii poleceń służą dwa podstawowe narzędzia tree
oraz ls
(ang. list). Pierwsze z nich rysuje ładną strukturę katalogów w formie „drzewa”:
$ tree -L 1 -d / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var 19 directories
Drugie pozwala wyświetlić zawartość katalogu:
$ ls -l / total 20276 lrwxrwxrwx. 1 root root 7 Sep 30 10:23 bin -> usr/bin/ dr-xr-xr-x. 5 root root 4096 Feb 6 08:45 boot/ -rw-------. 1 root root 20729856 Oct 17 15:21 core.12270 drwxr-xr-x. 23 root root 3880 Feb 11 08:47 dev/ drwxr-xr-x. 160 root root 12288 Feb 11 08:47 etc/ drwxr-xr-x. 3 root root 17 Sep 30 10:51 home/ lrwxrwxrwx. 1 root root 7 Sep 30 10:23 lib -> usr/lib/ lrwxrwxrwx. 1 root root 9 Sep 30 10:23 lib64 -> usr/lib64/ drwxr-xr-x. 3 root root 24 Dec 15 20:52 media/ drwxr-xr-x. 2 root root 6 Apr 12 2018 mnt/ drwxr-xr-x. 5 root root 46 Dec 17 16:49 opt/ dr-xr-xr-x. 325 root root 0 Feb 11 08:46 proc/ dr-xr-x---. 10 root root 4096 Feb 6 15:07 root/ drwxr-xr-x. 46 root root 1380 Feb 11 10:08 run/ lrwxrwxrwx. 1 root root 8 Sep 30 10:23 sbin -> usr/sbin/ drwxr-xr-x. 2 root root 6 Apr 12 2018 srv/ dr-xr-xr-x. 13 root root 0 Feb 11 08:47 sys/ drwxrwxrwt. 25 root root 4096 Feb 11 11:03 tmp/ drwxr-xr-x. 13 root root 155 Sep 30 10:23 usr/ drwxr-xr-x. 21 root root 4096 Feb 6 15:11 var/
Szczegóły obsługi są dostępne w podręczniku użytkownika man 1 tree
, man 1 ls
.
Aby poznać pełną ścieżkę katalogu, w którym się obecnie znajdujemy, sięgniemy po pwd
(ang. print working directory):
$ pwd /home/cmd
Do poruszania się w drzewie katalogów użyjemy cd
(ang. change directory) bądź bardziej zaawansowanej mieszanki popd
, pushd
oraz dirs
. Więcej informacji na ten temat przedstawiliśmy w innym artykule Pushd i popd, czyli historia odwiedzanych katalogów na naszym blogu.
Podsumowanie
Standaryzacja ułatwia programowanie deweloperom, administrację systemami oraz naukę nowym użytkownikom. Zdobytą dzisiaj wiedzę będziemy mogli uniwersalnie wykorzystać podczas obsługi różnorakich systemów uniksopodobnych. W następnym artykule z tej serii opowiem, czym w systemie Linux jest proces oraz wytłumaczę, czym się on różni od programu. Poznamy również kilka podstawowych narzędzi do zarządzania procesami.