* **
* * * **
******** *
*
* * * ** * * * *
* * * ** * * * * *
* ** ** * * * * *
* * * *** * ** ** *
**** * * ** * ** ** * *
* * ** ** * * * * * * * * * * *
** *** ** * ** *** *** **
******************
************************************
*********** *********
******* 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ň