Bolee polnye svedeniya o UNIXe |tot tekst podgotovlen NPO "KLOTO" Oglavlenie 1. Svedeniya o processah i sistemnyh vyzovah . . . . . . . . 2. Atributy processov . . . . . . . . . . . . . . . . . . . 2.1. Nasleduemye fajly . . . . . . . . . . . . . . 2.2. Identifikator pol'zovatelya (UID) i identifi- kator gruppy (GID) . . . . . . . . . . . . . . 3. Komandy UNIXa . . . . . . . . . . . . . . . . . . . . . 3.1. Kontekstnyj poisk i preobrazovanie teksta . . 3.2. Arifmeticheskij yazyk dlya vychislenij s proiz- vol'noj tochnost'yu . . . . . . . . . . . . . . 3.3. Izmenenie prav dostupa k fajlam . . . . . . . 3.4. Sravnenie soderzhimogo dvuh fajlov . . . . . . 3.5. Postrochnoe sravnenie dvuh tekstovyh fajlov . . 3.6. Prostye arifmeticheskie vychisleniya s proizvol'- noj tochnost'yu . . . . . . . . . . . . . . . . 3.7. Vyvesti argumenty komandnoj stroki na stan- dartnyj vyvod . . . . . . . . . . . . . . . . 3.8. Razlozhenie celogo chisla na prostye somnozhiteli 3.9. Opredelenie tipa fajla . . . . . . . . . . . . 3.10. Poisk fajlov . . . . . . . . . . . . . . . . 3.11. Kontekstnyj poisk v tekstovom fajle . . . . . 3.12. Opredelenie identifikatora pol'zovatelya i identifikatora gruppy . . . . . . . . . . . . 3.13. Avarijnoe zavershenie processa . . . . . . . . 3.14. Informaciya o sostoyanii processov . . . . . . 3.15. Sortirovka i/ili sliyanie fajlov . . . . . . . 3.16 Podschet kolichestva simvolov, slov i strok v fajle . . . . . . . . . . . . . . . . . . . .  * 1. Svedeniya o processah i sistemnyh vyzovah *  Sistemnye vyzovy - eto interfejs mezhdu programmami i yadrom UNIXa. YAdro UNIXa obespechivaet razdelenie processora mezhdu vy- polnyayushchimisya programmami, osushchestvlyaet upravlenie pamyat'yu i drugimi ustrojstvami, realizuet fajlovuyu sistemu. Sistemnye vy- zovy mogut ispol'zovat'sya vsemi bez isklyucheniya programmami. Programma, nahodyashchayasya v stadii vypolneniya, nazyvaetsya processom. Tak, shell, ozhidayushchij vvoda komandy, yavlyaetsya pro- cessom. Vse komandy UNIXa (krome vstroennyh komand shella) yavlyayut- sya obychnymi programmami. Poetomu, poluchiv komandu, ne yavlyayushchuyu- sya vstroennoj, shell dolzhen vyzvat' na vypolnenie programmu i peredat' ej argumenty iz komandnoj stroki. Dlya etogo shell de- laet sleduyushchee: on razdelyaetsya na dve kopii (ispol'zuya sistem- nyj vyzov fork), otlichayushchiesya lish' tem, chto kazhdaya mozhet opre- delit', kem ona yavlyaetsya: processom-predkom ili processom-po- tomkom. Pri etom processu-potomku dostayutsya po nasledstvu vse atributy processa-predka: otkrytye fajly, peremennye okruzheniya, tekushchaya direktoriya i dr. Zatem process-predok perehodit v sos- toyanie ozhidaniya zaversheniya processa-potomka (ispol'zuya sistem- nyj vyzov wait), esli tol'ko process-potomok ne byl zapushchen asinhronno. Process-potomok izdaet sistemnyj vyzov exec, po ko- toromu yadro UNIXa podmenyaet programmu, opredelyayushchuyu povedenie processa, i peredaet ej upravlenie i spisok argumentov. Nasledovanie atributov ob®yasnyaet, pochemu tak legko mozhno perenaznachit' standatnyj vvod-vyvod. Pered tem, kak peredat' upravlenie novoj programme, shell (process-predok) perenaznacha- et svoj standartnyj vvod-vyvod, kotoryj i dostanetsya novoj programme. Zavershiv vypolnenie, process-potomok proizvedet "samoubij- stvo" (izdav dlya etogo sistemnyj vyzov exit). Pri etom vse otk- rytye v nem fajly budut zakryty i sam on prekratit sushchestvova- nie. Esli zavershilsya process, u kotorogo byli potomki, to eti potomki stanut potomkami "vseobshchego predka", t.e. processa, za- pushchennogo pri vhode v sistemu. Zavershenie processa-potomka pri- vodit k probuzhdeniyu processa-predka, kotoryj poluchaet informa- ciyu o tom, kotoryj iz processov-potomkov zavershil svoe sushchest- vovanie i kod ego zaversheniya. Posle etogo process-predok unich- tozhit vse sledy sushchestvovaniya processa-potomka i prodolzhit vy- polnenie svoej programmy. Kazhdyj process pri ego porozhdenii poluchaet unikal'nyj no- mer, nazyvaemyj PID (process ID). Nomer ego processa-predka - PPID (parent PID). |ti nomera mozhno poluchit', vospol'zovavshis' komandoj ps (sm. 3.14).  * 2. Atributy processov *  Pri porozhdenii novogo processa, poslednij nasleduet ot processa-predka bol'shinstvo atributov. K nim otnosyatsya otkrytye fajly, peremennye okruzheniya, tekushchaya direktoriya, identifikator pol'zovatelya i identifikator gruppy i t.d. 2.1. Nasleduemye fajly Vse fajly, kotorye byli otkryty v processe, izdavshem sis- temnyj vyzov fork, budut unasledovany potomkom. Esli kakoj-li- bo iz etih processov reshit zakryt' odin iz takih fajlov, to dostupa k fajlu lishitsya tol'ko on sam. Fajl mozhet byt' dostup- nym i bolee chem dvum processam-rodstvennikam, esli porozhdeno bolee odnogo processa-potomka. Pri etom vse oni razdelyayut edinstvennyj ukazatel' na fajl. 2.2. Identifikator pol'zovatelya (UID) i identifikator gruppy (GID) Dlya kazhdogo processa opredeleny prava dostupa k razlichnym fajlam s pomoshch'yu identifikatora pol'zovatelya i identifikatora gruppy, kotorye imeet pol'zovatel', zapustivshij process (uznat' ih mozhno komandoj id (sm. 3.12)). |ti identifikatory yavlyayutsya celymi chislami i ih ustanovka proizvoditsya v moment vhoda v sistemu. Identifikator pol'zovatelya i identifikator gruppy, us- tanovlennye dlya processa, peredayutsya im po nasledstvu vsem po- tomkam. Na samom dele s kazhdym processom, krome dejstvuyushchego iden- tifikatora pol'zovatelya i dejstvuyushchego identifikatora gruppy, svyazany eshche real'nyj identifikator pol'zovatelya i real'nyj identifikator gruppy. Pervye dva ispol'zuyutsya pri proverke raz- resheniya na dostup k fajlam, a vtorye dva opredelyayut pol'zovate- lya, ot imeni kotorogo vystupaet process. V bol'shinstve sluchaev eti identifikatory sovpadayut. Odnako mogut byt' ustanovleny takie kody zashchity fajla, chto pri obrashche- nii k nemu (napr. mail, rmdir) pereustanavlivaetsya libo real'- nyj identifikator pol'zovatelya, libo real'nyj identifikator gruppy, libo i tot i drugoj, i, takim obrazom, pol'zovatel' po- luchaet vozmozhnost' proizvodit' dejstviya ot imeni pol'zovatelya s bol'shimi pravami.  * 3. Komandy UNIXa *  awk - kontekstnyj poisk i preobrazovanie teksta bc - arifmeticheskij yazyk dlya vychislenij s proizvol'noj tochnost'yu chmod - izmenenie prav dostupa k fajlam cmp - sravnenie soderzhimogo dvuh fajlov comm - postrochnoe sravnenie dvuh tekstovyh fajlov dc - prostye arifmeticheskie vychisleniya s proizvol'noj toch- nost'yu echo - vyvesti argumenty komandnoj stroki na standartnyj vy- vod factor - razlozhenie celogo chisla na prostye somnozhiteli file - opredelenie tipa fajla find - poisk fajlov grep - kontekstnyj poisk v tekstovom fajle id - opredelenie identifikatora pol'zovatelya i identifika- tora gruppy kill - avarijnoe zavershenie processa ps - informaciya o sostoyanii processov sort - sortirovka i/ili sliyanie fajlov wc - podschet kolichestva simvolov, slov i strok v fajle 3.1. awk - Kontekstnyj poisk i preobrazovanie teksta Format komandy: awk [ -Fc ] [ -f ] [ ] [ ] [ ] awk skaniruet kazhdyj vhodnoj fajl v poiske strok, udovlet- voryayushchih kakomu-libo iz shablonov, opredelennyh v . SHablo- ny mogut libo byt' zadany neposredstvenno v kachestve , libo byt' zapisany v fajl progfile i obrabotany komandoj awk -f progfile [ ] Esli shablony ukazany v komandnoj stroke, to oni dolzhny byt' zaklyucheny v odinarnye kavychki ('). awk mogut byt' peredany pa- rametry v forme x=... y=... i t.d. Primery sm. v konce opisa- niya. Fajly chitayutsya v ukazannom poryadke. Esli ne ukazano ni od- nogo fajla, to stroki vvodyatsya iz standartnogo vvoda. Fajl s imenem "-" oboznachaet standartnyj vvod. Vvod dlya awk delitsya na zapisi, razdelyaemye special'nym razdelitelem. Po umolchaniyu eto , i togda awk obraba- tyvaet vvod postrochno. Razdelitel' zapisej mozhno izmenit', pe- reopredeliv peremennuyu RS. Kazhdaya zapis' delitsya na polya, ogranichennye razdelitelyami polej. Po umolchaniyu eto probely. |tot razdelitel' mozhno izme- nit', ustanoviv peremennuyu FS ravnoj simvolu c ili ukazav flag -Fc. SHablony komandnoj stroki dostupny po imenam $1, $2, ...; $0 - vsya vhodnaya stroka. Esli razdelitel' zapisej nulevoj, to na samom dele im yavlyaetsya pustaya stroka. Dlya kazhdogo obrazca, ukazannogo v , opredelyaetsya dejstvie. Ukazannoe dejstvie budet proizvedeno s kazhdoj stro- koj, ili polem vnutri nee, kotoraya udovletvoryaet etomu shablonu. Operator imeet vid: { } Kazhdaya stroka proveryaetsya na sovpadenie s kazhdym shablonom. Pri kazhdom sovpadenii vypolnyayutsya vse ukazannye dejstviya. Posle sravneniya so vsemi obrazcami vvoditsya sleduyushchaya stroka i pro- cess sravneniya povtoryaetsya. Mozhet byt' opushchen libo shablon, libo dejstvie, no ne oba vmeste. Esli dlya dannogo shablona ne ukazany dejstviya, to stroka prosto kopiruetsya v vyvod. Esli dlya dejst- viya ne opredelen shablon, to ono budet vypolnyat'sya dlya kazhdoj vhodnoj stroki. Stroki, ne udovletvoryayushchie ni odnomu obrazcu, ignoriruyutsya. Dejstvie est' posledovatel'nost' operatorov. Tak kak shab- lony i dejstviya mogut byt' opushcheny, to, chtoby razlichat' ih v programme, poslednie nado brat' v figurnye skobki. Operator est' odna iz konstrukcij: if ( ) [ else ] while ( ) for ( ; ; ) break continue [ ] ... = print [ ] [ > ] printf [ , ] [ > ] next (propustit' ostavshiesya shablony i perejti k sleduyushchej stroke) exit (propustit' ostavshiesya stroki) Operatory zavershayutsya tochkoj s zapyatoj, ili pravoj skobkoj. Pustoj oznachaet vsyu stroku. Vyrazheniya stroyatsya iz strokovyh ili chislovyh velichin s pomoshch'yu operacij +, -, *, /, % i konkatenacii (oboznachaetsya probelom). V vyrazheniyah takzhe mozhno ispol'zovat' operatory yazyka C: ++, --, +=, -=, *=, /=, %=. Peremennye inicializiruyutsya pustoj strokoj. Peremennye mogut takzhe byt' elementami massiva (oboz- nachaetsya x[i]) ili polyami. Indeksy massiva ne obyazany byt' ce- lymi. Konstantnye stroki dolzhny byt' zaklyucheny v dvojnye kavych- ki ("). Operator print vyvodit svoi argumenty v standartnyj vyvod (ili v fajl, esli opredelena chast' '> '), razdelyaya ih tekushchim razdelitelem polej i zavershaya kazhduyu zapis' tekushchim razdelitelem zapisej. Operator printf delaet to zhe samoe, no pod upravleniem formata (format sovpadaet s formatom funkcii printf yazyka C). Vstroennaya funkciya length vozvrashchaet dlinu svoego argumen- ta, rassmatrivaya ego kak stroku; esli argument opushchen, to vozv- rashchaetsya dlina tekushchej stroki. Opredeleny takzhe sleduyushchie vstroennye funkcii: exp, log, sqrt i int (int vozvrashchaet celuyu chast' svoego argumenta). Funkciya substr(s, m, n) vozvrashchaet n-simvol'nuyu podstroku stroki s, nachinaya s pozicii m. Funkciya sprintf(, , , ...) preobrazuet vyrazheniya v sootvetstvii s ukazannym formatom (sm. printf) i vozvrashchaet poluchennuyu stroku. SHablon - eto logicheskaya kombinaciya (s pomoshch'yu !, || ,&& i skobok) regulyarnyh vyrazhenij (sm. grep (egrep)), zaklyuchennyh v sleshi (/), i otnositel'nyh vyrazhenij (sm. nizhe). Otdel'noe re- gulyarnoe vyrazhenie v shablone otnositsya ko vsej stroke. Regulyar- nye vyrazheniya mogut byt' i v otnositel'nyh vyrazheniyah. SHablon mozhet sostoyat' iz dvuh obrazcov, razdelennyh zapyatoj; pri etom ukazannye dejstviya vypolnyayutsya dlya vseh strok mezhdu strokoj, udovletvoryayushchej pervomu shablonu, i strokoj, udovletvoryayushchej vtoromu shablonu. Otnositel'noe vyrazhenie - eto odna iz sleduyushchih konstruk- cij: gde - lyubaya iz shesti operacij otnosheniya yazyka C, - eto ~ (soderzhitsya) ili !~ (ne soderzhitsya). - eto arifmeticheskoe vyrazhenie, otnositel'noe vyrazhenie ili ih logicheskaya kombinaciya. Dlya vypolneniya kakih-libo dejstvij pered pervoj ili posle poslednej stroki opredeleny special'nye shablony BEGIN i END. Naprimer, dlya ispol'zovaniya simvola c v kachestve razdelitelya polej mozhno libo zapustit' programmu s flagom -Fc, libo ukazat' BEGIN { FS = c } Ostal'nye special'nye peremennye: NF - kolichestvo polej v tekushchej zapisi NR - poryadkovyj nomer tekushchej zapisi FILENAME- imya fajla, iz kotorogo v dannyj moment proiz- voditsya vvod OFS - razdelitel' polej pri vyvode (po umolchaniyu - probel) ORS - razdelitel' zapisej pri vyvode (po umolchaniyu ) OFMT - format vyvoda chisel (po umolchaniyu %.6g) Primery. 1) Vyvesti stroki fajla first, v kotoryh bolee 72 simvolov awk 'length > 72' first 2) Vyvesti pervye dva polya fajla second v obratnom poryadke awk '{ print $2, $1 }' second 3) Slozhit' chisla, stoyashchie v pervom stolbce fajla third, i vy- vesti summu i srednee Pervyj variant: V fajle prog: { s += $1 } END { print "sum is", s, "average is", s/NR } Komandnaya stroka: awk -f prog third Vtoroj variant: awk '{ s += $1 } END { print "sum -",s,"average -",s/NR }' third 4) Vyvesti polya fajla fourth v obratnom poryadke awk '{ for (i = NF; i > 0; --i) print $i }' fourth 5) Vyvesti vse stroki fajla fifth, nahodyashchiesya mezhdu parami start/stop awk '/start/,/stop/' fifth 6) Vyvesti te stroki fajla sixth, u kotoryh pervoe pole ne sov- padaet s pervym polem predydushchej stroki awk '$1 != prev { print; prev = $1 }' sixth 7) Raspechatat' fajl seventh, vstavlyaya nomer stranicy, nachinaya s pyatoj, posle slova "Page" V fajle program: /Page/ { $2 = n++; } { print } Komandnaya stroka: awk -f program n=5 seventh 3.2. bc - Arifmeticheskij yazyk dlya vychislenij s proizvol'noj tochnost'yu Format komandy: bc [ -c ] [ -l ] [ ... ] bc - interaktivnyj processor dlya C-podobnogo yazyka, pozvo- lyayushchego proizvodit' arifmetiku neogranichennoj tochnosti. Vvod proizvoditsya iz ukazannyh fajlov, a zatem so standartnogo vvo- da. Flag -l oznachaet podklyuchenie matematicheskoj biblioteki dlya operacij proizvol'noj tochnosti. Nizhe opisyvaetsya sintaksis yazyka bc. L oznachaet lyubuyu iz bukv [a-z], E - vyrazhenie, S - operator. Kommentarii stroki, zaklyuchennye v /* i */. Imena prostaya peremennaya: L element massiva: L [ E ] slova "ibase","obase","scale" Drugie operandy chisla proizvol'noj dliny, vozmozhno so znakom i desyatich- noj tochkoj ( E ) sqrt ( E ) length ( E ) kolichestvo znachashchih desyatichnyh cifr scale ( E ) kolichestvo desyatichnyh cifr posle zapya- toj L ( E, ..., E ) Operacii + - * / % ^ (% - ostatok, ^ - vozvedenie v stepen') ++ -- (uvelichenie i umen'shenie na 1; prefiks- nye i postfiksnye) == <= >= != <> = =+ =- =* =/ =% Operatory E { S; ... ; S } if ( E ) S while ( E ) S for ( E; E; E ) S pustoj operator break quit Opredelenie funkcii define L ( L, ..., L ) { auto L, ..., L S; ...; S return ( E ) } Funkcii, opredelennye v -l biblioteke: s(x) - sin(x) c(x) - cos(x) e(x) - exp(x) l(x) - ln(x) a(x) - arctan(x) j(n,x) - funkciya Besselya Vse argumenty funkciyam peredayutsya po znacheniyu. Znachenie operatora, yavlyayushchegosya vyrazheniem, pechataetsya, esli on ne yavlyaetsya chast'yu operatora prisvaivaniya. Operatory mogut razdelyat'sya kak ; tak i . Prisvaivanie scale opredelyaet tochnost' vypolneniya operacij. Prisvaivanie ibase i obase opredelyaet sistemu schisleniya dlya vvoda i vyvoda soot- vetstvenno. Odna i ta zhe bukva mozhet byt' odnovremenno ispol'zovana kak imya prostoj peremennoj, imya massiva i imya funkcii. Vse pe- remennye yavlyayutsya global'nymi. Peremennye, opisannye kak "auto", sozdayutsya pri vhode v funkciyu. Pri ispol'zovanii massi- vov v kachestve argumentov funkcij ili pri opisanii ih kak avto- maticheskih, za imenem massiva mogut sledovat' pustye kvadratnye skobki. bc - preprocessor dlya dc, kotoryj on zapuskaet avtomati- cheski, esli tol'ko ne ukazan flag -c (tol'ko kompilyaciya). Primer. Vyvesti sqrt(x) dlya pervyh 10 celyh chisel. /* opredelyaetsya tochnost' vychislenij */ scale = 20 /* opredelyaetsya funkciya */ define r(a) { auto x,y y = a + 1 x = y + 1 while ( y < x ) { x = y y = 0.5 * ( x + a / x ) } return (y) } /* vychislyaetsya znachenie */ for ( i = 1; i <= 10; i++ ) r(i) /* vyhod */ quit Zamechaniya. Operator for dolzhen imet' vse tri E. Quit interpretiruetsya pri vvode, a ne pri vypolnenii. 3.3. chmod - Izmenenie prav dostupa k fajlam Format komandy: chmod prava fajly Rezhim dostupa k ukazannym fajlam izmenyaetsya v sootvetstvii s ukazannymi pravami. Prava mogut byt' ukazany v absolyutnom ili v simvol'nom vide. Absolyutnyj vid - vos'merichnoe chislo, yavlyayushcheesya logicheskim ILI sleduyushchih rezhimov: 04000 - pri vypolnenii pereustanovit' UID pol'zovate- lya na UID fajla 02000 - pri vypolnenii pereustanovit' GID pol'zovate- lya na GID fajla 00400 - dostupen dlya chteniya vladel'cem 00200 - dostupen dlya zapisi vladel'cem 00100 - dostupen dlya vypolneniya vladel'cem 00040 - dostupen dlya chteniya chlenami gruppy 00020 - dostupen dlya zapisi chlenami gruppy 00010 - dostupen dlya vypolneniya chlenami gruppy 00004 - dostupen dlya chteniya prochimi pol'zovatelyami 00002 - dostupen dlya zapisi prochimi pol'zovatelyami 00001 - dostupen dlya vypolneniya prochimi pol'zovatelyami Naprimer, chtoby ustanovit' prava, pozvolyayushchie vladel'cu chitat' i pisat' v fajl, a chlenam gruppy i prochim pol'zovatelyam tol'ko chitat', nado slozhit' 0400, 0200, 0040 i 0004. Takim ob- razom komanda budet imet' vid: chmod 644 file Simvol'nyj vid: [ ] CHast' est' kombinaciya bukv u (vladelec), g (gruppa) i o (prochie). Esli chast' opushchena ili ukazano a, to eto ekvivalentno ugo. mozhet byt': + - razreshit' pravo dostupa, - - zapre- tit' pravo dostupa, = - zapretit' vse prava dostupa dlya ukazan- nyh kategorij pol'zovatelej. - lyubaya kombinaciya iz bukv r (chitat'), w (pisat'), x (vypolnyat'), s (ustanavlivat' UID ili GID). Opustit' chast' mozhno tol'ko esli est' = dlya zapreshcheniya vseh prav. Esli nado sdelat' bolee odnogo ukazaniya ob izmenenii prav, to, pri ispol'zovanii simvol'nogo sposoba zadaniya prav dostupa, v ne dolzhno byt' probelov, a ukazaniya dolzhny razdelyat'- sya zapyatymi. Naprimer, komanda chmod u+w,go+x file dobavit dlya vladel'ca pravo pisat' v fajl, a dlya chlenov gruppy i prochih pol'zovatelej - pravo vypolnyat' fajl. Prava ustanavli- vayutsya v ukazannoj posledovatel'nosti (sleva napravo). Izmenit' prava dostupa k fajlu mozhet tol'ko ego vladelec (ili superpol'zovatel'). Dlya prosmotra prav dostupa i kontrolya pri ih izmenenii ispol'zujte komandu ls -l file (prava pereustanovki UID i GID otmechayutsya bukvoj s na meste so- otvetstvuyushchej bukvy x: malen'koj bukvoj s, esli sootvetstvuyushchaya kategoriya pol'zovatelej imeet pravo x, i bol'shoj S - esli ne imeet). Primery. Pust' fajl file imeet prava: -rw-rw-rw-, to est' dostupen vsem na chtenie i zapis'. 1) Zapretit' zapis' v fajl dlya prochih pol'zovatelej chmod o-w file ( -rw-rw-r-- ) 2) Sdelat' fajl vypolnyaemym chmod +x file ( -rwxrwxr-x ) 3) Lishit' chlenov gruppy vseh prav na dostup k fajlu, za isklyu- cheniem chteniya chmod g=+r file ( -rwx-w-r-x ) 4) Razreshit' pereustanavlivat' UID pol'zovatelya na UID fajla chmod u+s file ( -rws-w-r-x ) 3.4. cmp - Sravnenie soderzhimogo dvuh fajlov Format komandy: cmp [-l] [-s] file1 file2 Sravnivayutsya fajly file1 i file2 (esli file1 zamenen zna- kom -, to ispol'zuetsya standartnyj vvod). Po umolchaniyu, cmp ne daet nikakih soobshchenij, esli fajly sovpadayut; esli fajly otli- chayutsya, to soobshchayutsya nomer stroki i poziciya v nej, v kotoroj nahoditsya pervyj nesovpadayushchij simvol. Esli odin iz fajlov yav- lyaetsya nachalom drugogo, to vydaetsya soobshchenie: cmp: EOF on gde - bolee korotkij fajl. Naznachenie klyuchej: -l - vyvesti nomer bajta (desyatichnoe) i razlichayushchiesya baj- ty (vos'merichnoe) dlya kazhdogo nesootvetstviya -s - nichego ne pechatat', a tol'ko vernut' kod vozvrata: esli fajly sovpadayut - 0, esli razlichayutsya - 1, esli propushchen argument ili dostup dlya chteniya k odnomu iz fajlov zapreshchen - 2. 3.5. comm - Postrochnoe sravnenie dvuh tekstovyh fajlov Format komandy: comm [ - [ 123 ] ] file1 file2 Comm chitaet fajly file1 i file2 i vyvodit rezul'taty v tri kolonki: 1. Stroki, imeyushchiesya tol'ko v file1 2. Stroki, imeyushchiesya tol'ko v file2 3. Stroki, imeyushchiesya v oboih fajlah Znak - na meste imeni fajla oznachaet standartnyj vvod. Flagi 1,2 ili 3 podavlyayut vyvod sootvetstvuyushchih kolonok. Tak, comm -12 vyvodit stroki, obshchie dlya dvuh fajlov; comm -23 - imeyushchiesya tol'ko v file1, no otsutstvuyushchie v file2; comm -123 ne vyvodit nichego. 3.6. dc - Prostye arifmeticheskie vychisleniya s proizvol'noj tochnost'yu Format komandy: dc [ fajl ] dc - paket dlya arifmeticheskih vychislenij s proizvol'noj tochnost'yu. Obychno on operiruet v desyatichnoj sisteme s celymi, odnako mozhno zadat' sistemy schisleniya dlya vvoda, dlya vyvoda, tochnost' vychislenij. Obshchaya struktura dc - stekovyj kal'kulyator, ispol'zuyushchij obratnuyu pol'skuyu zapis'. Esli argument ukazan, to snachala vvod proizvoditsya iz fajla, a potom iz standartnogo vvoda. bc, preprocessor dlya dc, podderzhivaet infiksnuyu notaciyu i C-podobnyj sintaksis dlya opredeleniya funkcij i upravlyayushchih struktur v programmah (sm. 3.2). dc raspoznaet sleduyushchie konstrukcii: - znachenie chisla pomeshchaetsya v stek. - nepreryv- naya stroka cifr 0-9. V nachale ee mozhet stoyat' znak podcherkivaniya (_) dlya vvoda otricatel'nogo chisla. mozhet soderzhat' desyatichnuyu tochku. +-/*%^ - verhnie dva chisla steka skladyvayutsya (+), vychitayutsya (-), umnozhayutsya (*), beretsya ostatok (%) ili vtoroe ot vershiny chislo vozvoditsya v stepen', opredelyaemuyu chislom, nahodyashchimsya v vershine steka. Oba operanda izvlekayutsya iz steka i rezul'tat pomeshchaetsya obratno v stek. Pokazatel' stepeni dolzhen byt' celym chislom. sx - izvlekaetsya vershina steka i pomeshchaetsya v registr s imenem x, gde x - lyuboj simvol. Esli ukazano S, to x rassmatrivaetsya kak stek i rezul'tat pomeshchaetsya v ego vershinu. lx - znachenie, hranyashcheesya v registre x, pomeshchaetsya v stek. Registr x ne menyaetsya. Iznachal'no vse registry inici- aliziruyutsya nulem. Esli ukazano L, to registr rass- matrivaetsya kak stek i ego vershina izvlekaetsya i po- meshchaetsya v glavnyj stek. d - vershina steka udvaivaetsya p - vyvoditsya vershina steka (ne izmenyayas'). P izvlekaet vershinu steka i vyvodit ee kak stroku. f - pechataet vse elementy steka. q - zavershaet rabotu programmy. x - vershina steka rassmatrivaetsya kak komanda dlya dc i vypolnyaetsya X - vershina steka zamenyaetsya kolichestvom cifr v nej posle zapyatoj [ ... ] - stroka, zaklyuchennaya v skobki, pomeshchaetsya v vershinu steka. x =x -dva verhnih elementa steka izvlekayutsya i sravnivayut- sya. Esli oni udovletvoryayut ukazannomu usloviyu, to so- derzhimoe registra x rassmatrivaetsya kak komanda dc i vypolnyaetsya. v - verhnij element steka zamenyaetsya kvadratnym kornem iz nego. Esli on byl celym, to koren' takzhe okruglyaetsya. ! - ostal'naya chast' stroki interpretiruetsya kak komanda shella c - ochistit' stek i - vershina steka izvlekaetsya i ispol'zuetsya kak osnova- nie sistemy schisleniya pri vvode. I pomeshchaet ispol'zu- emoe pri vvode osnovanie sistemy schisleniya v vershinu steka. o - vershina steka izvlekaetsya i ispol'zuetsya kak osnova- nie sistemy schisleniya pri vyvode. O pomeshchaet ispol'- zuemoe pri vyvode osnovanie sistemy schisleniya v ver- shinu steka. k - izvlekaetsya vershina steka i ispol'zuetsya kak neotri- catel'nyj masshtabnyj mnozhitel': kolichestvo znakov posle zapyatoj pri vyvode, pri umnozhenii, delenii i vozvedenii v stepen'. z - v stek pomeshchaetsya kolichestvo ego elementov Z - chislo v vershine steka zamenyaetsya ego dlinoj (bez uche- ta desyatichnoj tochki i znaka minus). ? - so standartnogo vvoda vvoditsya odna stroka i ispolnya- etsya. Primer. Vyvesti pervye 10 znachenij n! [la1+dsa*pla10>y]sy 0sa1 lyx Soobshcheniya x is unimplemented - x - vos'merichnoe znachenie stack empty - v steke men'she elementov, chem trebu- etsya Out of pushdown - stek perepolnen Nesting Depth - slishkom bol'shoj uroven' vlozhennosti 3.7. echo - Vyvesti argumenty komandnoj stroki na standartnyj vyvod Komanda echo vyvodit na standartnyj vyvod svoi argumenty, razdelyaya ih probelami i zakanchivaya stroku . Krome to- go, podderzhivayutsya sleduyushchie dogovorennosti: \b - ustanovit' kursor v levyj verhnij ugol ekrana \c - ne zakanchivat' stroku \f - konec stranicy \n - perevod stroki \r - vozvrat karetki \\ - bekslesh \0xx - ot odnoj do treh vos'merichnyh cifr, s 0 v na- chale, predstavlyayushchie kod ASCII simvola 3.8. Razlozhenie celogo chisla na prostye somnozhiteli Format komandy: factor [ ] Pri zapuske bez argumentov vvodit chisla iz standartnogo vvoda. Maksimal'no dopustimoe chislo - 2ƒµƒ¶ (~ 7.2*10ƒ±ƒ¶). Vvod otricatel'nyh chisel privodit k soobshcheniyu: Ouch! a nechislovyh simvolov k zaversheniyu programmy. Vremya vychislenij proporcional'no kornyu iz chisla i maksi- mal'no, esli chislo yavlyaetsya prostym ili kvadratom prostogo. 3.9. file - Opredelenie tipa fajla Format komandy: file [ -f ffile ] ... Komanda file provodit seriyu testov dlya kazhdogo argumenta, schitaya ego imenem fajla, pytayas' klassificirovat' ego. Esli fajl tekstovyj, to file pytaetsya po pervym 512 bajtam oprede- lit' yazyk programmirovaniya. Pri zadanii flaga -f sleduyushchij za nim fajl dolzhen soder- zhat' spisok fajlov, podlezhashchih issledovaniyu. 3.10. find - Poisk fajlov Format komandy: find Find rekursivno prosmatrivaet direktorii dlya kazhdogo ele- menta spiska poiska, otyskivaya fajly, udovletvoryayushchie logiches- komu , zapisannomu s pomoshch'yu privedennyh nizhe primi- tivov. V ih opisaniyah n ispol'zuetsya kak celoe desyatichnoe chis- lo, +n oznachaet bol'she, chem n, -n - men'she, chem n. -name istina, esli tekushchij fajl udovletvoryaet shablonu -perm onum istina, esli kod zashchity fajla v tochnosti raven onum (sm. chmod) -type c istina, esli tip fajla c, gde c - b, c, d, p, ili f - blok- ili simvol'noorientirovannyj spe- cial'nyj fajl, direktoriya, kanal (pipe) ili obychnyj fajl -links n istina, esli fajl imeet n svyazej -user uname istina, esli UID fajla sovpadaet s uname -group gname istina, esli GID fajla sovpadaet s gname -size n[c] istina, esli fajl zanimaet n blokov (po 512 bajt). Esli ukazana bukva c, to razmer fajla zadaetsya v simvolah -atime n istina, esli fajl ne chitalsya v poslednie n dnej -mtime n istina, esli fajl ne modificirovalsya v posled- nie n dnej -ctime n istina, esli prava dostupa k fajlu ne menyalis' v poslednie n dnej -exec cmd istina, esli posle vypolneniya komandy cmd vozv- rashchaetsya nulevoj kod vozvrata. Cmd mozhet zakan- chivat'sya tochkoj s zapyatoj, kotoraya dolzhna byt' ekranirovana. Argument komandy {} zamenyaetsya imenem tekushchego fajla -ok cmd to zhe, chto i exec, za isklyucheniem togo, chto pered vypolneniem cmd zaprashivaetsya podtverzhde- nie i cmd vypolnyaetsya tol'ko pri otvete y -print vsegda istina; vyvodit imya fajla (vyrazhenie) istina, esli istinno zaklyuchennoe v skobki vyra- zhenie (skobki dolzhny byt' ekranirovany) Primitivy mogut kombinirovat'sya s pomoshch'yu sleduyushchih opera- cij (v poryadke umen'sheniya prioriteta): 1) Otricanie (! - unarnaya operaciya NOT) 2) Konkatenaciya (operaciya AND, oboznachaetsya probelom) 3) Vybor (-o - operaciya OR) Primer. Udalit' vse fajly s imenami a.out ili *.o, kotorye ne otkryvalis' v techenie nedeli: find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \; 3.11. grep - Kontekstnyj poisk v tekstovom fajle Kontekstnyj poisk v tekstovom fajle vypolnyayut tri program- my: grep, egrep i fgrep. Format komand: grep [ flagi ] vyrazhenie [ fajly ] egrep [ flagi ] [ vyrazhenie ] [ fajly ] fgrep [ flagi ] [ stroki ] [ fajly ] Komandy prosmatrivayut vhodnye fajly (po umolchaniyu stan- dartnyj vvod) v poiske strok, udovletvoryayushchih shablonu. Obychno, kazhdaya najdennaya stroka kopiruetsya v standartnyj vyvod. SHablony dlya grep mogut byt' tol'ko regulyarnymi vyrazheniyami (sm. "In- terpretator komandnogo yazyka shell); on ispol'zuet kompaktnyj nedeterminirovannyj algoritm. egrep ispol'zuet bystryj determi- nirovannyj algoritm i podderzhivaet v kachestve shablonov bolee sovershennye regulyarnye vyrazheniya. SHablony v smysle fgrep yavlya- yutsya strokovymi konstantami; fgrep bystr i kompakten. Programmami obrabatyvayutsya sleduyushchie flagi: -v vyvodyatsya vse stroki, krome udovletvoryayushchih shablonu -x vyvodyatsya tol'ko udovletvoryayushchie shablonu stroki (tol'ko dlya fgrep) -c vyvoditsya tol'ko kolichestvo udovletvoryayushchih shablonu strok -i pri sravnenii schitat' bol'shie i malen'kie bukvy sovpa- dayushchimi -l vyvodit' tol'ko imena fajlov, v kotoryh est' udovletvo- ryayushchie shablonu stroki -n pered kazhdoj strokoj stavit' ee nomer v fajle -b pered kazhdoj strokoj stavit' nomer bloka, v kotorom ona najdena. |to ispol'zuetsya dlya opredeleniya bloka na dis- ke po kontekstu -s podavlyat' soobshcheniya ob oshibkah, tipa "nesushchestvuyushchij" ili "zakrytyj dlya chteniya fajl" (tol'ko dlya grep) -e vyrazhenie to zhe samoe, chto i odinochnyj argument , no udobno, esli nachinaetsya so znaka - (ne ra- botaet s grep) -f fajl regulyarnoe vyrazhenie (egrep) ili spisok strok (fgrep) chitayutsya iz fajla Vo vseh sluchayah, imya fajla, v kotorom est' udovletvoryayushchie shablonu stroki, vyvoditsya. Dlya ekranirovaniya simvolov $, *, [, ^, |, (, ) i \ luchshe vsego zaklyuchat' v odinarnye kavychki '...'. fgrep ishchet stroki, soderzheshchie odnu iz . egrep rassmatrivaet regulyarnye vyrazheniya tak zhe, kak i shell (sm.) (krome \( i \) ), no, krome togo: 1. Regulyarnoe vyrazhenie, zakanchivayushcheesya znakom +, oznachaet od- no ili bolee vhozhdenie ego v regulyarnoe vyrazhenie. 2. Regulyarnoe vyrazhenie, zakanchivayushcheesya znakom ?, oznachaet od- no ili ni odnogo vhozhdenie ego v regulyarnoe vyrazhenie. 3. Dva regulyarnyh vyrazheniya, razdelennye znakom | ili , udovletvoryayut stroke, kotoroj udovletvoryaet odin iz nih. 4. Regulyarnoe vyrazhenie dlya gruppirovaniya mozhet zaklyuchat'sya v skobki. egrep ne obrabatyvaet konstrukcii tipa [a-z]. Esli byla poluchena hotya by odna stroka, udovletvoryayushchaya shablonu, vozvrashchaetsya kod zaversheniya 0, esli ne najdeno ni od- noj takoj stroki - 1, pri nalichii sintaksicheskih oshibok ili pri nalichii fajla, nedostupnogo dlya chteniya, (dazhe esli byli najdeny udovletvoryayushchie shablonu stroki) - 2. 3.12. id - Opredelenie identifikatora pol'zovatelya i identifikatora gruppy Format komandy: id Komanda id vydaet na standartnyj vyvod soobshchenie, soderzha- shchee UID, GID i sootvetstvuyushchie tekstovye imena dlya tekushchego processa. 3.13. kill - Avarijnoe zavershenie processa Format komandy: kill [ - ] pid ... kill posylaet signal 15 ukazannomu processu. Takim sposo- bom obychno mozhno zavershit' process, kotoryj ne otlavlivaet ili ne ignoriruet signaly. Nomera processov mozhno uznat' po komande ps (sm. 3.14). Nomer asinhronno zapushchennogo processa soobshchaetsya shellom pri ego zapuske. Process, kotoromu posylaetsya signal, dolzhen prinadlezhat' pol'zovatelyu. Esli nomer signala ukazan yavno, to vmesto signala 15 posylaetsya on. Komanda kill -9 ... ubivaet process, esli, konechno, dlya ubijstva hvataet prav. (O nomerah signalov sm. "Interpretator komandnogo yazyka shell") 3.14. ps - Informaciya o sostoyanii processov Format komandy: ps [ flagi ] ps vyvodit informaciyu ob aktivnyh processah. Po umolchaniyu, informaciya daetsya tol'ko o processah, associirovannyh s dannym terminalom. Komandoj ps obrabatyvayutsya sleduyushchie flagi: -e vyvosti informaciyu obo vseh processah -f generirovat' polnyj listing -l generirovat' listing v dlinnom formate -t vyvodit' informaciyu tol'ko o processah, svyazannyh s ( , eto tty° ili console) -p vyvodit' informaciyu tol'ko ob ukazannom processe -u vyvodit' informaciyu tol'ko o processah, chej UID ili vhodnoe imya pol'zovatelya ukazano -g vyvodit' informaciyu tol'ko o processah, GID kotoryh ukazano Nizhe privodyatsya zagolovki kolonok listinga i ob®yasnyaetsya ih soderzhimoe; bukvy l i f oznachayut, poyavlyaetsya li eta kolonka pri dlinnom ili polnom formate listinga; all oznachaet, chto dan- naya kolonka vyvoditsya pri lyubyh znacheniyah klyuchej. F (l) flagi (vos'merichnye), summa kotoryh daet sledu- yushchie svedeniya o processe: 01 v pamyati 02 sistemnyj process 04 v ozhidanii zavershemiya vvoda-vyvoda process fiksirovan v pamyati 10 svoppirovan 20 trassiruetsya drugim processom 40 drugie flagi trassirovki S (l) Status processa: 0 ne sushchestvuet S spyashchij process W zhdushchij process R vypolnyayushchijsya process I vypolnyaetsya preryvaemyj sistemnyj vyzov Z zavershennyj process T ostanovlennyj (stopped) process X process zakachivaetsya v pamyat' UID (f,l) UID vladel'ca processa; imya vhoda v sistemu vy- voditsya pri ukazanii opcii -f PID (all) nomer processa PPID (f,l) nomer processa-predka C (f,l) ispol'zovanie processora dlya planirovaniya STIME (f) vremya zapuska processa PRI (l) prioritet processa; bol'shee chislo oznachaet men'shij prioritet NI (l) popravka k prioritetu ADDR (l) adres processa v pamyati (ukazatel' na tablicu segmentov), esli programma rezidentnaya, inache diskovyj adres SZ (l) razmer obraza zadachi v blokah WCHAN (l) sobytie, iz-za kotorogo ozhidaet process; dlya vypolnyayushchihsya processov ne ukazyvaetsya TTY (all) terminal, s kotorogo byl zapushchen process TIME (all) vremya vypolneniya processa CMD (all) imya programmy; esli ukazan flag -f, to vyvodit- sya polnoe imya Process imeyushchij predka i zavershivshijsya, no eshche ozhidaemyj etim predkom, oboznachaetsya . Pri ukazanii flaga -f ps pytaetsya opredelit' imya i argu- menty, s kotorymi process byl sozdan v pamyati ili oblasti svop- pinga. Esli eto ne udaetsya, imya processa zaklyuchaetsya v kvadrat- nye skobki. 3.15. sort - Sortirovka i/ili sliyanie fajlov Format komandy: sort [ - cmu ] [ -ooutput ] [ -ykmem ] [ -zrecsz ] [ -dfiMnr ] [ -btx ] [ +pos1 [ -pos2 ]] [ files ] Sort sortiruet stroki vseh ukazannyh fajlov odnovremenno i vyvodit rezul'tat na standartnyj vyvod. Esli imena fajlov ne ukazany, ili esli v kachestve imeni fajla ukazan -, informaciya postupaet iz standartnogo vvoda. Sravneniya proizvodyatsya na osnove odnogo ili bolee polej, poluchaemyh iz kazhdoj vvodimoj stroki. Po umolchaniyu, takoe pole odno i im yavlyaetsya sama stroka; stroki uporyadochivayutsya leksi- kograficheski v sootvetstvii s kodami nabora simvolov ASCII. Sleduyushchie flagi izmenyayut poryadok raboty: -c proverit', yavlyaetsya li vhodnoj fajl uzhe otsortirovannym soglasno zadannym pravilam -m tol'ko slit' fajly; schitat' ih uzhe otsortirovannymi -u iz vseh sovpadayushchih strok vyvodit' tol'ko odnu -ooutput ukazannoe imya yavlyaetsya imenem fajla, v kotoryj nado napravit' vyvod; etot fajl mozhet sovpadat' s odnim iz fajlov vvoda. Mezhdu -o i output mogut byt' probely -ykmem po umolchaniyu sort ispol'zuet opredelennyj sistemoj ob®- em pamyati; pri zadanii etogo flaga budet ispol'zovano kmem kilobajt. Esli eto chislo bol'she ili men'she pre- del'no dopustimyh znachenij, to budet ustanovleno soot- vetstvuyushchee predel'noe znachenie. Tak, -y0 garantiruet ispol'zovanie minimal'nogo ob®ema pamyati. Po dogovoren- nosti, -y (bez argumentov) ustanavlivaet maksimal'nyj ob®em pamyati -zrecsz pri dline stroki bol'she, chem prinyato v sisteme, vypol- nenie sort zavershaetsya avarijno. Vo izbezhanie etogo mozhno ukazat' maksimal'nuyu dlinu stroki recsz v bajtah. Sleduyushchie flagi ustanavlivayut sposob uporyadocheniya strok: -d "slovarnyj" poryadok: pri sravnenii yavlyayutsya znachimymi tol'ko bukvy, cifry i probely -f preobrazovyvat' propisnye bukvy v strochnye -i ignorirovat' simvoly s kodami, ne lezhashchimi v predelah 040-0176 -M preobrazovat' pervye tri simvola v propisnye i sravnit' ih s usloviem togo, chto "JAN" < "FEB" < ... < "DEC". Ostal'nye znacheniya etih polej schitat' men'shimi "JAN". |tot flag podrazumevaet flag -b (sm. dalee) -n stroki chisel, vozmozhno soderzhashchie probely, znak -, de- syatichnuyu tochku, sortiruyutsya po znacheniyam etih chisel. |tot flag podrazumevaet flag -b (sm. dalee) -r obratnyj poryadok sortirovki Zapis' +pos1 -pos2 oznachaet, chto pole sravneniya budet na- chinat'sya v pozicii pos1 i konchat'sya v pozicii pos2. Esli -pos2 opushcheno, to podrazumevaetsya konec stroki. Ukazanie pos1 i pos2 vklyuchaet v sebya ponyatie polya - mini- mal'noj posledovatel'nosti simvolov, zavershayushchejsya razdelitelem polej ili . Po umolchaniyu, takim razdelitelem schitaet- sya pervyj vstrechennyj probel v posledovatel'nosti probelov. Vse ostal'nye probely iz etoj posledovatel'nosti schitayutsya vhodyashchi- mi v sleduyushchee pole (naprimer, vse probely v nachale stroki vho- dyat v pervoe pole). Razdeliteli polej mogut byt' zadany sleduyu- shchimi flagami: -tx ispol'zovat' v kachestve razdelitelya polej simvol x; kazhdoe vhozhdenie x yavlya