* ** * * * ** ******** * * * * * ** * * * * * * * ** * * * * * * ** ** * * * * * * * * *** * ** ** * **** * * ** * ** ** * * * * ** ** * * * * * * * * * * * ** *** ** * ** *** *** ** ****************** ************************************ *********** ********* ******* P R O Z A Č Á T E Č N Í K Y **** ** *** Asi před půl rokem jsem podlehl módnímu trendu, znechucení Megalothem a doporučení kamaráda a sehnal jsem si konto v linuxovém labu a rovněž jsem si nainstaloval Linux domů (konkrétní verze: MJ-Linux, kernel 2.0.30 -- Slackwarvá instalace upravená Martinem Marešem). A protože proniknout do tajů tohoto operačního systému přece jen chvíli trvá, rozhodl jsem se, že se vám všem, kteří jste se rozhodli na tento squělý operační systém přejít, pokusím trochu usnadnit práci svými vlastními postřehy. Nejdříve se zmíním o tom jednodušším případu, tedy že se vám podařilo sehnat účet na počítači, na kterém je operačňí systém Linux (většina informací bude platit o všech UNIXech). První věc, která vás asi nepřekvapí, je, že když přijdete k UNIXovému terminálu1), jste hláškou login: vyzváni k zadání uživatelského jména a PO! objevení výzvy Password: také hesla. Pak se obvykle objeví ještě několik hlášek, nějaký výrok (vypsaný programem fortune) a spustí se váš login shell. Existuje několik shelů (command.com v dosu je také "shell"). Základním nejjednodušším shellem je Bourne shell (sh*)) (umí asi 20x tolik co command.com) a dále existují jeho různá rozšíření jako C-shell (csh), korn-shell (ksh) a další. Ty však nejsou příliš běžné a obvykle se používá GNU Bourne-Again Shell (bash), který je zpětně kompatibilní s sh a má navíc několik užitečných rozšíření. Jako logn shell se nicméně může spustit jakýkoliv program (já mám na svém počítači doma speciálního uživatele cdp, kterému se spouští rovnou přehrávač cédéček). Obvykle se vám však po nalogování objeví prompt, který vypadá obvykle následovně: vašejméno@jménopočítače: Tento prompt vám oznamuje, že jste nalogováni jako vašejméno na počítači jménopočítače a váš aktuální adresář je . A než se pustíme do příkazů shellu, tak se pokusím stručně popsat systém souborů. UNIXový systém souborů je podobny tomu dosovému, ale má některé drobné odlišnosti. V UNIXu je téměř všechno soubor. Adresář je soubor, celý disk je soubor, terminál je soubor, tiskárna je soubor, myš je soubor, pojmenovaná roura (pipe, fifo) je soubor, dokonce i paměť je soubor... A DOKONCE I SOUBOR JE SOUBOR! Jméno takového souboru může obshaovat libovolné znaky kromě /, které odděluje adesáře a může být téměř libovolně dlouhé (na většině UNIXů do 256 znaků, vyjímečně méně). Když říkám libovolné znaky, tak myslím opravdu libovolné znaky, takže tákhle! blbej? název fajlu je naprosto korektní a když ho napíšete do úvozovek, tak to shell pochopí! Ostatně můžete to zkusit. Soubory jsou uspořádány do adresářového stromu. Narozdíl od DOGu (M-DOS) se jedná o skutečný zakořeněný strom. Nejou zde tedy žádné drivy. Pod kořenovým adresářem / se nachází jednotlivé podadresáře, na které mohou být namountována jiná fyzická zařízení (disky, diskety, síťové disky ap.). Rovněž struktura adresářového stormu je poněkud odlišná od DOSu. Pod kořenovým adresářem se nachází adresáře /bin, /etc, /dev, /home, /lib, /usr, /sbin a /var. V adresáři /bin se nachází systémové spustitelné soubory (externí příkazy). V adresáři /etc se nachází systémové konfigurační soubory a globální konfigurační soubory různých programů. Adresář /dev je vyhrazen pro speciální zařízení (co nejsou ani normální soubory, ani adresáře). V adresáři /home se nacházejí podadresáře jednotlivých uživatelů, ve kterých mají uloženu svoji práci. Pokud pátráte po adresáři , tak to je právě takzvaný domovský adresář a jedná se o zkratku pro /home/vašejméno (i když to může být i něco jiného), což je bvykle jediný adresář, kam můžete zapisovat (většinou se dostanete ještě to /tmp, ale to je tak všechno). Adresář /lib pak obsahuje dynamické knihovny, které jsou zvláště v Linuxu velice používané a šetří místo na disku i v paměti (vétšinou se dají nahrát jen jednou, i když je využívá více programů). Pod adresářem /usr je velice košatý podstrom. Jsou zde adresáře /usr/bin, /usr/lib /usr/sbin a další, které mají podobný význam, jako adresáře pod /, ale pro aplikace. Nakonec je zde adresář /var a zde jsou uloženy další soubory různých aplikací (obdobné je také /usr/share a někdy /usr/lib). Kromě svého názvu a cesty má každý soubor ještě vlastníka a mód, tedy vlastně přístupová práva a čas (tedy 3 různé časy). O co jse se pokusím vysvětlit na ukázkovém výstupu příkazu ls -l: drwxr-xr-x 2 bulb users 1024 Apr 25 14:35 vyhens/ -rw-r--r-- 1 bulb users 1218 Apr 24 13:39 linux1.il2 |||||||||| | | | | | +- název |||||||||| | | | | + čas pozlední modifikace |||||||||| | | | +--------- Velikost |||||||||| | | +--------------------- Skupina vlastníků |||||||||| | +------------------------------- Vlastník souboru |||||||||| +----------- Počet tvrdých odkazů (hardlinks3)) |||||||||+--------------- Právo spuštění ostatními (u adresáře vstupu) ||||||||+---------------- Právo zápisu do souboru (adresáře) ostatními |||||||+----------------- Právo čtení ostatními (výpisu adresáře) ||||||+------------------ Právo spuštění skupinou |||||+------------------- Právo zápisu skupinou ||||+-------------------- Právo čtení skupinou |||+--------------------- Právo spuštění vlastníkem4) ||+---------------------- Právo zápisu vlastníkem (pojistka) |+----------------------- Právo čtení vlastníkem (nechte nastavené!) +------------------------ Typ souboru5) Tak to by snad stačilo o filesystému a konečně se dostaneme k vašim prvním příkazům. Jak je zvykem v UNIXu, nejdříve se říká, jak se co ukončuje. Takže: když končíte práci, odlogujte se. To uděláte tak, že aktivní shell ukončíte příkazem exit (nebo stiskem C-d6)), případně příkazem logout (ten nedoporučuji - dovoluje nechat nějaké procesy na pozadí). Když počítač vypínáte (a u počítačů v síti se to často nesmí, protože mohou být připojeni uživatelé z venku), VŽDY STISKNĚTE C-M-Del (Ctrl-Alt-Del) A POČKEJTE, AŽ POČÍTAČ ZAČNE BOOTOVAT. V TOM OKAMŽIKU JEJ TEPRVE MŮŽETE VYPNOUT!!! (Jinak riskujete ztrátu dat a poškození filesystému). První úkon, který musíte udělat po připojení k UNIXovému počítači je se přilogovat. To vypadá zhruba následovně Welcome to Foobar7) (Linux 2.0.33) foobar login: foo Password: Last login:Sun Apr 26 20:43:15 on tty1 TERM=linux No mail. Keyboard not present, press any key to continue. foo@foobar: _ Zde vám systém oznamuje nějaké nezajímavé věci, pak že nemáte poštu (Máte-li nějakou, objeví se You have new mail (nebo You have mail, pokud jste ji už četli, ale nesmazali)) a nakonec nějakou (vtipnou nebo praštěnou) hlášku. No a pak už vás promptem vyzývá, abyste se vyžvejkli, co po něm vlastně chcete. Takže k prvním příkazům. Nejdříve vám prozradím, jak získat nějakou nápovědu. Všechny (téměř, kromě několika vzácných vyjímek) příkazy, programy a knihovní funkce v UNIXu doprovází takzvané manuálové stránky. To jsou takové jednoduše formátované (trochu barviček) textové soubory, které zobrazíte příkazem man bar, kde bar je příkaz, který vás zajímá. Manuálové stránky jsou rozděleny do 10 kapitol (sekcí) a to podle násedujícího klíče: 1 -- uživatelské příkazy (systémové i aplikace) 2 -- systémová volání (céčkové rozhraní, asembler se nepěstuje) 3 -- knihovní funkce (libc i další knihovny) 4 -- speciální zařízení a jejich ovladače 5 -- formáty (konfiguračních) souborů (hlavně těch systémových) 6 -- hry 7 -- různé popisy 8 -- nástroje správy systému 9 -- popis interních volání kernelu Linuxu (pouze Linux) n -- různé, co se nikam nehodilo (například Tcl/Tk příkazy) Někdy existují stejně nazvané stránky ve více sekcích. Pak man vypíše tu, kterou najde první. Pokud chcete nějakou jinou, musíte před název napsat ještě číslo sekce (např man 3 foo), nebo -a (např: man -a foo), což znamená vypsat postupně všechny nalezené stránky. Drobnou nevýhodou tohoto systému je, že musíte znát název stránky. Proto existují ještě příkazy whatis, který napíše jednořádkovou anotaci k zadanému příkazu a apropos, který najde klíčové slovo v souboru anotací. Druhý způsob nápovědy poskytuje samotný příkaz pomocí speciálního opšnu, který téměř u všech příkazů sluje --help. Pro nápovědu o interních příkazech bashe pak existuje ještě příkaz help (syntaxe help foo). Při každé práci v každém operačním systému je nutné pracovat se soubory. V DOGu byly příkazy pojmenovány trochu UNIXu natruc a tak jediný příkaz, který vypadá stejně, je cd. Všechny ostatní vypadají jinak. Takže popořádku: pwd Vypíše aktuální adresář (pro případ, že tento není v promptu) cd foo Nastaví aktuální adresář na foo. Začíná-li foo znakem /, jedná se o absolutní cesu. cd bez argumentů je ekvivalentní cd ls [adresáře] [soubory] Příkaz vypíše soubory z aktivního adresáře, adresářů adresáře nebo soubory. Opšn -l říká, že soubory se mají vypisovat s dalšími informacemi a opšn -F že se na konec souboru má připojit znak podle typu souboru (viz 5)). Všimněte si, že opšny lze napsat jako -lF nebo -Fl (místo -F -l). To lze u většiny příkazů. mkdir foo Vytvoří adresář foo rmdir foo Jej opět smaže (adresář musí být prázdný) cp [-rfisv] zdroj [další zdroje] cíl Zkopíruje soubor zdroj do cíle. Pokud je zdrojových souborů více, musí být cíl adresář. Opšn -r říká, že adresáře se mají kopírovat rekurzivně, tedy s celým podstromem, opšn -f říká, že existující cíle se mají přepsat bez řečí a -i naopak že je nutné se ptát. Opšn -s říká, že místo kopírování se mají vytvářet symlinky a konečně opšn -v způsobí vypisování jednotlivých kopírovaných souborů. Většina UNIXových příkazů má totiž ve zvyku pracovat potichu. mv [-fiv] zdroj [další zdroje] cíl Přesune soubor zdroj do cíle. Je-li zdrojových souborů více, musí být cílem adresář. Opšny mají stejný význam, jako u cp. rm [-fivr] [soubory] Vymaže soubory soubory. Opšny mají opět stejný význam, jako u cp Tak to bychom měli příkazy pro práci se soubory. A nyní přehled příkazů, pomocí kterých můžete zjistit jejich obsah: cat [soubory] Vypíše soubory (nebo standartní vstup) na standartní výstup. more [soubory] Vypíše soubory (nebo standartní vstup) na standartní výstup, po plné obrazovce se zastaví a pak je možno: Klávesou Enter zobrazit další řádku, klávesou Spc zobrazit další stránku, klávesou q program ukončit a navíc je po klávese / zadat regulární výraz, který je poté vyhledán ve zbytku souboru. less [soubory] Less je opak more a jako takový rozšiřuje jeho možnosti. less umožňuje skrolovat dopředu -- o řádku klávesami Down, Enter a e, o stránku klávesami PgDn, Spc a f; skrolovat dozadu -- o řádku klávesami Up a y, o stránku klávesami PgUp a b; a navíc hledat dopředu (/) a dozadu (?). No, a protože popis k následujícím věcem je hróóóózně dlouhý, nachází se v podčláncích. Text je obvykle potřeba editovat. K tomuto účelu se v UNIXu používají dva editoy. První, vi, je součástí systému a ačkoliv je celkem jednoduchý, kombinace interaktivního editování textu a speciálních příkazů z něj dělají naprosto ďábelký nástroj, zejména pro psaní kratších věcí (skripty, dopisy ap.). Na psaní delších textů se nejčasťěji používá editor emacs (tento článek byl rovněř napsán v emacsu). Tento editor umí téměř všechno, co si u textového editoru (nejedná se o "dtp", na to musíte použít TeX), za kterýmžto účelem je vybaven interpretem lispu, ve kterém jsou napsány všechny editační funkce. Pokud se jej tedy dobře naučíte, můžete si jej libovolně přizpůsobovat. Jediná potíž je v tom naučení. Všechno je výborně zdokumentováno, ale je toho jednoduše hróóózně moc (doporučuju začít výukovým textem -- vyvoláte M-H t). Ještě se musím zmínit o dvou nástrojích zpracování textu. A sice o editorovém filtru sed a vyhledávači grep. Když už jsem u vyhledávačů, je užitečný také find (hledá soubory). Existují stovky a tisíce dalších programů, ale na jejich popis se budete muset podívat do manuáloých stránek a dalších dokumentací. Mnoho z nich bude pod X-Windows (viz Výheň č.8, Úvod do GNU). Tak a teď se dostanu k základním věcem, které potřebuje začínající zprávce systému. Nejdříve budete potřebovat vytvořit nějaké uživatelské ůčty. To uděláte příkazem adduser (postupně se zeptá na údaje). Tyto údaje se uloží do soubru /etc/passwd a protože ten MUSÍ být čitelný pro všechny, uloží se zašifrované heslo do souboru /etc/shadow, existuje-li tento. Budete potřebovat minimálně nastavit heslo pro roota (správce, UID=0) příkazem passwd a vytvořit alespoň jednoho uživatele pod kterým budete normálně pracovat (nemůžete si pak poškodit systém ani když něco zhavaruje). Z počátku by jste neměli mít moc velkou potřebu sahat do inicializačních souborů, neboť většina distribucí nějaké použitelné obsahuje, ale vždycky je dobře vědět kde jsou a co dělají. První s těchto souborů, který se vždycky (snad) jmenuje stejně, je /etc/inittab. To je krypticky vyhlížející konfiguračňí soubor programu /sbin/init, který je kernelem automaticky spuštěn při nabootování (formát viz man). Asi do něj nebudete moc sahat, ale je v něm napsáno jméno hlavního iniciaizačního souboru a to na řádce, která vypadá nějak takhle: r1:1:wait:jméno_nějakého_souboru. Právě tento soubor bude spuštěn při přechodu do nové runlevel (1), což je zhruba řečeno mód činosti. Číslo 0 je vyhrazeno režimu halt ("Nyní můžete bez obav vypnout počítač"), číslo 6 režimu reboot (provede se reset) a písmeno S režimu single-user (tam se dostanete, když při bootu dojde k chybě). Čísla 1-5 a většinou 7-9 můžete použít jak potřebujete (většinou nepotřebujete). Přepnou mezi nimi můžete příkazem runlevel a do režimu 6 se navíc dostanete stiskem C-M-Del. Důležitější je ten soubor, který se při přechodu do nové runlevel zavolá. Obvykle se jedná o skript shellu (začíná řádkem #!/bin/sh). Ten se pak rozhodne, co má pro příslušné runlevly podniknout a zavolá další skripty (jejich jména se systém od systému liší). Posledními konfiguračními soubory jsou konfigurační soubory shellu. Pro bash jsou to /etc/profile a .bash_login .bash_rc .bash_logout (podívejte se do manu, jak se všecny jmenují) v domovském adresáři (). O ty si pečuje každý uživatel, jako správce vás zajímá hlavně /etc/profile. Jedná se rovněž o skript, ale protože si jej čte již běžící shell, nezačíná jménem interpretu. (To je to #! - to říká kernelu: "spusť tenhle program a předej mu tenhle skript!") Jednou z nejdůležitějších věcí, kterou budete muset udělat, je překompilovat kernel. Nemusíte mít ale strach, je to jednoduché. Vlezete do adresáře /usr/src/linux, kde se zdroják jádra obvykle nachází a napíšete příkaz make menuconfig (pout máte historický kernel, který menuconfig nepodporuje, pak jenom make config). Po chvilce přemýšlení na vás vybafne takové ďábelké menu (u starého konfigu na vás vybafne hafo otázek a to vás pak lituju), které celé prolezte do poslední opšny. Bude tam pár takovych, že nebudete vědět, o co go, tak s nima nehýbejte a ostatní nastavte tak, aby to odpovídalo vašemu počítači. No a pak dejte Exit, Save changes a napište příkazy make dep ; make clean ; make zlilo ; make modules ; make modules_install a jděte si udělat kafe, protože na mém pentiu se kernel kompiluje čtvrt hodiny, na 486 půl a na nějaké 386 si počkáte hodinu či dvě (kdyby to byly tři, tak se nevzrušujte -- i to je možné). Poznamenejmež, že příkazy make modules a make modules_install potřebujete pouze pokud jste nějaké části jádra jako moduly nastavili. To opšnítko zlilo mi připomíná, že na lilo a bootování kenelu a dělení disků vůbec jsem malinko pozapoměl. Hned to napravím. Takže, první co potřebujete udělat při instalaci Linuxu je linuxová partišna na disku (dá se pouštět Linux z DOSové partišny, ale nedoporučuju, neboť to humus). Většina instalací vám dá nějaký návod, ale pro případ nejvyšší nouze máme příkaz fdisk, který umí v podstatě to co v dosu, ale umí označovat partišny jako partišny jakéhokoliv systému a umí vytvářet více primárních partišnů (až čtyři, co se vejdou do tabulky). Budete potřbovat vytvořit jednu partišnu typu Linux native (na rozdíl od dosu se nevyžaduje, aby byla primární), jednu partišnu typu Linux swap a pak jaké další partišny se vám zlíbí (třeba DOS). Měl bych ještě říct, že partišny na IDE discích se označují jako /dev/hdxn, kde x je písmeno a, b, c, nebo d, které označuje číslo fyzického disku a n je číslo partišny, 1 - 4 pro primární a 5 - moc pro logické (v extern). Analogicky se SCSI disky označují jako /dev/sdxn (SCSI disků může být víc než 4)@ Poznamenejmež, že pokut máte moc disků či moc partišnů, tak budete muset vyrobit příslušné soubory v /dev příkazem mknod. Pak musíte vyrobit filesystémy. K tomu slouží příkazy mke2fs (pro Linux native, neboli ext2 (second extended) filesystém a mkswap (pro swap filesystem). Po nahrání souborů na novou linuxovou partišnu pak musíte systému sdělit, odkud bootovat. K tomu slouží soubory /etc/fstab a /etc/lilo.conf. Proberu jeden po druhém. Soubor /etc/fstab říká, které partitiony se mají mountovat příkazem mount. Jeho formát tvoří šest sloupců oddělených mezerami nebo tabulátory, z nichž první čtyři jsou podstatné. Tohle mám ve fstabu já: /dev/hda2 / ext2 defaults 0 1 none /proc proc defaults /dev/hda3 none swap /dev/hda1 /dog vfat user,rw,noauto /dev/cdrom /cd iso9660 user,ro,exec,noauto První řádek říká, že na druhé partišně je root filesystém -- tedy ten se systémovými soubory (co se namoutuje na /), je typu ext2 a namountuje se automaticky (opšna defaults). Druhý řádek je trochu speciální, protože mountuje virtuální filesystém /proc (neodpovídá žádnému disku), který poskytuje různé informace o systému. Třetí řádek označuje umístění swap partišny. Všiměte si, že se nemountuje na žádný adresář. Bude totiž přístupná pouze jako virtuální paměť. Čtvrtý řádek říká, že kterýkoliv uživatel může požádat o namountování W95 partitony (typ vfat) na adresář /dog a konečně poslední řádek říká, že si kterýkoliv uživatel může požádat o namountování cédéčka do adresáře /cd. (Mimochodem, VŠECHNA CD mají specilní filesystém iso9660!). Pokud nemáte Marešovu utilitu flop (vřele doporučuji -- viz http://atrey.karlin.mff.cuni.cz/mj), musíte přidat ještě řádky o disketách, něco jako: /dev/fd0 /fd0 ext2 user,rw,noauto /dev/fd0 /fd0dog msdos user,rw,noauto To by byl fstab a teď se vrhneme na lilo. V souboru /etc/lilo.conf. Tam je na začátku příkaz boot = nějaká_partišna. To je partišna ze které se bude bootovat (musí být označená jako bootable), nebo celý disk (nemá číslo partišny -- pak se lilo umístí do master bootu, což použijete, pokud nemáte jiný boot manager). Pak několik dalších opšnítek (viz man) a dále bloky image=soubor a other=disk s nějakými opšny. Bloky image=soubor ukazují na jednotlivé verze kernelu (můžete jich mít víc -- třeba síťový, nesíťový (aby zabral míň paměti) a odlaďovací). Nutné podopšny jsou label=jméno, které označují jaké jméno zadáte do LILO boot: promptu a root=partišna, které označuje, ze které partišny spustit /sbin/init. Bloku other=disk ukazují na partišny s jinými operačními systémy (které mají svůj bootsektor). Vyžaduje se pouze podopšn label=jméno. Po upravení tohoto souboru napište příkaz lilo (případně nějaké opšny - záleží na distribuci), čímž bude zařízeno bootování Linuxu. Upozorňuji, že lilo je třeba spustit znova po každé manipulaci se souborem kernelu (make zlilo se o to postará automaticky). Tak doufám, že vám něco z téhle spousty řečí k něčemu bude. A když budete mít nějaký problém, tak neváhejte zamejlovat do Výhně. Někdo z redakce Vám určitě ochotně poradí. - Bulb - výheň