i po 1200 blokov cd tar cvefbk /dev/rfd0 10 1200 . * vypolnit' komandu "ls-l" dlya kopij fajlov tar tvf /dev/rfd0 * vosstanovit' kopii fajlov cd $DEST tar xvf /dev/rfd0 * skopirovat' fajly v tar , otsortirovav ih tar cvfk /dev/rfd0 1200 'find . -print | sort' TEE * otprav'te svoj vyvod na ekran drugogo terminala sh | tee /dev/tty01 * zahvatite vyvod drugih komand fsck /dev/root | tee capture cu -ltty00 dir | tee capture TEST * prover'te ekvivalentnost' dvuh strok test "$S1" = "$S2" * prover'te ekvivalentnost' dvuh chisel test "$N1" -eq "$N2" * to zhe samoe drugim sposobom (zamet'te chto /bin/[prisoedinen k /bin/test) - 31 - [ "$S1" = "$S2" ] [ "$N1" -eq "$N2" ] TOUCH * sdelajte tekushchim dostup i izmenite vremya vseh fajlov v Vashem home kataloge find $HOME -exec touch {} \; find $HOME -print | while read FILE do touch $FILE done TTY * pokazat' prava dostupa po zapisi na Vashem terminale ls -l 'tty' * vklyuchit' i otklyuchit' dostup pol'zovatelej k Vashemu terminalu chmod 666 'tty' chmod 600 'tty' UUCP * skopirovat' imena vseh fajlov v fajl v obshchedostupnyj katalog na drugoj sisteme for FILE in 'cat datafile' do echo "kopirovanie $FILE" uucp $FILE sys! ~/user done * postavit' fajl v ochered', ne iniciirovat' vyzov, vzyat' fajl iz Vashego pervonachal'nogo kataloga, ne kopirrovat' ego v spool katalog. uucp -r -c file sys!/tmp VI * vypolnite tekushchuyu stroku kak komandu yazyka shell :.w !sh - * to zhe samoe drugim sposobom, ispol'zuya makros "ayy @a * vyjti neposredstvenno v shell :sh * skompilirovat' tekushchij fajl :!sh * zapustit' imya tekushchego fajla kak komadu yazyka shell :!cc % * zapustit' eshche raz poslednyuyu komandu :!% - 32 - * zapustit' komandu i pomestit' vvyvod na tekushchuyu stroku (perepisat') :.!who am i * zapustit' komandu i pomestit' vvyvod na novuyu stroku :.r !who am i :r !who am i * otredaktirovat' fajl, kotoryj nahoditsya gde-to v sisteme :e 'path termcap' * pomestit' long listing fajla, kotoryj nahoditsya gde-to v fajle redaktora :.!ls -l 'path init' WC * pechataet kolichestvo chelovek, zaregistrirovannyh v sisteme echo "Vsego 'who | wc -l' chelovek voshlo v sistemu" * pechataet kolichestvo stork vo vseh ishodnyh fajlah find /usr/src -name "*.c" -exec cat {} \; | wc -l WHO * pechataet kolichestvo i imena zaregistrirovannyh pol'zovatelej who | awk '{ print "user:",$1,"\tdevice:",$2 cnt = cnt + 1 } END { print cnt,"pol'zovateli, vyshedshie iz sistemy"}' * pechataet who | while read NAME TTY TIME do echo "pol'zovatel': $NAME tty: $TTY time: $TIME done  * PRILOZHENIE 1. Peremennye sredy vypolneniya *  Nekotorye peremennye sredy yavlyayutsya zarezervirovannymi slovami, kotorye ispol'zuet interpretator shell. Ih znacheniya ustanavlivayutsya, kogda vy registriruetes' v sisteme. Drugie peremennye ispol'zuyutsya razlichnymi drugimi chastyami sistemy UNIX. Imeya pod rukoj polnyj spi- sok, vy mozhete ubedit'sya, chto vse neobhodimye peremennye opredeleny. Imena peremennyh mogut var'irovat'sya v System V, BSD i XENIX. Zdes' privedeny imena dlya System V. |ti shell-peremennye yavlyayutsya chast'yu sredy vashego registracion- nogo interpretatora shell. Oni hranyatsya v vide simvol'nyh strok, i esli uzh oni ustanovleny, ot nih nel'zya izbavit'sya. Tol'ko pereusta- novka ih znachenij na pustye stroki mozhet isklyuchit' ih prisutstvie. Kogda menyayutsya znacheniya peremennyh, novye znacheniya lokal'ny dlya teku- shchego interpretatora shell do teh por, poka oni ne budut eksportirova- ny. CDPATH Stroka poiska, opredelyayushchaya, kuda vy mozhete perejti s pomoshch'yu komandy cd HOME Mesto hraneniya vashih fajlov v sistemnom dereve IFS Vnutrennij razdelitel' polej, kotoryj opredelyaet simvoly, razdelyayushchie slova mezhdu soboj LOGNAME Vashe registracionnoe imya, opredelennoe v /etc/passwd MAIL Opredelyaet mestonahozhdenie vashego pochtovogo yashchika, chtoby vas mozhno bylo opovestit' o postuplenii vam novoj pochty PATH Opredelyaet poryadok i imena katalogov dlya poiska ispolnyaemyh modulej PS1 Glavnaya stroka podskazki, kotoraya otobrazhaetsya v kachestve vashego obychnogo priglasheniya PS2 Vtorichnaya stroka podskazki, kotoraya otobrazhaetsya, kogda interpretatoru shell nuzhen dopolnitel'nyj vvod TERM Stroka, opredelyayushchaya vash tip terminala TERMCAP Ustanavlivaetsya libo na fajl opisaniya terminala, libo na zapis' etogo fajla TZ Zona vremeni, ponimaemaya tak, kak opisano v ctime(3) SHELL Imya shell-interpretatora, kotoryj vy zapuskaete EXINIT Stroka inicializacii dlya redaktora ex PRILOZHENIE 2 POSLEDOVATELXNOSTX DEJSTVIJ INTERPRETATORA SHELL Shell vypolnyaet opredelennuyu posledovatel'nost' dejstvij po in- terpretacii komand dlya kazhdoj prochitannoj im stroki. Znaya etu posle- dovatel'nost', vy mozhete izolirovat' mnogie problemy na sootvetstvuyu- shchem urovne. Inogda na opredelennom shage etoj posledovatel'nosti mogut poyavit'sya strannye vhozhdeniya simvolov. Poetomu vazhno znat', kogda iz- menyayutsya znacheniya peremennyh. Odin iz primerov otnositsya k raskrytiyu imeni fajla i simvolu zvezdochki. Shell NE raskryvaet metasimvoly vo vremya prisvoeniya znache- nij. Operator F=* oznachaet v dejstvitel'nosti, chto peremennoj F pris- vaivaetsya odin simvol. Kogda vypolnyaetsya shag 7 posledovatel'nosti dejstvij, zvezdochka raskryvaetsya kak metasimvol imeni fajla, prevra- shchayas' vo vse imena fajlov v tekushchem kataloge. |to mozhno prodemonstri- rovat' na primere komandy "echo $F". Dlya togo chtoby sohranit' lite- ral'noe znachenie zvezdochki, vam nuzhno ekranirovat' ee, chto zashchitit ee ot shaga 7. Poluchaetsya komanda echo "$F". A dlya togo chtoby voobshche po- davit' znachenie peremennoj F, vam sleduet isklyuchit' shag 3 - podsta- novku parametrov. Ukazyvaya komandu echo '$F', vy pechataete bukvy $F, a ne znachenie peremennoj F. Dejstviya vypolnyayutsya v takom poryadke: 1. CHtenie vhoda i sintaksicheskij razbor 2. Slovesnoe soprovozhdenie razbora 3. Podstanovka parametrov 4. Podstanovka komand 5. Perenaznachenie vvoda-vyvoda 6. Obrabotka vnutrennih razdelitelej polej 7. Raskrytie imeni fajla 8. Trassirovka vypolneniya 9. Obrabotka peremennyh sredy 10. Vypolnenie komandy Dalee eti shagi rassmatrivayutsya bolee podrobno. Kogda vy program- miruete na yazyke shell, popytajtes' predstavit' sebe, kakoj shag vy ispol'zuete dlya kazhdoj stroki teksta programmy. Vozmozhno, vy putaete dva-tri shaga mezhdu soboj. Znaya poryadok shagov, vy mozhete proshche oprede- lyat' effekt ot dejstviya vashih komand i sokrashchat' chislo vozmozhnyh oshi- bok. 1. Komandnaya stroka ili logicheskaya konstrukciya chitaetsya s termi- nala ili iz fajla dannyh. CHtenie ostanavlivaetsya pri obnaruzhenii sle- duyushchih simvolov: tochki s zapyatoj (;), simvola fonovoj zadachi (&), lo- gicheskogo i (&&), logicheskogo ili (||) libo simvola novoj stroki (\n). Vypolnyaetsya razbor vvedennyh dannyh na slova s uchetom probelov i tabulyacij. 2. Esli v tekushchem interpretatore shell ustanovlen flag mnogos- lovnosti (-v), to prochitannaya stroka otobrazhaetsya na standartnoe ust- rojstvo registracii oshibok. 3. Vypolnyaetsya podstanovka parametrov. Syuda vhodit podstanovka pozicionnyh parametrov, podstanovka peremennyh i podstanovka speci- al'nyh vyrazhenij. Parametry vsegda imeyut prefiks v vide denezhnogo znaka ($). 4. Vypolnyaetsya podstanovka komand. |to otnositsya ko vsem koman- dam, vzyatym v simvoly udareniya (`). Takaya komanda vychislyaetsya i vy- polnyaetsya, a rezul'tiruyushchij tekst zamenyaet ishodnoe vyrazhenie v pol- noj komandnoj stroke. Vypolnyaemaya komanda mozhet soderzhat' posledovatel'nye komandy, konvejery ili komandy, sgruppirovannye v skobkah. Lyubye lishnie probely, tabulyacii ili simvoly novoj stroki, poyavivshiesya v rezul'tate vypolneniya komandy, vposledstvii udalyayutsya pri obrabotke vnutrennih razdelitelej polej. Esli nuzhno sohranit' eti lishnie simvoly, primenite dvojnye kavychki vokrug vsego vyrazheniya. 5. Proveryaetsya perenaznachenie vvoda-vyvoda. Esli takovoe imeet- sya, ishodnyj deskriptor fajla (0, 1 ili 2) zakryvaetsya, a zatem otk- ryvaetsya povtorno s novym znacheniem. Vnov' otkrytyj deskriptor fajla zanimaet v fajlovom vvode-vyvode to zhe mesto, chto i zakrytyj fajlovyj deskriptor. Simvoly perenaznacheniya udalyayutsya iz komandnoj stroki. 6. Poskol'ku komandnaya stroka mogla izmenit'sya po sravneniyu so svoim ishodnym sostoyaniem v rezul'tate podstanovok, ona vnov' razbi- raetsya na slova s uchetom peremennoj sredy IFS. |ta peremennaya soder- zhit razdeliteli mezhdu polyami, kotorye otdelyayut slova drug ot druga v komandnoj stroke. Kazhdyj simvol komandnoj stroki, kotoryj zanesen v IFS, zamenyaetsya na probel, chtoby razgranichit' slova. Vse neekraniro- vannye probely, tabulyacii, simvoly novoj stroki i nulevye argumenty udalyayutsya iz komandnoj stroki. Vse ekranirovannye znacheniya peremennyh zashchishcheny ot razbora, vypolnyaemogo v sootvetstvii s IFS. Dlya togo chto- by uvidet' znachenie IFS, vvedite takoj konvejer komand: echo "<$IFS>" | od -bc 7. Dalee shell ishchet vse slova, dlya kotoryh trebuetsya raskrytie imeni fajla (metasimvola). Delaetsya popytka sopostavit' obrazec s fajlami tekushchego kataloga. Esli podhodyashchie fajly najdeny, oni zamenya- yut vyrazhenie v komandnoj stroke. Esli sootvetstviya ne obnaruzheno, me- tasimvoly ostayutsya v etom vyrazhenii. Vse prisvoeniya peremennym zashchi- shcheny ot raskrytiya metasimvolov. Tipichnym primerom yavlyaetsya komanda "ls z*". Esli imena kakih-libo fajlov nachinayutsya s bukvy z, eti imena perechislyayutsya. V protivnom sluchae pechataetsya soobshchenie "z* not found". 8. Esli ustanovlen flag trassirovki vypolneniya (-x), to komand- naya stroka otobrazhaetsya na standartnoe ustrojstvo registracii oshibok pered tem, kak ona budet fakticheski vypolnena. Esli eto komandnaya stroka, to ona vyvoditsya s prefiksom "+", esli zhe eto prosto prisvoe- nie znacheniya peremennoj, prefiksa net. 9. Na etom shage vsem peremennym prisvaivayutsya znacheniya, zatem v sootvetstvii s peremennoj sredy PATH ishchetsya mestonahozhdenie komandy. Prisvoenie znachenij peremennym proishodit sprava nalevo vdol' komand- noj stroki. Poisk po peremennoj PATH, naoborot, proishodit sleva nap- ravo. Esli imya najdeno, to polnoe marshrutnoe imya zamenyaet vyzov ko- mandy v komandnoj stroke. Esli peremennaya PATH imeet pustoe znachenie, podrazumevaetsya tekushchij katalog. Esli v kakom-libo meste ishodnogo imeni komandy imeetsya kosaya cherta (/), to peremennaya PATH ne prosmat- rivaetsya, a schitaetsya, chto ukazano polnoe marshrutnoe imya. 10. Nakonec, komanda vypolnyaetsya. Esli eto vstroennaya komanda, tekushchij shell otrabatyvaet ee. V protivnom sluchae delaetsya popytka zagruzit' komandu v pamyat', kak esli by eto byla skompilirovannaya programma. Esli eta popytka uspeshna, komanda vypolnyaetsya posredstvom sistemnogo vyzova exec(2). Esli zagruzka komandy ne udalas', to schi- taetsya, chto eto komandnyj fajl eshche odnogo interpretatora shell, i po- rozhdaemyj shell chitaet etot komandnyj fajl v kachestve svoih dannyh. PRILOZHENIE 3 SPECIALXNYE SIMVOLY SHELL-PEREMENNYH Privedennye zdes' simvoly rassmatrivayutsya shell-peremennymi kak special'nye, tak kak oni oznachayut zavershenie slova. Dlya togo chtoby ispol'zovat' simvol v ego obychnom znachenii, a ne v kachestve special'- noj funkcii, nuzhno ekranirovat' ego obratnoj kosoj chertoj (\) ili vzyat' v odinarnye kavychki. \b Probel: kod 20 (shestnadcaterichnyj), ogranichitel' slov \n Simvol novoj stroki: ^j, kod A (shestnadcaterichnyj), ogranichitel' slov \t Tabulyaciya: ^i, kod 9, ogranichitel' slov ; Tochka s zapyatoj: zavershaet programmnyj konvejer ( Levaya skobka: ogranichivaet podchinennyj shell ) Pravaya skobka: ogranichivaet podchinennyj shell | Vertikal'naya cherta, ili simvol programmnogo konvejera: razdelyaet komandy ^ Strelka vverh, znak vstavki: staryj simvol, ispol'zuemyj v kachestve | > Pravaya uglovaya skobka (znak bol'she): perenaznachaet standartnyj vyvod < Levaya uglovaya skobka (znak men'she): perenaznachaet standartnyj vvod & Ampersand: vyzyvaet asinhronnoe (fonovoe) vypolnenie { Levaya figurnaya skobka: ocherchivaet slovo dlya pervonachal'nogo razbora slova } Pravaya figurnaya skobka: zavershaet znak ocherchivaniya slova PRILOZHENIE 4 SPECIALXNYE SIMVOLY SHELL-OPERATOROV |ti simvoly vstrechayutsya v sintaksise operatorov yazyka shell. Ih sleduet rassmatrivat' kak zarezervirovannye. Otdel'nye simvoly mogut ispol'zovat'sya po-raznomu. Naprimer, simvol # yavlyaetsya kommentariem v operatore, a takzhe mozhet byt' parametrom, kak v zapisi $#, oznachayushchej kolichestvo argumentov v komandnoj stroke. && Dvojnoj ampersand: vypolnit' spisok, esli programmnyj konvejer otrabotal uspeshno || Dvojnaya vertikal'naya cherta: vypolnit' spisok v sluchae neudachi programmnogo konvejera ` Znak udareniya: perehvatit' standartnyj vyvod v komande * Pri ispol'zovanii v kachestve parametra sootvetstvuet vsem pozicionnym parametram; yavlyaetsya takzhe simvolom generacii imen fajlov, sootvetstvuyushchim lyuboj stroke # Kommentarij do konca stroki; sootvetstvuet takzhe kolichestvu pozicionnyh parametrov v komandnoj stroke ? Pri ispol'zovanii v kachestve parametra sootvetstvuet statusu zaversheniya poslednej sinhronno vypolnennoj komandy; ispol'zuetsya takzhe pri generacii imen fajlov i oznachaet pri etom lyuboj odinarnyj simvol - Oboznachaet flagi, vliyayushchie na funkcionirovanie interpretatora shell $ Vvodit zamenyaemye parametry; sootvetstvuet takzhe identifikatoru processa ! Pri ispol'zovanii v kachestve parametra sootvetstvuet identifikatoru processa poslednego fonovogo zadaniya; primenyaetsya takzhe v komande proverki, gde oznachaet "ne" " Dvojnaya kavychka: okajmlyaet simvoly i razreshaet proizvodit' podstanovku parametrov ' Odinarnaya kavychka: okajmlyaet simvoly, no zapreshchaet podstanovku parametrov \ Obratnaya naklonnaya cherta: ekraniruet odinochnyj simvol, chtoby snyat' ego special'noe znachenie [] Al'ternativnoe ispol'zovanie dlya vyzova komandy proverki. Primenyaetsya takzhe pri generacii imen fajlov, oznachaya pri etom diapazon simvolov @ Sootvetstvuet kazhdomu pozicionnomu parametru komandnoj stroki >> Dopolnit' standartnyj vyvod << Perenaznachit' standartnyj vvod na vvodimye stroki teksta & Ispol'zuetsya kak simvol fonovogo processa; sootvetstvuet takzhe "fajlovomu deskriptoru", esli ispol'zuetsya v pereadresacii PRILOZHENIE 5 VSTROENNYE OPERATORY YAZYKA SHELL Perechislennye nizhe komandy upotreblyayutsya v programmah na yazyke shell. Zdes' imeetsya v vidu System V Bourne shell. V System V.2 - bolee novoj versii System V - interpretator shell imeet nekotorye dopolnitel'nye komandy, perechislennye v otdel'nom spiske. Imeetsya takzhe interpretator ksh (fakticheski eto uluchshennyj Bourne shell), obladayushchij vozmozhnostyami komandnyh strok, harakternymi dlya csh (Si-shell). Interpretator ksh zdes' ne rassmatrivaetsya. PRIMECHANIE. Ne pozvolyajte komande exec sbit' vas s tolku. |to ne to zhe samoe, chto komanda exec(2). Dannaya komanda exec obrabatyvaetsya interpretatorm shell, a exec(2) yavlyaetsya sistemnym vyzovom. KOMANDY System V Bourne Shell . Tochka: zapustit' dannuyu komandu iz tekushchego interpretatora shell, a ne iz porozhdaemogo : Dvoetochie: nichego ne delat', a tol'ko vozvratit' uspeshnyj status (0) {} Figurnye skobki: zapustit' posledovatel'nyj spisok komand break Oborvat' sleduyushchuyu iteraciyu tekushchego cikla case Mnogokratnyj vybor if-then-else cd Smenit' katalog continue Perejti na sleduyushchuyu iteraciyu cikla for, while ili until eval Vypolnit' eshche raz etap podstanovki peremennyh exec Vypolnit' komandu s argumentami, perekryvaya tekushchij shell exit Ostanovit' vypolnenie tekushchego komandnogo fajla export Otpravit' znachenie peremennoj vsem podchinennym interpretatoram shell for Upravlyayushchee slovo v cikle for-do-done if Upravlyayushchee slovo v posledovatel'nosti if-then-else newgrp Izmenit' tekushchij identifikator gruppy read Odnu stroku standartnogo vvoda prisvoit' peremennoj v kachestve znacheniya readonly Ob®yavit' peremennuyu tol'ko dlya chteniya, ee znachenie izmenyat' nel'zya set Vklyuchenie i vyklyuchenie flagov konfiguracii shell shift Ubrat' pozicionnyj parametr iz komandnoj stroki test Vychislit' vzaimosvyazi mezhdu strokami i celymi chislami times Pechatat' vremya raboty processov, zapushchennyh iz shell trap Opredelit' obrabotchiki preryvanij dlya konkretnyh signalov ulimit Ustanovit' predel razmera fajlov v 512-bajtnyh blokah umask Maska prav dostupa k fajlam, ispol'zuemaya pri ih sozdanii until Upravlyayushchee slovo v cikle until-do-done wait Shell zhdet zaversheniya ukazannyh porozhdennyh processov while Upravlyayushchee slovo v cikle while-do-done DOPOLNITELXNYE KOMANDY System V.2 hash Pri poiske komand ispol'zovat' heshirovanie name Opredelit' imya shell-funkcii pwd Soobshchit' tekushchij katalog; teper' eto vstroennaya komanda dlya uskoreniya return Vyjti iz shell-funkcii i vozvratit' znachenie set -f Zapretit' fazu generacii imen fajlov set -h Sohranit', a ne vypolnyat' funkcional'nye komandy, esli oni opredeleny type Opredelit', kakim obrazom mozhno interpretirovat' imya v kachestve komandy unset Udalit' shell-peremennye i funkcii