Dva dny nato seděl Pooh na své větvi, pohupoval nohama a tam, vedle něj, stály čtyři hrníčky medu. . .
(A. A. Milne)
Kapitola popisuje důležité části standardní struktury adresářů operačního systému Linux, která je založená na systému souborů standardu FSSTND. Načrtneme v ní také běžný způsob rozdělení struktury adresářů do samostatných souborových systémů (svazků) s odlišnými účely a tento způsob rozdělení zdůvodníme. Naznačíme i některé alternativní způsoby rozdělení.
Tato kapitola volně vychází z normy "Standard systému souborů operačního systému Linux FSSTND, verze 1.2ie (viz bibliografie [Qui95]), který je pokusem zavést jisté konvence do organizace adresářového stromu operačního systému Linux. Výhodou přijetí takovéto normy je, že když bude vše na svém obvyklém místě, bude jednodušší psát programy a přenášet na Linux software z jiných platforem. Zároveň to ulehčí správu počítačů, na kterých běží operační systém Linux. I když neexistuje autorita, která by vývojáře, programátory a distributory donutila přizpůsobit se této normě, je její podpora v současnosti součástí většiny (ne-li všech) distribucí Linuxu. Není vhodné se neřídit standardem FSSTND, nejsou-li pro to velmi závažné důvody. Norma FSSTND se snaží sledovat tradice Unixu i současné trendy jeho vývoje.
Motivací je snaha o usnadnění přechodu na Linux pro uživatele, kteří mají zkušenosti s jinými systémy Unix a naopak.
Tato kapitola není tak detailní jako FSSTND. Správce systému - chce-li plně proniknout do problematiky systémů souborů - by si měl přečíst i normu FSSTND.
Kapitola rovněž nepopisuje podrobnosti týkající se všech typů souborových systémů. Nebylo také cílem popsat všechny adresáře a konfigurační soubory, ale nabídnout čtenáři přehled o celém systému z perspektivy systému souborů. Podrobnější informace o popisovaných souborech jsou k dispozici na jiných místech této knihy, případně na manuálových stránkách.
Celou stromovou strukturu adresářů je možné rozdělit na menší části, tzv. svazky. Každá z těchto částí může být umístněna na vlastním disku nebo samostatné diskové oblasti - logické sekci. Tak se lze jednoduše přizpůsobit omezením velikosti disků a zároveň usnadnit zálohování i ostatní úkoly spojené se správou systému. Nejdůležitější z těchto částí jsou souborový systém "root" (kořenový svazek), dále souborové systémy /usr, /var a /home (viz obrázek 3.1). Každý systém souborů má jiné určení. Adresářová stromová struktura byla navržená tak, aby fungovala i v síti počítačů s operačním systémem Linux. Uživatelé a programy tak mohou pomocí sítě sdílet některé části systémů souborů, a to buď prostřednictvím zařízení určených pouze pro čtení (např. CD.ROM), nebo pomocí sítě se systémem NFS.
Určení takto vymezených částí adresářové struktury je popsané v dalším textu. Souborový systém "root! (kořenový svazek) je specifický pro každý počítač. Obecně je uložen na lokálním disku (avšak může to být i virtuální disk v paměti RAM - tzv. "ramdisk", nebo síťová disková jednotka). Kořenový svazek obsahuje soubory nutné pro zavedení systému a jeho uvedení do stavu, ve kterém mohou být připojené ostatní souborové systémy. Obsah kořenového souborového systému postačuje pro práci v jednouživatelském režimu. Na tomto svazku jsou rovněž uloženy nástroje pro opravy poškozeného souborového systému a pro obnovení ztracených souborů ze záloh.
Souborový systém "/" (kořenový svazek) je specifický pro každý počítač. Obecně je uložen na lokálním disku (avšak může to být i virtuální disk v paměti RAM - tzv. "ramdisk", nebo síťová disková jednotka). Kořenový svazek obsahuje soubory nutné pro zavedení systému a jeho uvedení do stavu, ve kterém mohou být připojené ostatní souborové systémy. Obsah kořenového souborového systému postačuje pro práci v jednouživatelském režimu. Na tomto svazku jsou rovněž uloženy nástroje pro opravy poškozeného souborového systému a pro obnovení ztracených souborů ze záloh.
Souborový systém /usr obsahuje všechny příkazy, knihovny, manuálové stránky a jiné soubory, jejichž obsah se nemění a které uživatel potřebuje při běžném provozu. Žádný ze souborů svazku /usr by neměl být specifický pro některý počítač. Rovněž by se neměl při normálním provozu měnit. Tyto podmínky zaručují, že soubory uložené v souborovém systému /usr bude možné efektivně sdílet v síti. Sdílení tohoto svazku je vhodné dohledávat v rámci celého systému soubory určitého typu, například manuálové stránky aplikací uložené na mnoha různých místech. Programátory by jistě strašila noční můra - jak v takovémto případě vytvořit programy, které by byly schopné v případě potřeby manuálové stránky všech aplikací nalézt.
Kořenový svazek "root" by obecně měl být malý, protože obsahuje velmi kritické soubory. U malého souborového systému, který se mění jenom zřídka, je menší pravděpodobnost poškození. Poškození souborového systému "root" většinou znamená, že operační systém na tomto svazku nebude možné zavést. Tento problém lze řešit pouze pomocí speciálních opatření (např. zavedením systému z diskety), a to by chtěl riskovat asi málokterý správce. Obecně by kořenový adresář systémového svazku neměl obsahovat žádné soubory, snad kromě standardního obrazu systému. Ten se obvykle jmenuje /vmlinuz. Všechny ostatní soubory by měly být uloženy v podadresářích kořenového adresáře, obvykle tímto způsobem:
/bin | Příkazy potřebné pro zavedení systému a pro práci běžných uživatelů po jeho zavedení. |
/sbin | Stejné jako u adresáře /bin. Příkazy v tomto podadresáři ale nejsou určeny běžným uživatelům, i když je též mohou použít (je-li to nutné nebo možné). |
/etc | Konfigurační soubory specifické pro daný počítač. |
/root | Domovský adresář superuživatele. |
/lib | Sdílené knihovny pro programy v kořenovém souborovém systému. |
/lib/modules | Zaváděcí moduly jádra systému - zvláště ty, které jsou potřeba pro zavedení systému při zotavení po neočekávaných událostech (např. síťové ovladače a ovladače pro souborový systém). |
/dev | Speciální soubory. |
/tmp | Dočasné soubory. Programy, které se spouští až po zavedení systému, by správně měly používat místo adresáře /tmp adresář /var/tmp, protože je velmi pravděpodobné, že leží na větším disku. |
/boot | Soubory, jež používá zavaděč operačního systému (angl. bootstrap loader), např. LILO. Je dobré mít v tomto podadresáři uložené obrazy jádra (místo toho, aby se ukládaly přímo v kořenovém adresáři). V případě, že jich máte víc, může obsah adresáře /boot značně narůst. V tom případě bude lepší mít jej v samostatném souborovém systému. Tím se také zajistí, že obrazy jádra budou uloženy na prvních 1024 cylindrech disku IDE. |
/mnt | Přípojné místo pro dočasná připojení dalších systémů souborů správcem systému. Nepředpokládá se, že by tento adresář využívaly pro automatická připojení souborových systémů programy. Adresář /mnt může být rozdělen na podadresáře (např. /mnt/dosa pro disketovou mechaniku používanou v souborovém systému MS-DOS, /mnt/exta pro tutéž mechaniku využívanou v souborovém systému ext2 a podobně). |
/proc, /usr, /var, /home | Přípojná místa pro další souborové systémy. |
Adresář /etc obsahuje mnoho souborů. Některé z nich jsou popsány v dalším textu. Pokud jde o ostatní, měli byste nejdřív zjistit, ke kterému programu patří, a pak si přečíst manuálové stránky k tomuto programu. V adresáři /etc je uloženo také hodně síťových konfiguračních souborů, které jsou popsané v "Průvodci správce sítě operačního systému Linux".
/etc/rc, /etc/rc.d a /etc/rc?.d | Skripty a adresáře skriptů, které se spouští při startu, nebo v případě, že se mění úroveň běhu systému. Podrobnější informace najdete v kapitole o procesu init. |
/etc/passwd | Databáze uživatelů systému s položkami, v nichž je uloženo uživatelské jméno i skutečné jméno uživatele, domovský adresář, šifrované heslo a některé další informace. Formát je popsán v manuálové stránce pro program passwd. |
/etc/fdprm | Tabulka parametrů disketové jednotky. Popisuje jak vypadají různé formáty disket. Používá ji program setfdprm. Víc informací uvádí manuálová stránka programu setfdprm. |
/etc/fstab | Seznamy souborových systémů připojovaných automaticky při startu příkazem mount .a (skriptem /etc/rc, nebo odpovídajícím souborem, jenž se spouští při startu systému). V systému Linux obsahuje rovněž informace o odkládacích oblastech "swap", které automaticky používá příkaz swapon .a. Podrobnější informace viz podkapitola 4.8.5 a manuálové stránky k příkazu mount. |
/etc/group | Soubor podobný souboru /etc/passwd, ale místo uživatelů popisuje pracovní skupiny. Podrobnější informace viz manuálová stránka pro soubor group. |
/etc/inittab | Konfigurační soubor procesu init. |
/etc/issue | Soubor obsahuje výstup programu getty, který se zobrazí před výzvou pro přihlášení uživatele. Obvykle obsahuje stručný popis systému nebo uvítací hlášku. Obsah určuje správce systému. |
/etc/magic | Konfigurační soubor programu file. Obsahuje popisy různých formátů souborů, podle kterých pak program file tyto typy rozpoznává. Více informací najdete v manuálových stránkách pro magic a file. |
/etc/motd | Tzv. "zpráva pro tento den" (angl. message of the day) - automatický výstup na terminál uživatele po úspěšném přihlášení do systému. Obsah volí správce systému. Často se využívá pro předávání informací (např. upozornění na plánovaná zastavení systému apod.) všem uživatelům systému. |
/etc/mtab | Seznam aktuálně připojených souborových systémů. Jeho obsah po zavedení systému a připojení určených souborových systémů prvotně nastavují inicializační skripty, v běžném provozu pak automaticky příkaz mount. Používá se v případech, kdy je potřeba zjistit, které souborové systémy jsou připojené, např. při zadání příkazu df. |
/etc/shadow | Soubor tzv. "stínových" přístupových hesel (shadow password) uživatelů v systémech, které mají nainstalovanou podporu systému stínových hesel. Kódovaná stínová hesla jsou z bezpečnostních důvodů přeneseny ze souboru /etc/passwd do souboru /etc/shadow, který může číst pouze superuživatel. Snižuje se tak pravděpodobnost odhalení některého z přístupových hesel při průniku do systému. |
/etc/login.defs | Konfigurační soubor příkazu login. |
/etc/printcap | Podobně jako u souboru /etc/termcap, až na to, že soubor je určený pro tiskárny. Odlišná je i jeho syntaxe. |
/etc/profile, /etc/csh.login, /etc/csh.cshrc | Soubory spouštěné při přihlášení uživatele nebo při startu systému interprety příkazů Bourne shell nebo C shell. Umožňují správci systému stanovit globální nastavení stejné pro všechny uživatele. Viz manuálové stránky k příslušným interpretům příkazů. |
/etc/securetty | Soubor identifikuje zabezpečené terminály, tedy terminály, ze kterých se může přihlašovat superuživatel. Typicky je v seznamu uvedena pouze virtuální konzola, takže je nemožné (nebo přinejmenším těžší) získat oprávnění superuživatele přihlášením se po modemu nebo ze sítě. |
/etc/shells | Soubor, jenž uvádí seznam důvěryhodných interpretů příkazů. Příkaz chsh umožňuje uživatelům změnit shell spustí při přihlášení, a to pouze na některý z interpretů uvedený v tomto souboru. Proces ftpd, jenž běží na hostitelském počítači a poskytuje služby FTP pro klientské počítače, rovněž kontroluje, zda je uživatelův příkazový interpret uveden v tomto souboru a nedovolí připojit se klientům, jejichž shell v tomto seznamu uveden není. |
/etc/termcap | Databáze vlastností terminálu. Popisuje, kterými "escape" sekvencemi se řídí různé typy terminálů. Každý program je napsaný tak, že místo přímého výstupu "escape" sekvence, jež by fungovala pouze s konkrétním typem terminálu, hledá v tabulce /etc/termcap sekvenci, která odpovídá tomu, co chce program na terminálu zobrazit. Pak může většina programů správně obsluhovat většinu typů terminálů. Více informací uvádí manuálové stránky pro termcap, curs-termcap a terminfo. |
Adresář /dev obsahuje speciální soubory pro všechna zařízení. Speciální soubory jsou pojmenované podle určitých konvencí. Ty jsou podrobně popsán v "Seznamu zařízení operačního systému Linux" (viz [Anv]). Speciální soubory se vytváří v průběhu instalace operačního systému, v běžném provozu pak skriptem /dev/MAKEDEV. Podobný je skript /dev/MAKEDEV.local. Ten upravuje a používá správce systému, když vytváří čistě lokální speciální soubory a linky. Lokální speciální soubory jsou ty, které nejsou vytvořené standardním postupem pomocí skriptu MAKEDEV, typicky například speciální soubory pro některé nestandardní ovladače zařízení.
Souborový systém /usr je často dost velký, protože jsou v něm instalované všechny programy. Všechny soubory v systému /usr jsou obvykle instalované přímo z distribuce systému Linux. Všechny další lokálně instalované programy se ukládají do adresáře /usr/local. To umožňuje správci systému instalovat vyšší verze Linuxu z nové verze distribuce nebo i úplně jiné distribuce operačního systému bez toho, že by bylo potřeba současně instalovat všechny programy znovu. Některé z podadresářů adresáře /usr jsou popsané níže, ty méně významné neuvádíme. Více informací přináší popis standardu FSSTND.
/usr/X11R6 | Všechny soubory systému X Window. Soubory pro X nejsou integrální součástí operačního systému z důvodů zjednodušení vývoje a instalace X. Adresářová struktura /usr/X11R6 je podobná stromu, který je vytvořený pod adresářem /usr samotným. |
/usr/X386 | Podobně jako u předchozího adresáře /usr/X11R6, ale pro systém X11 Release 5. |
/usr/bin | Zde se nachází téměř všechny uživatelské příkazy. Některé další příkazy jsou uložené v adresáři /bin nebo /usr/local/bin. |
/usr/sbin | Obsahuje ty příkazy pro správu systému, které nejsou potřeba přímo v souborovém systému "root" (zde je například uložená převážná většina serverových programů). |
/usr/man, /usr/info, /usr/doc | Manuálové stránky, informační dokumenty o projektu GNU, případně různé jiné soubory s dokumentací. |
/usr/include | Hlavičkové soubory pro programovací jazyk C. Z důvodů zachování konzistence by měly být spíš v adresáři /usr/lib, ale z historických důvodů jsou umístěné ve zvláštním adresáři. |
/usr/lib | Datové soubory pro programy a subsystémy, které se nemění. Jsou zde rovněž uloženy některé globální konfigurační soubory. Jméno lib je odvozeno od anglického slova "library" (knihovna). Původně totiž byly v adresáři /usr/lib uloženy knihovny podprogramů. |
/usr/local | Místo pro lokálně instalovaný software a další soubory |
Systém /var obsahuje data, která se při běžném provozu systému mění. Soubory jsou specifické pro každý systém, a proto se data mezi jinými počítači v síti nesdílí.
/var/catman | Vyrovnávací paměť pro manuálové stránky, které jsou formátované na požádání. Zdroje pro tyto manuálové stránky jsou obvykle uložené v adresáři /usr/man/man*. Manuálové stránky v předem formátované verzi jsou uložené v adresáři /usr/man/cat*. Manuálové stránky je běžně třeba při prvním prohlížení formátovat. Formátované verze jsou pak uložené právě v adresáři /var/catman. Další uživatel, který si chce stejné stránky prohlížet, tak nemusí čekat na jejich opakované formátování. (Soubory v uvedeném adresáři /var/catman je obvykle potřeba mazat, stejně jako dočasné soubory v adresářích /tmp a /var/tmp.) /var/lib Soubory, které se při normálním provozu systému mění. /var/local Měnící se data pro programy instalované v adresáři /usr/local (tj. programy instalované správcem systému). Upozorňujeme, že lokálně instalované programy by měly používat i ostatní podadresáře nadřazeného adresáře /var, např. /var/lock. |
/var/lock | Soubory tzv. zámků. Většina programů dodržuje určitou konvenci a vytváří v adresáři /var/lock zámky. Tím dávají ostatním programům najevo, že dočasně využívají některé zařízení nebo soubor. Jiné programy, které by chtěly stejné zařízení či soubor ve stejném okamžiku používat, se o to nebudou pokoušet. |
/var/log | Adresář obsahuje tzv. log-soubory různých programů. Například program login zaznamenává (do souboru /var/log/wtmp) všechna přihlášení a odhlášení uživatelů systému, program syslog ukládá (do souboru /var/log/messages) všechny hlášky jádra systému a systémových programů. Velikost souborů v adresáři /var/log dost často nekontrolovaně roste. Proto se musí v pravidelných intervalech mazat. |
/var/run | Adresář, do něhož se ukládají soubory obsahující informace o systému, jež platí až do jeho dalšího zavedení. Tak například soubor /var/run/utmp obsahuje informace o současně přihlášených uživatelích systému. /var/spool Adresáře pro elektronickou poštu, systém "news", tiskové fronty a další subsystémy, které využívají metodu "spool" a princip řazení úloh do fronty. Každý z těchto subsystémů má v tomto adresáři svůj vlastní podadresář, např. poštovní schránky uživatelů jsou uložené v podadresáři /var/spool/mail. |
/var/tmp | Do adresáře /var/tmp se ukládají velké dočasné soubory a dočasné soubory, které budou existovat déle než ty, které se ukládají do adresáře /tmp. (Avšak správce systému by měl dbát na to, aby stejně jako v adresáři /tmp, ani v adresáři /var/tmp nebyly uloženy velmi staré dočasné soubory.) |
Systém souborů /proc je vlastně imaginárním Souborovým systémem. Ve skutečnosti na disku neexistuje. Místo toho jej v paměti vytváří jádro systému. Ze systému souborů /proc lze získávat různé aktuální informace o systému (původně o procesech - z toho je odvozeno jeho jméno). Některé z významnějších souborů a adresářů popisujeme níže. Samotný souborový systém /proc je podrobněji popsán na manuálové stránce proc.
/proc/1 | Adresář s informací o procesu číslo 1. Každý z procesů má v adresáři /proc vlastní podadresář, kterého jméno je stejné, jako identifikační číslo procesu. |
/proc/cpuinfo | Různé informace o procesoru. Například typ, výrobce model, atd. |
/proc/devices | Seznam ovladačů zařízení konfigurovaných pro aktuálně běžící jádro systému. |
/proc/dma | Informuje o tom, které kanály DMA jsou právě využívány. |
/proc/filesystems | Souborové systémy konfigurované v jádru systému. |
/proc/interrupts | Informuje o tom, která přerušení jsou využívána, i o historii žádostí o využití každého z nich. |
/proc/ioports | Informuje o tom, který z vstupně-výstupních portů se momentálně využívá. |
/proc/kcore | Obraz fyzické paměti systému. Má velikost odpovídající velikosti fyzické paměti systému. Ve skutečnosti ale samozřejmě nezabírá takovéto množství paměti, protože jde o soubor generovaný "na požádání", tedy pokaždé jenom v okamžiku, kdy k němu různé programy přistupují. Uvědomte si, že soubory souborového systému /proc nezabírají ve skutečnosti (než je zkopírujete na nějaké jiné místo na disku) vůbec žádný diskový prostor. |
/proc/kmsg | Výstupní hlášení jádra systému. Zde uložená hlášení využívá i program syslog. |
/proc/ksyms | Tabulka symbolů jádra systému. |
/proc/loadavg | Statistika zatížení systému - tři celkem nic neříkající indikátory toho, kolik práce systém momentálně má. |
/proc/meminfo | Informace o využití paměti, jak fyzické, tak virtuální (swap). |
/proc/modules | Informuje o tom, které moduly jádra jsou právě zavedeny v paměti. |
/proc/net | Informace o stavu síťových protokolů. |
/proc/self | Symbolický link do adresáře procesů toho programu, který zrovna přistupuje k souborovému systému /proc. Když k systému souborů /proc současně přistupují dva různé procesy, budou mít přidělené dva různé linky. Tímto způsobem se mohou programy pohodlně a jednoduše dostat k vlastnímu adresáři. |
/proc/stat | Různé statistiky týkající se systému. Např. počet chyb stránkování během zavádění systému a podobné. |
/proc/uptime | Informuje o tom, jak dlouho systém běží. |
/proc/version | Verze jádra systému. |
Většina výše popsaných souborů má textovou formu. Jsou tedy celkem dobře čitelné pomocí standardních nástrojů. Avšak velmi často jsou formátované takovým způsobem, že informace v nich obsažené jsou pro běžného uživatele na pohled dost těžce "stravitelné". Proto existuje mnoho příkazů, které - kromě toho, že čtou informace obsažené v souborech systému /proc, upravují jejich formát do srozumitelnější podoby. Tak například program free čte data ze souboru /proc/meminfo, převádí velikost v bajtech na kilobajty a přidá něco málo dalších informací o využití paměti.