Każdy nowy użytkownik systemu z rodziny Linuksa zastanawia się gdzie co tak naprawdę się znajduję. Problemem jest inny niż w Microsoft Windows system plików oraz sama struktura katalogów. Systemy rodem z Microsoftu przyzwyczaiły użytkowników do prostego schematu: C: – pierwszy dysk, w którym znajduje się sam Windows oraz instalowane programy. System Linux ma strukturę plików zupełnie inną, choć prostszą, postaram się ją przedstawić tak, aby nawet początkujący użytkownik zrozumiał.

System plików w systemach Unix i Linux definiuje ściśle Filesystem Hierarchy Standard. MacOS X łączy standard FHS z łatwymi do zapamiętania nazwami katalogów.

Filesystem Hierarchy Standard

Struktura katalogów

Wszystkie pliki i katalogi znajdują się w nadrzędnym katalogu oznaczanym jako / niezależnie od tego czy znajdują się na tym samym, czy innym dysku fizycznym. Jest to początek (korzeń) całego systemu plików w Linuksie. Niektóre katalogi mogą być obecne tylko po instalacji określonego oprogramowania.

  • /bin – znajdują się tutaj podstawowe pliki wykonywalne systemu. Nazwa katalogu bin wzięła się od angielskiego słowa binaries. Znajdziemy tutaj takie polecenia jak cat, ls, cp, rm.
  • /boot – pliki bootloadera (kernel, initrd).
  • /dev – pliki urządzeń albo specjalne, odnoszące się do urządzeń fizycznych.
  • /etc – znajdują się tutaj pliki odpowiedzialne za konfigurację systemu
    • /etc/opt – pliki konfiguracyjne dla katalogu /opt
    • /etc/X11 – pliki konfiguracyjne serwera Xów
    • /etc/skel – gdy stworzone zostaje nowe konto użytkownika, pliki z tego katalogu są zwykle kopiowane do katalogu domowego użytkownika.
  • /home – w tym, katalogu znajdują się katalogi domowe użytkowników systemu np /home/drastik/. W takim katalogu znajdują się pliki z jakich korzysta użytkownik, oraz jego personalne ustawienia dotyczące aplikacji systemowych.
  • /lib – biblioteki dla programów. Zawiera biblioteki dynamiczne, które są konieczne do wystartowania systemu i uruchamiania komend z głównego systemu plików.
  • /mnt – miejsce montowania innych niż natywny system plików. Jest punktem montowania systemów plików montowanych tymczasowo.
  • /media – miejsce montowania nośników wymiennych takich jak napędy CD, DVD oraz wszelkiego rodzaju pendrive. Katalog ten pojawił się w FHS-2.3.
  • /opt – statycznie skompilowane aplikacje. Ten katalog powinien zawierać dodatkowe pakiety, które zawierają statyczne pliki.
  • /proc – wirtualny system plików proc, informujący o stanie systemu i jego procesów. Dostarcza on informacji o bieżących procesach i jądrze. Ów pseudosystem plików opisano w szczegółach w proc(5).
  • /root – katalog domowy administratora systemu (użytkownik root).
  • /sbin – pliki wykonywalne potrzebne do zarządzania systemem. Tak jak /bin, ten katalog zawiera komendy potrzebne do wystartowania systemu, ale których zwykle nie wykonują normalni użytkownicy.
  • /tmp – ten katalog zawiera pliki tymczasowe, które może usunąć bez ostrzeżenia działające zadanie lub start systemu.
  • /usr – drugorzędowa hierarchia dla danych współdzielonych użytkownika (ang. user shareable), dane tylko do odczytu. Ten katalog jest zwykle montowany z oddzielnej partycji. Powinien on zawierać dzielone dane tylko do odczytu, tak że można go zamontować na różnych maszynach z zainstalowanym Linuksem.
    • /usr/bin – jest to główny katalog programów wykonywalnych. Większość programów wykonywanych przez zwykłych użytkowników, które nie są potrzebne przy starcie lub naprawie systemu i które nie są instalowane lokalnie, powinna być umieszczona w tym katalogu.
    • /usr/includePliki nagłówkowe dla kompilatora C.
    • /usr/sbin – ten katalog zawiera binaria programów do administracji systemem nie niezbędne dla procesu bootowania, montowania /usr, lub naprawy systemu (przykładowo – demony usług sieciowych).
    • /usr/share – ten katalog zawiera podkatalogi ze specyficznymi danymi aplikacji, które mogą być dzielone między różnymi architekturami tego samego systemu operacyjnego. Często można tu znaleźć rzeczy, które wcześniej znajdowały się w /usr/doc lub /usr/lib, lub /usr/man. Dane niezależne od architektury systemu (grafika, dźwięki).
    • /usr/src – pliki źródłowe różnych części systemu, dołączane do niektórych pakietów. Nie powinieneś pracować tutaj nad swoimi własnymi projektami, ponieważ pliki w /usr powinny być tylko do odczytu z wyjątkiem sytuacji, gdy instalowane jest oprogramowanie.
    • /usr/lib – biblioteki obiektowe, w tym dynamiczne, plus parę plików wykonywalnych, zwykle niewywoływanych bezpośrednio. Bardziej skomplikowane programy mogą tu posiadać całe podkatalogi.
    • /usr/local – tutaj zwykle trafiają programy instalowane lokalnie na maszynie.
  • /var – ten katalog zawiera pliki które mogą zmieniać wielkość, takie jak logi i spoole.
    • /var/lock – pliki blokujące zasoby będące aktualnie w użyciu. Umieszczane są tu pliki lock. Konwencja nazw plików lock dla urządzeń to LCK..[urządzenie] gdzie [urządzenie], to nazwa urządzenia w systemie plików. Użyty format to format plików lock HDU UUCP, tj. pliki lock zawierają PID jako dziesięciobajtowy numer dziesiętny w ASCII, plus znak nowej linii.
    • /var/log – różne logi aplikacji.
    • /var/mail – skrzynki pocztowe użytkowników.
    • /var/run – różne pliki bieżące, np. pliki zawierające identyfikatory procesów (PIDy) i informację o zalogowanych użytkownikach (utmp). Pliki w tym katalogu są zwykle czyszczone przy starcie systemu. Informacje o systemie od momentu uruchomienia (np. ilość zalogowanych użytkowników, uruchomione demony)
    • /var/spool – kolejkowane (spoolowane) pliki różnych programów. katalog przechowywania oczekujących zadań (maile do wysłania, kolejka wydruku).
    • /var/tmp – tak jak /tmp, ten katalog zawiera tymczasowe pliki przechowywane na czas nieokreślony. Najczęściej podczas restartu maszyny katalog ten jest opróżniany.

