pomeshchaetsya v fajl s sootvetstvuyushchim imenem i suffiksom ".i", pri etom podavlyaetsya vyvod strok vida "#line ..."; -C Obychno makroprocessor "cpp" ubiraet kommentarii iz svoego vyvoda. Flag -C blokiruet unichtozhenie kommentariev, chto byvaet neobhodimo dlya programm "xstr" ili "lint"; -o vyhod Pomeshchaet okonchatel'nyj rezul'tat v fajl s imenem "vyhod". Esli ispol'zuetsya etot klyuch, fajl "a.out" ne budet izmenen. -Dimya=opr -Dimya Opredelyaet ukazannoe "imya" dlya preprocessora, po analogii s "#define". Esli opredelenie ne zada- no, dannoe imya opredelyaetsya kak "1"; -Uimya Udalyaet vse nachal'nye opredeleniya ukazannogo imeni; -Ikat Poisk fajlov "#include", ch'i imena ne nachinayutsya s simvola "/", vsegda proizvoditsya snachala v te- kushchem spravochnike, zatem v spravochnikah "kat", perechislennyh pri klyuche -I, a zatem - v katalo- gah standartnogo spiska; 46 APK 00210-01 33 01-4 -B stroka Ishchet zamenyayushchie fazy kompilyatora v fajlah s ime- nem "stroka" s suffiksami ccp, c0, c1 i c2. Esli "stroka" pustaya, ispol'zuetsya standartnaya re- zervnaya versiya; -t[p012] Ishchet tol'ko ukazannye fazy kompilyatora v fajlah, imena kotoryh stroyatsya v sootvetstvii s klyuchem -B. Pri otsutstvii klyucha -B podrazumevaetsya sle- duyushchaya "stroka": "/usr/c/". -T[al]imya Assembler (esli ukazano "a") ili redaktor svyazej ("l") vyzyvayutsya iz fajla "imya" vmesto vyzyva- emyh po umolchaniyu. Ostal'nye parametry yavlyayutsya libo klyuchami redaktora svyazej, libo sovmestimymi s Si ob'ektnymi programmami, poluchennymi obychno v rezul'tate predshestvuyushchih vypol- nenij cc, libo bibliotekami sovmestimyh s Si programm. |ti programmy, vmeste s rezul'tatami ukazannyh kompi- lyacij zagruzhayutsya (v zadannom poryadke), davaya v re- zul'tate vypolnyaemuyu programmu s imenem a.out. FAJLY: fajl.c Vhodnoj fajl fajl.o Ob'ektnyj fajl a.out Zagruzochnyj vyhod /tmp/ctm? Vremennyj 47 APK 00210-01 33 01-4 /lib/cpp preprocessor /lib/c0 kompilyator 0 prohod /lib/c1 kompilyator 1 prohod /lib/fc1 1 prohod pri flage "-f" /usr/c/oc[01] rezervnyj kompilyator /usr/c/ocpp rezervnyj preprocessor /lib/c2 neobyazatel'nyj optimizator /lib/crt0.o Dinamicheskij starter /lib/mcrt0.o Starter dlya profilirovaniya /lib/lib[as].a Standartnye biblioteki /usr/include standartnyj katalog dlya fajlov "#include". /lib/fcrt0.0 Starter dlya flaga "-f" DOPOLNITELXNYE SSYLKI : cdeb, prof, adb, ld Imeetsya otdel'noe opisanie yazyka Si. DIAGNOSTIKA: Diagnosticheskie soobshcheniya, generiruemye samim kompilya- torom si, yavlyayutsya dostatochno ponyatnymi. V nekotoryh sluchayah soobshcheniya mogut generirovat'sya assemblerom ili redaktorom svyazej. 48 APK 00210-01 33 01-4 IMYA: ccat - vydacha soderzhimogo kompressirovannyh fajlov. FORMAT: ccat [fajl ...] OPISANIE: Komanda ccat vydaet soderzhimoe fajlov, "szhatyh" s po- moshch'yu komandy compact. Fajl ne izmenyaetsya. DIAGNOSTIKA: Soobshcheniya o fajlah, kotorye ne mogut byt' otkryty, i t.p. DOPOLNITELXNYE SSYLKI : compact, uncompact 49 APK 00210-01 33 01-4 IMYA: cd - smenit' rabochij spravochnik FORMAT: cd dirname OPISANIE: Komanda cd zadaet spravochnik s imenem "dirname" v ka- chestve tekushchego rabochego spravochnika. Dlya izmeneniya tekushchego spravochnika neobhodimo chtoby spravochnik "dirname" imel razreshenie na poisk v nem dlya dannogo pol'zovatelya. Poskol'ku dlya vypolneniya kazhdoj komandy sozdaetsya novyj process, komanda cd byla by neeffektivnoj, esli by ona byla napisana kak obychnaya komanda. Poetomu ona yavlyaetsya vstroennoj funkciej yazykov upravleniya zadani- yami SHELL i CSHELL. DOPOLNITELXNYE SSYLKI : csh, sh, pwd, chdir. 50 APK 00210-01 33 01-4 IMYA: chmod - izmenit' status fajla FORMAT: chmod status fajl ... OPISANIE: Status kazhdogo iz perechislennyh fajlov izmenyaetsya v sootvetstvii so znacheniem parametra "status", kotoroe mozhet byt' absolyutnym ili simvolicheskim. Absolyutnoe znachenie statusa predstavlyaet soboj vos'merichnoe chislo, stroyashcheesya po pravilu "ili" iz sleduyushchih znache- nij: 4000 ustanovit' identifikator hozyaina fajla pri vy- polnenii; 2000 ustanovit' identifikator gruppy po gruppe hozya- ina fajla pri vypolnenii; 1000 bit sohraneniya obraza teksta; 0400 razreshenie na chtenie fajla vladel'cu; 0200 razreshenie na zapis' fajla vladel'cu; 0100 razreshenie vypolneniya (poiska v spravochnike) vladel'cu; 0070 razreshenie chteniya, zapisi, vypolneniya (poiska) gruppe; 0007 razreshenie chteniya, zapisi, vypolneniya prochim 51 APK 00210-01 33 01-4 pol'zovatelyam. Simvolicheskoe znachenie "status" imeet sleduyushchij vid: [kto] op polnomochie [op polnomochie] ... Pole "kto" predstavlyaet soboj kombinaciyu bukv "u" (dlya polnomochij pol'zovatelya), "g" (gruppa), "o" (prochie). Bukva "a" zamenyaet sochetanie "ugo". Esli pole "kto" opushcheno, po umolchaniyu prinimaetsya znachenie "a", odnako prinimaetsya vo vnimanie maska sozdaniya fajla (sm. umask). Pole "op" mozhet predstavlyat' soboj "+" - dlya dobavle- niya polnomochiya v rezhim fajla, "-" - dlya udaleniya pol- nomochiya i "=" dlya absolyutnogo prisvaivaniya polnomochiya (vse ostal'nye bity budut sbrosheny). "Polnomochie" predstavlyaet soboj proizvol'nuyu kombina- ciyu bukv "r" (chtenie), "w" (zapis'), "x" (vypolnenie), "s" (ustanovlenie identifikacii pol'zovatelya ili grup- py) i "t" (sohranenie tekstov posle vypolneniya). Otsutstvie polya polnomochiya polezno ispol'zovat' tol'ko s simvolom "=" dlya udaleniya vseh polnomochij. PRIMERY: Pervyj iz privedennyh nizhe primerov zapreshchaet zapis' "prochim" pol'zovatelyam, a vtoroj delaet ukazannyj fajl vypolnyaemym. chmod o-w fajl 52 APK 00210-01 33 01-4 chmod +x fajl DOPOLNITELXNYE SSYLKI: ls, chown, stat, umask. ZAMECHANIYA: Mozhet byt' ukazano neskol'ko simvolicheskih rezhimov, razdelennyh zapyatymi. Operacii vypolnyayutsya v zadannom poryadke. Bukvu "s" imeet smysl ispol'zovat' tol'ko sovmestno s "u" ili "g". Tol'ko vladelec fajla (ili super-pol'zovatel') mozhet izmenit' ego rezhim. 53 APK 00210-01 33 01-4 IMYA: clear - ochistit' ekran terminala. FORMAT: clear OPISANIE: Komanda clear stiraet ekran terminala, ispol'zuya in- formaciyu ob osobennostyah dannogo ustrojstva iz fajla opisanij harakteristik terminalov (/etc/termcap). FAJLY: /etc/termcap opisanie harakteristik terminalov raz- lichnyh tipov. 54 APK 00210-01 33 01-4 IMYA: cmp - sravnenie dvuh fajlov. FORMAT: cmp [-l] [-s] fajl1 fajl2 OPISANIE: Dva ukazannyh fajla sravnivayutsya. (esli parametr "fajl1" predstavlyaet soboj "-", ispol'zuetsya stan- dartnyj fajl vvoda). Bez parametrov komanda cmp ne vy- daet nikakih soobshchenij, esli fajly odinakovy,ili uka- zyvaet nomer bajta i stroki, gde proizoshlo nesovpade- nie, esli oni otlichayutsya. Esli odin iz fajlov yavlyaetsya nachalom drugogo, ob etom soobshchaetsya. -l pechataet nomer bajta (desyatichnyj) i otlichayushchiesya bajty (vos'merichnye) dlya kazhdogo nesovpadeniya; -s dlya otlichayushchihsya fajlov nichego ne pechataetsya, vozvrashchaetsya tol'ko kod. DOPOLNITELXNYE SSYLKI: diff, comm DIAGNOSTIKA: Vozvrashchaetsya vyhodnoj kod, ravnyj 0 dlya identichnyh fajlov, 1 dlya otlichayushchihsya fajlov i 2 dlya nedostupnyh ili propushchennyh parametrov. 55 APK 00210-01 33 01-4 IMYA: col - unichtozhit' obratnye perevody stroki. FORMAT: col [-bfx] OPISANIE: Komanda col chitaet standartnyj fajl vvoda i proizvodit zapis' v standartnyj fajl vyvoda. Ona vypolnyaet nalo- zhenie strok, podrazumevaemoe obratnymi perevodami stroki (ESC-7 v kode KOI-8) i pryamymi i obratnymi pe- revodami stroki na polshaga (ESC-8 i ESC-9). Komanda col osobenno polezna dlya fil'tracii mnogokolonochnogo vyvoda, poluchennogo komandoj ".rt" iz pif i vyvoda, poluchaemogo v rezul'tate ispol'zovaniya preprocessora tbl. Hotya komanda col vosprinimaet na vvode perevody stroki na polshaga, ona obychno ne peredaet ih na vyvod. Vmesto etogo tekst, kotoryj dolzhen byl poyavit'sya mezhdu strok, sdvigaetsya k sleduyushchej nizhnej granice polnoj stroki. |tot rezhim mozhet byt' otmenen klyuchem -f (tochno).V etom sluchae vyhod col mozhet soderzhat' perevody stroki na polshaga vpered, odnako kakie-libo perevody stroki nazad vsegda otsutstvuyut. Esli zadan klyuch -b, col predpolagaet, chto ispol'zuemoe ustrojstvo vyvoda ne imeet vozmozhnosti vozvrata na shag. V etom sluchae, esli neskol'ko simvolov dolzhny po- yavit'sya na odnom i tom zhe meste, budet vydan tol'ko 56 APK 00210-01 33 01-4 poslednij schitannyj simvol. Upravlyayushchie simvoly SI (017 v kode KOI-8) i SO (016) schitayutsya nachalom i koncom teksta s al'ternativnym na- borom simvolov. Nabor simvolov (ishodnyj ili al'terna- tivnyj), svyazannyj s kazhdym schitannym pechatnym simvo- lom, zapominaetsya. Pri vvode simvoly SI i SO vstavlya- yutsya v nuzhnyh mestah, chtoby obespechit' sootvetstvuyushchuyu obrabotku kazhdogo simvola. Komanda col obychno preobrazuet probely v simvoly tabu- lyacii, chtoby sokratit' vremya pechati. Esli ukazan klyuch -x, eto preobrazovanie otmenyaetsya. Iz vhodnogo potoka udalyayutsya vse upravlyayushchie simvoly, za isklyucheniem simvolov probela (SP-040), vozvrata na shag (BS-010), tabulyacii (HT-011), vozvrata karetki (CR-015), novoj stroki (LF-012), za kotorym sleduet odin iz simvolov ESC-7, ESC-8, ESC-9, SI, SO. Vse os- tal'nye nepechataemye simvoly ignoriruyutsya. DOPOLNITELXNYE SSYLKI: pif, tbl, greek ZAMECHANIYA: Nel'zya vozvratit'sya nazad bolee, chem na 128 strok. V stroke ne dolzhno byt' bolee 800 simvolov, vklyuchaya simvoly vozvrata na shag. 57 APK 00210-01 33 01-4 IMYA: colcrt - fil'tr dlya fajlov v formate pif. FORMAT: colcrt [-] [-2] [fajl ...] OPISANIE: Komanda colcrt obespechivaet virtual'nye vozmozhnosti perevoda stroki na polshaga na polovinu mezhstrochnogo intervala i obratnogo perevoda stroki dlya terminalov, ne imeyushchih ukazannyh sredstv i na kotoryh povtornyj vyvod simvola v odnu i tu zhe poziciyu razrushaet imev- shijsya v nej simvol. Sdvinutye na polstroki simvoly i simvoly podcherkivaniya (zamenennye na tire "-") raspo- lagayutsya na novyh strokah mezhdu obychnymi vyhodnymi strokami. Neobyazatel'nyj parametr "-" podavlyaet vse podcherkiva- niya. |to osobenno polezno dlya prosmotra polnost'yu okajmlennyh tablic posle tbl. Klyuch -2 vyzyvaet pechat' sdvinutyh na polstroki simvo- lov, fakticheski udvaivaya interval vyvoda. Obychno is- pol'zuetsya minimal'nyj interval vyvodnogo formata, ko- toryj podavlyaet pechat' pustyh strok. Odnako dannaya programma nikogda ne podavlyaet pechat' dvuh posledova- tel'nyh pustyh strok. Klyuch -2 polezen pri vyvode na ACPU, kogda vyvod soderzhit nadstrochnye i podstrochnye indeksy, kotorye inache ne byli by vidny. 58 APK 00210-01 33 01-4 Tipichnoe ispol'zovanie komandy colcrt sleduyushchee: tbl exum2.n | pif -ms | colcrt - | more DOPOLNITELXNYE SSYLKI: pif, col, more, ul. ZAMECHANIYA: Nel'zya vernut'sya bolee chem na 102 stroki. V obshchem sluchae pri povtornom vyvode v odnu i tu zhe po- ziciyu proishodit poterya simvola.Kak special'nyj slu- chaj, v rezul'tate nalozheniya "|" i "-" ili podcherki- vaniya poluchaetsya "+". Dlina stroki ogranichivayutsya 132 simvolami. Trebuetsya opredelennaya ostorozhnost' pri obrabotke nadstrochnyh i podstrochnyh indeksov v dokumentah, koto- rye uzhe imeyut dvojnoj interval. 59 APK 00210-01 33 01-4 IMYA : colrm - udalit' ukazannye kolonoki. FORMAT: colrm [nachstlb [konstlb]] OPISANIE: Komanda colrm udalyaet iz fajla ukazannye stolbcy. Informaciya chitaetsya iz standartnogo fajla vvoda i posle obrabotki zapisyvaetsya v standartnyj fajl vyvo- da. Esli pri vyzove ukazan tol'ko odin parametr, v kazhdoj stroke budut udaleny vse pozicii, nachinaya s ukazannogo stolbca. Esli ukazany dva parametra, budut udaleny vse pozicii ot nachal'nogo stolbca do konechnogo stolbca. Numeraciya stolbcov nachinaetsya so stolbca 1. DOPOLNITELXNYE SSYLKI: expand ZAMECHANIYA Simvoly tabulyacii rassmatrivayutsya kak odin simvol i odin stolbec. 60 APK 00210-01 33 01-4 IMYA: comm - vybrat' (otbrosit') odinakovye stroki fajlov. FORMAT: comm [-[123]] fajl1 fajl2 OPISANIE: Komanda comm schityvaet fajly "fajl1" i "fajl2", koto- rye dolzhny byt' otsortirovany v sootvetstvii s posle- dovatel'nost'yu kodov KOI-8, i generiruet tri stolbca vyvoda: stroki, vhodyashchie tol'ko v "fajl1", stroki, vhodyashchie tol'ko v "fajl2" i stroki, vhodyashchie v oba fajla. Klyuch "-" oznachaet ispol'zovanie standartnogo fajla vvoda. Flagi 1, 2 i 3 podavlyayut pechat' sootvetstvuyushchih stolbcov. Takim obrazom, komanda "comm -12" pechataet tol'ko stroki, obshchie dlya oboih fajlov. "Comm -23" pe- chataet tol'ko stroki, kotorye vhodyat v pervyj fajl, no ne vhodyat vo vtoroj, a komanda "comm -123" simvolizi- ruet otsutstvie operacii. DOPOLNITELXNYE SSYLKI: cmp, diff, uniq 61 APK 00210-01 33 01-4 IMYA: compact - kompressiya fajla FORMAT: compact [fajl ...] OPISANIE: Komanda compact kompressiruet perechislennye fajly. Esli imena fajlov ne ukazany, kompressiruetsya informa- ciya, postupayushchaya iz standartnogo fajla vvoda, rezul'- tat vydaetsya v standartnyj fajl vyvoda. Kak tol'ko schityvaetsya ocherednoj bajt, on nemedlenno kodiruetsya v sootvetstvii s tekushchim kodom. |tot kod predstavlyaet soboj optimal'nyj kod Haffmana dlya nabora chastot, vy- chislennyh po uzhe vvedennoj informacii. Net neobhodi- mosti v dobavlenii k szhatomu fajlu dereva dekodirova- niya, poskol'ku shifrator (compact) i deshifrator (uncompact) nachinayut rabotat' s odnogo i togo zhe sos- toyaniya i ostayutsya sinhronnymi. Bolee togo, compact i uncompact mogut rabotat' v kachestve fil'trov. V chastnosti, ... | compact | uncompact | ... Rabotaet kak ochen' medlennaya komanda, ne vypolnyayushchaya nikakoj operacii. Esli ukazan parametr "fajl", etot fajl szhimaetsya i re- zul'tat pomeshchaetsya v fajl s imenem "fajl.C", "fajl" udalyaetsya. Poslednie dva bajta szhatogo fajla (".C") 62 APK 00210-01 33 01-4 ukazyvayut, chto etot fajl szhat. |tot kod ispol'zuetsya dlya predotvrashcheniya povtornoj kompressii. Ozhidaemaya stepen' szhatiya zavisit ot tipa ishodnogo fajla. Tipichnye znacheniya stepeni szhatiya sleduyushchie: 38% tekst; 43% ishodnaya programma na paskale; 36% ishodnaya programma na yazyke Si; 19% modul' zagruzki. |ti znacheniya predstavlyayut soboj procent bajtov, na ko- torye umen'shen fajl. ZAMECHANIYA: Poslednyaya chast' imeni fajla dolzhna soderzhat' menee 13-ti simvolov, chtoby ostavalos' mesto dlya suffiksa ".C". Katalogi ne mogut (i ne dolzhny) szhimat'sya. DIAGNOSTIKA: Komanda compact ne szhimaet katalogi. Vydayutsya takzhe soobshcheniya o fajlah, kotorye ne mogut byt' otkryty, i t.p. FAJLY: Sozdavaemye fajly imeyut suffiks ".C". Ishodnye fajly udalyayutsya (esli oni ne byli zashchishcheny). DOPOLNITELXNYE SSYLKI: uncompact, ccat 63 APK 00210-01 33 01-4 IMYA: convert - preobrazovatel' ob'ektnogo koda OS ES v a.out FORMAT: convert [-e] fajl1 fajl2 OPISANIE: Komanda convert sluzhit dlya preobrazovaniya ob'ektnogo koda v "fajl1" iz formata OS ES v ob'ektnyj kod forma- ta DEMOS "fajl2". -e flag ustanavlivaet pri preobrazovanii perekodi- rovku koda DKOI v KOI-8 dlya simvol'nyh imen slo- varya vneshnih imen ESD. Simvoly imeni, krome togo, preobrazuyutsya v strochnye bukvy. DOPOLNITELXNYE SSYLKI: a.out ZAMECHANIYA: 1. Pravil'nee ispol'zovat' "fajl2" v kachestve o.tip dlya obrabotki ego redaktorom svyazej. 2. Ne obrabatyvayutsya vneshnie fiktivnye sekcii DSECT komandy assemblera DXD. 3. Ne obrabatyvayutsya slabye vneshnie imena operato- rov assemblera WXTRN. 4. Ne obrabatyvaetsya ob'ektnaya karta SYM. 64 APK 00210-01 33 01-4 5. Ne podderzhivaetsya operacionnoe peremeshchenie. 65 APK 00210-01 33 01-4 IMYA: cp - sozdat' kopiyu fajla. FORMAT: cp [-i] fajl1 fajl2 cp [-i] fajl ... spravochnik OPISANIE: "Fajl1" kopiruetsya v "fajl2". Esli "fajl2" sushchestvuet, rezhim i vladelec sohranyayutsya, v protivnom sluchae is- pol'zuetsya rezhim ishodnogo fajla. Vtoraya forma dannoj komandy kopiruet odin ili neskol'- ko ukazannyh fajlov v "spravochnik" s ishodnymi imena- mi. Komanda cp otvergaet zapros na kopirovanie fajla v sa- mogo sebya. Esli zadan parametr -i i kopirovanie proizvoditsya v uzhe sushchestvuyushchij fajl, ot pol'zovatelya trebuetsya podtverzhdenie. Esli pol'zovatel' podtverzhdaet zapros, vydavaya otvet "y", komanda cp prodolzhaet rabotu. Pri vydache lyubogo drugogo simvola predydushchee soderzhimoe fajla sohranyaetsya. DOPOLNITELXNYE SSYLKI: cat, pr, mv 66 APK 00210-01 33 01-4 IMYA: crypt - zashifrovat'/rasshifrovat'. FORMAT: crypt [klyuch] OPISANIE: Komanda crypt osushchestvlyaet chtenie iz standartnogo fajla vvoda i zapis' v standartnyj fajl vyvoda. Argu- ment "klyuch" predstavlyaet soboj klyuch, kotoryj zadaet konkretnoe preobrazovanie informacii. Esli "klyuch" ne zadan, komanda crypt trebuet vvod klyucha s terminala, ne vydavaya simvolov na ekran terminala vo vremya vvoda klyucha. Dve komandy crypt s odnim i tem zhe znacheniem klyucha (klyuch1): crypt klyuch1 <ishodnyj >zashifrovannyj crypt klyuch1 <zashifrovannyj | pr zashifruyut ishodnyj fajl i, rasshifrovav, raspechatayut ishodnyj tekst. Fajly, zashifrovannye s pomoshch'yu crypt, sovmestimy s temi fajlami, s kotorymi rabotaet redaktor ed v rezhime shifrovaniya. Zashchita zashifrovannyh fajlov osnovana na treh faktorah: 1) lezhashchij v osnove metod dolzhen byt' trudnym dlya razgadki; 67 APK 00210-01 33 01-4 2) pryamoj prosmotr prostranstva klyuchej dolzhen byt' nevozmozhen; 3) obhodnye puti, pozvolyayushchie poluchit' klyuchi ili ishodnyj tekst, dolzhny byt' minimizirovany. Komanda crypt realizuet odnorotornuyu shifroval'nuyu ma- shinu s 256-elementnym rotorom. Metody bor'by s takimi mashinami izvestny, odnako ne ochen' shiroko. Bolee togo, dlya rasshifrovki neobhodimo prodelat' dostatochno bol'- shuyu rabotu. Preobrazovanie klyucha vo vnutrennie ustanovki mashiny umyshlenno sdelano slozhnym. Odnako, esli klyuchi ograni- cheny, naprimer, tremya malymi bukvami, zashifrovannye fajly mogut byt' prochitany s zatratami ne bolee pyati minut mashinnogo vremeni. Poskol'ku klyuch yavlyaetsya parametrom komandy crypt, on yavlyaetsya potencial'no vidimym dlya pol'zovatelej, vy- polnyayushchih komandu ps ili ee proizvodnuyu. Dlya umen'she- niya etoj vozmozhnosti crypt razrushaet lyubuyu zapis' klyu- cha srazu zhe posle vhoda. Nesomnenno, vybor klyuchej i ih zashchishchennost' predstavlyayut soboj naibolee uyazvimoe mesto. FAJLY: /dev/tty dlya napechatannogo klyucha DOPOLNITELXNYE SSYLKI: ed, makekey 68 APK 00210-01 33 01-4 IMYA: csh - interpretator komandnogo yazyka s Si-podobnym sintaksisom. FORMAT: csh [-cefinstvVxX] [parametr...] OPISANIE: Komanda csh predstavlyaet soboj interpretator komandno- go yazyka CSHELL, kotoryj, v otlichie ot yazyka SHELL, imeet bolee shirokij nabor vstroennyh komand, podderzhi- vaet nekotoryj kontekst raboty i imeet Si-podobnyj sintaksis. Funkcionirovanie csh nachinaetsya s vypolneniya komandno- go fajla ".cshrc" v registracionnom spravochnike pol'- zovatelya. Esli csh ispol'zuetsya v kachestve interpreta- tora osnovnogo komandnogo yazyka, pri registriracii v sisteme vypolnyaetsya komandnyj fajl ".login" v tom zhe spravochnike. Posle etogo interpretator nachinaet schity- vat' komandy s terminala, vydavaya v kachestve podskazki simvol "%". Pri zavershenii raboty vypolnyaetsya ko- mandnyj fajl ".logout" v registracionnom spravochnike pol'zovatelya. LEKSICHESKAYA STRUKTURA: Komandoj v yazyke CSHELL schitaetsya nabor parametrov. Parametrom yavlyaetsya proizvol'naya posledovatel'nost' simvolov, ne soderzhashchaya simvolov probela, tabulyacii i 69 APK 00210-01 33 01-4 novoj stroki. Pervyj parametr v stroke rassmatrivaetsya kak imya komandy, kotoruyu neobhodimo vypolnit'. Sushchestvuet nabor simvolov, kotorye imeyut special'noe znachenie v yazyke CSHELL, i obrabatyvayutsya osobym obra- zom. Takie simvoly v dal'nejshem budut nazyvat'sya meta- simvolami. K ih chislu otnosyatsya "&", "|", ";", "<", ">", "(", ")", "*" i nekotorye drugie. V neinteraktivnom rezhime simvol "#" ukazyvaet na nacha- lo kommentariya. On teryaet svoe special'noe znachenie pri ispol'zovanii lyubogo iz sushchestvuyushchih mehanizmov ekranirovaniya. KOMANDY: Prostaya komanda predstavlyaet soboj posledovatel'nost' slov, pervoe iz kotoryh - imya vypolnyaemoj komandy, a ostal'nye peredayutsya v kachestve parametrov. Posledova- tel'nost' prostyh komand, razdelennyh simvolami "|", obrazuet kanal mezhprocessnoj svyazi (vyvod predydushchej komandy yavlyaetsya vvodom sleduyushchej). Cepochki komand, obrazuyushchih mezhprocessnye kanaly (konvejery), mogut razdelyat'sya s pomoshch'yu simvola ";", pri etom oni vypol- nyayutsya posledovatel'no. V fonovom rezhime, kogda posle- dovatel'nost' komand zavershaetsya simvolom "&", csh mozhet ne dozhidayas' okonchaniya translyacii perejti k vy- polneniyu sleduyushchej komandy. V takom rezhime sushchestvuet avtomaticheskaya zashchita ot signala ostanova; sledova- tel'no, net neobhodimosti v ispol'zovanii komandy 70 APK 00210-01 33 01-4 "nohup". Spisok komand, zaklyuchennyj v skobki (), rassmatrivaet- sya kak prostaya komanda, kotoraya mozhet yavlyat'sya chast'yu konvejera. Simvoly "||" i "&&", ispol'zuemye v ka- chestve razdelitelej, ukazyvayut (kak i v yazyke Si), chto vtoroj konvejer dolzhen zapuskat'sya tol'ko v sluchae za- versheniya pervogo. MEHANIZM PODSTANOVKI PREDSHESTVUYUSHCHIH KOMAND: Csh zapominaet komandnye stroki, kotorye vvodil pol'- zovatel' v processe raboty, i pozvolyaet osushchestvlyat' ih povtornyj vvod. Ukazatelem vypolneniya podstanovki komand yavlyaetsya simvol "!". Podstanovka mozhet nachinat'sya v lyubom meste vhodnogo potoka. Simvol "!" teryaet svoe special'noe znachenie, esli on ekranirovan s pomoshch'yu simvola " takzhe esli za nim sleduet probel, znak tabulyacii, simvol novoj stroki, "=" ili "(". Podstanovka komand proizvoditsya takzhe v tom sluchae, kogda vhodnaya stroka nachinaetsya simvolom "^". Komandy numeruyutsya posledovatel'no, nachinaya s 1. Koli- chestvo zapominaemyh csh komandnyh strok opredelyaetsya peremennoj history. Ssylki na predydushchie komandy iz tekushchej komandy mogut byt' osushchestvleny sleduyushchim ob- razom: !N po nomeru komandy; 71 APK 00210-01 33 01-4 !-n na n komand ran'she otnositel'no tekushchej komandy; !c po pervoj bukve komandy; !?...?! po stroke "...", soderzhashchejsya v nekotorom slove komandy; !! povtornoe vypolnenie poslednej komandy. Dlya vybora iz komandy otdel'nyh parametrov, posle spe- cifikacii komandy nuzhno ukazat' ":" i opredelitel' trebuemyh parametrov. Slova vhodnoj stroki numeruyutsya, nachinaya s 0: 0 - obychno imya komandy, 1 - pervyj para- metr i t.d. Osnovnymi opredelitelyami yavlyayutsya: 0 imya komandy; n n-yj parametr; ^ pervyj parametr; $ poslednij parametr; % slovo, kotoroe sootvetstvuet (neposredstvenno predshestvuyushchemu) obrazcu ?...?; h-y diapazon slov; -y sootvetstvuet "0-y";27 * vybrat' vse parametry, nachinaya s pervogo ("%-$"); h* vybrat' vse parametry, nachinaya s n-go ("h-$"); 72 APK 00210-01 33 01-4 h- to zhe, chto "h*", no ne vklyuchaya poslednij parametr "$". Simvol ":" mozhet byt' opushchen, esli opredelitel' nachi- naetsya odnim iz simvolov "^", "$", "*", "-" ili "%". Posle neobyazatel'nogo opredelitelya mogut ukazyvat'sya modifikatory. Kazhdomu iz nih predshestvuet dvoetochie ":". Opredeleny sleduyushchie modifikatory: g primenit' modifikaciyu vo vseh slovah; h udalit' imya fajla, ostavlyaya imena spravochnikov, vedushchih k nemu; r raspechatat' novuyu komandu, no ne vypolnyat' ee; q zaklyuchit' modificiruemoe slovo v kavychki, pre- dotvrashchaya ego dal'nejshuyu modifikaciyu; r udalit' rasshirenie imeni fajla, ukazannoe cherez tochku "."; s/l/r zamenit' l na r. V kachestve razdelitelya vmesto "/" mozhet byt' ispol'zovan lyuboj simvol.V stro- kah l i r razdelitel' dolzhen ekranirovat'sya simvolom " sya predydushchaya stroka libo iz l, libo iz stroki kontekstual'nogo poiska s v "!?s?". Esli stroka r pusta, to l udalyaetsya; t udalit' imena vseh spravochnikov, vedushchih k fajlu, ostavlyaya imya fajla; 73 APK 00210-01 33 01-4 x to zhe, chto i q, no razbit' na slova v mestah nalichiya probelov, znakov tabulyacii i simvolov novoj stroki; & povtorit' predydushchuyu modifikaciyu. Csh ppredostvlyaet udobnyj sposob modifikacii poslednej stroki. Dlya etih celej ispol'zuetsya konstrukciya "^ob- razec^zamena". PSEVDONIMY: S pomoshch'yu komand alias i unalias interpretator csh sostavlyaet spisok psevdonimov, kotorye mogut ustanav- livat'sya, otobrazhat'sya i modificirovat'sya. Posle pros- motra komandnoj stroki ona razbivaetsya na otdel'nye komandy, i pervoe slovo kazhdoj komandy proveryaetsya (sleva napravo), chtoby vyyasnit', imeet li ono psevdo- nim. Esli imeet, to tekst, kotoryj yavlyaetsya psevdoni- mom dannoj komandy, schityvaetsya s pomoshch'yu mehanizma history tak, kak esli by eta komanda byla predydushchej vhodnoj strokoj. Poluchennye slova zamenyayut komandu i spisok parametrov. |tot mehanizm pozvolyaet vvodit' novyj sintaksis komand. PODSTANOVKA PEREMENNYH: Posle podstanovki psevdonimov i grammaticheskogo razbo- ra vhodnoj stroki i pered vypolneniem kazhdoj komandy proizvoditsya podstanovka peremennyh, oboznachaemaya sim- volom "$". 74 APK 00210-01 33 01-4 Sushchestvuyut sleduyushchie konstrukcii: $imya ${imya} Podstavit' znachenie peremennoj. Figurnye skobki otdelyayut "imya" ot simvolov, kotorye k nemu ne otnosyatsya. Imena peremennyh mogut soderzhat' do 20 bukv i simvolov podcherkivaniya; $imya[selektor] ${imya[selektor]} Podstavit' znachenie slova, vybrannogo "selekto- rom" iz mnozhestva znachenij peremennoj "imya"; $#imya ${#imya} Podstavit' kolichestvo slov, hranyashchihsya v pere- mennoj; $0 Podstavit' imya standartnogo fajla vvoda. Esli eto imya neizvestno, voznikaet oshibka; $chislo ${chislo} |kvivalentno "$argv [chislo]"; $* |kvivalentno "$argv [*]"; S pomoshch'yu modifikatora ":" ne mogut byt' proizvedeny 75 APK 00210-01 33 01-4 sleduyushchie podstanovki: $?imya ${?imya} Podstavit' "1", esli "imya" opredeleno, ili "0" - esli ne opredeleno. $?0 Podstavit' "1", esli standartnyj fajl vvoda op- redelen, ili "0" - v protivnom sluchae. $$ Podstavit' nomer processa csh. PODSTANOVKA VYVODA KOMAND: Pri podstanovke komandy, ee zaklyuchayut v obratnye apostrofy `...`. |ta komanda vypolnyaetsya, a ee stan- dartnyj vyvod razbivaetsya na otdel'nye slova v mestah nalichiya probelov, znakov tabulyacii i simvolov novoj stroki, prichem pustye slova otbrasyvayutsya, i etot tekst zatem zamenyaet ishodnuyu stroku v "`". Vnutri strok, zaklyuchennyh v kavychki "...", tol'ko simvol novoj stroki vydelyaet novye slova.Probely i simvoly tabulyacii sohranyayutsya. Pri pomoshchi podstanovki vyvoda komandy mozhet byt' soz- dana tol'ko chast' slova, dazhe esli komanda vydaet ce- luyu stroku. PODSTANOVKA IMEN FAJLOV: Esli slovo soderzhit lyuboj iz simvolov "*", "?", "[", 76 APK 00210-01 33 01-4 "{" ili nachinaetsya s "^ ", to v nem mozhet byt' osu- shchestvlena podstanovka imeni fajla. Pri etom dannoe slovo yavlyaetsya obrazcom, kotoryj zamenyaetsya soot- vetstvuyushchim spiskom fajlov, otsortirovannyh v alfavit- nom poryadke. Esli v spiske imen fajlov ne najdeno ni odnogo sootvetstviya zadannomu obrazcu, voznikaet oshib- ka. Sleduyushchie simvoly imeyut special'noe znachenie: * Sootvetstvuet lyuboj posledovatel'nosti simvolov, v tom chisle pustoj; ? Sootvetstvuet lyubomu odinochnomu simvolu; [...] Sootvetstvuet lyubomu iz perechislennyh simvolov. Para simvolov, razdelennaya znakom "-", soot- vetstvuet lyubomu simvolu iz ukazannogo leksiches- kogo promezhutka; ~ Registracionnyj spravochnik, yavlyayushchijsya znacheniem peremennoj home; ~imya Registracionnyj spravochnik pol'zovatelya s imenem "imya"; [a,b,...,n] Sootvetstvuet lyubomu iz perechislennyh simvolov. Dlya ukazaniya samih simvolov "[" i "]" v spiske pered nimi dolzhen stavit'sya simvol " a{b,c,d}e 77 APK 00210-01 33 01-4 Sootvetstvuet "abe ace ade". Ispol'zovanie probe- lov ne dopuskaetsya. Pri podbore imen fajlov simvol ".", nahodyashchijsya v na- chale imeni fajla ili neposredstvenno posle "/", a takzhe simvol "/" dolzhny byt' ukazany yavno i tochno na svoih mestah. VVOD/VYVOD Dlya zadaniya fajlov vvoda/vyvoda ispol'zuyutsya sleduyushchie konstrukcii: <imya Ispol'zovat' fajl "imya" v kachestve standartnogo fajla vvoda; <<slovo Schitat' vvod interpretatora do stroki, kotoraya identichna ukazannomu "slovu". Poluchennyj vremen- nyj fajl ispol'zovat' v kachestve standartnogo fajla vvoda; >imya >!imya >&imya >&!imya Ispol'zovat' fajl "imya" v kachestve standartnogo fajla vyvoda. Soderzhimoe fajla usekaetsya do nu- levoj dliny. Esli opredelena peremennaya noclobber, fajl ne dolzhen sushchestvovat', inache 78 APK 00210-01 33 01-4 voznikaet oshibka. Dlya predotvrashcheniya nepredname- rennogo razrusheniya fajlov ispol'zuyutsya konstruk- cii s "!". Konstrukcii, ispol'zuyushchie "&", nap- ravlyayut v standartnyj fajl vyvoda takzhe diagnos- ticheskie soobshcheniya; >>imya >>&imya >>!imya >>&!imya Ispol'zovat' fajl "imya" v kachestve standartnogo fajla vyvoda; vyhodnaya informaciya dopisyvaetsya k soderzhimomu fajla "imya". Esli opredelena pere- mennaya noclobber, a fajl ne sushchestvuet, to is- pol'zovanie konstrukcij, ne soderzhashchih "!", privodit k vozniknoveniyu oshibki. V fonovom rezhime standartnym fajlom vyvoda po umolcha- niyu yavlyaetsya pustoj fajl "/dev/null". Diagnostika mozhet byt' vyvedena po kanalu mezhprocessnoj svyazi. Dlya etogo ispol'zuetsya konstrukciya "|&". VYRAZHENIYA: Nekotorye iz vstroennyh komand mogut soderzhat' vyrazhe- niya, v kotoryh imeyutsya operacii, analogichnye operaciyam v yazyke Si, s takim zhe prioritetom. |ti vyrazheniya mogut poyavlyat'sya v komandah @, exit, if i while. Raz- resheny sleduyushchie operacii: "||", "&&", "|", "~", "&", 79 APK 00210-01 33 01-4 "==", "!=", "<=", ">=", "<", ">", "<<", ">>", "+", "-", "*", "/", "%", "!", "^", "(", ")". Starshinstvo operacij v etom ryadu vozrastaet sleva nap- ravo; vnutri sleduyushchih grupp operacii imeyut odinakovyj prioritet: == != <= >= < > << >> + - * / % V operaciyah sravneniya "==", "!=", operandami yavlyayutsya stroki; ostal'nye operiruyut s chislami. Logicheskimi znacheniyami yavlyayutsya: 0 - "lozh'", 1 (ili lyuboe chislo, otlichnoe ot nulya) - "istina". Vse znaki operacij dolzhny otdelyat'sya ot operandov probelami. V odnom slo- ve ne dolzhny vstrechat'sya dva komponenta vyrazhenij, za isklyucheniem sluchaev ispol'zovaniya sleduyushchih znakov operacij: "&", "|", "<", ">", "(", ")". Imeyushchiesya v csh operacii prisvaivaniya analogichny ope- raciyam prisvaivaniya yazyka Si. K nim otnosyatsya: "=", "+=", "-=", "*=", "/=", "%=". Postfiksnye operacii "++" i "--" sootvetstvenno inkre- mentiruyut i dekrementiruyut "imya" (naprimer, "@i++"). V kachestve prostyh operandov v vyrazheniyah mogut is- pol'zovat'sya komandy, zaklyuchennye v figurnye skobki 80 APK 00210-01 33 01-4 "{...}". V csh imeyutsya operacii oprosa svojstv fajla vida "-l imya", gde l mozhet prinimat' sleduyushchie znacheniya: r razreshenie chteniya; w razreshenie zapisi; h razreshenie vypolneniya; e sushchestvovanie; o vladelec; z nulevoj razmer; f nezashifrovannyj fajl; d spravochnik. V ukazannom fajle osushchestvlyayutsya podstanovki peremen- nyh i imen fajlov. Esli fajl obladaet trebuemym svojstvom, to vozvrashchaetsya znachenie 1 (istina), inache - 0 (lozh'). KOMANDY UPRAVLENIYA: K komandam upravleniya otnosyatsya sleduyushchie konstrukcii: foreach imya (slovo ...) spisok_komand end Peremennoj "imya" posledovatel'no prisvaivayutsya znacheniya "slovo ..." i vypolnyaetsya "spisok_ko- mand". switch( stroka ) 81 APK 00210-01 33 01-4 case slovo: ... breaksw ... default: ... breaksw endsw "Stroka" posledovatel'no sravnivaetsya so vsemi "slovami". Esli sootvetstvie ne obnaruzheno, vy- polnenie prodolzhaetsya posle default. Komanda breaksw privodit k tomu, chto vypolnenie prodol- zhaetsya posle endsw. if( vyr1 ) then spisok_komand1 else if( vyr2 ) then spisok_komand2 else spisok_komand3 endif Esli znachenie pervogo vyrazheniya istinno (otlichno ot nulya), vypolnyaetsya "spisok_komand1". V pro- tivnom sluchae proveryaetsya "vyrazhenie2": esli ono istinno, vypolnyaetsya "spisok_komand2" i t.d. while( vyrazhenie ) ... end Cikl vypolnyaetsya, poka istinno znachenie "vyrazhe- 82 APK 00210-01 33 01-4 niya". V operatorah upravleniya csh klyuchevoe slovo (if, else i dr.) dolzhno byt' pervym slovo v stroke. VSTROENNYE KOMANDY: alias alias imya alias imya spisok_slov Pervaya forma raspechatyvaet vse psevdonimy. Vto- raya forma raspechatyvaet psevdonim ukazannogo "imeni". Poslednyaya forma opredelyaet "spi- sok_slov" kak psevdonim "imeni". V "spiske_slov" osushchestvlyaetsya podstanovka komand i imen fajlov. V kachestve "imen" nel'zya ispol'zovat' "alias" i "unalias". alloc Vydaet razmer ispol'zuemoj dinamicheskoj pamyati, vklyuchaya ispol'zuemuyu i svobodnuyu pamyat', a takzhe adres poslednej yachejki pamyati. break Vyzyvaet vozobnovlenie vypolneniya posle end bli- zhajshej vneshnej konstrukcii foreach ili while. Esli v odnoj stroke ukazyvaetsya neskol'ko komand break, razdelennyh tochkoj s zapyatoj, to perehod osushchestvlyaetsya cherez stol'ko zhe urovnej. breaksw Vyzyvaet vyhod iz komandy switch, vozobnovlyaya 83 APK 00210-01 33 01-4 vypolnenie posle endsw. case metka: "Metka" - odin iz variantov operatora switch. cd cd imya chdir chdir imya zamenyaet tekushchij spravochnik na spravochnik "imya". Esli parametr otsutstvuet, to po umolchaniyu pri- nimaetsya registracionnyj spravochnik. continue Prodolzhaet vypolnenie blizhajshego vneshnego while ili foreach. Ostal'nye komandy tekushchej stroki vypolnyayutsya. default: Metka, oboznachayushchaya variant po umolchaniyu v ope- ratore switch.Dolzhna raspolagat'sya posle vseh metok case. echo spisok_slov Ukazannye slova zapisyvayutsya v standartnyj fajl vyvoda. Simvol " na novuyu stroku. else end endif 84 APK 00210-01 33 01-4