Struktura katalogów systemu Linux

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, czy cp. 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:

Dołącz do newslettera, by być na bieżąco!

Jeśli chcesz być na bieżąco z blogiem, otrzymywać świetne porady dot. programowania i administracji serwerami, opinie w temacie gier - dołącz do newslettera!

Raz na jakiś czas wyślę Ci informację nt. bloga, a także będę wysyłać ekskluzywne materiały techniczne!

Nie czekaj i dołącz!

Dołączając do newslettera, akceptujesz naszą politykę prywatności!