Lista ta nie jest wyczerpująca. Różne systemy, dystrybucje mogą być różnie skonfigurowane drzewo katalogów.

  • przemas

    I tego właśnie brakowało… Bardzo dobry artykuł. Dzięki :)

  • Brakowało? Przecież Internet jest aż przepełniony tymi informacjami.

  • Brakowało pewnie na tym portalu. Ale tak naprawdę to wystarczy wpisać: <code>man hier</code> i masz to co chcesz.

  • Michał

    Wystarczy wpisać w Google FHS i kliknąć na pierwszy link ;)

    Pamiętam, że jak zaczynałem przygodę z Linuksem, to przez pierwszych kilka dni gubiłem się w tej całej hierarchii. Później się do niej przyzwyczaiłem i wydawała mi się bardzo przemyślana i poukładana. Jednak teraz chętnie zobaczyłbym kilka modyfikacji…

    Wiem, że z różnych przyczyn historycznych, ideologicznych etc. binarki są rozdzielone pomiędzy /bin, /sbin, /usr/bin i /usr/sbin (+ lokalne w /opt, /usr/local/{bin,sbin},$HOME/bin). Osobiście wolałbym wszystkie w /Programs (lub coś w tym stylu) – bez lokalnych. Różnice pomiędzy /bin a /usr/bin są dla mnie mało jasne – dawniej w /usr/bin były programy dodatkowe. Co teraz jest programem dodatkowym? Również rozróżnienie /bin a /sbin traci sens, gdy część programów w /sbin może być uruchamiana przez zwykłego użytkownika oraz gdy w systemie jest PolicyKit czy zwykłe su(do).

    Oczywiście powyższe rozważania są tylko i wyłącznie natury estetycznej – nie widzę sensu w komplikacji umiejscowienia programów jeśli dawne różnice się zatarły. Umiejscowienie programów nie ma dla mnie większego znaczenia religijnego ani ideologicznego, więc nie czekam na FHS 3.0, które mogłoby wprowadzić jakąś rewolucję w katalogach.

  • noname

    Ta struktura to przeklenstwo w popularyzacji linuksa.

    Problemem jest to ze ta struktura powinna wygladac nastepujaco:

    – System (i tu dopiero wszystkie pozostale katalogi w stylu /sbin itp )

    – Home

    – Programs

    Katalog programs bardziej widze jako katalog "wirtualny" poprzez ktory latwo daloby sie dostac do wszystkich plikow kazdego zainstalowanego w systemie programu (ten pomysl dlatego ze kiedys zainstalowalem w linuksie opere i potrzebowalem wyedytowac jeden z jej plikow konfiguracyjnych i wtedy zaczal sie horror bo nie wiedzialem gdzie konkretnie szukac tych plikow bo byly porozrzucane pomiedzy te wszystkie magiczne foldery :-) , majac katalog Programs moglbym do niego wejsc potem do katalogu opera i dalej w glab widzac tylko okreslone pliki opery i nic wiecej poza tym :p ). To gdzie fizycznie zainstalowane bylyby te pliki juz nie odgrywaloby dla mnie roli, byle bym mial do nich dostep w calosci poprzez jeden konkretny katalog.

  • Mniej więcej takie coś mają systemy BSD i Gentoo ;-)

  • newbie

    Ale pierdoły opowiadacie panowie… ;]

    Po co komu katalog Programs… nie wyobrażam sobie szukania binarki po dysku, po to, żeby w nią kliknąć… Po co skoro każdy program przy instalacji dodaje piękny skrót w odpowiedniej kategorii menu?

    Daj (l)userowi możliwość mieszania w binariach a na pewno coś popsuje, a każdy kto powinien tam mieszać nie będzie miał z tym żadnego problemu bez względu na to gdzie będą się znajdowały.

    Każda rzecz ulepszana wystarczająco długo w końcu przestaje działać…

  • Zgadzam się z newbie. Wystarczy prosto wytłumaczyć początkującym, że ich katalog to /home/nazwa_użytkownika i tam sobie mogą robić co chcą. A co do reszty to tego nie ruszać, bo za dużo by trzeba tłumaczyć i kiedy im ta wiedza będzie potrzebna to będą bardziej zaawansowani.

    Takie moje przemyślenie :)