Katalogi w systemie Linux — jakie mamy katalogi i co jest od czego?

czarnaowca.it 2 lat temu

www.czarnaowca.it

Katalogi Linux są jedną z pierwszych rzeczy, którą warto się nauczyć w tym systemie. Dzięki temu wiemy, co i gdzie szukać, co koniec końców ułatwia nam z nim pracę i nie powoduje, iż czujemy się zagubieni.

Struktura katalogów bazuje na tym, co możemy znaleźć w innych systemach, które są lub bazują na systemie Unix.

Katalogi w systemie Linux a filozofia systemu

Filozofią systemów bazujących i z rodziny Unix jest to, iż wszystko jest plikiem, dzięki temu mamy uniwersalne możliwości operowania na elementach systemu bez konieczności skomplikowanych operacji, np.: tak jak to wygląda w systemie Windows.

Przykładowo można modyfikować wiele elementów systemu poprzez zapisanie do plików. Dla przykładu:

echo 1 > plik.txt

Powyższa komenda spowoduje, iż utworzymy plik o nazwie plik.txt i zapiszemy w nim cyfrę 1. jeżeli chcemy nadpisać plik, robimy:

echo 2 > plik.txt

Wtedy komendą echo (wypisanie na ekranie), skierujemy wynik do zapisania do pliku i tym samym w naszym pliku zamiast 1 znajdziemy 2.

Co ciekawe, możemy podobne operacje wykonywać na systemie. Przykładowo, by włączyć pewne elementy routingu (przydatne dla wirtualizacji itp.) włączymy podobnie:

echo 1 > /proc/sys/net/IPv4/ip_forward

Powyższy „plik” w rzeczywistości nie jest plikiem. Upraszczając, to jest formą interfejsu między systemem a użytkownikiem. Skoro wszystko jest plikiem, tak wszystko ma podobne działanie. Możemy dzięki znajomości pewnych mechanizmów, gwałtownie i łatwo edytować adekwatności i zachowanie systemu.

System plików

Jednakże wracając do tematu, w systemie poza plikami posiadamy jeszcze wiele innych rzeczy, począwszy od skrótów (symlinków i hardlinków), przez urządzenia blokowe (np.: /dev/sda1), aż po sockety (np.: /run/clamd.sock).

Jednak by dobrze po nich operować, musimy znać strukturę katalogów, co i gdzie szukać, a także, jeżeli będziemy tworzyć własne rozwiązania — co i gdzie umieścić, by to było logiczne.

Wszystko zaczynamy w root / – główny katalog, który jest podstawą wszystkiego. Z reguły nie powinniśmy w nim tworzyć nowych plików i katalogów, ale nie jest to zabronione. Częstą praktyką jest tworzenie np.: pliku swap w systemie właśnie w lokalizacji /swapfile. Więcej o swap znajdziecie w moim artykule tutaj.

Jednakże dla dobrych praktyk — nie umieszczajmy tam nic.

Jakie mamy katalogi?

