Zajímalo vás, jak je možné ovládat unixové resp. linuxové systémy pouze z příkazové řádky (řečené též "komandlajna" - command line), a proč je tolik lidí, kteří tento způsob preferují? Pro ty, kteří začínají, se zde pokusím něco málo z kouzel poodhalit.
Pouštět se do pokusů ovládat unix přes příkazovou řádku ovšem nelze doporučit bez znalosti angličtiny. Nápověda a výstupy příkazů sice jsou dostupné i v češtině, většina věcí je však odvozena od anglických ekvivalentů.
Pro potřeby tohoto článku je potřeba, abyste věděli, alespoň co to je soubor a adresář.
Na Linux se dá "dostat" mnoha způsoby. Z MS Windows se nejčastěji na Linux přihlašujeme pomocí terminálu SSH - secure shell (např. putty). Přímo na počítači s Linuxem pak z konsole daného počítače (na ni se dostanete stiskem klaves Alt+F1). Pro přihlášení přes putty je potřeba znát jméno nebo IP adresu vzdáleného počítače a vaše uživatelské jméno a heslo, které budete muset zadat na dotaz:
login: {zadáte uživatelské jméno} password: {zadáte vaše heslo}
Objeví se terminál
a tzv. prompt:
[pribya2@plechovka ~]$
Prompt je konfigurovatelný, takže může vypadat i jinak. Jeho účelem je poskytnout uživateli důležité informace. V tomto případě jeho uživatelské jméno, jméno počítače a adresář, ve kterém se nachází (zde je to znak ~, což je zástupný znak pro domovský adresář).
Tím jsme se dostali do režimu práce s příkazovou řádkou.
Pozn.: Co to je shell, terminál, konsole a jaký je v tom rozdíl? Pro naše potřeby není třeba mezi těmito pojmy hledat rozdíl. Jedná se prostě o režim, který umožňuje pracovat s Linuxem přes příkazovou řádku. V MS Windows se mu říká DOS prompt nebo cmd nebo Command Prompt.
*NIX je unixová hříčka se zástupnými znaky, kterou se někdy označují systémy unixového typu, pokud o nich mluvíme obecně a nemáme na mysli žádný konkrétní.
Jiný způsob je přihlášení přes X-window server, což je grafické rozhraní, a to ať vzdáleně, nebo přímo u počítače. Grafickým rozhraním se nebudeme zabývat.
Šmankot nám moc nepomůže. Malý výlet do filosofie *NIXu ano.
Příkazová řádka (označovaná jako CLI - command line interface) je textové rozhraní, které nám umožňuje komunikovat se systémem unixového typu, zadávat mu příkazy, dotazy a modifikovat jeho činnost. Toto rozhraní vzniklo v době, kdy si o grafickém (GUI - graphical user interface), a tedy přenosově náročném, ovládání mohli uživatelé nechat jen zdát. Dodnes si tento způsob komunikace zachoval velkou míru efektivnosti, které mnohdy nelze s grafickými nástroji stále dosáhnout. Obecná filosofie unixu je taková, že vše lze ovládat pomocí této řádky - např. všechny konfigurace jsou v čitelných textových souborech atd.
Výhoda tohoto přístupu je především v tom, žeStejně tak jako s jinými lidmi komunikujete pomocí slov, i unix má jistou množinu slov - jazyk - kterými s vámi komunikuje. Této množině se říká příkazy a bez toho, abyste se naučili jazyk unixu, s ním z příkazové řádky budete komunikovat velmi obtížně. Protože však každý jednou začíná, jsou i v unixu připraveny nástroje, které vám začátky usnadní. Nejdříve zde vyjmenuji spoustu slov, kterým rozumí Linux, následně vysvětlím pouze jediný příkaz, pomocí kterého se o těch všech ostatních dozvíte to, co potřebujete vědět.
příkazysoubory: ls, cd, cp, mv, rm, mkdir, more/less, chmod, chown, cat, df, du, mc práce s textem: echo, grep (+ editory, viz níže) vzdálené soubory: ftp, scp, ssh, wget procesy: ps, bg, fg, kill uživatelé: who, whoami, id, su, exit práce s ovladači: modprobe, lsmod konfigurace sítě: ip, ifconfig, iwconfig info o systému: lspci, uname, top práce se zařízeními: (u)mount
Jak vidíte, slova jsou většinou velmi krátká (často se jedná o zkratky: cd = change directory, ls = list, rm = remove atd.) - důvod je jednoduchý. Všechny příkazy se musí psát, a proto je snaha, aby ty nejčastěji používané, byly co nejkratší.
! Nezapomínejte, že unix rozlišuje velká a malá písmena !
man - man neboli "manual", příručka. Tento příkaz vám o každém z výše zmíněných slov prozradí, co pod nimi unix chápe a jak bude rozumnět tomu, co se mu pokoušíte sdělit. Pokud tedy nevíte, co dělá příkaz ls napište man ls. Příkaz man vám umožňuje i vyhledávat podle klíčového slova - zkuste man -k editor.
Pokud se vám chování jakéhokoli příkazu nebude líbit, můžete ho ukončit stiskem Ctrl+c nebo pozastavit pomocí Ctrl+z.
Unixová struktura disků, adresářů (directory, pod MS Windows "složka" = folder) a souborů je do značné míry jiná, než jak ji prosazuje např. MS Windows. Všechny diskové kapacity, mechaniky apod. jsou v unixu dostupné z jedné stromové struktury adresářů, do které je připojují (mountují) jako další větve stromu. Výhody tohoto systému jsou nesčetné, jednou ze základních je transparentnost celé struktury, neexistující problémy se změnou umístění disku (a tedy např. prohození C: a D:), možnost libovolně rozšiřovat strukturu a tedy volné místo připojením dalších disků atd.
Celý strom jak známo začíná od kořenů a ne jinak je tomu i zde. Hlavnímu adresáři se říká root (kořen, neplést s označením správce systému, které je též root) a značí se /. Pokud tedy dáte cd / a ls, uvidíte kořeny (adresáře, složky) systému. Asi takto:
adresářová struktura /bin základní binární spustitelné soubory boot soubory pro start sytému - např. jádro dev všechna známá dostupná zařízení (myš, klávesnice, zvukové karty, disky, mechaniky..) etc všechna nastavení systému home domovské adresáře jednotlivých uživatelů lib knihovny systému media připojená multimediální zařízení mnt další připojená zařízení proc informace o procesech root domovský adresář správce systému (administrátora) sbin základní binární soubory spustitelné pouze správcem sys informace o systému tmp dočasné odkládací soubory usr adresáře a soubory aplikací var variabilní soubory aplikací
Každá ze složek má nějaký význam, který je popsán vedle ní. Příkaz mount nám pak vypíše, které zařízení (z /dev) je kam připojeno do stromu (+některé další věci):
mount/dev/sda6 on / type ext3 (rw) /dev/sda5 on /boot type ext3 (rw) /dev/sda8 on /home type ext3 (rw) /dev/sda1 on /mnt/dosc type vfat (rw,noexec,nosuid,nodev,showexec) /dev/hda on /media/cdrecorder type iso9660 (ro,nosuid,nodev)
Značení zařízení v Linuxu nebudeme příliš rozebírat, jeho konvence jsou poměrně složité a v tuto chvíli nepotřebné. Podstatné je si všimnout toho, že jednotlivé části disku /dev/sda jsou připojeny do různých větví stromu začínajícího v / - kde kořen je tvořen jednou částí disku. Všiměte si též, že je připojen i svazek typu vfat - to je souborový systém MS Windows, který ve windows můžete vidět jako C:, Linux samotný však žádný disk C: nemá. Z toho tedy plyne, že z Linuxu je možno bez problémů přistupovat na disk v MS Windows označený jako C: (pokud používá souborový systém FAT), ovšem je připojen jako větev do standardního adresářového stromu do adresáře /mnt/dosc. Do adresáře /media/cdrecorder je pak připojena CD-RW mechanika (pokud je do ní vloženo CD). Kam se které zařízení má připojovat zjistíte v souboru /etc/fstab.
Pokud pracujete z příkazové řádky, budete potřebovat každé vyměnitelné zařízení (diskety, cdrom atd.) připojovat ručně. To se dělá příkazem mount. Pokud do mechaniky vložíte CD a chcete ho připojit do struktury, abyste mohli číst jeho obsah provedete to např. příkazem
mount /media/cdrecorderPokud CD chcete opět vyndat, musíte ho nejdříve odpojit
umount /media/cdrecordera poté ho můžete i vysunout
eject /media/cdrecorder
Častým problémem (zvláště začátečníků) je to, že se pokoušejí odpojit zařízení, které je používáno, což systém také patřičně ohlásí např. takto:
umount: zařízení /media/cdrecorder je již používáno
V unixu není normálně možné odpojit zařízení, které je používáno jakoukoli aplikací. Pokud jste se tedy např. přesunuli do adresáře /media/cdrecorder příkazem cd /media/cdrecorder a zůstali jste v něm a tento terminál máte otevřený, nejde zařízení odpojit. Přesuňte se do jiného adresáře nebo aplikaci používající zařízení ukončete.
Pozn.: umístění a pojmenování zařízení se na různých systémech může lišit. Podrobnosti o způsobu připojování najdete v manuálové stránce příkazu mount. O předdefinovaných přípojných bodech najde informace v souboru /etc/fstab.
Dělat se s tím dá všechno. Na unixových systémech běží krásná desktopová prostředí, servery, které vám dávají k dispozici obsah WWW stránek, stejně tak jako existují i PDA používající Linux. Škála použitelnosti je velmi rozsáhlá a je jen na vás, které oblasti se budete věnovat.
Filozofie Linuxu je založena na několika základních prvcíchV základu existují na Linuxu pouze dvě skupiny uživatelů - root (správce systému, administrátor) a ostatní uživatelé.
root je všemocný uživatel, který má právo přístupu ke všemu a vše může měnit - to je jeden z hlavních důvodů, proč se v roli tohoto uživatele za normálních podmínek nikdy nepracuje, ale používá se pouze v případě administrativních operací - jak změnit svou roli se podíváme dále. Ostatní uživatelé mají práva podle skupin, ke kterým jsou přiděleni. Skupiny si na Linuxu můžete zakládat podle své vůle a nemá cenu je více rozebírat. Podstatné je se podívat na to jak se povoluje nebo omezuje přístup k souboru (a tedy i zařízení atd.).
Vypíšete-li si obsah nějakého adresáře příkazem ls -l, uvidíte o každém souboru podrobné informace, např. takto:
práva uživatel skupina velikost změněn jméno souboru -rwxr-xr-- 30 pribya2 pribya2 3234 úno 28 13:11 test drwxr-xr-- 1 pribya2 pribya2 4096 bře 8 19:23 Moje práce
Co tato změť výpisu znamená? Řetězec "-rwxr-xr--" určuje typ souboru, práva čtení, zápisu a spouštění pro vlastníka, skupinu a všechny ostatní uživatele. První písmeno slouží k rozlišení souborů, adresářů a dalších speciálních typů souborů. Druhý řádek výpisu tedy říká že se jedná o adresář "Moje práce". Další tři písmena "rwx" říkají, že vlastník může soubor číst, zapisovat a spouštět, druhá trojice "r-x" říká, že skupina, ke které je soubor přidělen, může soubor číst a spouštět, nikoli do něj zapisovat. Poslední trojice určuje práva pro všechny ostatní uživatele - tedy ty, kteří nejsou ani vlastníky souboru ani nenáleží do skupiny. Ti mohou soubor pouze číst "r--". Uživatelské jméno vlastníka vidíte v dalším sloupci, za ním pak jméno skupiny, které je soubor přidělen.
Práva se mění příkazem chmod, vlastník a skupina chown a jistě již víte, jak si o těchto příkazech zjistit více (nápověda - použijte příkaz man chmod).
Změnit svou roli, ať už na správce systému nebo na jiného uživatele, můžete, pokud znáte jejich heslo, pomocí příkazu su uzivatelske_jmeno.
K souborům se v první řadě musíme dostat - a to skrz adresářovou strukturu. K tomu slouží příkaz cd (change directory). Cestu můžeme psát buď relativní (tedy vzhledem k místu, kde se nacházíme)
cd prvni/druhy/treti/Moje\ prácenebo absolutní
cd /muj/domovsky/adresar/prvni/druhy/treti/Moje\ prácetedy vzhledem k root (/) adresáři.
cd ..analogicky cd ../../.. pro postup zpět o více adresářů.
cd nebo cd ~~ je zástupný znak za absolutní cestu k vašemu domovskému adresáři (např. /home/pribya2).
K práci se soubory jsou určeny především příkazy výše zmíněné na řádce "soubory". Soubory se standardně dají kopírovat (cp), přesouvat (mv), přejmenovávat (mv - přejmenování souboru je vlastně jeho přesun do souboru s jiným jménem) a mazat (rm). Do souborů ovšem zpravidla také chceme přidávat data. To lze mnoha způsoby, nejlepší je použít nějaký editor, o editorech si povíme v další části. Zde si ukážeme použití standardního výstupu příkazu echo a jeho přesměrování do nového souboru nebo přidání na konec souboru existujícího.
echo "Toto je standardni vystup"způsobí vypsání textu na obrazovku, která je standarním výstupem (STDOUT) příkazu echo. STDOUT lze přesměrovat do souboru takto:
echo "Toto je presmerovani standardniho vystupu do souboru" > mujsouborTím jsme založili, případně smazali a znovu založili soubor "mujsoubor". Pokud bychom ovšem již existující soubor nechtěli mazat, ale text do něj jen přidat, postupujeme následovně
echo "Toto je presmerovani standardniho vystupu a jeho pridani do souboru" >> mujsouborKdyž si nyní vypíšete obsah souboru "mujsoubor" - např. příkazem
more mujsouboruvidíte obsah souboru "mujsoubor" na standardním výstupu příkazu more, kterým je v tomto případě obrazovka.
Ještě zajímavější věci však lze dosáhnout přesměrováním STDOUT na standardní vstup (STDIN) dalšího příkazu
echo "Toto je presmerovani standardniho vystupu na standardni vstup jineho prikazu" | tr e EK přesměrování, odeslání, výstupu příkazu echo na vstup dalšího příkazu tr se používá znak "|", neboli roura (pipe). V tomto případě se jedná o značně neužitečný příklad. Využitím tohoto principu se ovšem dají vytvořit velmi zajímavé konstrukce.
Pozn.: Příkazy opisujte pečlivě i s mezerami. Většinou jsou velmi důležitou součástí příkazu a nelze je opomenout.
Wildcards (divoké karty, žolíky, zástupné znaky) jsou podmnožinou daleko větší skupiny, které se říká regulární výrazy. Detailně se o regulárních výrazech bavit nebudeme, protože to zavání složitostí, zmiňuji je jen proto, abyste věděli, co hledat, v případě zájmu o další informace. Věnovat se budeme jen wildcards.
Základní představa zástupných znaků, je taková že ? nahrazuje jeden libovolný znak, * zastupuje libovolné množství libovolných znaků. Se zástupnými znaky si budeme více hrát v některé další části.
Co je podstatné je si uvědomit, že soubory se nerozlišují podle přípony, ale podle obsahu.
Každý příkaz, který vyvoláte, spustíte, se stává procesem - tedy je zařazen do seznamu úloh, které systém vykonává. Různě formátovaný seznam úloh běžících na systému si můžete vypsat příkazem ps (processes) a vhodně zformátovat použitím parametrů. Pokud použijete cosi jako ps aux,
PID Uid VmSize Stat Command 1 root 364 S init 2 root SW [keventd] 3 root RWN [ksoftirqd_CPU0] 4 root SW [kswapd] 5 root SW [bdflush] 6 root SW [kupdated] 66 nobody 344 S boa -c /var/www -f /etc/boa.conf 73 root 268 S /sbin/getty 38400 tty1 74 root 268 S /sbin/getty 38400 tty2 75 root 268 S /sbin/getty -L ttyS0 115200 9600 linux 76 root 340 S /sbin/syslogd -n -m 0 77 root 312 S /sbin/klogd -n 78 root 1016 S /usr/sbin/sshd 79 root 248 S /usr/bin/tail -f /var/log/messages 82 root 1236 S /usr/sbin/sshd: root@pts/0 84 root 940 S -sh 90 pribya2 908 S -sh 97 pribya2 336 R ps aux
vidíte výpis všech úloh, které systém zpracovává. Na posledním řádku vidíte, že i příkaz ps aux se stal procesem. Každý proces má tzv. PID - jeho identifikační číslo. Pokud jste tedy vlastníkem procesu (sloupeček Uid), můžete se na proces obořit třeba příkazem kill PID a tím jeho činnost ukončit.
Procesy mohou být vykonávány buď interaktivně - tzn. zjednodušeně řečeno, můžete do jejich běhu zasahovat pomocí klávesnice, nebo neinteraktivně - tzv. na pozadí. Většina systémových procesů běží na pozadí - zde např. vidíte webový server "boa" jako proces číslo 66. Zvláště pokud pouštíte nějaký služební proces, nebo něco, co bude trvat dlouho, je záhodno to pustit na pozadí, což se dělá tak, že se na konec řádky s příkazem přidá &.
Např. stahování uVexu na pozadí můžete provést taktowget -q http://sandbox.cz/~covex/linux/uVex-3.0.tar.gz &
Kontrolu nad příkazem můžete opět převzít příkazem fg, na pozadí ho můžete opět odeslat po pozastavení pomocí Ctrl+z, příkazem bg (pouze z terminálu, kde jste příkaz vyvolali).
Pokud příkaz neutišíte (zde parametr -q), nebo nepřesměrujete výstup pomocí >, bude se vám výstup příkazu vypisovat do terminálu. Krom toho, že vás to může rušit, se však vůbec nic neděje.
Jak jsem napsal, vše je soubor, a v mnoha případech i dobře čitelný. Jak takový soubor změnit?! Většinou jsme zvyklí na to, že soubor se dá měnit v nějakém editoru. Na úrovni příkazové řádky existuje několik textových editorů. Jedním ze základních je vi. Je to editor, který naleznete snad na každém unixovém systému, jeho vzhled a ovládání je však pro většinu začátečníků věcí zcela nepochopitelnou. Krapet podrobněji bude o vi v další části, zde jen stručně o dalších editorech dostupných přes textové rozhraní.
joe, emacs, pico, nano, fte, mc
Domnívám se, že asi nejlépe se vám bude pracovat s nano, joe nebo fte (který má stejné ovládání jako známé prostředí IDE Borland Turbo Vision). Problém těchto editorů je v tom, že nemusí být na každém systému nainstalovány.
Velmi zajímavé může být použití interaktivního shellu, neboli správce souborů Midnight Commander, který je obdobou stejných "commanderů" známých z DOSu, resp. MS Windows. V mc je zabudován i poměrně komfortní editor, který podporuje i zvýrazňování syntaxe. Pokud je na vašem systému dostupný, určitě jej vyzkoušejte.
V momentě, kdy umíte v Linuxu editovat, můžete ovládat vše - konfigurovat servery, stejně tak jako psát webové stránky nebo diplomovou práci v C++ a dokumentaci k ní v LaTeXu - k žádné z těchto činností nepořebujete grafické rozhraní. To, co vás bude zajímat nejvíce, jsou konfigurační soubory různých služeb a ty naleznete v již zmíněném adresáři /etc. Kde který "konfigurák" je, už si ovšem musíte zjistit z dokumentace té které aplikace.
Vi je postavený tak, že může fungovat na klávesnici bez funkčních kláves. Vzniklo to sice z historických důvodů, ovšem i dnes se to ve zmatku kolem různých rozložení klávesnic občas hodí. Funguje v několika módech - tzv. příkazovém módu, do kterého se přechází jedním nebo více stisknutími klávesy Esc (escape), kdy klávesy nepíší písmena, ale vykonávají nějaký příkaz pod klávesou skrytý, v módu příkazové řádky, do kterého se dostanete z příkazového módu stiskem shift+; (tedy ":") a umožňuje vám zapsat různé složitější příkazy pro vi, a jako poslední je mód, ve kterém se dá psát, a do kterého se přepnete z příkazového módu stiskem (příkazem)
"i" - vkládání (insert), případně "o" - přepisování (overwrite) nebo "a" - připojení (append).
Největší problémy hned ze začátku při použití vi nastávají s tím, jak se tohoto editoru zbavit, jak z něj vyskočit, jak ho sakra ukončit...
Pokud chcete vi opustit bez uložení změn, které jste napáchali, použijte sekvenci:
Esc : q !
Pokud byste náhodou chtěli své změny před odchodem uložit, použijte sekvenci:
Esc : w q
Je na čase ukázat si něco z těch kouzel, která se s příkazovou řádkou dají dělat. Začneme od jednodušších.
Smazání všech souborů, které začínají písmenem "a", pak mají dva libovolné znaky, pak písmeno "b", libovolné množství dalších znaků a končí příponou ".jpg"
rm a??b*.jpg
pokud je chceme smazat ve všech podadresářích o jeden adresář hlouběji, uděláme to takto:
rm */a??b*.jpgVypsání všech procesů (aplikací),
ps auxkteré má spuštěny uživatel "pribya2"
ps aux | grep pribya2Příkaz grep "vyřezává" z výpisu řádky které obsahují řetězec "pribya2". Ve výpisu je ale zbytečně moc informací, takže si zkusíme vypsat jen identifikační čísla procesů (PID) a jména aplikací
ps axu | grep pribya2 | tr -s " " | cut -d\ -f2,11
Pozn. za -d\ jsou dvě mezery; -f2,11 určuje čísla sloupců která chceme vystřihnout. V závislosti na tvaru výpisu příkazu ps může být pořeba čísla změnit na jiná
Kouzelné jsou též textové verze různých nástrojů jinak známých především z grafických prostředí a tak existuje např.:
lynx, links webový prohlížeč mp3blaster, mpg123 přehrávač mp3 notlame komprimace mp3 pine, mutt email mc správa souborů mICQ, centerICQ ICQ klient irssi IRC klient imcom jabber klient mplayer přehrávač videa - ano umí i ASCIIart výstup aumix zvukový mixer bc kalkulačka mutella, nap, ldcc gnutella, napter, DC atd...
Linux si můžete bez problémů vyzkoušet doma bez nutnosti ho instalovat, stačí mít PC s CDROM mechanikou, ze které je možné nabootovat (nastartovat) počítač. Velmi pěkná distribuce je Slax (mimochodem vytváří ji Čech) a najdete ji na stránkách http://www.slax.cz/, včetně varianty kompletně v češtině. Vejde se na malé CD (180MB) a obsahuje pěkné grafické rozhraní.
Poněkud obsáhlejší a z toho důvodu i nepřehlednější je Knoppix, jehož webové stránky najdete na http://www.knoppix.de. Na něj si však připravte celé CD 650MB.
Tyto distribuce nepotřebují ke svému běhu váš existující systém ani pevný disk a nebudou na něm tedy nic měnit. Někdy vám ale umožní přistupovat k datům na vašem pevném disku.
Nezapomeňte, že Linux je možné spustit na nepřeberném množství počítačových architektur, a tak zrovna na tom vašem počítači nemusí u těchto CD Live (systém spustitelný přímo z CD) distribucí (určených pro architekturu běžného PC) fungovat vše bez problémů hned na poprvé. Stává se, že je potřeba provést malý zásah (např. právě z příkazové řádky), aby některá komponenta systému fungovala podle vašich představ. Rady k nejrůznějším problémům najdete na internetu buď na stránkách daných distribucí, nebo v různých diskusních fórech a skupinách.
Upozorňuji, že v mnoha ohledech je práce s Linuxem jiná a je jen na vás, na jaké úrovni se rozhodnete s ním komunikovat. Zde jsme se zabývali pouze prací z příkazové řádky.