Je dost těžké stát se úspěšným bez spouštění programů. Možná můžete svým počítačem něco podepřít, nebo jím udržovat dveře otevřené a něco bude vydávat ten nejmilovanější bzukot, když to poběží. Tak to opravdu jde. Jenže já si mysím, že všichni budou souhlasit, že využití počítače jako bzučící zarážky dveří není to, co by osobním počítačům přineslo tu oblíbenost, které se těší.
Takže, vzpomínáte si jak téměř vše v Linuxu ja souborem? Ano? Tak pro programy to platí taky. Každý příkaz, který zadávate (není-li zabudován v shellu) sídlí někde jako soubor. Programy spouštíte jednoduše tak, že zadáte plnou cestu k tomuto souboru.
Například: Vzpomenete si na onen příkaz su z minulé kapitoly? No, tak ten je vlastně v adresáři /bin a zadání /bin/su ho hezky spustí.
No ale, jaktože to fungovalo, když jsme zadali jenom su? Skutečně jsme neřekli, že to je v /bin. Klidně to mohlo být v /usr/local/share, že jo? Tak jak to ví? Odpověď najdeme v proměnné prostředí PATH (cesta). Většina shellů má svou PATH, nebo něco podobného. Ta obsahuje seznam adresářů, které se mají prohledat, zda je tam příkaz, který se pokoušíte spustit. Takže, když spouštíte su, tak váš shell projde svůj seznam adresářů, aby zjistil, v kterém z nich se nachází spustitelný soubor jména su, který by mohl spustit. První odpovídající, který najde pak spustí. To se děje pokaždé, když spouštíte program bez toho, že byste uvedli úplnou cestu k němu. Pokud obdržíte chybovou hlášku "Command not found" (příkaz nenalezen), tak to znamená jen to, že program, který jste se pokusili spustit není ve vaší cestě (PATH). No, taky to může nastat, když ten program neexistuje vůbec. O proměnných prostředí se budeme bavit detailněji v kapitole Bourne Again Shell (bash).
Pamatujte si, že zápis "." je kratší, než "/adrsář/kde/jsem", takže stane-li
se, že jste v adresáři /bin, pak zápis
./su bude pracovat stejně jako explicitní uvedení
celé cesty (/bin/su).
(pp: Zkrátka "." je odvolávka na adresář, v němž
se právě nalézáte.)
Snad každý shell rozpoznává určité znaky jako náhražky či zkratky s významem "sem se hodí cokoliv". Takové znaky se nazývají případně "wildcards" (žolíky). Nejobvyklejšími jsou * a ?. Je zažité, že ? obyčejně nahrazuje jakýkoliv jeden znak. Například předpokládejme, že jste v adresáři, kde se nalézají tři soubory: example1.txt, example2.txt a example3.txt. Budete chtít zkopírovat všechny tyto soubory (příkazem cp, který popisujeme v sekci cp v 10. kapitole) do jiného adresáře, řekněme /tmp. Můžeme použít zápis cp example1.txt example2.txt example3.txt /tmp. Ale je snazší napsat cp example?.txt /tmp. Znak ? se hodí místo kteréhokoliv ze znaků "1", "2" a "3" a v každém kole jím bude nahrazen.
Co tomu říkáte? Že to je pořád moc práce? Máte pravdu. Je to strašné. Máme přece zákoník práce, aby nás před takovou dřinou chránil. Naštěstí máme ještě *. Jak už bylo zmíněno, * nahrazuje "jakékoliv množství libovolných znaků" (i žádný znak). Takže kdyby ty tři soubory byly v onom adresáři jedinými, mohli bychom jednoduše napsat cp * /tmp a dostat je všechny jednou ranou. Předpokládejme dále, že je tu ještě soubor example.txt a soubor hejaz.txt. Chceme zkopírovat example.txt, ale ne už hejaz.txt. cp example* /tmp nám to udělá.
cp example?.txt /tmp by dostal jen naše původní tři soubory, protože v example.txt není žádný znak, který by se místo ? dosadil.
(Teď přichází něco bezva.)
$ ps > blargh |
Víte co to je? To jsem já, když spouštím ps, abych viděl, které procesy právě běží. Příkaz ps je popsán v 11. kapitole. To ještě nebyla ta bezva věc. Tou bezva věcí je > blargh, které znamená "vezmi výstup z ps a zapiš jej do souboru jména blargh". A počkejte, bude to ještě bezvadnější.
$ ps | less |
To vezme výstup z ps a pomocí roury (pipe) jej předá příkazu less, který mi umožní, abych tím výpisem mohl rolovat nahoru a dolů jak chci.
$ ps >> blargh |
Toto je třetí nejpoužívanější přesměrování. Dělá totéž jako ">", s tí rozdílem, že ">>" připojí výstup z ps na konec souboru blargh, když už existuje. Pokud ještě neexistuje, tak stejně jako v případě ">" bude vytvořen. (">" přepíše (nahradí) současný obsah souboru blargh.)
Ještě je tu operátor "<", který říká: "vezmi si jako vstup následující", ale to se nepoužívá tak často.
$ fromdos < dosfile.txt > unixfile.txt |
Přesměrování se stává opravdovou zábavou ve chvíli, kdy je začnete kupit:
$ ps | tac >> blargh |
To spustí ps, otočí pořadí řádků ve výstupu (tac) a připojí je na konec souboru blargh. Přesměrování můžete za sebe naskládat tolik, kolik chcete. Jen si zapamatujte, že jsou vyhodnocována zleva doprava.
V manuálových stránkách bash(1) najdete více informací o přesměrovávání.