ie dannyh so standartnogo vvoda. Takim obrazom, m mozhet byt' ispol'zovana v ka- chestve "perehvatchika" ili kak fil'tr, kak i komanda more. Dlya teh, kto ne slishkom znakom s opciyami komandy more, otmetim, chto sushchestvuyut dve izyashchnye vozmozhnosti: 1) vhod v redaktor vi v tom meste, gde nahoditsya kursor pri vyvode komandoj more; 2) vyhod iz more dlya zapuska komandy shell i vozvrat v to mesto, otkuda vy vyshli. Per- vaya opciya vypolnyaetsya pri nazhatii klavishi "v" v stroke sostoyaniya ko- mandy more. (To est' kogda more otobrazila polnyj ekran teksta i zhdet prodolzheniya.) Vtoraya opciya zapuskaetsya pri vvode ":!cmd" ili "!cmd". Kogda komanda vypolnitsya, more vernetsya v to zhe mesto. Kak vidite, eto sintaksis komandnoj stroki ex. Komanda more v samom dele imeet nebol'- shuyu chast' redaktora ex, spryatannuyu vnutri nee. Vy mozhete vypolnit' mnogie komandy redaktora, ukazyvaya ih posle podskazki v stroke sostoya- niya komandy more. Obychnyj seans raboty vyglyadit tak: -------------------------- | | m `path termcap` <-poisk tablicy opisaniya ter- | minala (termcap) i vyvod | . ee komandoj more . . --More--(5%) <-stroka sostoyaniya more v vi /etc/termcap vi +210 /etc/termcap <-komandnaya stroka dlya redak- tora vi poluchena ot more . . :q <-vyhod iz vi --More--(5%) <-vozvrat v more :!sh porozhdenie novogo shell'a $ date zapusk komandy date Wed Apr 23 07:15:04 PST 1986 $ ^d <-ubrat' porozhdennyj shell --More--(5%) <-vozvrat v more :f raspechatka imeni fajla, vyvodimogo komandoj more "/etc/termcap" line 54 vyhod komandy f --More--(5%) f <-komanda more dlya propuska polnogo ekrana .skipping 23 lines . . --More--(9%) <-propusk i vydacha teksta q vyhod iz komandy more PRIMERY 1. $ ll -R / | m Nachinaya s kornevogo kataloga (/), vyvesti v dlinnom formate (ll) vse fajly (opciya -a podrazumevaetsya v ll) vsej sistemy (-R) i postra- nichno raspechatat' na ekran (| m). 2. $ m `path inittab rc passwd` Obnaruzhit' i vyvesti s pomoshch'yu more sistemnye fajly inittab, rc i passwd. Nepriyatnost' zdes' zaklyuchaetsya v tom, chto dannyj marshrut sko- ree vsego otnositsya k katalogu /bin/passwd, a ne /etc/passwd (poskol'- ku katalog /etc razmeshchaetsya v konce katalogov), a eto oznachaet, chto vy mozhete popytat'sya vyvesti na ekran ispolnyaemyj fajl. V zavisimosti ot togo, kakuyu iz versij komandy more vy zapustili, eto mozhet privesti k chemu ugodno nachinaya s soobshcheniya komandy more o tom, chto eto byl ne tekstovyj fajl, i zakanchivaya tem, chto vash terminal nachnet pokazyvat' neponyatnye simvoly i dazhe zavisnet. POYASNENIYA Poskol'ku v etom komandnom fajle ne tak mnogo teksta, to vse do- vol'no ponyatno, net ni obrabotki oshibok, ni drugih dopolnenij. Prosto nehitryj vyzov komandy more. Polnoe imya zdes' ukazano s cel'yu povyshe- niya bystrodejstviya, kak my obsuzhdali ranee. Vy dolzhny pereproverit' mestonahozhdenie vashej komandy more. V sisteme Berkeley ona mozhet naho- dit'sya v kataloge /usr/ ucb/more. Vospol'zujtes' komandoj path more dlya opredeleniya etogo mesta i vstav'te sootvetstvuyushchij marshrut vmesto ukazannogo nami. Kstati, fokus popadaniya etoj simvol'noj stroki v tekst vashego ko- mandnogo fajla sostoit v tom, chtoby vojti v redaktor i vyzvat' sleduyu- shchuyu komandu: :.!path more Zdes' proishodit perehod v shell i zapusk komandy path (:!), za- tem vyhod komandy path (kotoryj predstavlyaet soboj polnoe marshrutnoe imya) pomeshchaetsya v bufer redaktora v samom nachale tekushchej stroki (.). Posle etogo vy imeete eti dannye v vashem redaktiruemom fajle i pri ne- obhodimosti mozhete otredaktirovat' ih. 2.2.5. mmm - obrabotka programmoj nroff makrokomand dlya rukopisej -------------------------------------------------------------- IMYA: mmm -------------------------------------------------------------- mmm Komandnaya stroka nroff dlya makrosov obrabotki rukopisej NAZNACHENIE Vyzyvaet tekstovyj processor nroff so special'nymi opciyami, koto- rye inicializiruyut makrosy obrabotki rukopisej. FORMAT VYZOVA mmm file [...] PRIMER VYZOVA mmm memo Obrabotat' s pomoshch'yu nroff fajl moih zametok memo i otobrazit' ego na ekran TEKST PROGRAMMY 1 : 2 # @(#) mmm v1.0 Nroff command line with mm macros Author: Russ Sage 2a Komandnaya stroka nroff s makrosami mm 4 if [ "$#" -eq 0 ] 5 then echo "mmm: wrong arg count" >&2 6 echo "usage: mmm file [...]" >&2 7 exit 1 8 fi 10 LIST="" 11 for ARG in $* 12 do 13 if [ ! -f $ARG ] 14 then echo "mmm: $ARG is not a regular file" >&2 15 else LIST="$LIST $ARG" 16 fi 17 done 19 nroff -r0O -mm $LIST PEREMENNYE SREDY VYPOLNENIYA ARG Soderzhit kazhdyj pozicionnyj parametr komandnoj stroki LIST Soderzhit spisok proveryaemyh imen fajlov OPISANIE ZACHEM NUZHEN KOMANDNYJ FAJL mmm? Odnim iz faktov delovogo mira yavlyaetsya rabota s bumagami. My pro- izvodim zametki, pis'ma, kontrakty, dokumenty, rukovodstva i tak da- lee. Esli vy znakomy so stilem proizvodstva dokumentacii v sisteme UNIX, to vashi tekstovye fajly v osnovnom predstavleny v odnom iz for- matov programmy nroff. Odnako razlichnye programmy formatirovaniya tekstov sluzhat razlich- nym celyam. Imeetsya standartnyj nroff i nroffs dopolneniyami, takimi kak makrosy ms i mm. Dlya podgotovki graficheskoj informacii i vypolne- niya tipografskih rabot razrabotana programma troff. Sistema AT&T imeet celuyu programmnuyu sredu pod nazvaniem Writers Workbench, i sistema Berkeley imeet analogichnye vozmozhnosti. Bol'shinstvo nashih zadach po napisaniyu kakih-libo tekstov mozhet byt' svedeno k neskol'kim standartnym formatam, takim kak pis'ma, ru- kopisi voobshche, stranicy rukovodstv i tak dalee. Ne tak legko zapomnit' opcii komandy nroff (ili drugoj komandy), kotorye sleduet ispol'zovat' v dannom sluchae, da my i ne dolzhny delat' eto. Nasha komanda mmm sluzhit illyustraciej programmy, kotoruyu my mozhem zapuskat' vsyakij raz, kogda nam nuzhen opredelennyj format. Vy mozhete sozdat' neskol'ko versij programmy, kotorye udovletvoryayut vashim sobstvennym nuzhdam pri napisa- nii tekstov. Ispol'zovanie zagotovlennyh zaranee komand oznachaet, chto my mozhem delat' poleznuyu rabotu, dazhe esli nekotoroe vremya my ne vypolnyali ra- botu opredelennogo vida. My takzhe mozhem izbezhat' mnogokratnyh nazhatij na klavishi. Mastera UNIX'a periodicheski uedinyayutsya v svoih gornyh ube- zhishchah, gde shtudiruyut spravochnye rukovodstva v poiskah poleznyh, no dosele nezamechennyh opcij, kotorye mogut byt' vstroeny v programmnye sredstva dlya povsednevnoj raboty. Esli slishkom nekritichno polagat'sya na vash tekushchij nabor instrumental'nyh sredstv, to mozhno propustit' po- leznye vozmozhnosti. CHTO DELAET mmm? Komandnyj fajl mmm - eto interfejsnyj processor dlya komandy nroff. Pod slovom "interfejsnyj" my podrazumevaem, chto on obrabatyvaet vyzyvayushchuyu komandnuyu stroku i ustanavlivaet vse opcii dlya vyzova prog- rammy nroff. Nekotorye iz opcij nroff zhestko zaprogrammirovany v vyzo- ve. |ti opcii inicializiruyut otdel'nye chasti programmy nroff. Esli vy ne vklyuchaete nikakie argumenty, mmm raspoznaet eto kak oshibku i vyvodit sintaksicheskuyu podskazku. Obratite vnimanie, chto esli vy peredadite mmm takoj argument, kak -z, to etot argument budet rassmatrivat'sya kak imya fajla, a ne kak podlezhashchaya peredache opciya, i eto snova vyzovet oshibku. Vtoraya oshibka ne yavlyaetsya fatal'noj, v to vremya kak pervaya fatal'na. Posle obrabotki vseh argumentov programma nroff ispol'zuet imena fajlov v kachestve fajlov s vhodnymi dannymi. Po umolchaniyu vyvod proiz- voditsya v stdout (standartnyj vyvod). Obychno eto ekran vashego termina- la, no vyvod mozhet byt' pereadresovan ili peredan po konvejeru na ust- rojstvo pechati ili kuda-libo eshche. PRIMERY 1. $ mmm nroffile | m Zapusk komandy nroff primenitel'no k fajlu nroffile, vyvod re- zul'tata na ekran s peredachej po konvejeru komande more. |to polezno pri izuchenii utility nroff, provedenii eksperimentov s razlichnymi ko- mandami i nablyudeniya za sootvetstvuyushchimi rezul'tatami. 2. $ for F in proj.? do mmm $F > $F.rf done Obrabotka v cikle vseh fajlov, imena kotoryh soderzhat simvol'nuyu stroku "proj.", za kotoroj sleduet odin simvol. |to mogut byt' proj.1, proj.2 i tak dalee po vsemu naboru simvolov vplot' do proj.z, proj.{, proj.|, proj.} i proj.~, esli schitat', chto u vas est' fajly, imena ko- toryh soderzhat eti simvoly. Kazhdyj fajl obrabatyvaetsya, i vyhod nroff perenapravlyaetsya v fajl s takim zhe imenem, dopolnennym simvolami .rf. 3. $ mmm status[12] | lpr -o5 Obrabotka komandoj nroff fajlov status1 i status2. Vyhod v stan- dartnyj vyvod peredaetsya po konvejeru programme lpr. Programma lpr yav- lyaetsya fil'trom i prinimaet ili imena fajlov v komandnoj stroke, ili neposredstvenno dannye, peredavaemye ej po konvejeru (no ne to i dru- goe srazu). Opciya -o5 ukazyvaet lpr smestit' stranicu na 5 simvolov. POYASNENIYA V stroke 4 proveryaetsya, ravno li nulyu kolichestvo argumentov v ko- mandnoj stroke. Esli da, v standartnyj fajl oshibok vydaetsya soobshchenie ob oshibke. Vyvoditsya takzhe sintaksicheskaya podskazka, i mmm zavershaetsya s plohim statusom. Peremennaya LIST inicializiruetsya nulevym znacheniem v stroke 10. Obychno peremennye interpretatora shell i tak v nachale ravny nulyu, no predvaritel'naya ustanovka znacheniya yavlyaetsya horoshim stilem programmi- rovaniya. Zatem my obrabatyvaem kazhdyj argument komandnoj stroki v cikle (stroki 11-17). Vse argumenty dolzhny byt' imenami fajlov, poetomu kazh- dyj iz nih proveryaetsya na to, sushchestvuet li on kak obychnyj fajl. Esli eto ne fajl, to v standartnyj fajl oshibok vyvoditsya soobshchenie ob oshib- ke. Tem ne menee programma ne zavershaetsya. Ne sleduet avarijno prekra- shchat' vsyu programmu tol'ko potomu, chto net ukazannogo fajla. My pro- puskaem ego i idem do konca spiska argumentov. |to osobenno aktual'no, esli dannaya komanda ispol'zuetsya kak fonovaya vo vremya vypolneniya dru- goj raboty. Pol'zovatel' skoree soglasitsya s tem, chtoby bylo vypolneno pobol'she raboty, chem ne sdelano voobshche nichego. |to reshenie, prinyatoe v dannoj programme, i vy mozhete izmenit' ego, esli ono ne podhodit v va- shej situacii. Esli imeni sootvetstvuet dopustimyj fajl, ono dobavlyaetsya v spisok horoshih imen fajlov. |tot spisok stanovitsya glavnym spiskom dlya komandy nroff. Posle togo kak vse argumenty provereny, my v stroke 9 stroim i vypolnyaem komandnuyu stroku nroff. Opciya -rO0 dlya nroff ukazyvaet makrosam obrabotki rukopisej (pa- ketu mm) ustanovit' registr, kotoryj imeet delo s otstupom teksta, v sostoyanie, sootvetstvuyushchee otstupu v 0 simvolov. |to znachit, chto ves' tekst nachinaetsya s krajnej levoj pozicii, t.e. vyrovnen sleva. Putem provedeniya eksperimentov ya obnaruzhil, chto levoe vyravnivanie teksta programmoj nroff i ustanovka otstupa dlya printera daet naibolee nadezh- nyj vyvod na pechat'. V protivnom sluchae, esli vy ustanovite otstup teksta v nroff i otstup v printere, to mozhet proizojti nastoyashchee stolk- novenie, kogda delo kosnetsya vyvoda kolonok v stranice. Vy mozhete iz- menit' eto mesto, esli vashi programmy vyvoda ili ustrojstva pechati ve- dut sebya kak-to inache. Opciya -mm ukazyvaet programme nroff prosmotret' biblioteku makrosov obrabotki rukopisej, chtoby opredelit', ispol'zu- yutsya li kakie-libo iz nih vo vhodnom dokumente. |ti makrosy ochen' bol'shie i trebuyut mnogo vremeni central'nogo processora. Esli vam ne- obhodimo ispol'zovat' ih, to vam potrebuetsya bol'shoj komp'yuter ili komp'yuter, special'no prednaznachennyj dlya etoj celi, chtoby dobit'sya horoshego vremeni polucheniya rezul'tata. Poslednim argumentom yavlyaetsya $LIST. V etoj peremennoj nahoditsya stroka imen fajlov, razdelennyh probelami. |ti imena pomeshchayutsya v ko- mandnuyu stroku nroff. Mozhete byt' uverennymi, chto v etom meste net ni- kakih oshibok. VOZMOZHNYE MODIFIKACII Poskol'ku vse argumenty rassmatrivayutsya kak imena fajlov, to u nas net sposoba peredachi dopolnitel'nyh komand paketu mm. Nalichie ta- koj vozmozhnosti bylo by zhelatel'nym, poskol'ku pri eksperimentirovanii s komandoj nroff vam neobhodimo probovat' razlichnye opcii, chtoby uvi- det', kak oni dejstvuyut. Bylo by tyazheloj rabotoj vypolnyat' redaktiro- vanie teksta mmm, chtoby dobavit' odnorazovye opcii, kotorye mogut vam nikogda ne ponadobit'sya ili opcii, kotorye vy dolzhny postoyanno menyat'. Odin iz putej dostizheniya bol'shej gibkosti - posmotret', imeet li kakoj-libo argument defis v kachestve pervogo simvola. Esli da, pereh- vatit' etu opciyu i ubrat' ee iz spiska imen fajlov. Posle etogo vy by imeli spisok opcij, kotorye nuzhno vklyuchit' v komandnuyu stroku, i spisok imen fajlov, podlezhashchih obrabotke. Otmetim, chto mesto, zanyatoe v nashem komandnom fajle ukazaniem pa- keta mm, mozhno vmesto etogo zapolnit' ssylkoj na drugie makropakety, imeyushchiesya v vashej sisteme, naprimer -ms ili -me, v zavisimosti ot nuzh- nogo vam formata. Otkaz ot poiska makrosov, kotorye vam ne nuzhny, uskorit obrabotku: podrobnosti vy najdete v dokumentacii po nroff ili troff. 2.2.6. pall - pechat' vseh fajlov v dereve ------------------------------------------------------------- IMYA: pall -------------------------------------------------------------- pall Raspechatka vseh fajlov v dereve katalogov NAZNACHENIE Nahodit vse fajly v zadannom kataloge v sootvetstvii s nekotorym kriteriem, razbivaet fajly na stranicy i pomeshchaet rezul'tat v odin fajl, gotovyj k raspechatke na printere. FORMAT VYZOVA pall [-t|-d] directory PRIMER VYZOVA pall /usr/lib Vyvodit na pechat' postranichno vse tekstovye fajly v kataloge /usr/lib TEKST PROGRAMMY 1. : 2 # @(#) pall v1.0 Print all files in a tree Author: Russ Sage 2a Pechataet vse fajly v dereve 4 if [ $# -eq 0 -o $# -gt 2 ] 5 then echo "pall: wrong argument count" >&2 6 echo "usage: pall [-t|-d] dir" >&2 7 echo " -t text (default)" >&2 8 echo " -d dev (.c,.h,.mk,.s)" >&2 9 exit 1 10 fi 12 NAME="" 13 if [ `echo $1 | cut -c1` = "-" ] 14 then case $1 in 15 -t) NAME="" 16 shift;; 17 -d) NAME="-name \"*.[chms]*\"" 18 shift;; 19 *) echo "pall: invalid arg $1" >&2 20 echo "usage: pall [-t|-d] dir" >&2 21 echo " -t text (default)" >&2 22 echo " -d dev (.c,.h,.mk,.s)" >&2 23 exit 1;; 24 esac 25 fi 27 echo "creating output file: /tmp/lpr$$" 29 eval find $1 -type f $NAME -print | sort | while read FILE 30 do 31 if file $FILE | 32 egrep 'exec|data|empty|reloc|cannot open' >/dev/null 2>&1 33 then continue 34 else file $FILE > /dev/tty 35 pr $FILE 36 fi 37 done >> /tmp/lpr$$ 39 echo "\nSend /tmp/lpr$$ to line printer (y/n): \c" 40 read CMD 41 if [ "$CMD" = "y" ] 42 then lpr /tmp/lpr$$ 43 fi PEREMENNYE SREDY VYPOLNENIYA FILE Soderzhit imya kazhdogo fajla, kotoryj dolzhen byt' obrabotan v cikle while NAME Soderzhit stroku poiska dlya opredeleniya mestona- hozhdeniya ukazannyh fajlov CMD Soderzhit komandu vydachi rezul'tatov na printer OPISANIE ZACHEM NUZHEN KOMANDNYJ FAJL pall? |ta utilita ob®edinyaet koncepcii obhoda dereva fajlov i vyvoda soderzhimogo fajlov. Dazhe kogda fajly upryatany v podkatalogah, my vse ravno hotim najti ih. Nam neobhodima dlya etogo utilita, kotoraya obho- dit drevovidnuyu strukturu fajlov, nahodit fajly nuzhnogo nam tipa, go- tovit ih k raspechatke i stavit v ochered' dlya vyvoda na printer. Takogo roda utilita osobenno polezna, esli ishodnye teksty ili fajly s dokumentaciej hranyatsya v ierarhicheskom dereve. Delo oslozhnya- etsya tem, chto obychno eti tekstovye fajly smeshany s ispolnyaemymi fajla- mi (otkompilirovannymi programmami), fajlami dannyh i, vozmozhno, s ar- hivnymi fajlami. Neobhodimo imet' vozmozhnost' otfil'trovat' vse nepri- godnye dlya pechati fajly i podgotovit' tekstovye fajly. Dolzhny byt' provereny vse fajly s tem, chtoby ni odin ne byl propushchen. Dlya vypolneniya vsego etogo processa vruchnuyu trebuetsya, chtoby vy po komande cd perehodili v kazhdyj uroven' dereva fajlov, nahodili tekstovye fajly, obrabatyvali ih (obychno komandoj pr sistemy UNIX ili kakim-libo drugim tekstovym processorom) i raspechatyvali ih. Posle vy- polneniya vsej etoj raboty vy eshche dolzhny sobrat' vse otdel'nye raspe- chatki vmeste v strogo opredelennom poryadke. |to bol'shaya rabota, pod- verzhennaya oshibkam so storony cheloveka. Pochemu by ne pozvolit' mashine vypolnyat' etu rabotu? Sejchas my imeem koncepcii i sredstva, neobhodi- mye dlya sozdaniya takoj utility. V dopolnenie k vozmozhnosti upravleniya fajlami, pall takzhe mozhet upravlyat' ustrojstvom pechati. Obychno kazhdoe zadanie, postavlennoe v ochered' na vypolnenie k printeru, imeet zagolovok, kotoryj pechataetsya pervym. |to znachit, chto esli vy postavili v ochered' na pechat' desyat' otdel'nyh zadanij, to vperedi kazhdogo iz nih budet dve-tri stranicy, kotorye dolzhny byt' ubrany vruchnuyu. Pomnozh'te eto na sotni fajlov, i vy budete imet' kuchu bumag, kotorye dolzhny byt' vybrosheny. Pall isklyuchaet eti poteri, poskol'ku vse obrabotannye dannye so- birayutsya v odin bol'shoj tekstovyj fajl. Kogda vsya obrabotka vypolnena, etot odin fajl mozhet byt' postavlen v ochered' na pechat' ili sohranen dlya nekotoryh drugih celej. Edinstvennoe ogranichenie pri takom podhode zaklyuchaetsya v maksimal'nom razmere fajla, kotoryj vy mozhete sozdat'. |tot razmer vychislyaetsya umnozheniem znacheniya ulimit na razmer bloka. Naprimer, moe znachenie ulimit ravno 4096. Razmer bloka v dannom sluchae raven 512, a ne 1024. Maksimal'nyj razmer fajla raven 2097152. Vy mo- zhete vychislit' eto pryamo s klaviatury, kak pokazano nizhe: $ ulimit 4096 $ expr 4096 \* 512 2097152 |togo znacheniya dostatochno dlya bol'shinstva sluchaev. CHTO DELAET pall? Komandnyj fajl pall prednaznachen dlya poiska ukazannyh fajlov, ob- rabotki ih komandoj UNIX pr i sborki vseh rezul'tatov v odin fajl. Posle togo kak vse ishodnye fajly budut obrabotany komandoj pr, vam budet zadan vopros o tom, hotite li vy postavit' vyvodnoj fajl v oche- red' na pechat' k printeru. Rezul'tiruyushchij fajl sohranyaetsya v kataloge /tmp, gde ego mozhno ispol'zovat' dlya drugih celej ili udalit'. Opciyami pall yavlyayutsya -t i -d. Opciya -t ispol'zuetsya po umolchaniyu i net neobhodimosti ee ukazyvat'. Ona prednaznachena dlya dokumentacii i ukazana v komandnoj stroke, chtoby bolee yasno pokazat' dejstvie, koto- roe budet vypolneno. Esli vybrana tekstovaya opciya, ishchutsya vse fajly v drevovidnoj strukture i zatem otbirayutsya tol'ko tekstovye fajly. Esli ukazana op- ciya razrabotki -d (development), to ishchutsya tol'ko fajly, svyazannye s razrabotkoj programm. Zatem eti fajly otfil'trovyvayutsya s cel'yu polu- cheniya tekstovyh fajlov. Schitaetsya, chto k razrabotke programm otnosyatsya fajly, imena kotoryh imeyut vid *.c dlya ishodnyh fajlov na yazyke Si, *.h dlya vklyuchaemyh fajlov zagolovkov, *.mk dlya fajlov postroeniya prog- ramm (makefiles) i *.s dlya ishodnyh fajlov na assemblere. Esli trebu- yutsya kakie-libo drugie shablony, to takie simvoly mogut byt' legko po- meshcheny v tekst programmy. Prezhde chem nachnet vypolnyat'sya poisk fajlov, na ekran vyvoditsya imya vremennogo fajla, chtoby vy znali, kak obratit'sya k nemu posle za- versheniya vypolneniya komandy. Vse rezul'taty, poluchennye posle obrabot- ki fajlov, napravlyayutsya v etot odin fajl. Komandnyj fajl pall takzhe vyvodit na ekran soobshcheniya, kogda on obrabatyvaet fajly. Vyvod fajlov vypolnyaetsya v real'nom vremeni po mere obrabotki fajlov. Raspechatka proizvoditsya pri pomoshchi obychnoj komandy UNIX'a file. Po raspechatke vy mozhete sudit' o tom, fajly kakogo tipa obrabatyvayutsya v dannyj moment. Esli kakoj-libo norovistyj fajl proskol'znet, to vy znaete, gde on razmeshchen i kakogo on tipa. |to delaet otladku gorazdo bolee prostoj. Dlya fajlov vypolnyaetsya obrabotka, kotoraya yavlyaetsya dejstviem po umolchaniyu komandy pr. Ona razbivaet fajl na stranicy i stavit zagolo- vok v nachale kazhdoj stranicy. Zagolovok soderzhit datu, imya fajla i no- mer stranicy. Net nikakogo inogo sposoba peredat' zagolovok komandnomu fajlu pall vo vremya ego raboty, poskol'ku on predpolagaet, chto vy ho- tite znat' imya kazhdogo fajla takim, kak ono est' na diske. Izmenenie stroki zagolovka vyzvalo by tol'ko nepriyatnosti i dopolnitel'nuyu rabo- tu. Sposob vyzova pall vliyaet na format imeni fajla v zagolovke. Esli vy vyzvali pall, ispol'zuya absolyutnoe imya kataloga, to v raspechatke ispol'zuyutsya polnye marshrutnye imena. Esli vy vyzvali pall s otnosi- tel'nymi marshrutnymi imenami, to oni i ispol'zuyutsya pri vyvode na pe- chat'. Vnutri pall ispol'zuetsya komanda find sistemy UNIX. Komanda find ispol'zuet dannye iz komandnoj stroki, t.e. te, kotorye vvel pol'zova- tel'. Vyvodimyj zagolovok izmenyaetsya v zavisimosti ot togo, chto ukaza- no v komandnoj stroke, kotoruyu ispol'zuet find. Esli vy vyzyvaete pall, ispol'zuya sleduyushchuyu komandnuyu stroku, to zagolovok soderzhit pol- noe marshrutnoe imya: ------------------------------------------- | | $ pall /usr/include | | May 5 10:39 1986 /usr/include/a.out.h Page 1 | . | . | . | May 5 10:39 1986 /usr/include/ar.h Page 1 | . | . | . Esli vy vyzyvaete pall s pomoshch'yu otnositel'noj notacii, to imena fajlov takzhe yavlyayutsya otnositel'nymi, chto ne ochen' horosho. Esli u vas est' neskol'ko katalogov, v kotoryh imeyutsya odinakovye imena fajlov, to vy ne smozhete byt' uvereny, chto smotrite na pravil'nuyu raspechatku. Vot kak eto mozhet vyglyadet': --------------------- | | $ cd /usr/include | $ pall . | | May 5 10:39 1986 ./a.out.h Page 1 | . | . | . May 5 10:39 1986 ./ar.h Page 1 . . . PRIMERY 1. $ pall /usr/include Vyvodit VSE fajly zagolovkov. Syuda vklyuchayutsya fajly zagolovkov v podkataloge sys i vo vseh drugih katalogah, kotorye mogut raspola- gat'sya nizhe kataloga /usr/include. |to i est' prichina, po kotoroj byl napisan komandnyj fajl pall. On sozdaet odin ogromnyj listing vseh fajlov zagolovkov v otsortirovannom poryadke s pechat'yu v zagolovke stranic polnogo imeni. 2. $ pall $HOME/src Obhodit vse katalogi, nahodyashchiesya nizhe kataloga ishodnyh tekstov, i raspechatyvaet vse fajly. POYASNENIYA V samom nachale proizvoditsya proverka na nalichie oshibok v komand- noj stroke. Esli v nej net argumentov ili ih bol'she dvuh, vyvoditsya soobshchenie ob oshibke, sintaksicheskaya podskazka i programma zavershaetsya s neudachnym statusom vozvrata. V stroke 12 inicializiruetsya peremennaya NAME. |to dejstvie vypol- nyaetsya po umolchaniyu, poetomu dannaya stroka daet vozmozhnost' ne ukazy- vat' opciyu v komandnoj stroke. Operator if v stroke 13 oznachaet: "Esli pervym simvolom pervogo argumenta yavlyaetsya defis", to nuzhno proverit', kakaya eto opciya. Esli ustanovlena opciya -t, to peremennaya NAME inicializiruetsya nulevym znacheniem, chto sovpadaet s dejstviem po umolchaniyu, poetomu na samom dele nichego ne menyaetsya. Zatem eta opciya udalyaetsya iz komandnoj stroki. Esli ustanovlena opciya -d, to peremennaya NAME inicializiruetsya dlya poiska simvol'noj stroki, sootvetstvuyushchej imenam fajlov programm- noj razrabotki. Obratite vnimanie, chto dvojnye kavychki vnutri operato- ra ekranirovany, t.e. vperedi nih stoyat simvoly naklonnoj cherty. Ko- mandnyj interpretator shell vosprinimaet kavychki vokrug stroki poiska na pervoj faze sintaksicheskogo razbora bez otmeny prisvoeniya, tem sa- mym ostavlyaya dvojnye kavychki posleduyushchej komande find. Esli opciej yavlyaetsya chto-libo drugoe, vyvoditsya soobshchenie ob oshibke i programma zavershaetsya. V stroke 27 vyvoditsya soobshchenie o tom, kakoj fajl soderzhit re- zul'taty raboty. Sam etot operator ne sozdaet fajl. On tol'ko pechataet imya fajla, kotoryj budet sozdan pozzhe. Stroki 29-43 - eto glavnyj cikl vsej programmy. Operator find dolzhen byt' povtorno proanalizirovan komandoj eval, poskol'ku peremen- naya NAME soderzhit nuzhnye nam dannye. Esli by ne bylo komandy eval, to podstanovka simvol'nyh strok vypolnyalas' by nepravil'no. Obratite vni- manie, chto peremennoj NAME ne trebuyutsya kavychki v stroke 24. Oni uzhe est' v peremennoj NAME, tak kak byli obrabotany komandoj eval. Operator find nahodit tol'ko fajly tipa f, ili obychnye fajly, t.e. ne katalogi i ne simvol'nye ili blochnye ustrojstva. Zdes' pod "obychnymi fajlami" ponimaetsya, chto oni eshche mogut byt' fajlami dannyh ili ispolnyaemymi. Esli znachenie peremennoj NAME ravno nulyu, ono ne vliyaet na komandnuyu stroku. Esli NAME soderzhit simvoly fajlov prog- rammnoj razrabotki, to oni stanovyatsya chast'yu komandy find pri vypolne- nii komandy eval. |to nakladyvaet ogranicheniya na shablon poiska komandy find. Kogda fajly najdeny, ih imena vyvodyatsya v standartnyj vyvod. Standartnyj vyvod po konvejeru peredaetsya komande sort, raspolagayushchej imena fajlov po poryadku. |to sil'no pomogaet pri sortirovke gory vy- vodnoj informacii. CHtenie kipy raspechatok tolshchinoj v odin fut mozhet svesti s uma kogo ugodno. Otsortirovannye imena po konvejeru peredayutsya v cikl while, koto- ryj chitaet imena fajlov po odnomu. Obratite vnimanie, chto standartnyj vyvod dlya vsego cikla while pereadresovyvaetsya vo vremennyj fajl, chto oblegchaet sborku vseh vyhodnyh rezul'tatov v odnom meste vmesto pere- adresacii kazhdogo vyzova komandy v fajl. Dlya kazhdogo podhodyashchego fajla vypolnyaetsya proverka v strokah 31-36. Proverka nachinaetsya s zapuska komandy file. Vyhod file po kon- vejeru peredaetsya komande egrep, kotoraya ishchet tip fajla, sootvetstvuyu- shchij naboru neskol'kih vyrazhenij. Esli kakoe-libo vyrazhenie podhodit, to nam ne nuzhno obrabatyvat' etot fajl. |to ne tekstovyj fajl, i ego nel'zya vyvesti na printer. Vo mnogih sluchayah fajly dannyh soderzhat bol'shoe kolichestvo simvolov progona formata, kotorye vytalkivayut stra- nicu posle kazhdoj pary simvolov. Esli vy ne budete nahodit'sya ryadom s printerom, kogda pechatayutsya takie fajly, to vy mozhete poluchit' listing, zanimayushchij polovinu yashchika bumagi, zatrativ celyj les na ne- nuzhnuyu rabotu. Nam ne nuzhen vyhod komandy egrep, a tol'ko ee status vozvrata. Esli egrep obnaruzhivaet odno iz ukazannyh ej vyrazhenij, ona zaversha- etsya so statusom uspeha, ili 0. Tem samym proverka if vklyuchaet vypol- nenie operatora then, kotoryj v dannom sluchae vyvodit nas iz konstruk- cii if-then-else i prodolzhaet cikl while, propuskaya takim obrazom fajl. Esli zhe egrep ne obnaruzhila ni odnu iz ukazannyh simvol'nyh strok, to vypolnenie prodolzhaetsya s operatora else, kotoryj vypolnyaet eshche odnu komandu file i pereadresovyvaet ee vyvod na ustrojstvo s ime- nem /dev/tty. |to universal'noe imya ustrojstva, kotoroe garantiruet vam vyvod na ekran vashego terminala. UNIX obespechivaet, chto ukazanie /dev/tty obhodit lyubye komandy pereadresacii vyvoda, dejstvuyushchie v dannyj moment. Poskol'ku standartnyj vyvod uzhe pereadresovan dlya vsego cikla while, to nam nuzhno popast' na ustrojstvo /dev/tty, chtoby vyvod shel na ekran terminala, a ne v fajl pechati. Otobrazhenie na terminal imeni obrabatyvaemogo fajla pozvolyaet pol'zovatelyu znat', kakoj fajl budet dobavlen k raspechatke. Esli fajl udovletvoryaet nashim kriteriyam, on obrabatyvaetsya koman- doj pr. Rezul'tat napravlyaetsya v standartnyj vyvod, kotoryj peread- resovan ciklom while tak, chtoby rezul'tat chetko popadal v odin fajl. Otmetim, chto nam nuzhno postavit' simvol dobavleniya v fajl vyvoda (>>). V protivnom sluchae my poluchim zapis' na mesto sushchestvuyushchego fajla pe- chati, a znachit v fajle pechati budet nahodit'sya tol'ko poslednij obra- botannyj fajl. Posle togo kak vse fajly obrabotany, zadaetsya vopros o tom, hoti- te li vy vyvesti rezul'tiruyushchij fajl na pechat'. Predlagaetsya otvetit' na etot vopros "da" (yes) ili "net" (no), odnako v programme proverya- etsya tol'ko polozhitel'nyj otvet (yes). |to znachit, chto nazhatie lyuboj klavishi traktuetsya kak otvet "no", krome klavishi "y", oznachayushchej "da". Otvet pol'zovatelya chitaetsya s klaviatury, i proveryaetsya, yavlyaetsya li on simvolom "y". Esli da, to fajl stavitsya v ochered' na pechat'. Esli net, dal'nejshaya proverka ne proizvoditsya i komandnyj fajl zavershaetsya. Otmetim, chto zapros o vyvode na pechat' postupil v standartnyj vy- vod. Pereadresaciya vyvoda dejstvovala tol'ko vo vremya raboty cikla while, a zatem prekratilas'. Tak bylo sdelano potomu, chto cikl while byl fakticheski eshche odnim porozhdennym shell-processom (subshell) i pe- readresaciya dejstvovala tol'ko v etom te vnimanie, chto marshrutnaya- ustanovite znacheniya peremennyh vne cikla, a zatem izmenite ih vnutri cikla. Posle zaversheniya cikla peremennye po-prezhnemu imeyut svoi pervo- nachal'nye znacheniya, a ne izmenennye v cikle znacheniya. Izmenennye zna- cheniya kasalis' peremennyh porozhdennogo interpretatora shell, kotorye ischezli, kogda porozhdennyj shell zavershilsya. Peremennye interpretatora shell mogut peredavat' znacheniya tol'ko vniz, porozhdennym processam, no processy-potomki ne mogut peredavat' znacheniya peremennyh vverh, rodi- tel'skomu processu. Obychno peredacha znachenij peremennyh podderzhivaetsya pri pomoshchi kakogo-libo fajla, v kotorom hranyatsya dannye dlya obmena mezhdu roditel'skim processom i processom-potomkom. UPRAVLENIE VYVODNYMI FAJLAMI BOLXSHIH RAZMEROV Kak my uzhe otmechali, obshchij razmer vyvodnogo fajla ogranichen. Na- pomnim, chto komanda find prohodit vse derevo katalogov vniz do konca po vsem podderev'yam, nachinaya s kataloga, imya kotorogo ukazano v ko- mandnoj stroke. Esli vy nahodites' na vershine ochen' glubokogo dereva, to obrabatyvat'sya mogut bukval'no sotni fajlov. Poskol'ku vy ograniche- ny maksimal'nym razmerom vyvodnogo fajla, vy mozhete obrabotat' tol'ko ogranichennoe chislo fajlov. Konechno, kolichestvo fajlov, kotoroe vy mo- zhete obrabotat', zavisit takzhe ot togo, naskol'ko veliki vhodnye faj- ly. Esli vyvodnoj fajl dostigaet svoego maksimuma, vse dobavlyaemye posle etogo dannye teryayutsya. Poterya dannyh ves'ma boleznenna, i obychno trebuetsya nekotoroe vremya, chtoby ee obnaruzhit'. V medlenno rabotayushchej sisteme popytka obrabotat' bol'shoe derevo, naprimer vse ishodnye teksty sistemy UNIX, mozhet zanyat' celyj chas i dazhe bol'she, prezhde chem vyhodnoj fajl zapolnitsya. |to oznachaet, chto vy dolzhny nahodit'sya ryadom i sledit' za tem, kogda fajl perepolnitsya. Esli on vse-taki perepol- nilsya, vy dolzhny vse vybrosit' i nachat' snachala. |to takzhe oznachaet, chto vy dolzhny perejti vniz po derevu. |to mozhet byt' problemoj v sba- lansirovannyh derev'yah. Naprimer, rassmotrim katalog /usr/lib. |tot katalog soderzhit mno- go fajlov na pervom urovne i mnogo katalogov pervogo urovnya. Esli by my ne obrabotali vse fajly kataloga /usr/lib za odnu popytku, my dolzh- ny byli by pojti vniz po podkatalogam kataloga /usr/lib. Popytki de- lat' eto vruchnuyu i zapuskat' pall v kazhdom podkataloge zanyali by mnogo vremeni i mogli by privesti k oshibkam s vashej storony. Krome togo, pall dopuskaet ukazanie tol'ko odnogo imeni kataloga, chto privedet k polucheniyu bol'shogo kolichestva raspechatok i k putanice pri ih sortirov- ke. CHto zhe delat'? Radikal'nym resheniem yavlyaetsya uvelichenie znacheniya ulimit. Vy mozhete sdelat' eto libo s pomoshch'yu programmy na yazyke Si, ispol'zuyushchej sistemnyj vyzov ulimit, libo komandoj shell'a ulimit. Tehnika vypolneniya takoj raboty predstavlena v glave 7. VOZMOZHNYE MODIFIKACII Vozmozhno, vy zahotite dobavit' svoi sobstvennye shtrihi v nekoto- ryh mestah komandnogo fajla. Pervym mestom yavlyaetsya to, gde ukazyva- yutsya simvoly poiska fajlov programmnoj razrabotki. Simvoly, ispol'zo- vannye nami - eto naibolee upotrebimye suffiksy v UNIX. Esli vy ispol'zuete ne Si i assembler, a drugie yazyki, to vy mozhete dobavit' sootvetstvuyushchie simvoly. Sleduyushchim mestom, gde mogut byt' sdelany dopolneniya, yavlyayutsya op- cii, kotorye mozhet ponimat' pall. Vam mogut ponadobit'sya fajly s opre- delennymi imenami ili opredelennymi tipami, naprimer, fajly nroff. |ti opcii mogut byt' legko dobavleny v operator case, chto uluchshit komandu. Poslednim mestom vozmozhnyh izmenenij yavlyaetsya tip fajlov, kotorye nuzhno propuskat'. Simvol'naya stroka dlya komandy egrep pokryvaet bol'- shinstvo vazhnyh netekstovyh tipov fajlov. V vashej sisteme mogut byt' kakie-to osobye tipy ili zhe imena mogut byt' drugimi. Esli vam neobho- dimo dopolnit' stroku, sdelajte eto. Komanda egrep mozhet obrabotat' dovol'no mnogo informacii. YA ne znayu ee ogranichenij. Vozmozhno, vy ob- naruzhite ih, prosmatrivaya ishodnyj tekst utility egrep. Esli polucha- etsya slishkom dlinnaya stroka i ne pomeshchaetsya na ekrane, nichego strashno- go. Perenos na sleduyushchie stroki ekrana ne opasen, poka obshchee kolichest- vo simvolov ne prevysit 255. Opasno tol'ko ukazyvat' pereadresaciyu simvol'noj stroki if na nulevoe ustrojstvo v sleduyushchej posle komandy egrep stroke. Kazhetsya, chto vse rabotaet pravil'no, no eto ne tak. Pe- readresaciya dolzhna ukazyvat'sya v toj zhe stroke, gde stoit komanda egrep. V dannoj glave sdelano ochen' mnogo. Naibolee vazhno to, chto polu- cheno mnozhestvo novyh idej, kotorye mozhno ispol'zovat' pri ekspluatacii programmnoj sredy i prosmotre fajlov lyubogo tipa. V sleduyushchej glave my uglubimsya v rutinnuyu rabotu po ezhednevnomu soprovozhdeniyu fajlov i ispol'zuem izuchennye sredstva, chtoby oni oblegchili nashu zhizn'.  * GLAVA 3. Podderzhka fajlovoj sistemy *  SODERZHANIE VVEDENIE 3.1. SOPROVOZHDENIE FAJLOV 3.1.1. Operacii soprovozhdeniya 3.1.2. Sredstva peresylki fajlov 3.1.3. Sredstva kopirovaniya 3.1.4. Sredstva proverki operacii kopirovaniya 3.2. PERESYLKA FAJLOV 3.2.1. cptdir - kopirovanie dereva kataloga 3.2.2. can - udalenie fajlov v "musornuyu korzinu" 3.2.3. dosflp - kopirovanie fajlov s gibkogo diska formata MS-DOS s ispol'zovaniem simvolov shablona v imenah fajlov 3.3. SREDSTVA POLUCHENIYA REZERVNYH KOPIJ 3.3.1. autobkp - avtomaticheski narashchivamyj fajl rezervnoj kopii 3.3.2. cpiobr - kopirovanie i vosstanovlenie fajlov v vide potoka dannyh 3.4. SREDSTVA PROVERKI OPERACIJ KOPIROVANIYA 3.4.1. dsum - kontrol'nye summy dvuh katologov 3.4.2. log - menyu dostupa k fajlam protokola kopirovaniya VVEDENIE Dazhe "nebol'shaya" sistema UNIX s malym chislom pol'zovatelej porozh- daet sotni fajlov v hode obychnoj raboty. V processe programmirovaniya vy mozhete sozdavat' mnozhestvo fajlov dlya razlichnyh versij vashih programm. Vedenie pochty i zapis' teksta pri pomoshchi redaktora vi sposobstvuet to- mu, chto nakaplivaetsya eshche bol'she fajlov. Takie utility, kak uucp, lp i drugie dobavlyayut eshche bol'she fajlov. Esli u vas sistema UNIX ustanovlena na mikro-|VM, to vash zhestkij disk nachinaet perepolnyat'sya. V bol'shih mnogopol'zovatel'skih sistemah diskovaya pamyat' redko schitaetsya proble- moj, no v dejstvitel'nosti vsegda kazhetsya, budto fajly stremyatsya rasshi- rit'sya do zapolneniya vsej dostupnoj diskovoj pamyati. Poetomu kazhdyj pol'zovatel' dolzhen nesti otvetstvennost' za rashod diskovogo prost- ranstva. (Esli vy platite za diskovuyu pamyat', to u vas takzhe mogut byt' finansovye stimuly.) Odnako, to, chto vy hotite sohranit', vy hotite SOHRANITX. Imenno zdes' nachinaetsya rabota po sozdaniyu rezervnyh kopij. 3.1. SOPROVOZHDENIE FAJLOV V predydushchej glave my razrabotali nekotorye sredstva poiska i otobrazheniya informacii, pomogayushchie nam podderzhivat' zhiznennyj put' vseh nashih fajlov. Teper' my sobiraemsya obratit'sya k vazhnejshim rutinnym ra- botam, kotorye pozvolyat izbezhat' haosa i katastrofy. Soprovozhdenie fajlov oznachaet izbavlenie ot fajlov, kotorye nam bol'she ne nuzhny i v to zhe vremya sistematicheskoe kopirovanie teh fajlov, kotorye my hotim sohranit'. Dlya etogo trebuetsya vozmozhnost' ispol'zova- niya raznorodnyh dostupnyh nositelej dannyh. Soprovozhdenie fajlov podra- zumevaet takzhe ryad sistematicheskih, povtoryayushchihsya zadach, a eto oznacha- et, chto my mozhem sozdat' sredstva sistemy UNIX dlya avtomatizacii etogo processa. 3.1.1. OPERACII SOPROVOZHDENIYA Soprovozhdenie fajlov vklyuchaet dva vida operacij: sozdanie rezerv- nyh kopij (kopirovanie) i udalenie "musora". Kopirovanie - eto dan' uvazheniya, kotoruyu my platim za hrupkost' fizicheskih dannyh v ruki Merfi i drugih bogov entropii. Horoshee sredstvo kopirovaniya yavlyaetsya bystrym, gibkim, prostym v ispol'zovanii i stimuliruet pol'zovatelej chasto kopirovat' samye vazhnye fajly. V posleduyushchem tekste budut predstavleny razlichnye metody kopirovaniya, prigodnye dlya raznyh konfiguracij sistemy i tipov nositelej. Imeetsya dva vida rezervnyh kopij: "myagkie" i "tverdye". "Myagkie" rezervnye kopii - eto kopii v drugom fajle ili kataloge v toj zhe ili v drugoj fajlovoj sisteme (t.e. razdele) na tom zhe ili drugom zhestkom diske. Takogo roda kopirovanie sdelat' legko i ono predohranyaet ot na- nosimogo samomu sebe ushcherba, takogo kak udalenie fajla po nevnimatel'- nosti. CHashche vsego dlya takogo tipa kopirovaniya ispol'zuetsya nashe sredstvo cptdir. Osnovnoj nedostatok myagkogo kopirovaniya zaklyuchaetsya v tom, chto vy po-prezhnemu uyazvimy dlya takih vozdejstvij, kotorye vliyayut na vash fizicheskij nositel' (obychno zhestkij disk) tak, chto i original i kopiya okazyvayutsya razrushennymi. "Tverdaya" kopiya - eto kopiya na drugom ustrojstve ili dazhe v drugoj sisteme UNIX. Sredstva, predstavlennye nizhe v dannoj glave, upravlyayut takogo roda kopirovaniem i dayut vam vozmozhnost' vypolnyat' kopirovanie takogo tipa i s takoj periodichnost'yu, kotorye sootvetstvuyut ob®emu va- shej vychislitel'noj sistemy, urovnyu ee aktivnosti i vazhnosti hranimyh dannyh. Tverdoe kopirovanie vsegda neskol'ko utomitel'no, potomu chto diski ili lenty dolzhny byt' smontirovany (ili dolzhna byt' ustanovlena svyaz' s drugoj sistemoj), a eta operaciya trebuet mnogo vremeni. Preimushchestvo, estestvenno, zaklyuchaetsya v tom, chto vy bol'she ne zavisite ot celost- nosti kakogo-libo odnogo ustrojstva. Avtomatiziruya nashu proceduru kopirovaniya, my staraemsya sdelat' ego kak mozhno menee boleznennym. Delaya nashi sredstva kopirovaniya v kakoj-to stepeni razumnymi, my mozhem vybrat' tol'ko fajly, kotorye nuzhdayutsya v kopirovanii, i tem samym sohranit' vremya i pamyat'. Nailuchshij sposob obespechit', chtoby kopirovanie vypolnyalos' regulyarno - minimizirovat' vremya i trebuemye dlya etogo usiliya. Nakonec, sozdanie procedur dlya pro- verki pravil'nosti kopij dast vam spokojstvie duha. "Udalenie musora" mozhno avtomatizirovat' putem ukazaniya i podgo- tovki k udaleniyu fajlov, kotorye, veroyatno, budut vremennymi, libo ka- kih-to drugih fajlov, kotorye sozdany (no ne obyazatel'no razrusheny) pri kompilyacii, vypolnenii konvejerov ili drugimi operaciyami. Vy takzhe mo- zhete ukazyvat' fajly, specifichnye dlya vashih rabot kak ne podlezhashchie udaleniyu. 3.1.2. SREDSTVA PERESYLKI FAJLOV Pervaya gruppa sredstv - eto prostye universal'nye perenoschiki faj- lov. Programma cptdir mozhet kopirovat' katalog (i lyubye podchinennye ka- talogi, lezhashchie nizhe v dereve) v katalog-priemnik. Katalog-priemnik - eto obychno katalog, naznachennyj v kachestve rezervnoj kopii dlya nekoto- rogo proekta. Programma can beret na sebya