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, że 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, że 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, że utworzymy plik o nazwie plik.txt
i zapiszemy w nim cyfrę 1
. Jeśli 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, szybko i łatwo edytować właściwoś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śli 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
, czycp
. Jeśli 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? Zapewne 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 zapewne 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ć, że bin to binarki, a sbin superbinarki./tmp
– katalog z plikami tymczasowymi. Montowany zazwyczaj 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 ręcznie./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 zazwyczaj 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, że 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ą — że 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 nawet 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:
- https://pl.m.wikibooks.org/wiki/Linux/System_plik%C3%B3w/Drzewo_katalog%C3%B3w
- https://linuxconfig.org/how-to-turn-on-off-ip-forwarding-in-linux
- https://linuxhandbook.com/linux-directory-structure/