W katalogu root posiadamy wiele katalogów.

  • /bin – w tym katalogu posiadamy podstawowe narzędzia systemowe, np.: ls, czy cp. jeżeli jakaś komenda/narzędzie jest wbudowane w system Linux — to na pewno znajdziecie je w tym miejscu. Jednakże w reguły nie umieszczamy tam plików dodatkowych aplikacji, więc np.: nie znajdziemy tam plików uruchomieniowych Apache2 itd.
  • /boot – w tej lokalizacji znajdziemy wszystko, co jest potrzebne do uruchomienia systemu. Znajdziemy tam pliki bootloadera, pliki kernela, initrd, itd.
  • /dev – pierwszy ze specyficznych katalogów, gdyż pliki w tym katalogu nie są plikami i odnoszą się do urządzeń (z ang. Device). Tutaj znajdziemy np.: nasze dyski, pendrive, itp., a także dzięki temu katalogowi odbywamy komunikację z tymi urządzeniami. W momencie podpięcia pendrive’a tak naprawdę montujemy w systemie urządzenie, np.: /dev/sda2 to katalogu, np.: /mnt/mój_pendrive/
  • /etc – tutaj znajdziemy pliki konfiguracyjne dla naszego systemu i aplikacji. Właśnie w tym katalogu skonfigurujesz zamontowane dyski, czy nginx’a. Moim zdaniem nie powinniśmy tam trzymać innych konfiguracji od systemowych, ale praktycznie to właśnie w tym miejscu je znajdziemy dla popularnych aplikacji.
  • /home – Zastanawiałeś się, gdzie są Twoje dokumenty? prawdopodobnie w katalogu /home – katalog domowy pełną gębą. W tym katalogu znajdziemy katalogi domowe użytkowników (oczywiście można to modyfikować), a w tych katalogach wszystkie swoje pliki takie jak dokumenty, czy muzykę.
  • /lib, /lib64, /lib32 – katalogi ze wspólnymi bibliotekami. Wiele aplikacji posiada współdzielone z systemem biblioteki (np.: biblioteki szyfrowania), więc prawdopodobnie znajdziesz je właśnie w tym miejscu.
  • /media – z reguły tutaj montowane są urządzenia przenośne jak pendrive’y, czy już coraz mniej stosowane napędy płytowe, czy dyskietki.
  • /mnt – podobnie jak katalog /media, tutaj tez montujemy zasoby, jednakże z reguły montujemy tutaj dyski twarde, itp. Oczywiście kwestia montowania zasobów jest zależna od konfiguracji systemu lub preferencji i potrzeb użytkownika.
  • /proc – kolejny katalog występujący bardziej na papierze. Znajdziemy tam informacje o procesach, czy konfiguracji systemu w aktualnym momencie. W nim otworzymy socket, czy sprawdzimy, z jakich plików nasza aplikacja korzysta.
  • /root – Katalog root w root? Dla mnie to zawsze było zabawne, ale to katalog naszego konta root. Czemu nie jest w katalogu /Home? Nie mam zielonego pojęcia.
  • /sbin – odpowiednik katalogu /bin, ale tym razem ze specyficznymi narzędziami przeznaczonymi tylko dla administratorów. Łatwo spamiętać, iż bin to binarki, a sbin superbinarki.
  • /tmp – katalog z plikami tymczasowymi. Montowany zwykle jako tmpfs i jest niczym RAM — restart komputera i pliki znikną.
  • /opt – katalog, gdzie z założenia mieliśmy utrzymywać oprogramowanie niedostępne w repozytorium.
  • /usr – katalog, gdzie moim zdaniem powinniśmy mieć wszystko. W nim znajdziemy wszystko, co jest instalowane na naszym systemie, gdyż jest odzwierciedleniem naszego katalogu /. W nim również jest przykładowo katalog bin (/usr/bin), gdzie instalowane systemowo programy mają swoje binarki, a w /usr/etc/ mamy konfigurację. Co ciekawe, mamy jeszcze /usr/local/, gdzie znowu mamy odzwierciedlenie naszego /, ale tam trzymamy pliki i konfiguracje naszych „niesystemowych paczek«, czyli to, co wyklepiemy w systemie manualnie.
  • /var – tutaj ulubiony katalog admina – /var/log. Tutaj mamy statyczne pliki, ale naszego systemu, właśnie takie jak logi, pliki strony WWW, czy pliki bazy danych (/var/lib/mysql dla przykładu). Tutaj najczęściej nasz system coś zapisuje.
  • /srv – dane serwisowe, np.: pliki stron WWW. Często wrzucane są tam pliki wykorzystywane do działania aplikacji.

Inne katalogi

Są jeszcze inne katalogi, takie jak /sys — katalog ze specyficznym zastosowaniem, np.: przez dodatkowe moduły kernela, czy lost+found — po FSCK naszego dysku często można znaleźć pliki, które istnieją, ale automat nie potrafił sobie z nimi poradzić, np.: umieścić go tam gdzie powinien.

Katalogi w systemie Linux: podsumowanie

Jak widać, każdy katalog posiada swoje specyficzne zastosowanie, jednak Bogiem a prawdą — to administrator decyduje co i gdzie umieszcza. W systemach z rodziny BSD (prawdziwy Unix) jest zwykle porządek, czyli rzeczy instalowane poza systemem są grzecznie w katalogu /usr, a w Linux (Linux nie jest Unixem, chociaż na nim bazuje swoją filozofię) jest spory bałagan, więc np.: konfigurację najpopularniejszej aplikacji do wyświetlania WWW – Apache2, zamiast utrzymywać swoją konfigurację w katalogu /usr/etc/apache2, są one w katalogu /etc/apache2. Podobnie jest z MySQL, iż zamiast posiadać swoje pliki w /usr/var/lib/mysql, te trzyma w katalog /var/lib/mysql.

Ja polecam jednak szkołę Unixowego podejścia do tego typu kwestii i Ci, co mnie znają, wiedzą — iż wszystkie moje aplikacje mają standardowo ścieżki w /usr.

Dodatkowo mamy jeszcze mechanizm montowania i możemy montować poszczególne katalogi na osobnych partycjach, a choćby dyskach. Do ciekawsze, możemy katalog montować w katalogu, więc jak chcemy np.: dać użytkownikowi możliwość edycji plików, ale nie chcemy, by nam buszował w /var/www/html, to robimy:

mount /var/www/html /Home/Janusz/www

Tym samym nasz user ma katalog www w swoim katalogu domowym. Można też symlinkować, czyli tworzyć skróty. Można też tworzyć hardlinki, czyli plik istnieje w dwóch miejscach, nie jest montowany i zajmuje tylko miejsce jak dla jednego pliku. Często wykorzystywane w kopiach przyrostowych, by nie zabierać zbędnie miejsca za podwójne dane.

Źródła:

Idź do oryginalnego materiału