Obsah
Nepovažuji čtenáře za člověka, kterému dělá potíž kliknout na ikonu či najít určitou funkci v neznámém programu. Nebudu se tu tedy zabývat tím, kam v kterém programu kliknout, ostatně linuxové distribuce jsou, nejenom co se klikátek týče, značně odlišné. Dokumentace by pak nebyla o GNU/Linuxu, ale o některé z distribucí, a navíc by velmi rychle zastarávala. Místo orientace na klikátka se zaměřím na to, jak to funguje a jak věci "správně" dělat.
Samozřejmě na druhou stranu plně chápu, že se uživateli chce pracovat v pohodlí grafického rozhraní, jehož pohodlí je pro začátečníka klíčové. Stejně tak vím velmi dobře, že příkazová řádka je mocným nástrojem, který ocení nejenom nadšenci. Nebudu diskriminovat ani pohodlného uživatele, ani zkoumavého počítačového nadšence. Ukážu, jak věci realizovat v příkazové řádce, ale také představím adekvátní grafické programy sloužící k tomutéž.
Jak už jsem naznačil, distribuce zaměřené na běžné uživatele obsahují grafické nástroje pro správu systému. Pomocí těchto nástrojů je možné realizovat většinu nastavení systému v pohodlí grafického rozhraní. První věc, kterou byste měli učinit, je tyto nástroje alespoň trochu prozkoumat, podívat se, co všechno nabízí. Měli byste také najít správce balíčků, pomocí kterého můžete snadno a rychle nainstalovat další software.
Každá linuxová distribuce se dá spravovat i z příkazové řádky. Konfiguraci tvoří obyčejné textové soubory, které se dají otevřít jakýmkoliv editorem. S pomocí nástrojů příkazové řádky je možné realizovat mnohé. Ovšem, je potřeba do toho investovat více času. Je na vás, který způsob si vyberete. Tento "ruční" způsob správy systému většinou umožňuje více, ale je složitější. Grafické nástroje umožňují méně, ale jsou snadní k použití.
Bez dokumentace to opravdu nejde, a to zejména, pokud přecházíte z jiného operačního systému, a jste navyklí na jiný styl správy systému. Primárním zdrojem informací by pro vás měla být příručka k distribuci, kterou používáte. Tu nemůže dokumentace na těchto stránkách v žádném případě nahradit. Každá distribuce má totiž svoje charakteristiky a specifika, které vám žádná obecná dokumentace nesdělí. Není ani na škodu projít další dokumentaci, a to zejména, pokud něčemu nerozumíte nebo se chcete něco dozvědět. Práce s dokumentací je podstatným prvkem správy systému.
Dokumentaci GNU/Linuxu můžeme rozdělit do následujících kategorií:
manuálové stránky a programová dokumentace
systémová dokumentace
distribuční dokumentace
on-line dokumentace
zdrojové kódy (ideální pro programátory)
Manuálové stránky a programovou dokumentaci byste měli najít minimálně v částečně počeštěné verzi ve většině přívětivých distribucí. Přeložené bývají dokumenty k nejčastěji používanému softwaru, zbytek dokumentace je v angličtině. K manuálovým stránkám se dostanete různými způsoby. Nejpohodlnější cestou v menu KDE je Centrum nápovědy spustitelné ručně příkazem khelpcenter, které shromažďuje jak část programové dokumentace, tak unixové manuálové stránky. Prostředí Gnome má k dispozici program gnome-help, který však integruje méně dokumentace. Z příkazové řádky je možné dostat se k dokumentaci pomocí příkazu man, který má syntax man program. Dokonce i tento příkaz sám o sobě má manuálovou stránku - man man.
Klasické manuálové stránky se dělí podle sekcí:
Uživatelské příkazy
Systémová volání
Knihovní funkce
Speciální soubory
Datové formáty
Hry
Různé
Správa systému
Jádro
Sekci je možné specifikovat man číslo_sekce program, takže v situaci, kdy má program více manuálových stránek, můžete tu, kterou chcete, specifikovat. Například man 7 ip. Ne vždy ale víme, který příkaz (resp. program) se na co hodí, a k tomu existuje jakýsi index popisků jednotlivých programů, ve kterém je možné vyhledávat buď pomocí man -k hledaný_výraz nebo pomocí ekvivalentního příkazu apropos hledaný_výraz. Je možné specifikovat i číslo sekce, kterou chcete prohledat (a odfiltrovat tak popisy knihovních funkcí) pomocí přepínače -s, takže například apropos -s 1 mp3.
Pokud známe příkaz, ale nevíme, co přesně dělá, můžeme vyvolat onen krátký popisek příkazem whatis, například whatis ip. Pokud má stejný program či výraz více manuálových stránek v různých sekcích (například zrovna zmíněný příklad), vypíše nám příkaz whatis popisky ze všech sekcí.
Vyhledávat lze však i fulltextově, tedy v obsahu manuálových stránek, příkazem man -K hledaný_výraz (unixové systémy rozlišují velká a malá písmena, proto se argument -k liší od argumentu -K). Pozor, takové vyhledávání může trvat velmi dlouho a je určitě vhodné specifikovat hledané sekce parametrem -S (lze jich specifkovat více, oddělovač je čárka). Například man -S 8,9 -K memory.
Kromě manuálových stránek existují ještě stránky programu info, které některé projekty upřednostňují. Ty podporují hypertextové odkazy.
Manuálové stránky mají svou předepsanou strukturu, která vám pomůže se v nich velmi rychle orientovat:
jméno a krátký popisek
stručný přehled
popis
příklady
autor
copyright
související odkazy
Ne každá manuálová stránka musí být takto vybavena a dlužno dodat, že ani tento seznam není zcela kompletní. Podstatnými částmi je stručný přehled, který vás rychle obeznámí se syntaxí daného příkazu, popis, který tuto část rozvede do patřičné hloubky, někde nechybí ani příklady použití (velmi užitečná věc, mimochodem), samozřejmě nelze zapomenout na autora a copyright, ale bývá vhodné si všímat i souvisejících odkazů, které vám řeknou, kam ještě nahlédnout (příbuzná či přímo související témata).
Ne všechna dokumentace je ve formě manuálových stránek, část této dokumentace (někdy podstatná část) se nachází v adresáři /usr/share/doc. Mohou tam být distribučně specifické záležitosti (třeba jak nastavit postgresql server v Debianu) nebo zbytky dokumentace z původního zdrojového balíčku (README, INSTALL, přehled změn, ap.).
Systémová dokumentace je veškerá dokumentace vztahující se ke GNU/Linuxu obecně. Nebývá součástí linuxových distribucí, nachází se v knihovnách, knihkupectvích, na webu, popřípadě v podobě audiovizuálních dat. Tato dokumentace vám pomůže ozřejmit řadu záležitostí, zejména funkčních principů, popřípadě praktických rad a postupů, které si jen těžko osvojíte studiem programové dokumentace.
Kromě zmíněných zdrojů existuje The Linux Documentation Project[14], který si klade za cíl sumarizovat širokou škálu poznatků o GNU/Linuxu. Hodit se mohou i odkazy v závěru této dokumentace.
Každá linuxová distribuce má svá specifika. Informace o nich naleznete v dokumentaci vydávané přímo k vaší distribuci, ať už v podobě tištěné či elektronické. Jejich znalost je klíčová pro každého uživatele (resp. správce) dané distribuce a může vám nejen objasnit celou řadu záležitostí, ale především vám poskytne návody, jak si práci s distribucí usnadnit a jak předejít eventuelním problémům, popřípadě jak je řešit.
Dokumentace GNU/Linuxu má i svá úskalí. Tím nejzřejmějším je její ohromující množství. To je důvodem, proč je třeba naučit se v dokumentaci vyhledávat (resp. filtrovat přebytečná data). Dalším problémem může být charakter dokumentace. Na tomto faktu se podepisuje skutečnost, že programovou dokumentaci píší programátoři, kteří mají tendenci být buď příliš odborní, nebo málo podrobní (tvorba dokumentace je zpravidla nejméně příjemnou činností při vývoji programu). Nedostatek dokumentace existuje spíše u okrajového softwaru, rozhodně ne u klíčového, ale přílišná odbornost nebo komplexnost dokumentace může působit problémy. Na druhou stranu, i špatná dokumentace je lepší než žádná.
Dokumentace má také tendenci zastarávat a pokud si uvědomíme rychlost, s jakou GNU/Linux roste, dostane tato záležitost zcela nový rozměr. Pokud si budete listovat nějakou knihou o GNU/Linuxu nebo budete-li číst nějaký starší článek či dokument na webu, mějte na paměti, že čas mohl od doby napsání dokumentu postoupit natolik, že se okolnosti změnily. Ne všechno se ale mění, jsou záležitosti, které platily před deseti lety a budou platit i za dalších deset.
K instalaci, odinstalaci a aktualizaci softwarového vybavení slouží v GNU/Linuxu primárně správce balíčků (package manager). K pochopení jeho funkce si nejprve vysvětleme základní pojmy. Balíček může být knihovna, datové soubory k programu, program samotný, dokumentace k programu nebo jiná komponenta. Jeden celý program tedy může být rozdělen na více balíčků. Smyslem takového členění je umožnit velmi precizně kontrolovat, co se do systému dostane a co ne, a značně usnadnit aktualizaci.
Balíčky najdeme v repositářích, což jsou v podstatě skladiště balíčků. Mohou to být adresáře, internetové zdroje či instalační média. Balíčky mají mezi sebou závislostní vazby, které určují, co vše je potřeba mít nainstalované, aby fungoval náš program.
Ukažme si to na příkladu. Řekněme, že chci nainstalovat program "míchačka". Tento program ale pro svou funkci vyžaduje komponentu "beton" a další program s názvem "dělník". Dělník zase vyžaduje komponentu "helma". Abych tedy mohl používat program míchačka, potřebuji beton, dělníka i helmu.
Repositáře si může uživatel sám volit a měnit, přidávat nové a ubírat stávající. Informace o nainstalovaných balíčcích, balíčcích v repositářích a jejich závislostních vazbách si ukládá správce balíčků ve své databázi. Pro práci s balíčky (a jejich stažení, instalaci, odinstalaci, aktualizaci, ap.) má správce balíčků nástroje. Tyto nástroje lze používat ručně.
Chce-li uživatel nainstalovat, odstranit či aktualizovat balíčky, použije za tímto účelem správce balíčků. Správce balíčků se podívá do databáze, vyřeší závislostní vazby a vyžádá si potvrzení od uživatele, je-li s vyřešením závislostí spokojen. Následně stáhne pomocí svých nástrojů sám všechny potřebné balíčky a ty nainstaluje, balíčky označené pro odinstalaci ze systému odstraní. Aktualizace databáze správce balíčků se děje buď automaticky před provedením jakékoliv operace (tak činí např. Yum), nebo ručně, kdy si o to uživatel požádá (tak činí např Apt).
Virtuální balíček je speciální typ balíčku, který neobsahuje žádnou komponenetu, pouze závislostní informace. Možností jeho využití je celá řada, přičemž nejběžnější je seskupování balíčků, které na sobě přímo nezávisí, ale tvoří určitý celek (například distribuci grafického prostředí se základní sadou softwaru pro desktop). Instalací takového balíčku pak díky závislostem nainstaluji snadno daný celek, aniž bych musel vybírat desítky programů zvlášť, neboť ty na sobě přímo nezávisí. Z uživatelského hlediska je nejpodstatnější, že nevadí, když jej odinstalujete.
Ukažme si to celé na příkladu. V distribuci Ubuntu je virtuální balíček ubuntu-desktop, který sám neobsahuje žádnou funkcionalitu, ale závisí na všech komponenetách, které tvoří základ distribuce Ubuntu (systémové komponenety, prostředí Gnome a řada uživatelských aplikací). Pokud se rozhodnu, kupříkladu, odstranit program Evolution, na kterém mj. onen virtuální balíček závisí, zahlásí mi správce balíčků, že hodlá odstranit i onen virtuální balíček, ubuntu-desktop. Jelikož tento balíček neposkytuje žádnou funkcionalitu, nemusím se obávat a nechám jej odstranit.
Jiným příkladem jsou běžnější virtuální balíčky, třeba balíček kde. Ten závisí na všech oficiálních součástech prostředí KDE, i takových, které nejsou k jeho běhu nutné. Pokud chci tedy nainstalovat standardní distribuci prostředí KDE, stačí mi nainstalovat tento virtuální balíček (správce balíčků mi pak nabídne všechny jeho závislosti, které právě tvoří standardní distribuci prostředí KDE). A opět, pokud některou komponenetu nezávislou pro běh samotného KDE budu chtít odinstalovat, nabídne mi správce balíčků jeho odstranění. Tady to na první pohled vypadá hrozně (chce odinstalovat kde), ale vzhledem k tomu, že je to pouze virtuální balíček, nehrozí žádné riziko, takže to mohu bez obav povolit. Naopak, pokud by mi nabídl odstranění mnoha balíčků začínající na "kde" včetně "kdebase-bin", pak je mi jasné, že se jedná o klíčovou komponenetu KDE a nic odinstalovávat nebudu.
Jediné, co zbývá na uživateli, je vybírat, které programy chce mít nainstalované a které ne, popřípadě, ze kterých repositářů se má tahat software. Vše ostatní zařídí správce balíčků sám, včetně vyřešení závislostí a stažení ze sítě.
Správce balíčků lze ovládat pomocí příkazové řádky nebo přes adekvátní grafické nástavby. My si ukážeme na příkladu práci s obojím. Pozor, distribuce využívají různé správce balíčků, a proto nelze zaručit, že bude vše úplně stejné ve vámi zvolené distribuci. Tyto rozdíly by však mělo odstranit prostudování distribuční dokumentace.
Ukažme si na příkladech, jak vypadá práce se správcem balíčků, třeba na správci Apt, který je typický pro distribuce založené na Debianu (Ubuntu, Linspire, Xandros,apod.). Práce s ním je poměrně jednoduchá. Zkusíme pomocí něj nainstalovat program Filelight. Nejprve aktualizujeme databázi:
apt-get update
Nyní nainstalujeme program Filelight:
apt-get install filelight
A nyní ho zkusíme odinstalovat:
apt-get remove filelight
Aktualizace veškerého softwaru se provede příkazem:
apt-get upgrade
Někdy se člověku může hodit mít možnost požadovaný balíček vyhledat. Zkusíme si vyhledat nějaký program na ripování DVD:
apt-cache search dvd rip
Řekněme, že jedna z možností, balíček dvdrip, se nám zamlouvá. Mohli bychom si vyžádat popisek balíčku:
apt-cache show dvdrip
Více informací ke správci balíčků Apt naleznete v příslušné dokumentaci.
Grafické nástavby správců balíčků v distribucích se chovají velmi podobně. Někde bývají rozděleny do více modulů (jeden pro instalaci, druhý pro odinstalaci, třetí pro aktualizaci), jinde je všechno pohromadě. V našem příkladu, programu Synaptic, je všechno pohromadě. Je možné současně označit balíčky pro instalaci, aktualizaci i odinstalaci, a nechat správce balíčků, ať všechno udělá najednou. K dispozici jsou i některé pokročilé funkce jako upřednostnění specifické verze balíčku (pomocí této funkce je možný downgrade balíčku). Samozřejmostí jsou integrované vyhledávací funkce a filtry.
Po označení všech požadovaných balíčků stačí použít tlačítko "realizovat", a veškeré změny se začnou provádět. Aktualizovat databázi repositářů je možné pomocí tlačítka "aktualizovat". Tlačítko "aktualizovat vše" automaticky vybírá všechny kandidáty pro aktualizaci, aby se s tím člověk nemusel namáhat ručně (ekvivalent příkazu apt-get upgrade).
Tento postup důrazně nedoporučuji, pokud máte možnost použít správce balíčků a příslušné repositáře. V případě, že nutně potřebujete nějaký software, který v repositářích není, máte dvě možnosti, jak jej do systému přesto nainstalovat, i když tak přijdete o možnost balíček automaticky aktualizovat.
Jak už jsme si řekli, správce balíčků používá řadu nástrojů, z nichž jeden je určen na instalaci, odstranění a aktualizaci balíčku. Jeho nevýhodou je skutečnost, že neumí vyřešit závislosti, i když je kontroluje a zpravidla nedovolí nainstalovat balíček s nesplněnými závislostmi.
Nejprve je třeba nalézt balíček určený pro vaši distribuci. Měl by být opravdu pro vaši distribuci, a ne pro jinou, byť používá stejný formát balíčku (např. rpm). Stejně tak by měl být daný balíček určen přímo pro danou verzi vaší distribuce. Pokud nebude k dispozici balíček pro vaši distribuci, stáhněte si zdrojový kód a pokuste se o kompilaci (postup viz níže), instalaci balíčku sestaveného pro jinou distribuci či jinou verzi distribuce důrazně nedoporučuji.
Jakmile máte patřičný balíček, zjistěte si, jaké má závislosti a ty vyřešte pomocí správce balíčků (nainstalujte je). Nepokoušejte se je stahovat ručně, je to zbytečné. Snažte se počet instalovaných balíčků mimo repositáře minimalizovat. Až budete mít závislosti vyřešené, nainstalujte balíček pomocí nízkoúrovňového nástroje (dpkg v distribucích založených na Debianu, rpm v distribucích vycházejících z Red Hatu/Fedory), ale v žádném případě nevypínejte kontrolu závislostí. Nebudou-li závislosti splněné, nainstalujte raději program ze zdrojového balíčku (postup následuje).
Pro kompilaci potřebujete adekvátní vývojové nástroje, které nainstalujte pomocí správce balíčků. Patří mezi ně kompilátor gcc a g++, včetně jejich závislostí. Na stránkách projektu, který hodláte kompilovat, si najděte informace o jeho závislostech. Ty pak nainstalujte opět pomocí správce balíčků. Pro kompilaci je potřeba mít vývojové balíčky jednotlivých závislostí. Ty poznáte tak, že mají přídomek -dev nebo -devel, kupříkladu webový server apache má v mé distribuci (Ubuntu) vývojový balíček s názvem apache-dev.
Po stažení zdrojáků je rozbalte. Můžete použít mocné menu pravého tlačítka, souborový manažer či příkazovou řádku. V příkazové řádce doporučuji souborový manažer mc, který umí s archívy zacházet jako s adresáři. Můžete samozřejmě použít klasický způsob rozbalení tar.gz či tar.bz2 balíčků, který si tu teď ukážeme na příkladu balíčku hry Rocks'n'diamonds. Balíčky tar.gz nebo tgz lze rozbalit takto:
tar xzvf rocksndiamonds-3.1.2.tar.gz
Připomeňme, že v příkazové řádce lze použít klávesu tabulátor k doplnění zbytku názvu souboru, takže v tomto případě nemusím vypisovat celý název, ale postačí jen napsat ``rock`` a zbytek nechat doplnit tabulátorem. Balíček tar.bz2 by se rozbalil takto:
tar xjvf rocksndiamonds-3.1.2.tar.bz2
Balíček ve formátu zip by šel rozbalit takto:
unzip rocksndiamonds-3.1.2.zip
Jakmile je zdroj rozbalen, budete už nutně potřebovat příkazovou řádku. Dostaňte se do hlavního adresáře zdrojových souborů, pomocí příkazu cd, v mém případě třeba takto:
cd rocksndiamonds-3.1.2
Opět připomínám, že lze použít tabulátor k doplnění jména souboru nebo adresáře. Jakmile jsme v hlavním adresáři, zapíšeme:
./configure
Případné chybové hlášky se mohou týkat potřebných závislostí, které najdeme a doinstalujeme pomocí správce balíčků. Postup opakujeme, dokud nedostaneme žádnou chybovou hlášku. Pak provedeme příkaz:
make
Tento příkaz program zkompiluje. K instalaci můžeme použít příkaz make install, samozřejmě jako uživatel root, jehož oprávnění můžeme v příkazové řádce získat pomocí příkazu su nebo sudo. Já vám však ukážu jiný postup, kterým usnadníte možnost balíček zase odinstalovat, a tím je program checkinstall. Ten si nainstalujte pomocí správce balíčků (měl by být snad v každé slušné distribuci) a použijte jej místo make install následujícím způsobem. Získejte oprávnění uživatele root a spusťte checkinstall:
su -c checkinstall
Například v distribuci Ubuntu, kde heslo uživatele root není zadáno, můžete použít mechanismus sudo, takto:
sudo checkinstall
Checkinstall vám vytvoří balíček, který pak nainstalujete nízkoúrovňovým nástrojem, v distribucích založených na balíčcích rpm třeba takto (stále s oprávněními uživatele root):
rpm -ivh rocksndiamonds-3.1.2-i386.rpm
V distribucích založených na balíčcích deb to bude následovně:
dpkg -i rocksndiamonds-3.1.2-i386.deb
Nebo, v případě distribuce Ubuntu, pomocí mechanismu sudo:
sudo dpkg -i rocksndiamonds-3.1.2-i386.deb
Následně se zbavte oprávnění uživatele root (příkaz ``logout`` nebo klávesová zkratka CTRL+D, v distribuci Ubuntu netřeba, mechanismus sudo propůjčí oprávnění uživatele root pouze přes sudo prováděným příkazům, takže máte stále uživatelská oprávnění).
Jak jste si všimli, správa softwaru s použitím správce balíčků je velmi jednoduchá. Navíc, oficiální repositáře obsahují balíčky prověřené, otestované a digitálně podepsané. Jejich funkčnost a bezpečnost by tedy měla být zaručena. Občas se sice stane, že některý málo použivaný balíček nefunguje (nebyl dostatečně otestován), ale tyto případy jsou výjimečné. Naopak správa softwaru bez použití správce balíčků je poměrně složitá, a funkčnost či bezpečnost daných balíčků vám nikdo nezaručí. Výjimku tvoří komerční software, který v repozitářích není (přirozeně), ale lze po zaplacení stáhnout příslušný balíček a nainstalovat jej (příkladem může být Cedega).
Mým doporučením je, abyste v každém případě preferovali správce balíčků. Je to snadné a v rámci každé slušné distribuce byste měli mít softwaru v repozitářích více než dost, abyste nemuseli balíčky instalovat ručně kdo ví odkud. Řada distribucí mívá neoficiální repositáře, kde naleznete hromadu dalšího softwaru, včetně toho, který z nějakých důvodů (např. licenčních) nemohl být umístěn do oficiálních repositářů (multimediální kodeky s patentově chráněnými technologiemi, apod.). Tyto neoficiální repositáře bývá vhodné lokalizovat a přidat do správce balíčků (informace o nich bývají v distribuční dokumentaci, FAQ, wiki, eventuelně na fanouškovských stránkách či v příslušných diskusních fórech).
Pokud vám nějaký program citelně chybí, a není ani v oficiálních a ani v neoficiálních repositářích, ještě je možné jej najít ve specializovaných repositářích. Ty bývají velmi malé, třeba pouze pro daný program, ale v našem případě postačí. Samozřejmě doporučuji obezřetnost a nedoporučuji takový repositář přidávat, pokud na vás působí nevěrohodně.
Budete-li chtít instalovat stažený balíček pomocí nízkoúrovňového nástroje, který neřeší závislosti (jenom na ně upozorňuje), ujistěte se, že je z důvěryhodného zdroje, a hlavně nevypínejte kontrolu závislostí. A pokud budete instalovat program ze zdrojových kódů, používejte checkinstall.
O hardware se stará samotné linuxové jádro, spolu s démonem hotplug nebo udevem, podle toho, který máte nainstalovaný. Obojí se stará o načtení příslušného modulu do jádra, když zjistí, že se dané zařízení připojilo.
V současné době bere velká část výrobců HW v úvahu GNU/Linux. Část těch, kteří tyto ohledy neberou, je naštěstí schopna sestavovat takový HW, pro který je možné linuxové ovladače vytvořit. Problémovou skupinou jsou ti, kteří šijí horkou jehlou, popřípadě se příliš drží proprietárního modelu vývoje a tají specifikace svého HW, čímž znemožňují vytvoření ovladačů linuxovými vývojáři a pokud sami takové ovladače nevytvoří, HW nebude pod GNU/Linuxem funkční.
Z hlediska uživatele můžeme vyčlenit tři kategorie HW, dle kompatibility s GNU/Linuxem:
HW s ovladačem v jádře
HW s ovladačem mimo jádro, ale dostupným
HW bez ovladače
Ideálním stavem je první bod. Je-li k dispozici svobodný ovladač přímo v jádře, nemáme sebemenší problém, HW je nalezen a zprovozněn okamžitě bez nutnosti zásahu. Tento stav bychom měli preferovat, vybíráme-li hardware pro GNU/Linux. Bod číslo dvě znamená problém, ovladač sice existuje, ale postup zprovoznění může být značně složitý a za určitých okolností nemusí fungovat s novějšími jádry. Některé distribuce mohou rozšiřovat podporu pro tato zařízení, ale vzhledem ke konceptu svobodného softwaru to není zvykem, je-li ovladač nesvobodný.
U třetí kategorie není o čem mluvit, to je prostě smůla, pokud se k nějakému takovému kusu HW dostaneme. Možnosti řešení jsou mizivé. Je možné si počkat, doufaje v pozdější nápravu, je možné napsat rozhořčený e-mail výrobci či si napsat vlastní ovladač, ovšem ne každý je zrovna programátor. Nebývá od věci poslat výrobci e-mail s tím, že vzhledem k jeho politice podpory jednoho operačního systému s jeho produkty nadobro končíme.
Není-li hardware zprovozněn, nezbývá než se podívat, jak to vlastně s podporou daného hardwaru je. Za tímto účelem pomůže pět zdrojů informací:
Zprovoznění nejběžnějšího hardwaru bude nepochybně již obsaženo v distribuční příručce nebo adekvátních on-line zdrojích. Typicky je to zprovoznění 3D akcelerace. Pokud máte exotičtější zařízení, nezbývá než hledat v jiných zdrojích.
Vyhledávače představují způsob, jak velmi rychle najít požadovanou informaci. Prostě jako vyhledávací výraz napíšete název hardwaru a přidáte klíčové slovo "linux" nebo název distribuce, kterou používáte. S trochou štěstí hned natrefíte na návod, jak zařízení zprovoznit.
Stránky s informacemi o podpoře hardwaru v GNU/Linuxu umí být také cenným zdrojem informací, protože leckdy obsahují i příslušné návody, nebo alespoň nějaké tipy. Odkazy na některé z těchto webů naleznete níže.
Diskusní fóra a e-mailové konference bývá také dobré prohledat, zejména ty, které jsou určeny pro vaši distribuci. Je velmi pravděpodobné, že s daným kouskem hardwaru měl už někdo jiný problém, a vy se tak můžete rychle dostat k návodu nebo příslušným dokazům.
Pokud má vaše distribuce rozsáhlejší portál, je dobré se na něj podívat a zjistit, neobsahuje-li informace vztažené k hardwaru, nebo alespoň diskusní fóra či e-mailové konference věnované dané distribuci.
Pak už zbývá jenom prokousat se nalezenými informacemi a zkusit patřičné postupy aplikovat. Většinou se jedná o kompilaci modulu pro jádro, který si stáhnete od někud z Internetu. Kompilace modulu už v dešní době není takový problém, stačí patřičné vývojové nástroje, vývojové balíčky pro jádro (kernel-headers, kernel-source, apod.), a pak postupovat podle přiloženého návodu.
V případě, že byste si rádi pořídili hardware tak, abyste měli jistotu, že bude v GNU/Linuxu podporován, máte několik možností. Můžete si najít prodejce, který vám s výběrem hardwaru pro GNU/Linux pomůže. Ne každý má ale takové štěstí, a proto nám nakonec nezbyde než si informace vyhledat sami. Google a další vyhledávače jsou opět nedocenitelným pomocníkem. Existují ale také weby zabývající se mapováním podpory hardwaru v GNU/Linuxu. A tam bývá dobré nakouknout nejdříve.
Českým uživatelům se bude určitě hodit odkaz na web ABC Linuxu[15], kde naleznete uživatelskou databázi kompatibility hardwaru. Důležité je, že často obsahuje i návody ke zprovoznění daného kousku. A pokud vaše hledání neuspěje, hned po ruce máte diskusní fórum, kde můžete hledat dále.
Tiskárny
Scannery
Zvukové karty
Základní desky
Digitální fotoaparáty
Wifi karty
Hardware obecně
GNU/Linux nabízí mnoho možností, jak se dostat k přesným informacím o tom, co se stalo nebo co se momentálně děje.
Logy jsou záznamy o proběhlých událostech. Jsou uložené v adresáři /var/log. Složení tohoto adresáře bývá distribučně specifické, nicméně při pohledu na názvy souborů vám rychle dojde, k čemu každý slouží. Hlavní log je zpravidla uložen v souboru messages, doplňující, detailnější log pak v souboru syslog (v některých distribucích není). To je také první místo, kam byste se měli podívat.
Jednotlivé služby mají svoje vlastní logy, takže třeba X-server má svůj vlastní log Xorg. Pokud nefunguje grafické prostředí, je tohle místo, kam byste se měli podívat.
Jelikož probíhající události logy zaplňují, provádí se jejich rotace (aby se časem nezaplnil disk). Po určité době (nebo při překročení určité velikosti) se log zpravidla zkomprimuje a uloží do stejného adresáře do souboru se stejným názvem zakončeným číslem (tj. třeba messages.1). Takhle se postupuje dále do určitého čísla, a pak následuje výmaz.
Jak číst logy? Logy jsou obyčejné textové soubory (lze je tedy otevřít jakýmkoliv textovým prohlížečem nebo editorem), ve kterých je na každé řádce zaznamenána jedna událost. Na začátku řádku je časový údaj značící, kdy událost proběhla. V příkazové řádce můžete snadno použít filtrační systémy, které vám umožní zobrazit přesně ty informace, které potřebujete (grep, sort, head, tail, apod.). Existují ale i prohlížeče logů v grafickém prostředí, v rámci prostředí KDE je to ksystemlog, pro Gnome existuje gnome-system-log.
Z logů tedy vyčtete, co se stalo a kdy se to stalo. Tyto informace můžete poměrně snadno využít k lokalizaci a průzkumu eventuálního problému. Kupříkladu, díky logům jsem mohl snadno odhalit, že za přerušením spojení nestojí vada mého modemu, ale poskytovatel připojení, který mne po 24 hodinách prostě odstřihnul.
Snadný přístup k nedávným událostem zaznamenaným linuxovým jádrem umožňuje program dmesg, po jehož zadání se jednotlivé události vypíší.
Tvorbu logů zajišťuje zpravidla démon syslog, který má konfigurační soubor v /etc/syslog.conf. Jeho úpravou lze velmi precizně řídit, které informace se budou zapisovat do kterého logu. Výchozí nastavení ale většinou bývá zcela postačující.
Grafické prostředí nabízí mj. program hardinfo, který vám přehledně zpracuje informace o zjištěném hardwaru. To ovšem umí i ovládací centra distribucí Mandrake či SUSE. Je dobré vědět, že existuje program lspci (existují i další, třeba lsusb) z balíku pciutils, který sice pracuje v příkazové řádce, ale který vám vytáhne informace o zjištěném hardwaru v podobě, která je ideální k operaci kopíruj a vlož. Můžete samozřejmě také přímo použít rozhraní jádra v /proc, konkrétně v následujících souborech:
/proc/cpuinfo - informace o procesoru
/proc/meminfo - zaplnění paměti
/proc/mounts - připojené souborové systémy
/proc/partitions - zjištěné oddíly pevných disků
/proc/pci - PCI zařízení
/proc/swaps - odkládací oddíl(y)
/proc/version - verze jádra (dostupné také příkazem uname -a)
Expertům přijdou vhod ještě následující soubory:
/proc/cmdline - parametry předané jádru
/proc/devices - bloková a znaková zařízení
/proc/interrupts -
- HW přerušení
/proc/iomem - rozdělení paměti
/proc/ioports - I/O porty
Tyto nástroje slouží ke sledování určitých hodnot, událostí a procesů při běhu systému. V grafickém prostředí oceníte zejména následující nástroje:
gkrellm - komplexní monitorovací software
gnome-system-monitor - systémový monitor pro GNOME
ksysguard - systémový monitor pro KDE
qps - sofistikovaná aplikace pro monitorování a správu procesů
Pro příkazovou řádku existuje celá řada nejrůznějších utilit sloužících ke sledování stavu systému:
top - monitoruje procesy, jejich využití procesoru a paměti
free - zobrazí stav obsazení paměti
ps - slouží k vypsání spuštěných procesů a informací o nich, kompletní výpis: ps aux
uptime - zobrazí dobu běhu systému a zatížení měřené v uplynulé minutě, 5 a 15 minutách
lsof - umožňuje zjistit, které soubory jsou obsazeny kterými procesy (hodí se třeba v případě, že chcete odpojit nějaké zařízení a jste častování hláškou, že zařízení je využíváno)
du -h - vypíše, kolik místa zabírají jednotlivé adresáře
df -h - vypíše, kolik místa je obsazeno a volno na jednotlivých zařízeních
Informace vstažené k síťování:
ping - ping na nějaký známý server pomůže zjistit, je-li připojení k Internetu funkční
ifconfig - vypíše informace o nastavení síťových rozhraní
iwconfig - vypíše informace o nastavení wifi rozhraní
route - vypíše routovací tabulku
traceroute - zjistí, jakou trasou prochází pakety k zadanému cíli
netstat - vypíše aktivní síťová spojení, oblíbené použití:
netstat -tupan
lsof -i - vypíše aktivní síťová spojení
Může se stát, že vám nefunguje nějaký program. Pak se hodí několik šikovných nástrojů. Podotýkám, že tohle je už záležitost pro minimálně začínající programátory a velmi pokročilé uživatele.
Základním nástrojem pro analýzu běhu programu je řádkový strace, který spustíte s parametrem v podobě programu, který chcete analyzovat. Strace vám pak začne poskytovat informace o systémových voláních a signálech analyzovaného programu. Analýzou průběhu operací můžete zjistit, na čem přesně program krachne.
Pokud máte problém s během programu, může tak být v extrémních případech (nepoužívali jste správce balíčků k instalaci softwaru) kvůli chybějící závislosti. Závislosti programů (alespoň na knihovnách) získáme pomocí příkazu ldd, jehož parametrem je spouštěcí soubor daného programu. Ten můžete najít třeba pomocí programu locate nebo find.
Zabezpečení integrity dat je mj. důvodem zamykání mechanik. Pokud však si však nějaké zařízení zarezervuje nějaký neposlušný program a vy netušíte, který by to mohl být, použijte příkaz lsof na daném zařízení, třeba takto:
lsof /dev/hda
Můžete k tomu potřebovat práva uživatele root. Příkaz vypíše název a PID programů, které dané zařízení používají. Ty pak můžete využít jako parametry programu kill (viz Správa procesů níže).
Proces je, jak víme, běžící program. S programy většinou komunikujeme přímo, interaktivně. Výjimku tvoří démoni, programy pracující neinteraktivně, na pozadí. Některé z nich jsou systémové služby, některé z nich jsou síťové servery. Každý proces zabírá určité systémové zdroje (paměť, přístup k zařízení). Proces je v systému identifikován číslem procesu (PID) a běží s právy uživatele, který jej spustil.
Tyto programy již známe ze sekce Info o systému. V grafickém prostředí jsou to ksysguard, gnome-system-monitor či qps. Pro příkazovou řádku to jsou programy top či htop, ps a kill.
Pokud proces běží správně, nemá uživatel většinou důvod do jeho běhu nějak zasahovat. Ale někdy se proces zblázní a začne působit problémy, ať už vytížením procesoru, zabráním velkého množství paměti či pouhým zamrznutím. V takovém případě se hodí vědět, jak ho zabít, tedy násilně ukončit. V grafickém prostředí k tomu slouží program xkill, který je v prostředí KDE implicitně namapován na klávesovou zkratku Ctrl+Alt+Esc. Lze k tomu samozřejmě použít i výše zmíněné programy. V příkazové řádce lze použít program kill, který de facto slouží k zasílání signálů procesům.
Signál program zachytí a zachová se podle něj. Nejdůležitější jsou signály SIGTERM a SIGKILL. První požadá program o ukončení, druhý ho bez milosti sestřelí. To je důvod, proč doporučuji programu nejprve zaslat signál SIGTERM, a teprve pak SIGKILL. V případě, že program zareaguje na SIGTERM, může se pokusit ještě nouzově ukončit a uložit rozpracovaná data. Použití programu kill je samozřejmě popsáno v jeho manuálové stránce, ovšem přesto si dovolím malou ukázku v kombinaci s programem ps. Řekněme, že nám zamrznul program gmpc, a my se jej pokoušíme ukončit. Nejprve bychom měli zjistit jeho PID:
ps aux | grep "gmpc"
Co jsme udělali? Spustili program ps s parametry aux, které nám vypíšou všechny relevantní informace o všech procesech. My ale nechceme informace o všech procesech, a proto jsme výstup programu ps přesměrovali na vstup filtrovacího programu grep, který "propustí" pouze řádky obsahující gmpc. Výsledkem je výpis podobný tomuto:
michal 18406 0.0 1.5 83992 16216 ? S 00:59 0:05 gmpc
Hned první číslo zleva je námi hledané PID, které použijeme jako parametr programu kill. Pokud nezadáme číslo signálu, je zvolen SIGTERM.
kill 18406
Program se však stále neukončil, a proto mu posíláme devátý signál, tedy SIGKILL:
kill -9 18406
Zkusím uvést ještě jeden užitečný program, a tím je killall, který umožňuje poslat signál procesu nebo procesům podle jejich jména a nikoliv podle PID. Pomocí něj by stačilo zapsat:
killall gmpc
Ale pozor, tento program pošle signál všem procesům, které se jmenují tak, jak to specifikujete. Můžete takto nechtěně zabít i program, který nechcete. To je důvod, proč jej uvádím na konec. Onen první způsob je sice zdlouhavý, ale poměrně jistý.
O signálech jako takových se dozvíte více v odkazech a samozřejmě v adekvátní manuálové stránce:
man signal
V unixových systémech je třeba velmi precizně řídit priority jednotlivých procesů. K tomu se používá číselná hodnota, která ovlivňuje, jak moc mu jádro dává přednost před ostatními procesy. V jistých systémech se toto číslo nazývá "priorita" a platí, že čím vyšší číslo, tím vyšší priorita. V unixových systémech je to ale přesně naopak. Toto číslo udává slušnost (niceness), tedy čím vyšší číslo, tím méně jej jádro upřednostňuje před ostatními. V GNU/Linuxu je slušnost udávána v celých číslech v rozmezí -20 až 19, přičemž záporná čísla jsou vyhrazena pouze pro nastavení uživatelem root. Je jasné, že běžně smíte měnit slušnost pouze těch procesů, které vám patří. Jste-li root, můžete vše.
Slušnost procesu můžeme změnit v grafickém prostředí pomocí výše zmíněných nástrojů, nebo můžeme použít příkazovou řádku a programy nice a renice. Program nice spouští program s danou prioritou, program renice mění prioritu běžícího procesu. Použití si demonstrujeme na příkladě:
nice -n 19 slušňák
Výše zmíněný příkaz spuští program slušňák s maximální slušností. Při běhu procesu ale zjistíme, že by bylo dobré jeho slušnost snížit na 5. Použijeme tedy příkaz renice, ovšem nejprve musíme zjistit PID daného procesu (viz výše). Dejme tomu, že slušňák běží pod PID 7432:
renice 5 7432
Interaktivní manažery procesů, ať již pro příkazovou řádku (např. htop) či pro grafické prostředí (ksysguard, qtop, atd.), umožňují provádět změny "slušnosti" procesů velmi pohodlně.
V GNU/Linuxu existuje mechanismus na omezování procesů a uživatelů. Je možné omezit v rámci procesu množství paměti a vytížení procesoru, v rámci uživatele množství spuštěných procesů, počet přihlášení a řadu dalších záležitostí. Vše se nastavuje v /etc/security/limits.conf nebo příkazem ulimit. Vypsáním následujícího příkazu můžete zjistit, jak jste omezeni:
ulimit -a
Více informací se dozvíte v manuálových stránkách interpretu Bash:
man bash
Servery jsou procesy běžící na pozadí (démoni), které naslouchají na určitém portu a poskytují službu jiným počítačům v síti. Typickým příkladem může být webový server Apache. Linuxové distribuce nabízejí kompletní vybavení pro server, stačí se jenom podívat do správce balíčků.
Servery se spouští automaticky po startu systému. Za běhu se dají ukončit, spustit či restartovat pomocí skriptů zpravidla v /etc/init.d. Skripty se mohou jmenovat jinak, ale základ práce bývá velmi podobný. Ukážeme si to na příkladu webového serveru Apache. Předpokládejme, že server běží, a chceme jej ukončit. Zapíšeme:
/etc/init.d/apache stop
Pustíme jej opět takto:
/etc/init.d/apache start
Pokud máme živý, produkční server, pak vypnout a zapnout službu nemusí být ideální způsob, jak vyřešit drobnou úpravu konfigurace. Proto se nám hodí, třeba právě u serveru Apache, parametr reload či jeho násilnější varianta force-reload:
/etc/init.d/apache reload
Ne každá služba má však takové možnosti. Někdy nám tedy nezbyde nic jiného než službu restartovat (což je pořád lepší než vypnout a zapnout):
/etc/init.d/apache restart
V případě produkčních serverů se tyto úkony odehrávají zpravidla v pozdních nočních hodinách, kdy je počet aktivních uživatelů serveru minimální.
Většina serverů má nějaké počáteční nastavení, které umožní jejich běh, aniž bychom je museli nastavovat. Přívětivé distribuce mohou mít nastavovací klikátka pro některé ze serverů, ale většinou budeme servery konfigurovat klasickým způsobem, přes konfigurační soubory v /etc podle dostupné dokumentace, kterou nalezneme mj. v /usr/share/doc, v distribuční dokumentaci, na stránkách projektů, apod.
Následuje popis některých serverů, o kterých by měl každý uživatel GNU/Linuxu vědět.
Server SSH, tedy přesněji OpenSSH, umožňuje zabezpečené (tj. šifrované) přihlášení k shellu na serveru. Můžete se tak přihlásit k příkazové řádce vzdáleného počítače a provádět s ním v podstatě cokoliv. Dokonce, je-li v konfiguraci (/etc/ssh/sshd_config) povolen X11Forwarding, je možné spouštět i vzdálené grafické aplikace.
SSH lze však využít k mnoha dalším věcem. Je možné s jeho pomocí obalit jiné nešifrované protokoly (třeba rsync), a zvýšit tak podstatně jejich bezpečnost. Prostřednictvím SSH je také možné vytvářet šifrované tunely mezi počítači.
Grafické rozhraní GNU/Linuxu je postaveno na architektuře klient/server, kde serverem je právě X Server a klientem jsou pak jednotlivá grafická prostředí nebo okenní manažery.
Cups je tiskový server, který nejspíše běží i ve vaší distribuci a obsluhuje vaše případné tiskárny. Tiskárny a tisk se spravuje buď přes nějaké speciální grafické klikátko, nebo přes Gnome aplikaci gnome-cups-manager, nebo klasicky přes webové rozhraní http://localhost:631/. Server jako takový má konfigurační soubory umístěné v /etc/cups.
Je nad slunce jasné, že kterákoliv služba přístupná z Internetu je potenciálně riziková. I proto je důležité si pořádně projít dokumentaci a nastavit server správně. Stejně tak je důležité pravidelně aktualizovat. Pokud nechcete, aby byly služby přístupné z Internetu, nastavte adekvátně příslušné služby (zakažte jim "poslouchat" na síti) nebo firewall.
GNU/Linux využívá jak fyzickou operační paměť typu RAM, tak odkládací prostor na pevném disku. Strategií tohoto systému je maximálním možným způsobem využít volné RAM. Diskové vyrovnávací paměti (cache) se mohou dynamicky roztáhnout a zabrat celou volnou RAM, je-li třeba. Přirozeně, potřebuje-li některý program další paměť, disková cache se zase zmenší.
Odkládací prostor (swap) v GNU/Linuxu zpravidla existuje v podobě samotného diskového oddílu. Je sice možné jako swap použít i obyčejný soubor, ale oddíl plní svou funkci mnohem lépe (rychleji). Ačkoliv se může zdát používání swapu v dnešní době jako zbytečné, jelikož mají počítače dostatek volné RAM, není tomu tak. Démon kswapd zjišťuje aktivitu procesů, a je-li proces dlouho neaktivní, přesune jeho data z RAM do swapu, čímž zvýší dostupnou RAM pro ostatní procesy a diskové cache.
Jelikož se jedná o prokročilé téma, už si nevystačíme s grafickým prostředím, ale budeme muset pracovat s příkazovou řádkou. Swap můžete za běhu systému odstavit, přidat další či měnit jeho prioritu. Swap se vytvoří na blokovém zařízení (třeba /dev/hda3) takto:
mkswap /dev/hda3
Zařadí se do používání takto:
swapon /dev/hda3
A vyřadí se takto:
swapoff /dev/hda3
Je samozřejmě možné vytvořit swap v souboru. Pochopitelně to má smysl pouze, pokud víte, co děláte. Jste-li začátečníci, tak se této kapitolce obloukem vyhněte.
K vytvoření swapu ze souboru lze použít modul loop, který umí ze souboru udělat blokové zařízení. Nejprve vytvoříme vhodný soubor:
dd if=/dev/zero of=soubor_swap bs=1M count=512
Tento příkaz slouží ke kopírování dat z jednoho souboru do druhého. Jako vstupní soubor (parametr if) použijeme generátor nul /dev/zero, jako výstupní soubor (parametr of) použijeme náš budoucí soubor se swapem. Nastavíme velikost bloku pro čtení a zápis na 1MB a určíme, že se překopíruje 512 bloků, tedy 512 MB. Nyní zavedeme příslušný modul:
modprobe loop
Použijeme program losetup k propojení blokového zařízení /dev/loop0 s naším souborem:
losetup /dev/loop0 soubor_swap
Následně vytvoříme swap na daném blokovém zařízení:
mkswap /dev/loop0
A zařadíme jej do používání:
swapon /dev/loop0
Vyřadit jej z používání můžeme pomocí:
swapoff /dev/loop0
Zrušit "spojení" mezi blokovým zařízením /dev/loop0 a naším souborem můžeme příkazem:
losetup -d /dev/loop0
Jak se ale systém zachová, když paměť opravdu dojde, a nebude místo ani v RAM, ale ani ve swapu? Linuxové jádro používá techniku zvanou "memory overcommiting", která programům dovolí říci si o více paměti než je k dispozici. Je to dáno tím, že si programy mnohdy říkají o více paměti, než pak skutečně využijí. Jenomže, co se stane, když paměť dojde? Pak nastupuje nefalšovaný zabiják, oom-killer, rutina, která se pokusí odhadnout, který program je nejméně důležitý, a ten sestřelí.
Ono je ale velice těžké přesně odhadnout, který program je vhodné sestřelit a který ne. Takže se často stává, že zabiják sestřelí proces, který potřebujeme zachovat, zatímco ten, který situaci způsobil, zůstane nedotčen. Toto chování můžeme ovlivnit. Kromě možnosti přeprogramovat danou rutinu je možné použít rozhraní jádra v souboru /proc/sys/vm/overcommit_memory (povolení memory overcommiting, hodnota 1 povolí, hodnota 0 zakáže). Overcommit memory tedy zakážeme pomocí:
echo "0" > /proc/sys/vm/overcommit_memory
Nebo elegantněji:
sysctl -w vm.overcommit_memory=0
Permanentní nastavení můžeme provést v souboru /etc/sysctl.conf, kam zapíšeme následující rádku:
vm.overcommit_memory=0
GNU/Linux uchovává svou konfiguraci v adresáři /etc, v podobě obyčejných textových konfiguračních souborů. K většině těchto souborů existují manuálové stránky, takže není problém si patřičnou dokumentaci vyhledat, když je to potřeba. Struktura adresáře /etc bývá odlišná v jednotlivých distribucích, nicméně je tu řada společných bodů, které si probereme. Specifika struktury adresáře /etc by měla obsahovat dokumentace ke zvolené distribuci.
Tabulka 6.1. Adresáře v /etc
| Adresář | Obsah |
|---|---|
/etc/X11 | konfigurace grafického rozhraní (hlavním konfiguračním souborem je xorg.conf nebo XF86Config-4) |
/etc/init.d | skripty pro obsluhu démonů (mívají parametry start, stop a restart) |
/etc/cron.* | skripty nebo symbolické odkazy na skripty, které se mají pouštět pomocí cronu (daily - denně, hourly - každou hodinu, monthly - měsíčně, weekly - týdně) |
/etc/cups | konfigurace tiskového serveru CUPS (hlavním konfiguračním souborem je cupsd.conf) |
/etc/ppp | konfigurace služeb point-to-point protokolu (připojení přes modem) |
/etc/rc*d | symbolické odkazy na skripty, které se mají zavést v jednotlivých úrovních běhu systému (runlevelech) |
/etc/skel | "kostra", která se překopíruje do domovského adresáře právě založeného uživatele |
Tabulka 6.2. Soubory v /etc
| Soubor | Obsah |
|---|---|
/etc/fstab | konfigurace souborových systémů, které se mají připojit při startu systému |
/etc/hostname | název počítače |
/etc/hosts.allow | seznam počítačů, kterým je povolen přístup v rámci TCP-wrapperu |
/etc/hosts.deny | seznam počítačů, kterým je odepřen přístup v rámci TCP-wrapperu |
/etc/inittab | popisuje procesy, které se mají spustit při startu systému |
/etc/modules | seznam modulů, které mají být zavedeny při startu systému |
/etc/motd | motiv dne, hláška, která se vypíše uživateli na obrazovku po přihlášení do textového režimu |
/etc/resolv.conf | velmi důležitý soubor pro funkci sítě, je to seznam nameserverů, které se mají použít |
/etc/sudoers | seznam uživatelů, kteří mají oprávnění používat příkaz sudo |
/etc/passwd | seznam uživatelů s jejich UID, GID, uživatelským jménem, adresářem a přihlašovacím shellem |
/etc/shadow | zašifrovaná (nebo zahashovaná) hesla uživatelů a několik dalších podstatných nastavení o heslech |
/etc/group | seznam skupin a uživatelé do nich patřící |
Soubory hosts.allow a hosts.deny se řídí jistá knihovna, kterou využívá řada síťových služeb (např. OpenSSH, nfs, apod.). V těchto souborech je možné specifikovat, které počítače smí ke kterým ze služeb přistupovat. Ano, hádáte správně, tohle lze řešit i v rámci firewallu.
Možná doplním ještě jeden velmi dobrý praktický trik, pokud budete hledat konfigurační soubor, o kterém víte, že obsahuje určitou hodnotu, použijte funkci Najít soubor v Midnight Commanderu nebo jinde, kde specifikujete to, co by měl obsahovat. Když jsem začínal, tento postup se mi velice osvědčil.
Ještě než začneme pracovat s nějakým konfiguračním souborem, měli bychom se podívat na jeho dokumentaci. Ta se může ukrývat buď v manuálových stránkách, nebo může být k dispozici přímo v daném konfiguračním souboru ve formě komentářů. Komentář je uvozen křížkem (#) a to, co za ním následuje, nebere program při procházení konfiguračním souborem v potaz. Komentářů můžeme využít i při editaci konfiguračního souboru a k dokumentaci změn.
Před úpravou konfiguračního souboru je dobré si vytvořit jeho zálohu, pro každý případ. Práci s komentáři si ilustrujeme na následujících dvou příkladech. Máme následující řádku v souboru /etc/fstab:
/dev/sda2 /media/sda2 ext3 defaults 0 2
My ale nechceme, aby se /dev/sda2 mountovalo při startu počítače. Ovšem nejsme si až tak jisti, že to někdy nebudeme znovu potřebovat, a proto řádku nesmažeme, pouze zakomentujeme:
#/dev/sda2 /media/sda2 ext3 defaults 0 2
Uvažme situaci, že chceme pouze změnit parametry připojení souborového systému, ale nevíme jistě, co to udělá. Proto si původní řádku zálohujeme a na nové budeme experimentovat:
#/dev/sda2 /media/sda2 ext3 defaults 0 2 /dev/sda2 /media/sda2 ext3 ro 0 0
Nezřídka se nám může hodit opatřit jistou změnu komentářem, třeba abychom ji opět našli, a po čase opět pochopili, proč jsme to vlastně tenkrát dělali:
#2006-08-22 (Michal): Pryc s tim, na /dev/sda2 je ted Gentoo #/dev/sda2 /media/sda2 ext3 defaults 0 2
Dosud jsme probírali konfiguraci systému jako takového, ale kam se ukládají nastavení programů, které spustíte? Ta se ukládají do vašeho domovského adresáře, zpravidla jako skryté soubory (v unixových systémech jsou skryté soubory ty, které obsahují tečku na začátku svého jména). I tady platí, že se převážně jedná o textové soubory, které lze upravovat, zálohovat či přenášet na jiné unixové systémy.
V extrémně nepravděpodobném případě se může stát, že si nějaký špatně napsaný program uloží konfiguraci, která způsobí, že spadne při příštím spuštění. V takovém případě postačí najít příslušný konfigurační soubor a buď jej odstranit, nebo někam přesunout, program si ho vytvoří automaticky při dalším spuštění.
Prvních 512 bytů na pevném disku tvoří MBR, kde se nachází zavaděč operačního systému (446 bytů), následuje tabulka rozdělení disku (partition table), kde jsou po 16 bytech uloženy informace o každém ze čtyřech primárních oddílů. MBR je zakončeno 2 byty tvořící tzv. magic number.
Pevný disk je rozdělen na jednotlivé oddíly (partitions). Omezení v podobě 4 primárních oddílů se obchází tak, že se jeden z primárních oddílů nastaví jako rozšířený, a v jeho útrobách pak mohou vznikat další, rozšířené oddíly. Podstatné je, že v každém oddílu může být jiný souborový systém.
Mezi důsledky této šedé teorie patří několik důležitých praktických poznatků:
tabulku rozdělení disku, zavaděč nebo celou MBR lze zálohovat a podle potřeby obnovit samotnou změnou tabulky rozdělení disku nedojde ke ztrátě dat (souborové systémy zůstanou netknuté) a je možné je zachránit obnovením původní tabulky rozdělení disku (třeba programem gpart či testdisk)
změnu tabulky rozdělení disku lze realizovat za běhu systému (GNU/Linuxu), ale po její změně je před příslušnými operacemi (vytváření souborových systémů v nových oddílech, apod.) třeba restartovat systém
Filesystém, alias souborový systém, je metoda ukládání dat na pevný disk tak, abychom byli schopni tato data opět přečíst zpět. Zdá se to možná banální, ale je to extrémně důležité. Díky souborovým systémům můžeme ukládat svoje data do souborů v adresářové struktuře, a hlavně, opět je přečíst. Ovšem souborové systémy jsou v dnešní době přeci jen složitější. Důraz je kladen i na bezpečnost uložení dat, rychlost přístupu k datům a na řadu dalších faktorů.
Jednou z podstatných vlastností moderních souborových systémů je systém pro zajištění konzistence dat v případě výpadku. Žurnál je, zjednodušeně, oblast, kam se zapisují informace o právě prováděných transakcích (zápis dat do souboru, apod.). V případě výpadku se ze žurnálu zjistí, které operace proběhly a které nikoliv. Tak lze velmi snadno dostat souborový systém opět do konzistentního stavu, a to bez nutnosti provádění složitých a zdlouhavých prověřování.
Mezi žurnálovací souborové systémy patří v GNU/Linuxu ext3, reiserfs, jfs, xfs. Naopak ext2 žurnálovací není, a proto jej doporučuji nepoužívat. Říkám to zejména proto, že ve starších dokumentacích bývá ext2 často zmiňován. Dnes už však není důvod nepoužít ext3. Zejména pak proto, že ext2 a ext3 jsou mezi sebou kompatibilní a jeden lze přeměnit na druhý a zpět (zprovozněním nebo zrušením žurnálu pomocí tune2fs).
V unixových systémech jsou filesystémy připojovány do jednotné adresářové struktury. Na disku můžeme mít tedy teoreticky řadu oddílů, přičemž na každém bude jiný souborový systém. Ale z hlediska uživatele budou Linuxové souborové systémy jsou založeny na unixových souborových systémech.
Pokud chceme připojit nějaký souborový systém do adresářového stromu, použijeme k tomu příkaz mount nebo adekvátní grafické nástavby (viz dokumentace k distribuci). Toto budeme pochopitelně realizovat pouze v situaci, kdy nedojde k automatickému připojení, jak bývá obvyklé pro řadu přívětivých distribucí. Příkaz mount má celkem jednoduchou syntaxi:
mount -t filesystem /dev/zarizeni /mnt/adresar
Zpravidla můžeme volbu -t (specifikace typu souborového systému) s parametrem určujícím souborový systém vypustit, mount se pokusí typ souborového systému určit sám. Stačí tedy použít zkrácenou syntax:
mount /dev/zarizeni /mnt/adresar
Tento příkaz připojí blokové zařízení /dev/zarizeni na adresář /mnt/adresar. Z praktického hlediska, pokud budu chtít připojit souborový systém (ext3) na třetím (primárním) oddíle primárního IDE pevného disku na sekundárním IDE řadiči do adresáře /home/repository, použiji příkaz:
mount -t ext3 /dev/hdc3 /home/repository
Můžeme také použít zkrácenou verzi s autodetekcí souborového systému:
mount /dev/hdc3 /home/repository
Někdy se můžou hodit i určité volby, které jsou k dispozici pod parametrem -o, třeba následující příkaz připojí stejný souborový systém pouze pro čtení:
mount -t ext3 -o ro /dev/hdc3 /home/repository
Další možnosti viz manuálová stránka k příkazu mount.
man mount
Souborový systém můžeme odpojit pomocí příkazu umount, takto:
umount /dev/hdc3
Pokud na souborovém systému, který chceme odpojit, provádí nějaký program nějakou činnost, nepůjde odpojit. Nejjednodušším řešením takové situace je daný program ukončit nebo v něm přejít do jiného adresáře. Pokud nevíme, který program zrovna na souborový systém přistupuje, použijeme příkaz lsof, který nám to zjistí:
lsof /dev/hdc3
Nebo můžeme riskovat a nechat systém násilně ukončit všechny programy pracující s daným zařízením (užívejte velmi opatrně):
kill -9 $(lsof -t /dev/zarizeni)
Souborový systém lze odpojit i násilím, ale to je dobré provádět pouze, pokud jsou všechny osatatní možnosti vyčerpány:
umount -f /dev/hdc3
Ještě lze použít parametr -l, který souborový systém okamžitě vyřadí z hierarchie, ale reference na něj odstraní později:
umount -l /dev/hdc3
Chceme-li připojovat nějaký souborový systém při každém startu, upravíme konfigurační soubor /etc/fstab. Jeho syntax je v podstatě velice jednoduchá, na každém řádku je záznam pro jeden souborový systém s následujícími parametry:
soubor zařízení (např. ``/dev/hda1``)
přípojný bod (např. ``/mnt/hda1``)
souborový systém
volby (oddělené čárkou)
číslo používané programem dump (nula tady zcela postačí)
číslo označující pořadí při kontrole filesystému
Typická řádka by tedy mohla vypadat nějak takto:
/dev/sda1 /media/card1 vfat ro,user,noauto 0 0
Výše zmíněná řádka by zajistila připojení zařízení /dev/sda1 obsahující souborový systém typu vfat na přípojný bod /media/card1 s volbami ro (připojení pouze pro čtení), user (povolí uživatelům připojovat souborový systém) a noauto (nepřipojí souborový systém hned po spuštění počítače. Prvního čísla bych si nevšímal a dal bych na jeho místo nulu (pokud nepoužíváte k zálohování program dump). Druhé číslo označuje pořadí při provádění kontroly souborového systému pomocí programu fsck. Nula značí vyjmutí z kontroly při startu počítače, jedničku by měl mít pouze kořenový souborový systém, pro ostatní je dvojka nebo nula.
V zásadě, dostat smazaná data z linuxových oddílů je velmi těžké, až zhola nemožné. Existuje sice několik neoficiálních nástrojů, ale těmi lze napáchat více škody než užitku (je důrazně doporučena záloha oddílu před jejich použitím). Proto nemohu než doporučit důležitá data zálohovat a při mazání si dávat opravdu pozor.
Pokud si smažete omylem opravdu extrémně cenná data, jejichž zálohu nemáte k dispozici, můžete se pokusit data obnovit sami (viz dále) nebo obrátit na specializované společnosti zabývající se záchranou dat.
Pokud je poškozená tabulka rozdělní disku, nebo se nám podařilo ji upravit a následně zjistit, že jsme zapomněli zálohovat důležitá data, není ještě všechno ztraceno. Můžeme použít programy jako gpart[16] nebo testdisk[17], které jsou schopné poškozenou tabulku rozdělení disku rekonstruovat.
Je-li možné souborový systém, který chceme prověřovat, odpojit, učiníme tak. Pokud to možné není, musíme jej přepojit do režimu pouze pro čtení. Chceme-li to provést se souborovým systémem, který je používán, nezbyde než ukončit všechny procesy využívající daný souborový systém. Pokud chceme za běhu zkontrolovat kořenový oddíl, musíme přejít do jednouživatelského režimu pomocí příkazu init 1, následně souborový systém přemountujeme jenom pro čtení. Za předpokladu, že tím naším filesystémem je /dev/hda1, zapsali bychom:
mount -o remount,ro /dev/hda1
A teprve teď bychom se mohli pustit do kontroly souborového systému.
fsck /dev/hda1
Je-li souborový systém vážně poškozen, pak jej raději před pokusy o nápravu zálohujeme, třeba pomocí programu dd:
dd if=/dev/hda1 of=/mnt/sitovy_disk/zaloha_hda1
Je-li poškozeno samotné zařízení, na kterém se souborový systém nachází, pak přidáme parametr noerror a specifikujeme rozumnou velikost bloku (v tomto případě 512 bytů):
dd if=/dev/hda1 of=/mnt/sitovy_disk/zaloha_hda1 noerror bs=512
Máme-li připravený obraz poškozeného oddílu, můžeme na jeho kopii provádět záchranné operace. Můžeme se pokusit souborový systém opravit:
losetup /dev/loop0 /mnt/sitovy_disk/zaloha_hda1_kopie
Tento příkaz asociuje zařízení /dev/loop0 s kopií našeho poškozeného souborového systému. To způsobí, že k němu budeme moci přistupovat jako k normálnímu blokovému zařízení. Toho využijeme a ihned na něm spustíme fsck:
fsck /dev/loop0
Fsck se pokusí opravit daný souborový systém. Když skončí, můžeme se pokusit opravený souborový systém připojit, tentokrát specifikujeme i souborový systém:
mount -t ext3 /dev/loop0 /mnt/zachrana
Pokud se nám oprava nepovede, jelikož je poškození souborového systému příliš veliké, zkusíme třeba program Foremost[18], který projde náš obraz a extrahuje z něj známé typy souborů. Můžeme samozřejmě zvolit i další software. V nejzazší nouzi se ještě můžeme obrátit na specializované společnosti zabývající se záchranou dat.
Srdcem každého linuxového systému je kernel, jádro operačního systému. Linuxové jádro je modulární a široce konfigurovatelné. Modularitou mám na mysli LKM (Loadable Kernel Modules), vlastnost umožňující přímo za běhu vkládat nebo odebírat z kernelu jednotlivé moduly (modul může být ovladač hardwaru nebo jiná funkcionalita). Moduly jako takové naleznete v adresáři /lib/modules/verze_kernelu a lze je spravovat pomocí následujících příkazů:
lsmod - vypíše zavedené moduly
modprobe - zavede určitý modul
insmod - umožňuje zavést modul ze souboru
rmmod - odstraní modul z kernelu
depmod - generuje závislosti mezi moduly
Více se dozvíte v manuálových stránkách jednotlivých příkazů. Obrazy jader (ano, kernelů můžete mít více a při startu systému se rozhodnout, který použijete) se nachází v adresáři /boot, zpravidla v podobě souborů začínajících na vmlinuz. Jsou zde uloženy i iniciální ramdisky, a to v podobě souborů zpravidla začínajících na initrd, patřících vždy konkrétnímu obrazu jádra. Samozřejmě ani kernel, ani inicální ramdisk se nemusí jmenovat tak, jak bylo uvedeno. Jejich zavádění je potom zajišťováno zavaděčem (LILO nebo GRUB). Konfiguraci jádra obecně lze rozdělit do dvou variant:
úprava parametrů zkompilovaného jádra
kompilace vlastního jádra
První ze jmenovaných případů se týká možností komunikovat s jádrem, předávat mu určité parametry (při bootu) nebo upravovat jeho funkcionalitu (při běhu). Parametry se jádru předávají před jeho nabootováním prostřednictvím zavaděče (LILO nebo GRUB). Funkce běžícího jádra se dají ovlivnit prostřednictvím souborového systému /proc nebo /sys.
Kompilace vlastního kernelu je možnost, jak si jádro přizpůsobit svým požadavkům a své architektuře. Optimalizací pro danou architekturu lze o něco zvýšit výkon systému. Kernel lze ale i opatchovat a implementovat do něj podporu pro dosud neoficální funkcionalitu, popřípadě touto cestou zajistit zprovoznění určitého hardwaru.
Existují dva typy kernelů, kernel vanilla, tedy čistý, neopatchovaný, oficiální kernel, který můžete stáhnout z kernel.org, a distribuční kernel, tedy ten, který za vás již sestavil správce vaší distribuce. Distribuční jádra bývají různě patchované a bývají nastavené tak, že se spustí takřka na jakémkoliv hardwaru. Používají k tomu právě LKM a možnost zavést moduly podle toho, jaký hardware je v počítači nalezen. To značně zvyšuje robustnost systému, který je pak možné přenášet mezi počítači s minimálními změnami.
Měl bych dodat, že k hlídání změn v hardwaru při běhu systému (např. připojení USB zařízení) se používá speciální démon - hotplug (momentálně již ve většině distribucí nahrazen systémem udev). Ten hlídá, co se změní a adekvátně se přizpůsobí (zavede patřičné moduly).
Poněkud podrobnější pohled do linuxového kernelu nabízí dokument Kernel Hacking HOWTO[19] (doporučuji spíše programátorům).
Předně je třeba říci, že kompilaci kernelu většinou nebudete potřebovat provádět. Doby, kdy to bylo nutné, jsou již dávno pryč. Dnes máte v linuxových distribucích k dispozici modulární, předem nastavená a vyladěná jádra, která jsou navíc v případě objevení nějakého problému patchována a vy si prostřednictvím balíčkovacího systému můžete stáhnout aktualizaci.
Kompilace kernelu je vhodná, pokud toužíte po optimalizaci jádra přímo pro váš počítač (ať již optimalizace pro použitý procesor, nebo pro použitý hardware - zvolení jenom těch modulů, a vlastností, které chcete), popřípadě v oněch velmi vzácných případech, kdy distribuční jádra nemají něco, co vy nutně potřebujete.
Pro kompilaci kernelu potřebujete kompilátor (gcc), eventuelně některé další nástroje (něco pro snadné vytváření initrd, třeba initrd-tools). Další ingrediencí jsou zdrojové soubory jádra. Distribuční jádro má zdroj v balíčku kernel-source (může se ale jmenovat i jinak), vanilla jádro si můžete stáhnout z www.kernel.org.
Postup kompilace je následující:
příprava zdrojáků
získání rootovských oprávnění
rozbalení archívu se zdrojáky jádra
otevření hlavního adresáře se zdrojáky (např. kernel-source-2.6.16)
(aplikace eventuelních patchů)
příprava pro kompilaci - zapsání příkazů:
make mrproper
make clean
lze použít existující nastavení jádra jako základ pro nastavování nového:
cp /boot/config-verze_jadra ./.config
make oldconfig
Kompilace některého konfiguračního programu (vyberte si jednu z možností):
make config (otázka/odpověď v textovém režimu)
make menuconfig (menu v textovém režimu)
make xconfig (grafický konfigurátor)
make gconfig (grafický konfigurátor)
konfigurace jádra (viz níže)
kompilace jádra
jádro řady 2.4:
make dep
make bzImage
make modules
jádro řady 2.6:
make
make modules_install
zkopírování obrazu jádra do /boot:
cp arch/i386/boot/bzImage /boot/vmlinuz-x.y.z.a
Úprava konfigurace zavaděče (u Lila pak nezapomeňte provést jako root příkaz lilo, u Grubu nemusíte dělat nic)
reboot a otestování, zda-li jádro funguje
Více informací naleznete v odkazech v závěru kapitoly. Nejnáročnější procedurou je vlastní konfigurace jádra, tedy výběr toho, co bude do kernelu zakompilováno a co ne. Je třeba si dávat pozor, abyste do jádra zahrnuli podporu všeho důležitého (grafika, myš, klávesnice, apod.). Pokud nepoužíváte iniciální ramdisk (viz níže), pak musíte zajistit, aby ovladače řadiče a souborových systémů byly v jádře zakompilovány na pevno (ne jako moduly).
Pokud se vám to napoprvé nepodaří, nezoufejte a zkuste konfiguraci poopravit (nepoužívejte v takovém případě příkaz make mrproper, jelikož ten vám vymaže uloženou konfiguraci). Ke zjištění toho, co všechno musíte do jádra zahrnout, vám mohou sloužit příkazy jako lsmod, který vypíše zavedené jaderné moduly, popřípadě lspci či dmesg. Hodí se také dostupné informace v /proc.
Může se stát, že budete potřebovat ručně zkompilovat nějaký jaderný modul pro vaše jádro, třeba s proprietárním ovladačem k některému kousku hardware, který díky licenci nemůže být součástí jádra. Samozřejmě předpokládám, že máte k dispozici nějaký podrobný návod, který vám řekne, co a jak nastavit.
Kromě standardní kompilační sady (kompilátor gcc) budete potřebovat i hlavičkové soubory jádra. Pokud používáte distribuční jádro, pak je zpravidla najdete v balíčku, jehož název bude vypadat podobně jako kernel-headers-x.y.z.a (kde x.y.z.a je verze jádra). Pokud jste si zkompilovali vlastní jádro, pak je máte k dispozici v adresáři se zkompilovaným jádrem (zpravidla někde v /usr/src, ale to byste měli vědět, když jste si ho zkompilovali sami).
Jeden problém, který se zde může vyskytnout, je situace, kdy budete jaderný modul kompilovat pomocí jiné verze kompilátoru než samotné jádro. V takovém případě nemusí jaderný modul fungovat. Pokud fungovat nebude, a nepodaří se vám jej zavést ani pomocí insmod -f soubor_s_modulem, zřejmě vám nezbyde než zkompilovat vlastní jádro. Distributoři na toto však zpravidla pamatují a většinou to lze vyřešit aktualizací balíčku s jádrem.
Jak jsme si říkali, moduly jsou umístěny v adresáři /lib/modules. Pokud máte jako modul zakompilovanou podporu souborového systému (nebo zařízení), na kterém se tento adresář nachází, pak za normálních okolností kernel nenabootuje a zpanikaří. Neumí totiž řešit situaci “Co bylo dříve, slepice nebo vejce?”. K tomu, aby se mohl dostat k modulům potřebuje “vidět” záznamové zařízení a “rozumět” souborovému systému, na kterém se moduly nachází, ale pokud jsou ovladače (drivery) onoho souborového systému nebo daného zařízení zakompilovány jako moduly, pak se k nim nedostane a nemá šanci to přeusmívat.
K řešení tohoto problému slouží initrd, což je malý, zkomprimovaný souborový systém, který se zavede za kernel do paměti, ten jen pak rozbalí, připojí na kořenový souborový systém a postupuje podle jeho startovacího skriptu. Tento souborový systém obsahuje mj. i moduly potřebné k zavedení systému. Vytváří se příkazem mkinitrd. U novějších distribucí to je mkinitcpio.
LinuxSoft.cz, František Huček, Přecházíme z Windows - instalace software v Linuxu
ABC Linuxu, Vlastimil Ott, Na co se často ptáme: Balíčkovací systémy
ABC Linuxu, Stanislav Valasek, Zdroje balíčkov pre Ubuntu
ABC Linuxu, Martin Fiala, Balíčkovací systém Mandrake Linuxu
LinuxExpres, Anička Bernáthová, Instalace softwaru v openSUSE
Petr Krčmář, Nebojíme se kompilace
Ondřej Krčmář, Balíčkovací systém Gentoo Linuxu
Čtenáři ABC Linuxu, Procesy
Rastislav Stanik, Signály
Matouš Jan Fialka, htop: top na druhou
Čtenáři ABC Linuxu, Souborový systém
Wikipédie (anglická), Filesystem
Wikipédie (anglická), Master Boot Record
Root.cz, Petr Krčmář, Na co se často ptáme: fstab
ABC Linuxu, Leoš Literák, FAQ, Smazal jsem důležitá data, jak je mohu obnovit?
ABC Linuxu, Leoš Literák, FAQ, Jak připojit FAT oddíl?
Root.cz, Michal Ludvig, Jak funguje initramdisk
Wikipédie (anglická), Linux kernel
Wikipédie (anglická), Linux kernel oops
Wikipédie (česká), Linuxové jádro
Ivan Bowman, Conceptual Architecture of the Linux Kernel
kernelnewbies.org, Linux kernel API
ABC Linuxu, seznam článků z rubriky sítě
ABC Linuxu, Luk, Memory overcommitting - ráj nebo peklo?
LinuxMM, OOM Killer
Wikipédie, Wikibooks, Guide to Unix - Files