home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 February / Chip_2002-02_cd1.bin / obsahy / Chip_txt / txt / 144-147.txt < prev    next >
Text File  |  2002-01-06  |  10KB  |  91 lines

  1. Unix - kolik jsme toho zapomn∞li? (2)
  2. Kontrola a p°izp∙sobenφ prom∞nn²ch prost°edφ
  3. UnixovΘ p°φkazovΘ interpretery spolupracujφ s prom∞nn²mi, kterΘ pou₧φvajφ bu∩to jednotlivΘ p°φkazovΘ interpretery, nebo odpovφdajφcφ programy Φi instrukce. V²hod prom∞nn²ch, kterΘ jsou pro interpretery definovßny, vyu₧φvß i samotn² interpreter (shell).
  4.  
  5. Jestli₧e se p°ihlßsφte do systΘmu typu Unix (tj. i Linux), potom soubor /etc/passwd obsahuje nßzev p°φkazovΘho interpreteru, kter² je u₧ivateli implicitn∞ p°i°azen. Tento nßzev je ulo₧en jako poslednφ pole °ßdku u₧ivatele v tomto souboru. Aktußlnφ nastavenφ m∙₧ete zkontrolovat v²pisem cat /etc/passwd a p°esm∞rovßnφm zφskanΘho v²stupu do programu grep, kter² umo₧nφ vyhledat u₧ivatelsk² identifikßtor, tzv. userid. V nßsledujφcφm p°φkladu je jako userid pou₧ito slovo prochßzka.
  6. $ cat /etc/passwd | grep -w prochazka
  7. Zφskßte nap°φklad v²stup, kter² je obdobou nßsledujφcφho:
  8. prochazka:x:500:500:Prochazka Na Moste:/home/prochazka:/bin/ksh
  9. Vidφme, ₧e u₧ivateli je p°i°azen p°φkazov² interpreter Korn shell neboli ksh. Tento p°φkazov² interpreter Φte a umφ inicializovat a spustit jak²koliv soubor s nßzvem /etc/profile, kter² systΘmov² administrßtor naprogramoval pro inicializaci zßkladnφch nastavovacφch akcφ, je₧ jsou pot°ebnΘ v pr∙b∞hu p°ihlaÜovßnφ pro ka₧dΘho jednotlivΘho u₧ivatele. Jestli₧e tedy spustφte /etc/profile, spustφte vlastn∞ $HOME/.profile, kter² je nastaven tak, aby obsahoval prost°edφ u₧ivatele. Soubory /etc/profile i $HOME/.profile definujφ prom∞nnΘ prost°edφ. P°φkazov² interpreter typu Bourne pracuje podobn²m zp∙sobem.
  10. P°φkazov² interpreter C se chovß analogicky, s tφm rozdφlem, ₧e pou₧φvß vφce soubor∙. Zpracovßvß /etc/csh.cshrc, potom /etc/csh.login a nakonec kolekci soubor∙, kterΘ jsou ulo₧eny v domovskΘm adresß°i u₧ivatele, ~/.cshrc, ~/.history, ~/.login a ~/.cshdirs.
  11. Bez ohledu na zp∙sob inicializace je v²sledkem definovanΘ u₧ivatelskΘ prost°edφ, tj. vΦetn∞ prom∞nn²ch prost°edφ. Stav prost°edφ (tzv. environment) m∙₧ete vizußln∞ zkontrolovat zadßnφm instrukce printenv nebo env. Nßsledujφcφ zkrßcen² p°φklad je mo₧n²m obrazem v²stupu programu printenv:
  12. $ printenv
  13. USERNAME=
  14. HISTSIZE=1000
  15. HOSTNAME=my.system.com
  16. LOGNAME=prochazka
  17. MAIL=/var/spool/mail/prochazka
  18. TERM=xterm
  19. PATH=....
  20. HOME=/home/prochazka
  21. SHELL=/bin/ksh
  22. PS1=[\u@\h \W]\$
  23. .
  24. .
  25. .
  26. LC_ALL=en_US
  27. Poznßmka: P°φkazov² interpreter pou₧φvß takΘ prom∞nnΘ, kterΘ nejsou p°φmou souΦßstφ prost°edφ. Rozdφly mezi prom∞nn²mi p°φkazovΘho interpreteru a prom∞nn²mi prost°edφ byly uvedeny v prvnφ Φßsti Φlßnku.
  28. Prom∞nnß PS1, kterß je uvedena v p°edchßzejφcφm p°φkladu prost°edφ, tj. jako prom∞nnß prost°edφ, je vlastn∞ prvnφ v²zva p°φkazovΘho °ßdku (prompt). UrΦuje tedy, co bude zobrazovßno na standardnφ v²stupnφ konzole u₧ivatele v okam₧iku, kdy p°φkazov² interpreter oΦekßvß zadßnφ novΘ instrukce. Analogickß prom∞nnß p°φkazovΘho interpreteru, tzv. druhß v²zva PS2, obsahuje parametry, kterΘ jsou pou₧ity, kdy₧ je instrukce zadßvßna a nenφ dokonΦena, tedy jeÜt∞ p°ed koneΦn²m zadßnφm pßrovΘho odd∞lovaΦe a stiskem klßvesy Enter, kter² p°edß instrukci ke zpracovßnφ. Funkci obou v²zev p°φkazovΘho °ßdku zkontrolujete pomocφ nßvodu, kter² je uveden dßle. Prvnφ °ßdek zobrazuje kontrolnφ v²stup $PS2, kdy se na monitoru po zadßnφ instrukce echo $PS2 objevφ znak ">". Zadßvßnφ novΘ instrukce zaΦφnß otevφracφ zßvorkou. Jestli₧e u₧ivatel v tomto okam₧iku stiskne klßvesu Enter, p°φkazov² interpreter oΦekßvß pokraΦovßnφ instrukce nebo zadßnφ uzavφracφ zßvorky. O tomto stavu informuje u₧ivatele znakem ">". Instrukce je zadßna, je stisknuta klßvesa Enter, ale proto₧e interpreter oΦekßvß znak ")", op∞t zobrazφ prompt ">". KoneΦn∞ kdy₧ u₧ivatel zadß ")", tj. druh² pßrov² odd∞lovaΦ, a stiskne Enter, instrukce bude ukonΦena a p°edßna ke zpracovßnφ.
  29. $echo $PS2
  30. >
  31. $ (
  32. > cat /etc/passwd | grep prochazka
  33. > )
  34. $
  35. U₧ivatel si m∙₧e p°izp∙sobit grafickou podobu tΘto funkce ·pravou hodnoty a zm∞nou stavu prom∞nnΘ $PS2. V nßsledujφcφm p°φkladu je zm∞n∞na hodnota v²zvy p°φkazovΘho °ßdku $PS2 a zadßvanΘ instrukce stejnΘ jako v p°edchßzejφcφ ukßzce. Nakonec je stav $PS2 vrßcen na p∙vodnφ hodnotu definovanou prost°edφm.
  36. $ echo $PS2
  37. >
  38. $ PS2="pokraΦujte v zadavani > "
  39. $ (
  40. pokraΦujte v zadavani > cat /etc/passwd | grep prochazka
  41. pokraΦujte v zadavani > )
  42. $ PS2="> "
  43. #echo $PS2
  44. >
  45. $
  46. Nabφzφ se otßzka, proΦ v²zva °ßdku urΦenß PS2 obsahuje hodnotu a p°itom nenφ uvedena mezi prom∞nn²mi prost°edφ? Pozorn∞ zkontrolujte obsah v²stupu instrukce printenv - a skuteΦn∞, pro PS2 nespat°φte ₧ßdnou definovanou prom∞nnou.
  47. P°φkazov² interpreter definuje obvykle sßm o sob∞ n∞kolik implicitnφch prom∞nn²ch, PS2 je jednou z nich. Ostatnφ u₧iteΦnΘ prom∞nnΘ interpreteru, kterΘ jsou nastaveny a pou₧φvßny v interpreteru typu Korn, jsou nßsledujφcφ:
  48. _ (podtr₧φtko) - Jestli₧e p°φkazov² interpreter provßdφ externφ instrukci, je tato prom∞nnß nastavena v prost°edφ novΘho procesu do cesty (path) provßd∞nΘ instrukce. V interaktivnφm re₧imu je tento parametr takΘ nastaven v rodiΦovskΘm p°φkazovΘm interpreteru jako poslednφ slovo p°edchßzejφcφ instrukce.
  49. COLUMNS - PoΦet sloupc∙ terminßlu nebo okna.
  50. ENV - Jestli₧e je tento parametr definovßn, bude nastaven po zpracovßnφ libovolnΘho souboru u₧ivatelskΘho profilu, expandovanß hodnota je pou₧ita jako startovacφ soubor interpreteru. Obvykle obsahuje funkci a alias definici.
  51. ERRNO - CeloΦφselnß hodnota prom∞nnΘ p°φkazovΘho interpreteru errno, kterß identifikuje p°φΦinu poslednφ poruchy systΘmu.
  52. HISTFILE - Nßzev souboru, kter² systΘm pou₧φvß pro uklßdßnφ historie. Kdy₧ je tento soubor definovßn, je historie naΦφtßna z tohoto specißlnφho souboru. V p°φpad∞ vφcenßsobn²ch aktivacφ p°φkazov²ch interpreter∙, kterΘ pracujφ na stejnΘm stroji, dojde ke sdφlenφ historie, jestli₧e jejich parametry HISTFILE ukazujφ na stejn² soubor. Jestli₧e prom∞nnß HISTFILE nenφ urΦena, je historie implicitn∞ uklßdßna do souboru $HOME/.sh_history.
  53. HISTSIZE - PoΦet instrukcφ, kterΘ jsou normßln∞ ulo₧eny v souboru historie. Implicitnφ hodnota je 128.
  54. IFS - Vnit°nφ pole odd∞lovaΦe polφ (internal field separator), kterΘ je pou₧φvßno v pr∙b∞hu substituce a instrukcφ Φtenφ pro odd∞lenφ hodnot do jasn∞ formulovan²ch a definovan²ch argument∙, obvykle je tato konstanta nastavena na hodnotu "mezera", "tabulßtor" a "nov² °ßdek".
  55. LINENO - PoΦet °ßdek funkce nebo skriptu p°φkazovΘho interpreteru, kter² byl spuÜt∞n. Tato prom∞nnß je u₧iteΦnß pro lad∞nφ skript∙ p°φkazovΘho interpreteru. JednoduÜe v pot°ebn²ch bodech skriptu vlo₧φte instrukci echo $LINENO a nßsledn∞ byste m∞li b²t schopni urΦit vaÜi aktußlnφ pozici ve skriptu.
  56. LINES - UrΦuje poΦet °ßdek na terminßlu nebo okn∞.
  57. PPID - UrΦuje ID procesu rodiΦe p°φkazovΘho interpreteru. Tato hodnota je p°φstupnß pouze pro Φtenφ (read-only).
  58. PATH - St°ednφkem odd∞len² seznam adresß°∙, kterΘ jsou prohledßvßny p°i vyhledßvßnφ instrukcφ.
  59. PS1 - Prvnφ v²zva p°φkazovΘho °ßdku interaktivnφho p°φkazovΘho interpreteru.
  60. PS2 - Druhß v²zva p°φkazovΘho °ßdku. Implicitnφ hodnotou je ">". Je pou₧φvßna, jestli₧e je pro dokonΦenφ zadßvßnφ instrukce pot°eba vφce vstupnφch °ßdk∙.
  61. PWD - Aktußlnφ pracovnφ adresß°. Nemusφ b²t pou₧it nebo jeho hodnota m∙₧e b²t null (jestli₧e p°φkazov² interpreter nevφ, kde se prßv∞ nachßzφ).
  62. RANDOM - Jednoduch² generßtor nßhodn²ch Φφsel. Kdykoliv je RANDOM pou₧it, urΦφ dalÜφ Φφslo z °ady nßhodn²ch Φφsel. Bod v °ad∞ Φφsel m∙₧e b²t nastaven p°i°azenφm Φφsla prom∞nnΘ RANDOM.
  63. REPLAY - Implicitnφ parametr pro Φtenφ instrukce, nejsou-li ₧ßdnΘ nßzvy specifikovßny.
  64. SECONDS - PoΦet sekund od okam₧iku spuÜt∞nφ p°φkazovΘho interpreteru nebo (pokud byla urΦena hodnota parametru v podob∞ celΘho Φφsla) poΦet sekund od okam₧iku nastavenφ plus hodnota, kterß byla nastavena.
  65. TMOUT - Je-li v p°φpad∞ interaktivnφho p°φkazovΘho interpreteru prom∞nnß nastavena na hodnotu kladnΘho celΘho Φφsla, potom definuje maximßlnφ poΦet sekund, po kter² bude p°φkazov² interpreter Φekat na vstup po vytiÜt∞nφ prvnφho °et∞zce p°φkazovΘho °ßdku ($PS1). Je-li tato doba p°ekroΦena, potom je p°φkazov² interpreter spuÜt∞n.
  66. TMPDIR - Definuje adresß°, v n∞m₧ jsou ulo₧eny doΦasnΘ soubory p°φkazovΘho interpreteru. Nenφ-li tento parametr nastaven nebo neobsahuje-li absolutnφ cestu do adresß°e, jsou doΦasnΘ soubory generovßny v adresß°i /tmp.
  67. P°φkazov² interpreter typu C pou₧φvß prom∞nnΘ, kterΘ jsou analogickΘ nebo jsou obdobou uvedenΘho seznamu, ale s tφm rozdφlem, ₧e jsou definovßny nßzvy s mal²mi pφsmeny, nap°φklad prompt1, prompt2, path, home apod.
  68. DalÜφ zajφmavΘ prom∞nnΘ jsou lokßlnφ prom∞nnΘ. Tyto prom∞nnΘ jsou LC_ALL, LC_CTYPE, LC_COLLATE a LC_MESSAGES. LC_ALL p°ekr²vß hodnoty t°φ ostatnφch prom∞nn²ch. Platφ, ₧e pokud LC_ALL nenφ definovßna, lze nastavenφ ostatnφch prom∞nn²ch definovat nezßvisle.
  69. LC_ALL - UrΦuje, kterß lokßlnφ prom∞nnß mß b²t pou₧ita pro p°ekrytφ jakΘkoliv p°edchßzejφcφ prom∞nnΘ.
  70. LC_CTYPE - UrΦuje lokßlnφ prom∞nnou pro interpretaci sekvence bajt∙.
  71. LC_COLLATE - UrΦuje "porovnßvacφ" sekvenci, kterß mß b²t pou₧ita pro t°φd∞nφ.
  72. LC_MESSAGES - UrΦuje jazyk, kter² mß b²t pou₧it ve zprßvßch.
  73. Prom∞nnß LC_ALL m∙₧e b²t pou₧ita pro zm∞nu ·°ednφho jazyka systΘmu. Zkuste nßsledujφcφ sekvence instrukcφ, abyste mohli pozorovat chovßnφ t∞chto akcφ. Jazyk je nastaven na francouzÜtinu (fr) a instrukce grep je inicializovßna s nepovolen²m parametrem -x. Chybovß zprßva bude vypsßna ve francouzÜtin∞. Potom je LC_ALL nastavena do Üpan∞lÜtiny (es) a chybovß zprßva je generovßna ve Üpan∞lÜtin∞. Nakonec je LC_ALL nepou₧ita a chybovΘ zprßvy jsou prezentovßny anglicky.
  74. $ export LC_ALL=fr
  75. $ grep -x
  76. Usage: grep [OPTION] ... PATRON [FICHIER]...
  77. Pour en savoir davantage, faites: 'grep -help'
  78. $ LC_ALL=es
  79. Modo de empoleo: grep [OPTION] ... PATRON [FICHERO]...
  80. Pruebe 'grep-help' para mas informacion
  81. $unset LC_ALL
  82. $ grep -x
  83. Usage: grep [OPTION] ... PATTERN [FILE]
  84. Try 'grep -help' for more information
  85. $
  86.  
  87. To je pro tentokrßt vÜe - v p°φÜtφ, zßv∞reΦnΘ Φßsti Φlßnku se budeme zab²vat jednoduch²mi skripty.
  88.  
  89. Lud∞k Chmela
  90.     
  91.