SShheellll vv ppřřííkkllaaddeecchh aanneebb AABBYY VVÁÁŠŠ UUNNIIXX SSKKVVĚĚLLEE SSHHEELLLL Libor Forst matfyzpress PRAHA 2010 i Všechna práva vyhrazena. Tato publikace ani žádná její část nesmí být re pro du ko vá na nebo ší ře na v žádné formě, elek tro nic ké nebo me cha nic ké, včetně fo to kop ií, bez pí sem né ho sou- hla su vydavatele. © Libor Forst, 2010 © MATFYZPRESS, vydavatelství Matematicko-fyzikální fakulty Univerzity Karlovy v Praze, 2010 ISBN 978-80-7378-152-1 ii OBSAH ABY VÁŠ UNIX SKV(cid:267)LE SHELL.........................................................................1 PODROBNÝ OBSAH...............................................................................................3 (cid:253)ÁST 1 ÚVOD.................................................................................................19 1.1. ZA(cid:253)NEME ZLEHKA...................................................................................21 1.2. P(cid:283)IDÁME PARAMETRY..............................................................................22 1.3. POPRVÉ KOMBINUJEME............................................................................24 1.4. DALŠÍ P(cid:283)ESM(cid:267)ROVÁNÍ.............................................................................26 1.5. NEPATRN(cid:267) P(cid:283)IDÁME................................................................................27 1.6. A ZASE UBEREME.....................................................................................28 1.7. ZAMETÁME STOPY...................................................................................29 1.8. DÁREK K NAROZENINÁM..........................................................................30 1.9. HV(cid:267)ZDI(cid:253)KA..............................................................................................31 1.10. ZÁLUDNÁ JMÉNA.....................................................................................32 1.11. PRVNÍ PROGRAM VSHELLU......................................................................34 1.12. PO(cid:253)ÍTÁNÍ SOUBOR(cid:291) LÉPE.........................................................................36 1.13. PO(cid:253)ÍTÁNÍ PODADRESÁ(cid:283)(cid:291).........................................................................38 1.14. PO(cid:253)ÍTÁNÍ DO HLOUBKY............................................................................39 1.15. ROZSAH (cid:283)ÁDEK........................................................................................42 1.16. SLOUPE(cid:253)KY.............................................................................................43 1.17. ZE SLOUPE(cid:253)KU (cid:283)ÁDKA.............................................................................45 1.18. A NAOPAK................................................................................................46 1.19. ST(cid:283)ÍHÁNÍ A SLEPOVÁNÍ JINAK..................................................................49 1.20. SEZNAM SKUPIN BEZ POMOCI...................................................................50 1.21. NA CO N(cid:291)ŽKY NESTA(cid:253)Í............................................................................52 DALŠÍ NÁM(cid:267)TY NA PROCVI(cid:253)ENÍ.............................................................................53 (cid:253)ÁST 2 PRÁCE SE SOUBORY.....................................................................21 2.1. POŠTOVNÍ SCHRÁNKA..............................................................................57 2.2. NOVÝ P(cid:283)ÍKAZ PRO SKLEROTIKY...............................................................59 2.3. NOVÝ P(cid:283)ÍKAZ PRO LENIVÉ.......................................................................60 2.4. NOVÝ P(cid:283)ÍKAZ PRO NEROZHODNÉ.............................................................62 2.5. KOPÍROVÁNÍ LINK(cid:291)..................................................................................65 2.6. P(cid:283)ESUN LINK(cid:291).........................................................................................67 2.7. JAK VYROBIT NIC.....................................................................................68 2.8. P(cid:283)ÍKAZ PRO DR. WATSONA......................................................................69 2.9. TAKHLE NE, MILÝ WATSONE...................................................................70 iii 2.10. KAŽDÉMU, CO MU PAT(cid:283)Í..........................................................................72 2.11. KDO JE KDO..............................................................................................73 2.12. T(cid:283)ÍD(cid:267)NÍ...................................................................................................74 2.13. T(cid:283)ÍD(cid:267)NÍ S KLÍ(cid:253)EM....................................................................................75 2.14. T(cid:283)ÍD(cid:267)NÍ S PROBLÉMY...............................................................................76 2.15. T(cid:283)ÍD(cid:267)NÍ „JINDE“......................................................................................77 2.16. UNIKÁTNÍ T(cid:283)ÍD(cid:267)NÍ...................................................................................78 2.17. NAJDI DESET ROZDÍL(cid:291)..............................................................................79 2.18. NA NÁVŠT(cid:267)V(cid:267) U DATABÁZÍ......................................................................80 2.19. VSTUP VERSUS PARAMETRY.....................................................................82 DALŠÍ NÁM(cid:267)TY NA PROCVI(cid:253)ENÍ.............................................................................84 (cid:253)ÁST 3 EDITORY..........................................................................................59 3.1. DÉJÀ VU...................................................................................................87 3.2. (cid:253)ÍSLA (cid:283)ÁDEK...........................................................................................89 3.3. SLOŽIT(cid:267)JŠÍ VÝB(cid:267)R....................................................................................90 3.4. P(cid:283)EHAZOVÁNÍ SLOUPC(cid:291)..........................................................................92 3.5. HLEDÁNÍ DUPLICIT...................................................................................94 3.6. HLEDÁNÍ (cid:253)ÍSEL........................................................................................95 3.7. HLEDÁNÍ SLOV.........................................................................................97 3.8. ST(cid:283)ELBA NA POHYBLIVÝ CÍL....................................................................98 3.9. DALŠÍ, PROSÍM.......................................................................................100 3.10. CYKLUS.................................................................................................102 3.11. P(cid:283)IDÁVÁNÍ (cid:283)ÁDEK.................................................................................104 3.12. ÚSCHOVNA ZAVAZADEL........................................................................106 3.13. CO NA NÁDRAŽÍ NESNÁŠEJÍ....................................................................107 3.14. JEŠT(cid:267) JEDNOU DO ÚSCHOVNY.................................................................109 3.15. ZALOMENÉ (cid:283)ÁDKY.................................................................................110 3.16. PAM(cid:267)(cid:289)...................................................................................................111 3.17. VERTIKÁLNÍ ZRCADLO...........................................................................113 3.18. LEPORELO..............................................................................................115 3.19. EDITACE SOUBORU.................................................................................116 3.20. AKTUÁLNÍ (cid:283)ÁDKA..................................................................................118 3.21. GLOBALIZACE........................................................................................119 3.22. HORIZONTÁLNÍ ZRCADLO......................................................................121 3.23. MAŠINKA...............................................................................................123 DALŠÍ NÁM(cid:267)TY NA PROCVI(cid:253)ENÍ...........................................................................127 iv (cid:253)ÁST 4 SHELL...............................................................................................87 4.1. EXPANZNÍ ZNAKY..................................................................................131 4.2. PROGRAMOVÁNÍ „ON-LINE“...................................................................132 4.3. POUŽITÍ PROM(cid:267)NNÉ................................................................................133 4.4. DEFINICE PROM(cid:267)NNÉ.............................................................................134 4.5. JAK NAMALOVAT „OBRÁZEK“................................................................135 4.6. PROM(cid:267)NLIVÁ (cid:283)ÁDKA.............................................................................138 4.7. ODD(cid:267)LOVA(cid:253) POLÍ..................................................................................140 4.8. ZPRACOVÁNÍ CHYB................................................................................142 4.9. ŠET(cid:283)ÍME DISKY......................................................................................143 4.10. (cid:253)TENÍ „PER PARTES“..............................................................................144 4.11. KDYŽ READ NE(cid:253)TE..................................................................................145 4.12. KDYŽ READ PARSUJE...............................................................................147 4.13. PARAMETRY...........................................................................................148 4.14. HELLO, WORLD......................................................................................149 4.15. ŠKATULATA, HEJBEJTE SE......................................................................150 4.16. DYNAMICKÝ VSTUP...............................................................................152 4.17. AK, PAK.................................................................................................155 4.18. AK, PAK, INAK.......................................................................................156 4.19. KDYŽ IF NESTA(cid:253)Í..................................................................................159 4.20. P(cid:283)ÍKAZ CASE NARUBY............................................................................161 4.21. CYKLUS S P(cid:283)EKVAPENÍM.......................................................................162 4.22. CYKLUS BEZ P(cid:283)EKVAPENÍ......................................................................164 4.23. CYKLUS, JAK HO (NE)ZNÁME.................................................................166 4.24. POTÍŽE S RELATIVITOU...........................................................................168 4.25. AMOEBA................................................................................................171 4.26. JAK NA PARAMETRY...............................................................................173 4.27. PARAMETRY LÉPE..................................................................................176 4.28. PARAMETRY DO T(cid:283)ETICE.......................................................................177 4.29. POSLEDNÍ PARAMETR.............................................................................182 4.30. NEZNÁMÝ FORMÁT................................................................................184 4.31. INTERAKTIVNÍ MAZÁNÍ..........................................................................185 4.32. REKURZE A PROM(cid:267)NNÉ..........................................................................188 4.33. REKURZE A PROCESY.............................................................................191 4.34. PROCESY A PROM(cid:267)NNÉ...........................................................................195 4.35. N(cid:267)CO O EFEKTIVIT(cid:267)...............................................................................201 4.36. O EFEKTIVIT(cid:267) JEŠT(cid:267) JEDNOU..................................................................203 4.37. KDYŽ TEXT NESTA(cid:253)Í..............................................................................207 DALŠÍ NÁM(cid:267)TY NA PROCVI(cid:253)ENÍ...........................................................................211 v (cid:253)ÁST 5 FILTR AWK....................................................................................213 5.1. ZASE OD PÍKY.........................................................................................215 5.2. PO(cid:253)ITADLO DÉLEK SOUBOR(cid:291).................................................................216 5.3. NENÍ REGEXP JAKO REGEXP...................................................................218 5.4. KONE(cid:253)NÝ AUTOMAT..............................................................................220 5.5. A ZASE SKUPINY....................................................................................223 5.6. SKUPINY S PARAMETREM.......................................................................225 5.7. TRUMFOVÉ ESO AWK...............................................................................228 5.8. UKAŽ, CO MÁŠ.......................................................................................231 5.9. INTERAKCE............................................................................................232 5.10. EDITACE.................................................................................................235 5.11. FORMÁTOVÁNÍ.......................................................................................237 5.12. KDYŽ (cid:283)ÁDKA NENÍ (cid:283)ÁDKA.....................................................................239 5.13. BLOKY (cid:283)ÁDEK.......................................................................................241 5.14. PARSER..................................................................................................243 5.15. KONFIGURACE PROGRAMU.....................................................................245 5.16. MAMINKA M(cid:267)LA PRAVDU......................................................................249 5.17. JAK NEPODLEHNOUT REKLAM(cid:267)..............................................................252 5.18. PODSOUVÁNÍ SOUBOR(cid:291)..........................................................................255 DALŠÍ NÁM(cid:267)TY NA PROCVI(cid:253)ENÍ...........................................................................257 (cid:253)ÁST 6 P(cid:283)ÍPADOVÉ STUDIE...................................................................257 6.1. STAHOVÁNÍ WEBOVÝCH STRÁNEK.........................................................261 6.2. STAHOVÁNÍ DO HLOUBKY......................................................................275 6.3. WWW NEWS.........................................................................................283 6.4. PROHLEDÁVÁNÍ POŠTY..........................................................................290 ABY VÁŠ UNIX SKV(cid:267)LE SHELL.....................................................................301 P(cid:283)ÍLOHA A: STRU(cid:253)NÝ P(cid:283)EHLED P(cid:283)ÍKAZ(cid:291).............................................303 A.1 VYBRANÉ UTILITY.................................................................................306 A.2 P(cid:283)ÍKAZ AWK............................................................................................323 A.3 P(cid:283)ÍKAZ ED..............................................................................................328 A.4 P(cid:283)ÍKAZ FIND..........................................................................................331 A.5 P(cid:283)ÍKAZ SED............................................................................................333 A.6 P(cid:283)ÍKAZ SH A JAZYK SHELLU...................................................................337 A.7 REGULÁRNÍ VÝRAZY..............................................................................346 A.8 T(cid:283)ÍDY ZNAK(cid:291).........................................................................................347 A.9 FORMÁTOVACÍ DIREKTIVY PRO PRINTF..................................................348 vi P(cid:283)ÍLOHA B: FORMÁTY POUŽÍVANÝCH ZDROJ(cid:291) DAT..........................349 B.1 POPIS VYBRANÝCH SOUBOR(cid:291).................................................................349 B.2 POPIS VYBRANÝCH SOUBOR(cid:291).................................................................351 LITERATURA......................................................................................................353 REJST(cid:283)ÍK.............................................................................................................355 vii viii Aby váš UNIX skv(cid:268)le shell... ...budete se muset nau(cid:254)it hodn(cid:268) trik(cid:292) a fígl(cid:292). Mnohé z nich pochytíte na Internetu, od známých a z jiných zdroj(cid:292), ale (cid:254)asem vám to jist(cid:268) nebude sta(cid:254)it a budete si chtít n(cid:268)které z nich upravit anebo dokonce sami napsat. P(cid:284)i tom se budete muset více (cid:254)i mén(cid:268) pono(cid:284)it do studia nástroje, bez n(cid:268)hož v opera(cid:254)ním systému unixového typu neud(cid:268)láte prakticky nic. Tím nástrojem je shell. Termín shell ozna(cid:254)uje jednak interpret p(cid:284)íkaz(cid:292) – tedy tu sou(cid:254)ást ((cid:254)i spíše nadstavbu) systému, která (cid:254)te a vykonává p(cid:284)íkazy zadané uživatelem – a jednak vlastní jazyk tohoto interpretu. Tato kniha vám nabídne stru(cid:254)ný p(cid:284)ehled t(cid:268)ch nejd(cid:292)ležit(cid:268)jších vlastností shellu a základních pomocných program(cid:292), tzv. utilit, které se p(cid:284)i práci v shellu používají. To vše se budeme snažit ukázat na praktických p(cid:284)íkladech. Pokud si budete zkoušet úlohy (cid:284)ešit sami a p(cid:292)jdete na to jinak, neznamená to, že jste ud(cid:268)lali chybu. Cest k cíli vede vždycky více a ty naše sledují p(cid:284)edevším ur(cid:254)itý didaktický cíl. N(cid:268)která (cid:284)ešení proto nepokrývají beze zbytku daný problém – pokud by takové (cid:284)ešení bylo vy(cid:254)erpávající, vy(cid:254)erpalo by totiž p(cid:284)edevším (cid:254)tená(cid:284)e... Kniha si rozhodn(cid:268) neklade za cíl postihnout téma n(cid:268)jakým systematickým výkladem. Takových knih popisujících vlastnosti, architekturu (cid:254)i ideové ko(cid:284)eny UNIXu existuje celá (cid:284)ada. Naše kniha se snaží uvést (cid:254)tená(cid:284)e do stylu, jakým se v shellu programuje. Vychází tedy z praktické pot(cid:284)eby – z podobné praktické pot(cid:284)eby, z jaké opera(cid:254)ní systém UNIX p(cid:284)ed bezmála (cid:254)ty(cid:284)iceti lety sám vyvstal. Pro práci s touto knihou bude dobré mít p(cid:284)ístup na n(cid:268)jaký po(cid:254)íta(cid:254) se systémem unixového typu. Jaký konkrétn(cid:268) to bude, je vícemén(cid:268) nezajímavé – budeme se totiž snažit používat jen takové vlastnosti, které vyhovují nejen rozli(cid:254)ným normám ale dokonce i existujícím systém(cid:292)m. Ostatn(cid:268) samotné slovo „UNIX“ budeme používat v tom smyslu, jaký mu dali jeho tv(cid:292)rci dávno p(cid:284)ed tím, než si ho všimla komerce. Pokud by se n(cid:268)kdo domníval, že má na toto slovo výhradní právo (a že už v minulosti takové snahy byly), m(cid:292)žeme zodpov(cid:268)dn(cid:268) (cid:284)íci, že je nám to hluboce líto... Pokud se n(cid:268)kde budeme odvolávat na normu, budeme mít na mysli dokument [1] (jemuž se také krátce (cid:284)íká „POSIX“) a budeme to (cid:254)init bez p(cid:284)ehnané víry v to, že nás i vás to ochrání od problém(cid:292) s p(cid:284)enositelností našich program(cid:292). Takže si najd(cid:268)te libovolný UNIX, za(cid:284)i(cid:263)te si na n(cid:268)m ú(cid:254)et (tedy uživatelské jméno a heslo), p(cid:284)ihlaste se na n(cid:268)j a oto(cid:254)te stránku... 1 Pod(cid:268)kování P(cid:284)edevším bych cht(cid:268)l pod(cid:268)kovat svojí žen(cid:268) Lence a syn(cid:292)m Martinovi, Antonínovi a Albertovi, že to vydrželi... Neocenitelnou pomoc mi poskytl kolega Dan Lukeš svými up(cid:284)esn(cid:268)ními, radami (cid:254)i poznámkami, i když se všemi opravdu, ale opravdu nemohu souhlasit... Velký dík pat(cid:284)í i koleg(cid:292)m, kte(cid:284)í m(cid:268)li na starosti korekturu a recenze. Nejenom že p(cid:284)isp(cid:268)li k vyšší „štábní“ kultu(cid:284)e, ale odhalili celou (cid:284)adu chyb, v(cid:254)etn(cid:268) t(cid:268)ch nenápadných, které ten, kdo zná dop(cid:284)edu ideu v(cid:268)ty, odstavce (cid:254)i programu, má pramalou šanci odhalit. A kone(cid:254)n(cid:268) chci pod(cid:268)kovat Joelovi Berglundovi za nádherný obrázek perlorodky (cid:284)í(cid:254)ní, našeho kriticky ohroženého živo(cid:254)icha, který je, stejn(cid:268) jako já a brzo i vy, životn(cid:268) závislý na shellu... 2