Podstawy Linuksa – drzewo katalogów

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.

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ółdzieloneniewspółdzielone
statycznepliki binarnepliki konfiguracyjne
zmiennetymczasowe pliki wiadomości e-mailpliki 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.

 

KatalogAngielska nazwa źródłowaOpis
/rootGłówny katalog w systemach uniksowych zwany korzeniem (ang. root). Cała struktura katalogów umiejscowiona jest w tym katalogu.
/bootboot processPliki programu rozruchowego
/binbinariesPodstawowe pliki wykonywalne dostępne dla wszystkich użytkowników
/devdevicesPliki urządzeń
/etcet ceteraPliki konfiguracyjne. Dawniej znajdowały się tutaj różne pliki nieprzynależące do pozostałych kategorii
/homehome directoryKatalogi domowe użytkowników
/liblibrariesBiblioteki 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
/mntmount pointTymczasowy punkt montowania
/mediamediaPunkty montowań dla pamięci zewnętrznych
/opt/optionalDodatkowe oprogramowanie
/proc/processWirtualny system plików informujący o stanie systemu
/root/Katalog domowy superużytkownika root
/runruningInformacje o działaniu systemu od ostatniego jego uruchomienia
/sbinsystem binariesPliki wykonywalne do zarządzania systemem
/srv/servedRzadko używany katalog zawierający dane udostępniane często tylko do odczytu przez system
/tmptemporaryPliki tymczasowe
/usruserDrugorzędowa hierarchia. Tutaj umiejscowione są głównie pliki wykonywalne użytkowników
/usr/bin/binaryJak w hierarchii pierwszorzędowej, ale nie wymagane do uruchomienia czy naprawy systemu
/usr/includeincludeStandardowe pliki nagłówkowe
/usr/liblibraryJak w hierarchii pierwszorzędowej, ale nie wymagane do uruchomienia czy naprawy systemu
/usr/local/local dataTrzeciorzędowa hierarchia danych lokalnych
/usr/share/sharedDane współdzielone między architekturami
/usr/sbin/system binariesJak w hierarchii pierwszorzędowej, ale nie wymagane do uruchomienia czy naprawy systemu
/varvariableCzęsto modyfikowane pliki np. logi, bazy danych
/var/cache/cachePliki pamięci podręcznej programów
/var/lock/lockPliki blokady zasobów będących w użyciu
/var/log/loggingLogi aplikacji
/var/mail/mailboxesSkrzynki 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.

Jednocześnie zachęcam do zapoznania się z naszym podstawowym szkoleniem z systemów Enterprise Linux.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *