aya stroka protokola imeet nomer, chto pozvolyaet zapustit' ee na vypolnenie, ukazyvaya, naprimer, sootvetstvuyushchij nomer. Vosklicatel'nyj znak v komandnoj - 44 - stroke sluzhit ukazaniem dlya interpretatora, chto vse ukazan- noe dalee do razdelitelya otnositsya k nekotoroj stroke proto- kola. Vosklicatel'nyj znak mozhno ukazat' v nachale ili v lyubom drugom meste komandnoj stroki. Pust' posle vypolneniya komandy history na ekran displeya vyveden sleduyushchij protokol: 1 cat file1 2 pr -w39 -l24 -2 file1 3 cc program.c >>& errors & 4 cat errors 5 ed program.c 6 history togda, ispol'zuya vosklicatel'nyj znak, mozhno vypolnit' ryad dejstvij: !2 vypolnitsya vtoraya stroka protokola; !! vypolnitsya poslednyaya stroka protokola: !-2 vypolnitsya chetvertaya stroka (vtoraya ot poslednej); !cat ili !c vypolnitsya chetvertaya stroka. Interpretator prosmatri- vaet stroki protokola snizu i vypolnyaet pervuyu, v koto- roj najdena posledovatel'nost' simvolov (cat ili c), stoyashchaya v nachale stroki; !{cat}.a1 vypolnitsya komanda cat errors.a1 - k najdennoj stroke dopisyvaetsya .a1; !?gram? vypolnitsya pyataya stroka protokola. Interpretator vybe- ret dlya vypolneniya etu stroku, tak kak v nej budet naj- den shablon gram. Zdes' simvoly ? vydelyayut shablon, po kotoromu osushchestvlyaetsya poisk; cat !5* !1* vypolnitsya komanda cat program.c file1 - budut podstav- leny slova pyatoj i pervoj strok protokola, isklyuchaya pervye slova etih strok. Mozhno vybirat' otdel'nye slova v strokah protokola dlya vklyucheniya ih v komandnuyu stroku. Slova komandnoj stroki numeruyutsya, nachinaya s 0. Slovo s nomerom 0 - obychno imya komandy. Slovo mozhno vydelit' s pomoshch'yu opredelitelya, pered kotorym neobhodimo ukazat' simvol dvoetochie, naprimer - 45 - cat !3:1 Iz tret'ej komandnoj stroki protokola budet vybrano slovo s nomerom 1, poluchim cat program.c Rassmotrim podrobnee opredeliteli slov v komandnyh strokah protokola: * ili n* ili n-m vybrat' vse slova, nachinaya so slova s nomerom 1, ili vybrat' vse slova, nachinaya so slova s nomerom n, ili vybrat' vse slova, nachinaya so slova s nomerom n i kon- chaya slovom s nomerom m; n ili n-, ili -n vybrat' slovo s nomerom n, ili vybrat' vse slova, nachi- naya so slova s nomerom n, ne vklyuchaya poslednee, ili vybrat' vse slova, nachinaya so slova s nomerom 0 do slova s nomerom n; ?shablon?:% vybrat' slovo, sootvetstvuyushchee shablonu; ^ ili $ slovo s nomerom 1 ili poslednee slovo komandnoj stroki. Razreshaetsya ne ukazyvat' dvoetochie pered sleduyushchimi opredelitelyami: ^ $ * - % Rassmotrim primer. Pust' posle vypolneniya komandy history na ekran displeya vyveden protokol: 1 cat file1 file2 file3 2 pr -w39 -l24 -2 file1 file5 3 cc -o program1.c program2.c >>& errors & 4 cat errors 5 ed program2.c 6 history togda interpretator csh vypolnit komandy, osushchestvlyaya pods- tanovki sleduyushchim obrazom: !5:0 !1:3 iz pyatoj stroki vybiraetsya slovo s nomerom 0 ( imya komandy ), iz pervoj stroki vybiraetsya slovo s nomerom 3. Vypolnitsya komanda ed file3; - 46 - !5:0 !1$ iz pyatoj stroki vybiraetsya slovo s nomerom 0, iz pervoj stroki - poslednee slovo. Vypolnitsya komanda ed file3; !2:-3 !3:2-3 iz stroki 2 vybirayutsya slova s nomerami ot 0 do 3 vklyu- chitel'no, iz stroki 3 vybirayutsya slova s nomerami 2 i 3. Vypolnitsya komanda: pr -w39 -l24 -2 program1.c program2.c !2-3 !?prog?% vypolnitsya komanda: pr -w39 -l24 -2 program2.c Posle neobyazatel'nogo opredelitelya mogut ukazyvat'sya modifikatory slov, kotorye pozvolyayut vypolnit' ryad preobra- zovanij nad slovom, i ono podstavlyaetsya v komandnuyu stroku modificirovannym. Modifikatory peremennyh byli rassmotreny vyshe. V dejstviyah so strokami protokola mozhno ispol'zovat' i drugie modifikatory: p raspechatat' novuyu komandu, no ne vypolnyat' ee; & povtorit' predydushchyuyu podstanovku; s/obrazec_1/obrazec_2/ zamenit' obrazec_1 na obrazec_2. Simvol / mozhno zame- nit' na lyuboj, otsutstvuyushchij v obrazcah. Esli obra- zec_2 pustaya stroka, to obrazec_1 udalyaetsya. Pered kazhdym modifikatorom neobhodimo stavit' dvoeto- chie. Esli imeetsya opredelitel' slova, to modifikator dolzhen sledovat' za nim. Pust' posle vypolneniya komandy history na ekran displeya vyvedeno: 1 cat /usarc/gruppa/ivanov/file1.c 2 pr /usarc/gruppa/ivanov/file1.c 3 cc pa1.c pa2.c pa3.c pa4.c >>& errors & 4 cat errors 5 ed program.c 6 history togda interpretator vypolnit komandy, osushchestvlyaya podsta- novki i modifikacii, sleduyushchim obrazom: - 47 - !1:0 !1^:t:r vybiraet iz stroki s nomerom 1 slovo s nomerom 0, t.e. imya komandy, v dannom sluchae cat. Dalee vybiraet iz pervoj stroki slovo s nomerom 1, v dannom sluchae eto /usarc/gruppa/ivanov/file1.c. Modifikator t udalit iz etogo slova imena katalogov, v dannom sluchae udalyaetsya /usarc/gruppa/ivanov, i slovo teper' budet imenem fajla file1.c. Modifikator r udalit rasshirenie imeni fajla. Takim obrazom, vypolnitsya komanda cat file1. !1:0 !1^:h/document po opredelitelyu ^ budet vybrano pervoe slovo pervoj stroki, modifikator h udalit iz nego imya fajla, ostaviv imena katalogov, vedushchih k nemu, i vypolnitsya komanda cat /usarc/gruppa/ivanov/document !1:0 !1^:h:s?ivanov?sidorov?/document iz pervogo slova pervoj stroki vybirayutsya imena katalo- gov, vedushchih k fajlu, zatem modifikator s zamenit ivanov na sidorov i vypolnitsya komanda cat /usarc/gruppa/sidorov/document !1:0 !1^:h:s?ivanov?sidorov?/doc !1^:&:p pervye dva slova komandnoj stroki dejstvuyut analogichno predydushchemu primeru. Tret'e slovo vybiraet iz 1 stroki protokola slovo s nomerom 1, v nem osushchestvlyaetsya zamena ( modifikator & ), analogichnaya predydushchej, t.e. vypolnyaetsya zamena ?ivanov?sidorov?, sohraniv vse ostal'noe v etom slove. Stroka ne vypolnyaetsya, a tol'ko vyvoditsya na ekran (modifikator p): cat /usarc/gruppa/sidorov/doc \ /usarc/gruppa/sidorov/file1.c !1:0 !3:1-4:gs?pa?ff?:p imya komandy vybiraetsya iz pervoj stroki protokola, iz 3 stroki vybirayutsya vse slova s nomerami ot 1 do 4 vklyu- chitel'no i v nih global'no (modifikator g) delaetsya zamena ?pa?ff? . Komanda budet napechatana, no vypol- nyat'sya ne budet (modifikator p): cat ff1.c ff2.c ff3.c ff4.c Sushchestvuet takzhe udobnoe sredstvo redaktirovaniya pos- lednej stroki protokola. Dlya etih celej ispol'zuetsya konst- rukciya ^shablon^zamena^. Dopustim, poslednyaya stroka imeet vid cat aaa bbb ccc ddd, togda posle komandy ^ccc^file.c^ - 48 - budet vypolnena zamena: cat aaa file.c ccc ddd. Imeetsya vozmozhnost' vvesti kratkie oboznacheniya dlya komandnyh strok. |ti kratkie oboznacheniya nazyvayut psevdoni- mami komand. Esli dlya kakoj-libo komandnoj stroki ustanovlen psevdonim, to ee vypolnenie teper' mozhno osushchestvlyat', uka- zyvaya psevdonim, a ne vsyu stroku. Dopustim, imeetsya komand- naya stroka alias sp "sort \!* | print" togda komandnye stroki sort file1 file2 | print i sp file1 file2 tozhdestvenny. Vmesto !* v komandnuyu stroku budut podstav- leny imena fajlov ili klyuchi komandy sort, ukazannye za psev- donimom sp. Interpretator komand vedet spisok psevdonimov, kotorye mogut ustanavlivat'sya, otobrazhat'sya i modificirovat'sya s pomoshch'yu komand alias i unalias. Komandnaya stroka posle prosmotra razbivaetsya na otdel'nye slova, kazhdoe slovo, interpretiruemoe kak imya komandy, proveryaetsya, chtoby vyyas- nit', imeet li ono psevdonim. Esli da, eto slovo zamenyaetsya na znachenie psevdonima. Vsyudu v komandnyh strokah pri soz- danii psevdonimov simvol ! neobhodimo ekranirovat'. V pro- tivnom sluchae on budet interpretirovat'sya kak obrashchenie k protokolu. Psevdonimy mozhno ustanavlivat' i na komandy csh, naprimer alias a alias ustanavlivaet psevdonim na komandu alias. 1.12. Peremennye interpretatora csh Interpretator csh operiruet peremennymi dvuh vidov: vnutrennimi i vneshnimi. Vnutrennie peremennye ustanavlivayut rezhim raboty interpretatora, a vneshnie v osnovnom otnosyatsya k komandnym strokam, kotorye im interpretiruyutsya. Obrashchenie k peremennym mozhet byt' prostym (ustanovlena peremennaya ili net) i slozhnym. Naprimer, peremennaya argv predstavlyaet obraz spiska parametrov komandnoj stroki, a peremennaya ver- bose yavlyaetsya klyuchom i sushchestvenno lish' ee nalichie ili otsutstvie. Osoboe mesto zanimayut tak nazyvaemye peremennye okruzheniya. Interpretator schityvaet ih znacheniya pri zapuske. Znacheniya peremennyh okruzheniya stanovyatsya vnutrennimi kons- tantami interpretatora i ih mozhno ispol'zovat' kak konstanty - 49 - v komandnyh strokah i komandnyh fajlah. Kazhdaya vnutrennyaya peremennaya imeet opredelennyj smysl dlya interpretatora. CHast' vnutrennih peremennyh vsegda ustanavlivaetsya interpre- tatorom pri inicializacii libo pri zapuske-zavershenii pro- cessov. Posle chego peremennye ne budut modificirovat'sya, esli etogo ne sdelaet pol'zovatel'. K chislu vnutrennih peremennyh otnosyatsya: argv, cdpath, cwd, home, path, prompt, shell. Peremennye child i status ustanavlivayutsya pri porozhdenii processov i sohranyayut svoe znachenie do poyavleniya novyh. Znacheniya peremennyh ustanavlivayutsya komandoj set ili klyuchom pri vyzove csh. Isklyuchit' peremennuyu iz chisla oprede- lennyh mozhno komandoj unset. Nizhe privoditsya spisok vnut- rennih peremennyh i ih naznachenie. argv predstavlyaet stroku parametrov. K nej primenimy podsta- novki pozicionnyh parametrov. cdpath etoj peremennoj prisvaivaetsya spisok imen katalogov, k kotorym pol'zovatel' chasto budet obrashchat'sya. Dopustim, cdpath opredelena sleduyushchim obrazom: set cdpath = ( /usr/include /usr/lib ), togda komanda chdir sys tozh- destvenna komande chdir /usr/include/sys. checktime esli eta peremennaya ustanovlena i esli v techenie uka- zannogo vremeni ne vypolnyalos' kakih-libo dejstvij, to vypolnyaetsya exit. Dopustim, vypolnena komanda set checktime = 3, togda, esli v techenie 3 min ne vypolnya- lis' kakie-libo dejstviya, vypolnyaetsya exit, i interpre- tator prekrashchaet rabotu. child nomer processa. Vyvoditsya na ekran displeya pri zapuske parallel'nogo processa. Znachenie peremennoj child sbra- syvaetsya, kogda etot process zavershaetsya. cwd znacheniem etoj peremennoj yavlyaetsya stroka - polnoe imya rabochego kataloga. |to imya mozhet ne sovpadat' s istin- nym, esli ustanovlen symlink. echo vyzyvaet pechat' kazhdoj komandy pered vypolneniem. Vse podstanovki vypolnyayutsya pered vyvodom. Rezhim echo mozhno ustanovit' libo na vse vremya raboty, libo na period vypolneniya odnogo komandnogo fajla. Naprimer, csh -x comfile ustanovit rezhim echo na vremya vypolneniya komandnogo fajla comfile, a komanda set echo - na vse vremya raboty interpretatora. - 50 - history chislennoe znachenie etoj peremennoj ustanavlivaet koli- chestvo strok, kotoroe neobhodimo hranit' v protokole. Dlya slishkom bol'shogo chisla strok mozhet ne hvatit' pamyati. Optimal'noe chislo - 22 stroki. home registracionnyj katalog pol'zovatelya. Ego imya schityva- etsya pri zapuske csh iz peremennoj okruzheniya HOME. ignoreeof predotvrashchaet sluchajnoe zavershenie raboty interpreta- tora po priznaku konec fajla. |tot priznak vyglyadit kak SU/D ili CTRL/D pri vvode s klaviatury displeya. Priznak konca fajla mozhno zamenit' na drugoj komandoj sistemy stty(1). mail imya fajla, v kotoryj budet postupat' pochta. noclobber ustanavlivaet zashchitu fajlov ot sluchajnogo razrusheniya. noglob zapretit' rasshirenie imen fajlov. nonomatch obychno, esli ukazannomu shablonu (naprimer, echo *.[2- 5]) ne sootvetstvuet ni odin obrazec, porozhdaetsya sos- toyanie oshibki. Esli ustanovlena peremennaya nonomatch, sostoyanie oshibki ne voznikaet, a ukazannyj shablon vozv- rashchaetsya programme. notify asinhronno vyvodit' soobshcheniya o sostoyaniyah vypolnyaemyh processov. Esli peremennaya notify ne ustanovlena, eti soobshcheniya vyvodyatsya pered vyvodom novogo priglasheniya. path opredelyaet imena katalogov, v kotoryh interpretator budet iskat' fajly komand, zapuskaemyh na vypolnenie. Pri zapuske interpretatora sozdaetsya hesh-tablica komand iz katalogov, ukazannyh v path. Heshirovanie sushchestvenno sokrashchaet vremya poiska komandy pri ee zapuske. Esli posle vhoda v sistemu, t.e. posle heshirovaniya katalo- gov, budet zapisana v odin iz nih novaya komanda, to ona budet otsutstvovat' v hesh-tablicah, i interpretator ne budet ee obnaruzhivat'. Dlya razresheniya etoj situacii neobhodimo vypolnit' komandu rehash. Po komande rehash budut perestroeny hesh-tablicy, i novye komandy budut dostupny. Pri zapuske novogo interpretatora snova chitaetsya fajl ~/.cshrc i stroitsya hesh-tablica. Na etu operaciyu uhodit dostatochno mnogo vremeni i, esli est' - 51 - neobhodimost' bolee bystrogo starta, pri zapuske neob- hodimo ispol'zovat' klyuch -f csh -f comfile Perestrojka hesh-tablic osushchestvlyaetsya takzhe vsyakij raz, kogda s pomoshch'yu komandy set izmenyaetsya znachenie pere- mennoj path. prompt soderzhit stroku simvolov, kotoraya vyvoditsya v kachestve priglasheniya. Esli eta stroka simvolov vklyuchaet voskli- catel'nyj znak, na ego mesto podstavlyaetsya tekushchij nomer komandnoj stroki. Esli peremennaya prompt ne usta- novlena, pechataetsya priglashenie % dlya ryadovogo pol'zo- vatelya i # dlya superpol'zovatelya. shell soderzhit imya interpretatora, kotoryj zapuskaetsya pri vhode pol'zovatelya v sistemu. Imya interpretatora uka- zano v peremennoj sredy SHELL i schityvaetsya v nachale seansa. status prinimaet znachenie koda zaversheniya komandy, naprimer: % false ; echo $status 1 % true ; echo $status 0 Zdes' komanda false vozvrashchaet 1 - kod neudachnogo zaversheniya, komanda true vozvrashchaet 0 - kod udachnogo zaversheniya. time hronometriruet vypolnenie komandnyh strok. Esli vypol- nenie prodolzhalos' dol'she ukazannogo vremeni, vyvodyatsya rezul'taty hronometrirovaniya. Naprimer, v fajle ~/.cshrc vypolneno naznachenie set time = 6, eto znachit, chto interpretator budet vyvodit' rezul'taty hronometri- rovaniya, kogda vremya vypolneniya komandnoj stroki prevy- sit 6 s. Esli teper' vypolnit' komandu, naprimer, sort file, to posle ee zaversheniya budet vyveden rezul'tat hronometrirovaniya: 1.6u 17.9s 0:26 74% Zdes': 1.6u - vremya pol'zovatel'skoj fazy processa; 17.9s - vremya sistemnoj fazy processa; 0:26 - astrono- micheskoe vremya processa; 74% - otnoshenie v procentah summy pol'zovatel'skoj i sistemnoj faz processa k ast- ronomicheskomu vremeni. - 52 - verbose ustanavlivaet rezhim raspechatki slov kazhdoj komandy s uchetom podstanovok. |tot rezhim mozhno ustanovit', ispol'zuya klyuch -v pri zapuske interpretatora na vypol- nenie. Pri zapuske komandnyh fajlov mozhno ustanavlivat' raz- lichnye klyuchi. Pri etom komandnaya stroka vyglyadit sleduyushchim obrazom: csh -spisok_klyuchej imya_fajla ... Esli imya_fajla ne ukazano, to porozhdaetsya novaya interaktiv- naya obolochka. Nizhe perechisleny klyuchi interpretatora i ih znacheniya: -c schitat' komandu iz edinstvennogo parametra, ukazannogo srazu posle -c; -e interpretator prekrashchaet rabotu, esli lyubaya vyzvannaya komanda zavershaetsya nenormal'no (kod vozvrata ne 0); -f zapretit' chtenie fajla ~/.cshrc dlya bolee bystrogo starta; -i zapustit' novuyu obolochku kak interaktivnuyu. Esli vyzov interpretatora osushchestvlyaetsya s klaviatury displeya, etot klyuch ustanavlivaetsya po umolchaniyu; -n osushchestvlyat' razbor komandnyh strok, no ne vypolnyat' komandy. |to rezhim otladki; -s chitat' iz standartnogo vvoda; -t schityvat' i vypolnyat' tol'ko odnu stroku. |ta stroka mozhet soderzhat' v konce simvol prodolzheniya stroki \; -v posle podstanovok iz protokola raspechatat' komandu pered ee vypolneniem; -V pered razborom strok iz fajlov ~/.cshrc i ~/.login ustanovit' klyuch -v. |to pozvolit uvidet' na ekrane displeya, kak interpretator ustanavlivaet naznacheniya i vypolnyaet komandnye stroki pri interpretacii etih faj- lov; -x pechatat' na ekrane displeya vse komandy pered vypolne- niem; -X ustanovit' klyuch -x pri interpretacii fajlov ~/.cshrc i ~./login. - 53 - Vneshnie peremennye - eto takie peremennye, kotorye ustanavlivayutsya i ispol'zuyutsya tol'ko pol'zovatelem. V otlichie ot vnutrennih peremennyh i peremennyh okruzheniya vneshnie peremennye imeyut tot smysl, kotoryj pridaetsya im pol'zovatelem. Znacheniya vneshnih peremennyh mogut byt' usta- novleny i otobrazheny komandoj set i otmeneny komandoj unset. Sistema podderzhivaet massiv peremennyh, kotoryj nazy- vayut peremennymi sredy ili okruzheniya. Peremennye okruzheniya ispol'zuyutsya sistemnymi i pol'zovatel'skimi programmami. Dlya ustanovki znachenij peremennyh okruzheniya ispol'zuetsya komanda setenv, dlya otmeny - komanda unsetenv. Imeetsya nes- kol'ko standartnyh imen peremennyh okruzheniya, ih znacheniya zavisyat ot sootvetstvuyushchih naznachenij komandoj setenv. CHast' etih naznachenij proishodit pri otkrytii seansa raboty. Pol'zovatel' imeet vozmozhnost' pereustanovit' znacheniya sushchestvuyushchim peremennym, ob®yavit' i prisvoit' znacheniya novym. Znacheniya standartnyh peremennyh okruzheniya ispol'zu- yutsya mnogimi sistemnymi programmami. Oni dostupny kak kons- tanty i programmam pol'zovatelya. Vazhno otmetit', chto znache- niya peremennyh okruzheniya yavlyayutsya vnutrennimi konstantami interpretatora. Perechislennye nizhe imena zarezervirovany kak standartnye imena peremennyh okruzheniya: PATH imena standartnyh katalogov, razdelennyh dvoetochiem; HOME registracionnyj katalog pol'zovatelya, ustanovlennyj v fajle /etc/passwd; TERM imya tipa terminala; TERMCAP stroka opredeleniya vozmozhnostej displeya iz fajla /etc/termcap; SHELL imya interpretatora komandnogo yazyka, kotoryj iniciali- ziruetsya pri vhode pol'zovatelya v sistemu; MSG opredelyaet, na kakom yazyke budut vyvodit'sya soobshcheniya pol'zovatelyu pri rabote s sistemoj (MSG = r - na russ- kom, MSG = l - na anglijskom); USER registracionnoe imya pol'zovatelya. Komanda unsetenv udalyaet dobavlennye vo vremya raboty peremennye okruzheniya. Komanda setenv pozvolyaet ob®yavit' i - 54 - prisvoit' znachenie novoj peremennoj okruzheniya % setenv NAME 15 % echo $NAME 15 % @ a = ( $NAME + 15 ) % echo $a 30 % setenv NAME "Jan Feb Mar Apr" % echo $NAME Jan Feb Mar Apr Peremennye okruzheniya otlichayutsya ot peremennyh interpre- tatora tem, chto oni ne vliyayut na rabotu interpretatora. 1.13. Special'nye fajly V registracionnom kataloge pol'zovatelya razmeshchaetsya neskol'ko special'nyh fajlov: ~/.hushlogin, ~/.login, ~/.cshrc, ~/.logout i ~/.history. Fajl ~/.hushlogin pustoj i ispol'zuetsya kak klyuch. Esli on sushchestvuet, pri otkrytii seansa raboty ne vyvoditsya na ekran displeya /etc/motd - fajl s tekstom soobshcheniya administ- ratora. Obychno v fajle /etc/motd soderzhat'sya svedeniya o versii sistemy, "vyveska" organizacii i t.d. Pri otkrytii seansa raboty interpretator chitaet fajly ~/.login i ~/.cshrc, a pri zavershenii raboty - fajl ~/.logout. Pri vhode pol'zovatelya v sistemu pervym chitaetsya fajl ~/.cshrc, potom ~/.login. Esli v registracionnom kata- loge imeetsya fajl ~/.history, to on schityvaetsya v protokol. Vse perechislennye fajly, krome ~/.history, yavlyayutsya obychnymi komandnymi fajlami, v kotoryh programmist opredelyaet zhela- tel'nye dlya sebya dejstviya po vhodu i vyhodu iz sistemy. Fajl ~/.login opredelyaet te dejstviya, kotorye neobho- dimo vypolnit' v nachale seansa raboty pol'zovatelya. Nizhe priveden primer takogo fajla: set ignoreeof set prompt = 'Ivanov I.I._\!> ' if( $?MAIL ) set mail = $MAIL msgs setenv MSG r V pervoj stroke ustanavlivaetsya klyuch ignoreeof, kotoryj predotvrashchaet sluchajnoe zavershenie raboty interpretatora pri nabore na klaviature displeya simvola SU/D (CTRL/D). - 55 - Vo vtoroj stroke ustanavlivaetsya priglashenie, kotoroe budet vydavat'sya pri gotovnosti prinyat' novuyu komandnuyu stroku. Zdes' vmesto \! budut podstavlyat'sya tekushchie nomera strok history, naprimer : Ivanov I.I._15> V tret'ej stroke ukazyvaetsya imya pochtovogo fajla. Esli on budet ne pust, to na ekrane displeya poyavitsya soobshchenie: "U Vas est' novaya pochta ". |ti opredeleniya sushchestvenno zavisyat ot versii programmy mail, ustanovlennoj v sisteme. V chetvertoj stroke zapisano obrashchenie k komande msgs, kotoraya vydaet novye informacionnye soobshcheniya pri vhode v sistemu (eti soobshcheniya zanosyatsya administratorom, soprovozh- dayushchim operacionnuyu sistemu). V pyatoj stroke opredelyaetsya peremennaya MSG, kotoraya opredelyaet yazyk diagnostik (v dannom sluchae - russkij, dlya anglijskogo ukazyvetsya bukva l). Pri zavershenii seansa raboty chitaetsya fajl ~/.logout i vypolnyayutsya ukazannye v nem dejstviya. Spisok takih dejstvij zavisit isklyuchitel'no ot fantazii programmista. V fajle ~/.logout mozhno razmestit' vse komandy, kotorye neobhodimo vypolnit' po vyhodu iz sistemy. Vazhno otmetit', chto, nes- motrya na vyhod pol'zovatelya iz sistemy, vse processy, zapu- shchennye im kak asinhronnye, budut prodolzhat' vypolnyat'sya. Pri kazhdom vyzove csh vypolnyaet fajl ~/.cshrc. Nizhe priveden primer fajla ~/.cshrc: set path = ( . /bin /usr/bin /usr/ucb ) set history = 22 set savehist = 22 set checktime = 3 set prompt = 'IVANOV I.I._\!> ' alias h history alias c /bin/cat alias l /bin/ls -l set path = (. /bin /usr/bin /usr/ucb) ustanavlivaet te katalogi, gde csh budet iskat' komandy pered zapuskom ih na vypolnenie. set history = 22 ustanavlivaet kolichestvo poslednih komandnyh strok, kotorye dolzhny sohranyat'sya v protokole. set savehist = 22 ustanavlivaet kolichestvo strok protokola, kotoroe - 56 - neobhodimo zapomnit' v fajle ~/.history. Pri vhode v sistemu etot fajl budet prochitan i zapisan v protokol. set checktime = 3 ustanavlivaet vremya (3 min), v techenie kotorogo csh mozhet "bezdejstvovat'". Esli v techenie ukazannogo vre- meni ne budut vypolnyat'sya kakie-libo dejstviya, to vypolnyaetsya komanda exit i csh prekrashchaet rabotu. Takoe zavershenie raboty polezno, kogda pol'zovatelyu neobhodimo otluchit'sya. set prompt = 'IVANOV I.I._\!>' ustanavlivaet priglashenie, kotoroe budet vyvodit' csh pri porozhdenii novogo ekzemplyara interpretatora. Sim- voly etogo priglasheniya special'no nabrany zaglavnymi bukvami, chtoby u pol'zovatelya byla vozmozhnost' otlichit' osnovnoj ekzemplyar interpretatora ot porozhdennogo novogo. Ostal'nye komandy demonstriruyut vozmozhnost' ispol'zova- niya psevdonimov komand. Zametim, chto fajl ~/.login vypolnya- etsya tol'ko odin raz - v nachale seansa raboty v sisteme; fajl ~/.cshrc vypolnyaetsya pri zapuske kazhdoj novoj obolochki. 1.14. Vstroennye komandy i operatory Nizhe perechisleny imena vstroennyh komand, ih sintaksis i dejstvie. alias alias imya alias imya spisok_slov komanda alias pozvolyaet ustanavlivat' psevdonimy komand i komandnyh strok. Pri obrashchenii k komandam ili komand- nym strokam, dlya kotoryh vypolnena komanda alias, mozhno ispol'zovat' ih psevdonimy. Pervaya forma raspechatyvaet vse psevdonimy, vtoraya - psevdonim dlya ukazannogo imeni, esli on ustanovlen, tret'ya ustanavlivaet psevdo- nim dlya zadannogo spiska slov. V spiske slov vypolnya- yutsya podstanovki. alloc pokazyvaet razmer ispol'zuemoj dinamicheskoj pamyati, vklyuchaya ispol'zuemuyu i svobodnuyu pamyat', a takzhe adres poslednej yachejki pamyati. Ispol'zuetsya dlya otladki interpretatora. bg bg %vnutrennij_identifikator_processa bg %shablon_imeni_processa - 57 - perevodit poslednij priostanovlennyj ili ukazannyj pro- cess v asinhronnyj rezhim vypolneniya. break vyzyvaet vyhod za end blizhajshej vneshnej konstrukcii foreach ili while. Mozhno vypolnyat' perehody cherez nes- kol'ko urovnej posredstvom napisaniya neskol'kih opera- torov break v odnoj stroke, razdelyaya ih simvolom ;. breaksw vyzyvaet vyhod iz operatora switch za predely operatora endsw; case metka: metka - shablon odnogo iz variantov operatora switch. V metkah mozhno ispol'zovat' shablony imen fajlov i kata- logov ( *, ?, [...] ). Dvoetochie obyazatel'no. cd cd imya chdir chdir imya zamenyaet rabochij katalog na katalog imya. Esli parametr otsutstvuet, osushchestvlyaetsya perehod k registracionnomu katalogu pol'zovatelya. continue prodolzhaet vypolnenie blizhajshego vneshnego while ili foreach. Vse stroki cikla do end propuskayutsya, i nachi- naetsya novaya iteraciya cikla. default: ispol'zuetsya v switch. Esli posle vseh proverok ne nashlos' varianta, sovpavshego s variantom v case, vypol- nyaetsya to, chto ukazano v variante default. Variant default dolzhen raspolagat'sya posle vseh case. Dvoeto- chie obyazatel'no. dirs napechatat' soderzhimoe steka imen katalogov. Zanesenie imen katalogov v stek vypolnyaet komanda pushd, udalenie imen katalogov iz steka vypolnyaetsya komandoj popd. |lementy steka numeruyutsya ot 1, nachinaya ot vershiny steka. echo spisok_slov echo -n spisok_slov spisok slov zapisyvaetsya v standartnyj vyvod. Klyuch -n zapreshchaet perehod na novuyu stroku posle vyvoda. - 58 - else end endif endsw sm. nizhe opisanie operatorov foreach, if, switch i while. eval arg ... snachala proizvodyatsya vse podstanovki, zatem slovo eval otbrasyvaetsya, i ostavshiesya simvoly rassmatrivayutsya kak komandnaya stroka, kotoraya vypolnyaetsya. exec komanda komanda zapuskaetsya vmesto interpretatora. Rabota interpretatora zavershaetsya. exit exit(vyrazhenie) proishodit vyhod iz interpretatora (pervaya forma) libo so znacheniem ukazannogo vyrazheniya (vtoraya forma). Zna- chenie peremennoj status vsegda ravno kodu vozvrata. fg fg %vnutrennij_identifikator_processa fg %shablon_imeni_processa vozvrashchaet poslednij priostanovlennyj (pervaya forma) ili ukazannyj process v sinhronnyj rezhim vypolneniya. foreach imya (spisok_slov) ... end peremennoj imya posledovatel'no prisvaivayutsya znacheniya kazhdogo chlena spiska slov i vypolnyaetsya posledovatel'- nost' komand mezhdu dannoj komandoj i sootvetstvuyushchim operatorom end (foreach i end dolzhny nahodit'sya v otdel'nyh strokah). glob spisok_slov analogichna komande echo. Slova vyvodyatsya bez probela i posle poslednego slova ne vypolnyaetsya perehod na novuyu stroku. Takoj vyvod polezen pri manipulyaciyah s imenami fajlov, kogda eti imena neobhodimo udlinyat' ili sozda- vat' novye. - 59 - goto slovo operator bezuslovnogo perehoda na metku. Vypolnenie prodolzhaetsya so stroki, idushchej posle ukazannoj metki. Metka dolzhna zavershat'sya simvolom :. Slovo v operatore goto mozhet byt' strokoj, soderzhashchej komandy, psevdonimy komand i rasshireniya imen fajlov. V etom sluchae metka formiruetsya kak rezul'tat interpretacii i vypolneniya etoj stroki. hashstat raspechatyvaet stroku statistiki, opredelyayushchuyu, nas- kol'ko effektivno vnutrennyaya tablica heshirovaniya razme- shchaet komandy. Dannaya komanda yavlyaetsya otladochnoj. history history -r history n history -r n history -h vyvodit spiski iz protokola. Po klyuchu -r stroki vyvo- dyatsya v obratnom poryadke. Esli ukazano chislo n, to vyvodyatsya tol'ko n strok protokola. S klyuchom -h vyvo- dyatsya stroki protokola v formate fajla ~/.history. if(vyrazhenie) komanda esli vyrazhenie istinno (ne ravno nulyu), to vypolnyaetsya komanda. Komanda dolzhna byt' odna. Ne dopuskaetsya pri- menenie posledovatel'nosti komand i/ili konvejera. Interpretator vychislyaet istinnost' vyrazheniya posle podstanovok kak v komande, tak i v vyrazhenii. if(vyrazhenie_1) then ... else if(vyrazhenie_2) then ... else ... endif esli znachenie vyrazheniya_1 istinno, vypolnyayutsya komandy do pervogo else. Inache, esli znachenie vyrazheniya_2 istinno, vypolnyayutsya komandy do vtorogo else i t.d. Vozmozhno lyuboe kolichestvo par else-if; endif nuzhen tol'ko odin. CHast' else yavlyaetsya neobyazatel'noj. Slova else i endif dolzhny byt' pervymi v strokah, gde oni ukazany. if dolzhen nahodit'sya odin v stroke ili posle else. jobs jobs -l - 60 - vyvesti tablicu processov. Format jobs -l vyvodit bolee polnuyu informaciyu. Interpretator obespechivaet rabotu s vnutrennimi i sistemnymi identifikatorami processov. Sistemnye identifikatory processov vyvodyatsya komandoj ps ili jobs s klyuchom -l, vnutrennie - komandoj jobs. Pol'zovatelyu predostavlyaetsya vozmozhnost' ne obrashchat'sya k sistemnym identifikatoram, a ukazyvat' v komandah upravleniya processami vnutrennie identifikatory. Vnut- rennij identifikator processa pechataetsya v kvadratnyh skobkah. Simvolom + pomechaetsya poslednij iz priosta- novlennyh processov; simvolom - predposlednij iz prios- tanovlennyh processov. kill %vnutrennij_identifikator_processa ... kill -SIG %vnutrennij_identifikator_processa ... kill %shablon_imeni_processa ... kill -SIG %shablon_imeni_processa ... kill sistemnyj_identifikator_processa ... kill -SIG sistemnyj_identifikator_processa ... kill -l esli SIG ne ukazan, to processam posylaetsya signal TERM (okonchit'). Signal SIG ukazyvaetsya libo chislom, libo imenem bez shablona SIG (kak eto opredeleno v /usr/include/signal.h). kill -l vyvodit spisok imen signalov. limit tip_resursa maksimal'nyj_razmer limit tip_resursa limit dlya 32-razryadnyh mashin sushchestvuet vozmozhnost' ograniche- niya resursov sistemy, vydelyaemyh odnomu processu. Ogranichivaetsya potreblenie tekushchim processom i kazhdym, kotoryj sozdaetsya, tak, chto ni odin iz etih processov otdel'no ne prevyshaet maksimal'nyj razmer zadannogo resursa. Esli znachenie maksimal'nyj razmer ne zadano, vyvoditsya znachenie tekushchego ogranicheniya; esli znachenie tip_resursa ne zadano, vyvodyatsya vse ustanovlennye ogranicheniya. Tekushchee upravlenie resursov vklyuchaet vremya processora cputime (maksimal'noe chislo sekund central'nogo processora, otvodimoe kazhdomu processu), razmer fajla filesize (maksimal'nyj razmer odnogo fajla, kotoryj mozhno sozdat'), razmer segmenta dannyh datasize (maksimal'noe uvelichenie oblasti dannye_+_stek s pomoshch'yu sbrk(2) za granicu teksta programmy), razmer steka stacksize (maksimal'nyj razmer avtomaticheski ras- shiryaemoj oblasti steka), razmer dampa coredumpsize (maksimal'nyj razmer dampa, kotoryj budet sozdan). Maksimal'nyj razmer resursa mozhet byt' zadan v vide chisla (celogo libo s tochkoj), za kotorym sleduet - 61 - ukazatel' razmernosti. Dlya zadaniya imen tipov resursov i ukazatelej razmernosti dostatochno zadavat' unikal'nye shablony imen. login login imya po komande login zavershaetsya seans raboty pol'zovatelya. Komandu login mozhno vypolnyat' bez argumenta imya i s nim. Vo vtorom sluchae srazu zhe budet zaproshen vhodnoj parol' pol'zovatelya imya. logout ukazyvaet interpretatoru o neobhodimosti prekratit' rabotu. CHitaetsya fajl ~/.logout, esli on imeetsya, i vypolnyayutsya vse ukazannye v nem dejstviya. Asinhronnye processy prodolzhayut vypolnyat'sya. nice nice +chislo nice -chislo nice komanda nice +chislo komanda nice -chislo komanda komanda ustanovki prioriteta. V sisteme ispol'zuetsya shkala prioritetov: [-100; +100], prioritet +100 samyj nizkij. Pervaya forma ustanavlivaet prioritet dlya interpretatora, ravnyj 4, vtoraya - prioritet, ravnyj ukazannomu chislu, tret'ya - prioritet dlya komandy, rav- nyj 4. Tol'ko administrator sistemy mozhet ustanovit' otricatel'nyj prioritet. Dlya vypolneniya zapuskaetsya novyj interpretator, kotoryj obespechivaet vypolnenie komandy. Komanda dolzhna byt' odna i ne mozhet soderzhat' posledovatel'nost' komand, konvejer ili psevdonim. nohup nohup komanda zapreshchaet reakciyu na signaly SIGINT (CTRL/C), SIGQUIT (CTRL/\) i SIGHUP (BREAK - otklyuchenie udalennogo termi- nala ili |VM po kommutiruemoj linii). Pervaya forma v komandnom fajle ustanavlivaet svoe dejstvie na vse stroki, ukazannye nizhe. Vtoraya forma privodit k tomu, chto pri vypolnenii ukazannoj komandy eti signaly igno- riruyutsya. Dlya vseh asinhronnyh processov nohup vypol- nyaetsya avtomaticheski. - 62 - notify %vnutrennij_identifikator_processa notify %shablon_imeni_processa notify daet komandu na asinhronnyj vyvod soobshchenij ob izmene- niyah sostoyaniya processa. Obychno eti soobshcheniya vyvo- dyatsya posle peredachi na vypolnenie novoj komandnoj stroki. Esli komanda notify vypolnena bez argumentov, to etot rezhim ustanavlivaetsya dlya vseh processov. onintr onintr - onintr metka upravlyaet reakciej na preryvaniya. Pervaya forma usta- navlivaet standartnuyu reakciyu na preryvaniya, kotoraya zaklyuchaetsya v zavershenii komandnogo fajla ili vozvrate na uroven' vvoda terminal'nyh komand. Vtoraya forma vyzyvaet ignorirovanie vseh preryvanij. Poslednyaya forma vyzyvaet vypolnenie perehoda na metku pri poluche- nii preryvaniya ili pri zavershenii porozhdennogo processa iz-za preryvaniya. V lyubom sluchae, esli interpretator csh rabotaet asinhronno, vse formy komandy onintr igno- riruyutsya. popd popd +chislo vypolnyaet komandu cd imya_nomer_2 steka imen katalogov. Imya_nomer_1 iz steka imen katalogov udalyaetsya, ostal'- nye elementy steka sohranyayutsya s novymi nomerami. Forma popd +chislo udalyaet imya_nomer_(1+chislo) iz steka, ostal'nye elementy steka sohranyayutsya s novymi nomerami. Pri etom perehod v drugoj katalog ne osu- shchestvlyaetsya. pushd pushd imya_kataloga pushd +chislo lyubaya forma komandy pushd menyaet poryadok v steke imen katalogov. Forma pushd vypolnyaet komandu cd imya_nomer_2 steka. Pri etom imya_nomer_2 stavitsya v vershinu, a imya_nomer_1 - na ego mesto v steke; ostal'- nye elementy steka ostayutsya na svoih mestah. Forma pushd imya_kataloga vypolnyaet komandu cd imya_kataloga