Hlavní navigace

Triky pro začátečníky (5)

18. 8. 2000
Doba čtení: 5 minut

Sdílet

Posledně jsem začal s modularizací příkazů, takže teď s ní budeme pokračovat. Ukážeme si pár dalších příkladů využití roury a přejdeme k přesměrování vstupu a výstupů.

Na konci minulého dílu jste měli napsat příkaz, který vypíše tři přihlášené uživatele za pomocí příkazů who a tail. Pokud jste napsali who | tail -n 3, máte pochvalu. Program who vypisuje uživatele, kteří jsou právě přihlášeni do systému a datum, kdy se přihlásili. Program tail zase vypisuje posledních deset řádků ze standardního vstupu. Parametr n mění počet vypisovaných řádků. Takže teď už je vám doufám jasné, jak jsme se dostali k výslednému příkazu.

Jenže když už jsme se dostali k tak zajímavým příkazům, možná bychom se na ně mohli podívat trochu hlouběji. Například tail se s úspěchem používá při administraci serveru, odlaďování konfigurace či programování. Pokud zadáte jako jeho parametr název souboru, bude se vypisovat konec tohoto souboru a ne standardní vstup.

Obecně velká část programů čte ze standardního vstupu, pokud nespecifikujete soubor parametrem. Jiné příkazy požadují, abyste jim explicitně přikázali používat standardní vstup pomocí pomlčky. Ukažme si to například na příkazu gzip. Gzip je velmi dobrý kompresní program, o něco lepší než arj či zip a na úrovni raru. Pokud chcete zkomprimovat soubor dlouhy.txt, napíšete toto: gzip dlouhy.txt. Vznikne vám soubor dlouhy.txt.gz. Pokud ale chcete zkomprimovat standardní vstup, použijete následující příkaz: gzip – > vstup.gz. Jejda, teď jsem vám prozradil, jak se dělá přesměrování standardního výstupu do souboru. Každopádně pokud spustíte výše uvedený příklad, vše, co napíšete, se zkomprimuje a výsledek se uloží do souboru vstup.gz. Až budete se psaním hotovi, stisknete zároveň Ctrl a d. Tento dvojhmat generuje znak konec souboru a ukončí tedy čtení z klávesnice. Takže pomlčka vám určuje, že program má číst údaje ze standardního vstupu. Pokud vás zajímá komprese, tak si budete muset počkat na připravovaný delší článek pro LinuxWorld a týdeník ComputerWorld.

Trošku jsem odbočil, takže se vrátím zpět k příkazu tail. Mnoho administrátorů jej používá na prohlížení systémových záznamů v adresáři /var/log. Tyto soubory mívají totiž tisíce řádků a nejnovější události se připisují na jejich konec. Jistě uznáte, že ani použití komfortního příkazu less v takovém případě moc pohodlné není. A v takovém případě odvede tail skvělou službu. Zadáte například tail /var/log/messages a shell vám vrátí chybu Přístup odmítnut, protože z daného souboru může číst jen root. No nic, zkusíme jiný soubor. Třeba /var/log/dmesg, který obsahuje kopii všech zpráv z jádra při startu počítače. Pokud máte rootovská práva, zkuste si prohlédnout soubor messages. Je to moc užitečné čtení a každý administrátor by se měl každé ráno, poledne i večer do něj kouknout a ověřit si, že je vše v pořádku.

Většina služeb (démonů) může být nastavena tak, aby veškeré chyby (varování) zapisovala skrze systémovou službu do tohoto souboru. Takže pokud něco konfigurujete (například DNS server), zde zjistíte, kde děláte chybu. Obvykle v jednom terminálu editujete konfigurační soubor, v druhém restartuje službu a ve třetím sledujete výpis souboru messages. Jenže pokaždé tam psát příkaz tail by bylo moc pracné. Pozorní čtenáři minulých dílů by jistě použili klávesu šipku nahoru a vytáhli by tento příkaz z historie. Jenže stejně jsou to dva úhozy. Já jsem docela líný tvor, takže bych si ušetřil práci přidáním parametru f: tail -f /var/log/messages. Díky němu totiž příkaz tail neskončí výpisem posledních X řádků, ale zůstane čekat, zda soubor nebude narůstat a veškeré nové řádky okamžitě vypíše. Jak prosté a geniální jako celý Unix! Až vás výpis omrzí, příkaz ukončíte standardním stiskem Ctrl-c, tedy současným stiskem kláves Ctrl a c. Takto se zabíjejí příkazy, které běží na vašem terminálu.

Ještě bych se chtěl zmínit o jednom dalším užitečném příkazu, souvisejícím s příkazy who a w a tím je whoami. Angličtináři už tuší, co bude dělat. Správně, vypíše vám, pod jakým uživatelem jste přihlášeni (who am i – kdo jsem). Příkaz má několikeré využití. Za prvé, pokud jste správce a používáte příkaz su (man su) pro změnu identity, pak vypíše vám, v koho jste se právě proměnil. Za druhé, pokud se dostanete ke stanici, která není uzamčená, můžete takto snadno zjistit, kdo je na ni přihlášený (a jste-li správce, následně mu vynadat za tuto nepozornost). A za třetí, lameři mohou tímto zoufalým pokusem hledat zapomenutý rootovský shell :-).

Na začátku jsem vám slíbil nějaké příklady. Nějaké jsem našel v diskusi k minulému článku a tak je hned použiju. Snad to nebude jejich autoru RWS vadit.
du | grep -i -e ‚\.\(/[^/]\+)\?$‘ | sort -n | less
Tento příkaz vám vypíše velikost obsaženého prostoru všech podadresářů aktuálního adresáře. Standardně příkaz du prochází a hlavně zobrazuje rekurzivně všechny podadresáře. Jenže pokud jsou podadresáře hodně rozvětvené a vás zajímají pouze součty podadresářů první úrovně, pak je tento příklad ideální.

Pojďme si výše uvedený příkaz rozebrat. Nejdříve se spustí příkaz du. Z jeho výstupu jsou pomocí grepu odfiltrovány všechny řádky, které obsahují více než jedno dopředné lomítko v názvu souboru. Jinými slovy, zůstanou pouze podadresáře aktuálního adresáře. No, snad mi rozumíte. V předposlední části příkladu se spustí program sort, který setřídí všechny řádky podle velikosti. A nakonec se vykoná less, abyste si mohli pohodlně přečíst výsledek, který může vypadat takto:

UX DAy - tip 2

132     ./co_je_v
440     ./kratce
472     ./jaderne_noviny
3128    ./clanky
4188    .

Pokud se vám příkaz líbí, tak si z něj udělejte další příkaz na vašem systému. Já jsem si jej vložil do souboru /usr/local/bin/dud.

To je pro dnešek vše, zase jsem nestihl vše, co jsem chtěl. To už je asi tradice. Můj kamarád Tomáš Zlý má pravdu, když říká, že seriál je správně chaotický. Dnes jsem se od rour dostal k vysvětlování příkazů tail, w, who, gzip, ke standardnímu vstupu i ke klávesovým zkratkám Ctrl-C a Ctrl-D :-). Ale hlavní je, že se vám seriál líbí. Pokud máte návrhy na pokračování či tipy, klidně mi je zašlete a já se na ně (někdy) podívám.

Byl pro vás článek přínosný?