e okanchivayutsya na .asm, poetomu net neobhodimosti pomnit' vid vyrazheniya dlya kopirovaniya etih fajlov. Analogichno, klyuch -c kopiruet vse fajly, okanchivayushchiesya na .c, i klyuch -h kopiruet fajly, okanchivayushchi- esya na .h. Kak my uvidim pozzhe, pryamoe ukazanie, o kotorom my govorim zdes', yavlyaeetsya vyrazheniem dlya komandy grep. Ispol'zovanie vseh vozmozhnostej komandy grep dostigaetsya pri ukazanii obrazcov imen fajlov. Ispol'zujte klyuch -d dlya ukazaniya, s kakogo gibkogo diska proizvo- ditsya kopirovanie. Po umolchaniyu eto ustrojstvo a: ili A:. Ne imeet zna- cheniya, na kakom registre vy ukazhete imya ustrojstva. Dlya uverennosti prover'te fajl /etc/default/msdos. |tot fajl soderzhit sootvetstviya mezh- du simvolom ustrojstva i marshrutnym imenem XENIX. Naprimer, fajl mozhet vyglyadet' tak: A=/dev/fd048ds9 B=/dev/fd148ds9 C=/dev/hd0d D=/dev/hd1d X=/dev/fd096ds15 Y=/dev/fd196ds15 Kak vy vidite, marshrutnye imena - eto obychnye imena ustrojstv i nichego bol'she. V kachestve osnovnogo sredstva vypolneniya raboty dosflp ispol'zuet komandu doscp. |to utilita sposobna ponimat' format fajlovoj sistemy DOS. Dosflp peredaet ej oboznachenie ustrojstva i drugie opcii posredstvom peremennyh komandnogo processora. Naprimer, klyuch "-dB:" me- nyaet ustrojstvo na B vmesto prinyatogo po umolchaniyu ustrojstva A. Esli vyrazheniya pryamogo ukazaniya tipa fajlov ne sootvetstvuyut tomu, chto vam nuzhno, vy mozhete opredelit' svoi sobstvennye vyrazheniya so- postavleniya, ispol'zuya klyuch -e. Napomnim, chto vyrazhenie dolzhno soot- vetstvovat' sintaksisu komandy grep. Esli vy hotite osvezhit' svoyu pa- myat', posmotrite grep(1) v rukovodstve po AT&T UNIX ili grep(C) v ruko- vodstve po XENIX. Dlya polucheniya polnoj informacii o sintaksise posmot- rite ed(1). |tot sintaksis yavlyaetsya osnovoj bol'shinstva komand, rabota- yushchih s regulyarnymi vyrazheniyami, takih kak sed i grep. Naprimer, esli vy ispol'zuete vyrazhenie "*test*", vyrazhenie dlya grep dolzhno imet' vid ".*test.*". Ego mozhno slegka izmenit' v zavisi- mosti ot togo, chto vy zhelaete imet' s kazhdoj storony cepochki test. V dannom sluchae sintaksis ukazyvaet vse simvoly (.*), za kotorymi sleduet cepochka t-e-s-t, a zatem lyubaya cepochka simvolov (.*). V etom sluchae klyuch imel by vid "-e.\*test.\*". |to kazhetsya nemnogo strannym, no eto sootvetstvuet sintaksisu. (Dvojnye kavychki ne yavlyayutsya chast'yu komandy.) Simvol obratnoj kosoj cherty (\) ispol'zuetsya dlya ekranirovaniya zvezdoch- ka. Esli vy ne ekraniruete ee, komandnyj processor sootneset ee s ime- nami vseh fajlov vashego tekushchego kataloga, chego vy ne zhelaete. |krani- rovanie ee pozvolit, chtoby nuzhnyj simvol byl peredan dosflp, dlya ispol'zovaniya ee v grep-posledovatel'nosti. Klyuch -h - eto eshche odin iz klyuchej pryamogo ukazaniya. Davajte vkratce rassmotrim ego sintaksis vnutri dosflp. |to ".*\.h$", i on ukazyvaet lyuboj simvol, za kotorym stoit odno ili neskol'ko vhozhdenij lyubogo sim- vola (.*), literal'naya tochka (.\), simvola h i vsled za nim konec stro- ki (h$). Vy mogli by ukazat' to zhe samoe, ispol'zuya klyuch -e, no -h de- laet eto gorazdo legche. Klyuch -l izmenyaet osnovnoe dejstvie komandy dosflp. Vmesto kopiro- vaniya fajlov on vydaet spisok fajlov. |to delaetsya putem vypolneniya razlichnyh komand vida dosxx, v dannom sluchae dosdir. Klyuch vydachi spiska polezen v dosflp, potomu chto vy mozhete poluchit' spisok kak informaciyu k resheniyu o tom, chto delat' dal'she, i vam net neobhodimosti pomnit' ko- mandu dosdir. Klyuch -r takzhe izmenyaet osnovnuyu operaciyu komandy dosflp. V etom sluchae fajly udalyayutsya, a ne kopiruyutsya. Esli vy ukazali etot klyuch, vy- daetsya soobshchenie, kotoroe prosit vas podtverdit', chto vy hotite udalit' ukazannye fajly. Vy mozhete prosto otvetit' "n", i zapretit' udalenie, esli vy vveli etot opciyu sluchajno. Napomnim, chto udalennye fajly ili fajly, vklyuchennye v spisok (v sluchae klyucha -l), vybrany vyrazheniem grep, kotoroe zhestko zaprogrammirovano ili ukazano pol'zovatelem. Po umolchaniyu vybirayutsya VSE fajly. Dlya klyucha -r eto sootvetstvuet tomu, chto skazat' "rm *". Poslednij klyuch, -s, obespechivaet vozmozhnost' dostupa k fajlam, ko- torye razmeshcheny vnutri podkataloga na gibkom diske DOS. Esli vy obrashcha- etes' tol'ko k imeni ustrojstva, po umolchaniyu klyuch -s otnositsya k kata- logu samogo verhnego urovnya na gibkom diske. Esli nuzhnyj vam fajl naho- ditsya v podkataloge, vy dolzhny ispol'zovat' opredelennuyu notaciyu, chtoby popast' v nego. Odno iz razlichij mezhdu XENIX i DOS zaklyuchaetsya v simvo- le, ispol'zuemom dlya razdeleniya elementov marshrutnogo imeni. XENIX ispol'zuet obychnuyu zapis' v stile UNIX - /x/y/z. V DOS primenyaetsya sim- vol "obratnaya kosaya cherta", t.e. \x\y\z. No esli vy hotite ispol'zovat' komandy XENIX na gibkom diske DOS, vy dolzhny primenyat' obychnuyu zapis' XENIX, a:/x/y/z. |to ne sovsem ponyatno, no pravil'no. Po umolchaniyu, dosflp kopiruet fajly s gibkogo diska v vash tekushchij katalog na zhestkom diske. Esli vy izmenite operaciyu na vydachu spiska ili udalenie, eta operaciya budet proizvedena na gibkom diske. Primery 1. $ dosflp -dB: -c -l Vydaet spisok vseh fajlov vida *.c na gibkom diske DOS, razmeshchen- nom v ustrojstve B. V etom sluchae ne proishodit perehod vniz v podkata- logi, a vklyuchayutsya lish' fajly, razmeshchennye na verhnem urovne katalogov. 2. $ cd /destdir $ dosflp -ssrc -e.\*src.\* Perehod v katalog, kuda budut pomeshcheny fajly. Kopiruyutsya fajly s gibkogo diska DOS (ustrojstvo A, podkatalog src), v tekushchij katalog. Fajly dlya kopirovaniya ukazany kak *src*. V zapisi UNIX eto vyglyadelo by tak: "cp A:/src/*src* .". 3. $ dosflp -r -stmp Udalyaet vse fajly, razmeshchennye v podkataloge tmp na gibkom diske DOS (ustrojstvo A). Obratite vnimanie, chto sam katalog ne udalyaetsya. V zapisi UNIX eto vyglyadelo by tak: "rm A:/tmp/*". 4. $ sh -x `path dosflp` -dB: Zapuskaet proceduru dosflp v otladochnom rezhime vypolneniya. Edinstvennoe ogranichenie pri takom vyzove komandnogo processora zaklyu- chaetsya v tom, chto fajl dannyh, kotoryj vy posylaete emu (v dannom slu- chae dosflp), dolzhen imet' polnoe marshrutnoe imya. Poskol'ku komandnyj processor NE vypolnyaet poisk marshrutnogo imeni fajla, nam neobhodimo sperva najti marshrutnoe imya dosflp, zatem peredat' ego komandnomu pro- cessoru, zapushchennomu v otladochnom rezhime vypolneniya, a takzhe peredat' procedure dosflp argument v komandnoj stroke. Zamet'te, chto vyzov dosflp takim putem ne menyaet znachenie peremennoj $#, kotoroe tol'ko raspoznaet klyuch -dB: kak argument. Poyasneniya Stroki 4-6 vypolnyayut inicializaciyu po umolchaniyu putem sohraneniya znachenij v sootvetstvuyushchih peremennyh komandnogo processora. Po umolcha- niyu simvol-shablon stavitsya v sootvetstvie vsem fajlam, ukazannym vyra- zheniem dlya komandy grep .\*. Obratnaya kosaya cherta trebuetsya dlya ekrani- rovaniya zvezdochki, poetomu ona ne perehvatyvaetsya komandnym processo- rom. Ustrojstvo po umolchaniyu - A:. Operaciya po umolchaniyu - kopirovat' fajly, chto ukazano znacheniem "c" dlya peremennoj opcii. V strokah 8-25 ustanavlivayutsya znacheniya klyuchej i proizvoditsya pro- verka na nalichie oshibok. Esli komandnaya stroka imeet nekotorye argumen- ty ($# -gt 0), my perebiraem kazhdyj argument i proveryaem ego. Esli naj- den dopustimyj klyuch, peremennye ustanavlivayutsya soglasno klyuchu. Esli obnaruzhen nedopustimyj klyuch, vydaetsya soobshchenie ob oshibke i programma zavershaetsya s plohim statusom vozvrata. Imeetsya dva vazhnyh tipa klyuchej. Klyuchi, kotorye vypolnyayut pryamoe ukazanie tipa fajla, prosto ustanavlivayut peremennuyu EXP v sootvetstvii s klyuchom. Analogichno, klyuchi, kotorye opredelyayut, kakoj vid raboty budet vypolnyat'sya proceduroj, prosto ustanavlivayut sootvetstvuyushchuyu peremennuyu OP. Drugie klyuchi dolzhny obrabatyvat'sya putem izvlecheniya odnogo ili neskol'kih simvolov iz komandnoj stroki, kotorye sleduyut za flagom klyu- cha, eho-otobrazheniya i konvejernoj peresylki tekushchego argumenta ARG ko- mande cut dlya izvlecheniya simvola (simvolov), nachinayushchihsya s tret'ego simvola argumenta, zatem prisvoeniya rezul'tata etoj operacii soot- vetstvuyushchej peremennoj. Iz vsego sdelannogo sleduet vyvod, chto probely mezhdu klyuchami i simvolami, kotorye stoyat za nimi, ne dopuskayutsya. Naprimer, klyuch -d dolzhen poluchit' imya ustrojstva. Po sintaksisu dolzhno byt' -dB:, no ne -d B:, potomu chto B: interpretirovalos' by kak drugoj argument ARG v cikle for, a eto vse isportit. V strokah 27-39 operaciya, kotoraya dolzhna byt' vypolnena, opredelya- etsya pri pomoshchi sleduyushchego operatora case. Esli dolzhno byt' vypolneno kopirovanie, vydaetsya soobshchenie "copying" i vypolnyaetsya to, chto sleduet za operatorom case. Esli dolzhen byt' vydan spisok fajlov, vydaetsya soobshchenie ob ustrojstve, soderzhimoe kotorogo dolzhno raspechatat'sya, za- tem vydaetsya spisok fajlov putem vypolneniya komandy dosdir i konvejer- noj peresylki rezul'tata komande more, posle chego dosflp zavershaetsya. Esli fajly dolzhny byt' udaleny, pol'zovatelyu vydaetsya zapros na podtverzhdenie udaleniya. Esli otvet "yes", vydaetsya soobshchenie, s kakogo ustrojstva fajly budut udaleny. Esli otvet "no", dosflp zavershaetsya. Ostatok komandnogo fajla imeet delo s mehanizmom kopirovaniya. Stroka 41 - eto pervyj shag v navedenii mosta nad propast'yu mezhdu dvumya tipami nositelej. Komanda dosls ispol'zovana dlya polucheniya polnogo spiska fajlov s gibkogo diska. Pered tem kak my peredadim etot spisok vo vremennyj fajl, my propustim ego cherez komandu tr (translate), koto- raya preobrazuet vse simvoly na nizhnij registr, chtoby pri kopirovanii fajlov ih imena byli v nizhnem registre. V rezul'tate kopii budut pome- shcheny na disk XENIX s imenami fajlov v nizhnem registre. Esli u vas est' fajly s imenami v verhnem registre ili v smesi registrov, vy dolzhny vruchnuyu ispravit' ih posle kopirovaniya. Stroki 43-50 vypolnyayut samo kopirovanie. Cikl for zapuskaetsya dlya dostupa k kazhdomu fajlu individual'no. |to trebovanie komand vida dosxx. Vy dolzhny poluchat' dostup k odnomu fajlu odin raz, poskol'ku etot uroven' ne obladaet vozmozhnost'yu ukazaniya simvola-shablona. Imena fajlov, kotorye ispol'zuet cikl for, opredeleny putem ispol'zovaniya ko- mandy grep dlya vybora imen sootvetstvenno vyrazheniyu, ustanovlennomu ra- nee. Imya kazhdogo vybrannogo fajla snachala otobrazhaetsya, tak chto pol'zo- vatel' mozhet videt', vypolnyaetsya li komanda tak, kak ozhidalos'. V etom meste my mozhem sdelat' odnu iz dvuh veshchej: ili kopirovat' fajly, ili udalit' ih. |ta operaciya opredelyaetsya operatorom case v strokah 46-49. Esli operaciya - kopirovanie fajlov, fajly kopiruyutsya iz kombinacii ust- rojstvo-fajl v tekushchij katalog. Obratite vnimanie, chto v peremennuyu DRIVE vklyuchaetsya podkatalog, esli on byl ukazan v komandnoj stroke. |to ob®yasnyaet nalichie simvola "/" v konce prisvoeniya znacheniya peremennoj DRIVE v stroke 16. Polnoe vyrazhenie dolzhno byt' takim: B:/subdir/file. Esli operaciya - udalenie fajlov, kombinaciya ustrojstvo/fajl udalyaetsya vypolneniem komandy dosrm. Poputno zametim, chto marshrutnoe imya est' nechto gibkoe (ili nebrezhnoe, v zavisimosti ot togo, kak vy smotrite na nego) v tom smysle, chto vy mozhete skazat' A:/subdir ili A:subdir. Oba varianta pravil'ny. Posle togo kak vse fajly budut obrabotany, vremen- nyj fajl udalyaetsya. VOZMOZHNYE MODIFIKACII KOMANDNOGO FAJLA Odno iz mest, gde vy mozhete nastraivat' dosflp, eto regulyarnye vy- razheniya. Uzhe vklyucheny vyrazheniya dlya .asm, .c i .h, no vy mozhete izme- nit' eto ili dobavit' bol'she klyuchej dlya lyuboj posledovatel'nosti, koto- ruyu vy chasto ispol'zuete. 3.3. Sredstva polucheniya rezervnyh kopij 3.3.1. autobkp - avtomaticheeski narashchivamyj fajl rezervnoj kopii --------------------------------------------------------------------- Imya: autobkp _____________________________________________________________________ autobkp Avtomaticheski narashchivaemyj fajl rezervnoj kopii NAZNACHENIE Proizvodit poisk po derevu fajlov, kotorye izmenyalis' za poslednie 24 chasa, i peresylaet ih v druguyu sistemu (posredstvom uucp) ili pere- meshchaet ih v druguyu oblast' zhestkogo diska. FORMAT VYZOVA autobkp [-c] [>logfile] -c kopiruet fajly v drugoe mesto diska vmesto ispol'zovaniya uucp Primer vyzova autobkp < filelist >> bkplog Kopiruet vse fajly, ukazannye v filelist, i zapisyvaet imena fajlov v fajl s imenem bkplog Komandnyj fajl autobkp 1 : 2 # @(#) autobkp v1.0 Automatic file backup Author: Russ Sage 4 if [ $# -gt 1 ] 5 then echo "autobkp: argument error" >&2 6 echo "usage: autobkp [-c] [>logfile]" >&2 7 exit 8 fi 10 if [ "$1" = "-c" ] 11 then COPY=on 12 else COPY=off 13 fi 15 echo "\nBACKUP DATE `date '+%a %m/%d/%y %H:%M:%S'`" 16 echo "-----------------------------------------" 18 SYSTEM='' # destination system uucp node name 19 : ${SYSTEM:=`uuname -l`} 21 echo "Sourse system:\t\t`uuname -l`\nDestination system:\t$SYSTEM" 23 while read SRCDIR DESTDIR FILES 24 do 25 if [ ! -d $SRCDIR ] 26 then echo "autobkp: $SRCDIR is not a directory" 27 continue 28 fi 30 cd $SRCDIR 31 echo "\nFinding files in: $SRCDIR" 33 for FILE in `find . -type f -ctime 0 -name "$FILES" -print` 34 do 35 case $COPY in 36 off) uucp $FILE $SYSTEM!$DESTDIR;; 37 on) cp $FILE $DESTDIR;; 38 esac 39 echo " Transferred $FILE to $DESTDIR" 40 done 41 done Peremennye sredy vypolneniya COPY Flag, opredelyayushchij, ispol'zuetsya komanda uucp ili cp FILE Imya kazhdogo fajla, najdennogo v ishodnom spiske marshrutov FILES Simvol-shablon, ukazyvayushchij, kakie fajly opredeleny PATH1 Imya marshruta-istochnika PATH2 Imya marshruta-priemnika SYSTEM Imya sistemy-priemnika dlya uucp Opisanie Zachem nam nuzhen autobkp? Kak my zametili, fajly v UNIX plodyatsya kak kroliki. CHem bol'she fajlov my sozdaem, tem sil'nee zhelanie sohranyat' ih uporyadochennymi. Do- vol'no legko stat' lenivym ili poluchit' lozhnoe predstavlenie o bezo- pasnosti i prenebrech' regulyarnym kopirovaniem. Vy mozhete podhodit' k kopirovaniyu fajlov neskol'kimi putyami. Nai- bolee populyarnoj strategiej yavlyaetsya vypolnenie narashchivaemogo kopirova- niya, kogda vsya sistema kopiruetsya s nekotoroj nachal'noj daty (i inogda povtorno s regulyarnymi intervalami, no ne chasto). Pri korotkih interva- lah (obychno ezhednevno) fajlovaya sistema proveryaetsya na nalichie fajlov, kotorye byli modificirovany ili dobavleny za poslednie 24 chasa. Takie fajly kopiruyutsya, poetomu kopiya v celom podderzhivaetsya takoj, kakoj yav- lyaetsya sistema v nastoyashchee vremya. Gde razmeshchat' kopiruemye fajly - eto eshche odin interesnyj vopros, zavisyashchij ot konfiguracii vashej sistemy, kolichestva dostupnogo prost- ranstva i vazhnosti dannyh. Davajte rassmotrim nekotorye vozmozhnosti. Avtonomnaya mikro- ili supermikrosistema mozhet imet' vsego odin zhestkij disk. Esli disk soderzhit dostatochno mesta dlya razmeshcheniya drugo- go razdela, vy mozhete kopirovat' v etot razdel. Razdel mozhet takzhe ispol'zovat'sya kak nestrukturirovannoe ustrojstvo v otlichie ot fajlovoj sistemy i rassmatrivat'sya kak magnitnaya lenta ili gibkij disk. Sredi drugih vozmozhnostej hraneniya informacii mogut byt' vtoroj zhestkij disk, kassetnaya lenta ili ustrojstvo kopirovaniya na lentu. Esli vam nedostup- na ni odna iz etih vozmozhnostej, vy vsegda mozhete kopirovat' na gibkie diski. |to utomitel'naya ruchnaya rabota, no ona mozhet byt' vypolnena pri pomoshchi komand tar ili cpio. Esli vy takzhe imeete dostup k drugoj, bol'shej sisteme, takoj kak obshchij glavnyj komp'yuter, vy mozhete kopirovat' fajly, posylaya ih v etu sistemu posredstvom komandy uucp. Dazhe esli vy imeete dostatochno mesta v vashej sobstvennoj sisteme dlya sohraneniya vashih kopij, u vas mozhet byt' ochen' sil'noe zhelanie poslat' kopii vseh vazhnyh fajlov v glavnuyu mashinu, potomu chto eto dast vam vynosnuyu kopiyu za predelami vashego mesta raspolozheniya. Pozhary, navodneniya i dr yutsya. Nam neobhodim mehanizm, kotoryj obychno zapuskaetsya avtomaticheski (po komande cron ili s pomoshch'yu procedury at, opisannoj v glave 5). Sna- chala on obnaruzhivaet vse fajly, kotorye byli izmeneny v poslednie 24 chasa (nadeemsya, chto vy uzhe imeete pervonachal'nuyu kopiyu vsego). On nachi- naet iskat' fajly iz ukazannyh katalogov i kopirovat' podhodyashchie fajly v ukazannye katalogi-priemniki. On kopiruet fajly, ispol'zuya utility, kotorye nailuchshim obrazom sootvetstvuyut ispol'zuemoj vami konfiguracii. Vse eti veshchi vypolnyayutsya nashim komandnym fajlom autobkp. CHto delaet autobkp? Vy perechislyaete marshruty i autobkp nahodit fajly po etim marshrutam i kopiruet ih v to mesto, kotoroe vy ukazali. Vy mozhete ukazyvat' imena fajlov po obrazcam, takim kak *.c, *.h ili kakim-libo eshche. S pomoshch'yu autobkp vy mozhete kopirovat' vazhnye fajly bez kopirovaniya vseh fajlov. Inogda eto udobno - propuskat' fajly pri kopirovanii. Tipichnye fajly, kotorye vy, vozmozhno, ne hotite kopirovat', - eto ochen' bol'shie fajly (ne yavlyayushchiesya vazhnymi, kak fajl core i fajly dannyh), vremennye fajly (kak *.o, kotorye vnov' sozdayutsya pri kazhdoj novoj kompilyacii) i ispol- nyaemye fajly, esli u vas est' ishodnye programmy na yazyke Si i vy mozhe- te ih skompilirovat' dlya polucheniya novyh ispolnyaemyh fajlov. Propuskaya eti fajly, vy mozhete umen'shit' razmer vashih kopij na megabajty. Po umolchaniyu kopirovanie proizvoditsya komandoj uucp, kotoraya pred- polagaet, chto u vas podchinennaya sistema po otnosheniyu k glavnoj mashine i kopiruet vashi fajly v bol'shuyu sistemu. Esli vy hotite kopirovat' vashi fajly v drugoe mesto zhestkogo diska ili na drugoj zhestkij disk, ispol'- zujte klyuch -c dlya kopirovaniya komandoj cp vmesto ispol'zovaniya komandy uucp. Vo vremya processa kopirovaniya na standartnyj vyvod vyvodyatsya soob- shcheniya o sostoyanii del. |to pozvolyaet legko sobrat' vse soobshcheniya putem pereadresacii stdout na vremya kopirovaniya. Esli vy vypolnyaete autobkp vruchnuyu, soobshcheniya vyvodyatsya na ekran. Pervoe soobshchenie - eto zagolo- vok, kotoryj pechataet den', datu i vremya. |to vyglyadit tak: -------------------------- | BACKUP DATE Fri 05/23/86 17:33:35 | Vtoroe soobshchenie opredelyaet sistemu-istochnik i sistemu-priemnik. Ono poyavlyaetsya nizhe. V nashem primere sistema-istochnik - russ, a siste- ma-priemnik - vax. -------------------------- | Source system: russ | Destination system: vax Pri kazhdom vhode v sistemu-istochnik vydaetsya sleduyushchee soobshchenie: ----------------------------- | Finding files in: src_dir | gde vyrazhenie src_dir - eto mesto, otkuda fajly budut peredany v cikl kopirovaniya. Obratite vnimanie, chto pervoe imya dolzhno byt' imenem kataloga, potomu chto autobkp nachinaet imenno s etogo mesta poisk faj- lov. Esli pervoe imya ne yavlyaetsya katalogom, programma pechataet soobshche- nie ob oshibke i prodolzhaet rabotu so sleduyushchim naborom istochnik/priem- nik dlya kopirovaniya. Dlya kazhdogo najdennogo fajla pechataetsya sleduyushchee soobshchenie posle zaversheniya kopirovaniya: ------------------------------ | Transferred file to dest_dir | kotoroe ukazyvaet, chto fajl file byl skopirovan v katalog-priemnik s imenem dest_dir. Fajl so spiskom marshrutov CHtoby sdelat' interfejs nastol'ko gibkim, naskol'ko eto vozmozhno, autobkp chitaet standartnyj vvod. Perenaznachaya stdin, vy mozhete podder- zhivat' raznye spiski fajlov, kotorye neobhodimo kopirovat' i pereklyu- chat' ih v komandnoj stroke. Vy mozhete imet' odin spisok marshrutov dlya sistemnyh fajlov, drugoj dlya ishodnyh fajlov, tretij dlya lichnyh fajlov, chetvertyj dlya fajlov s gotovym produktom i tak dalee. Dlya kazhdoj iz etih grupp fajlov sozdaetsya spisok marshrutov i peredaetsya v kachestve vhoda dlya autobkp. Vhodnye dannye chitayutsya kak tri polya: FROM, TO i TYPE. Pole FROM - eto katalog-istochnik. Poisk fajlov nachinaetsya s etogo mesta. Napomnim, chto autobkp prohodit vniz do konca dereva fajlov, na- chinaya s ukazannogo kataloga. Pole TO - eto katalog-priemnik, kuda vse fajly, najdennye dlya dan- noj zapisi v fajle so spiskom marshrutov, pomeshchayutsya na mashine-priemnike ili v razdele-priemnike. Pole TYPE - eto opisatel'-shablon, kotoryj soobshchaet autobkp, kakie fajly iskat'. Ego znachenie mozhet byt' *, *.c, *src*, i tak dalee. Kak my uvidim pozzhe, etot opisatel' peredaetsya komande find Unix, kotoraya fakticheski i vypolnyaet poisk fajlov. Vy mozhete ispol'zovat' lyuboe vyra- zhenie v pole TYPE, esli ono sootvetstvuet sintaksisu find. Itak: vse fajly, kotorye byli izmeneny v poslednie 24 chasa, obna- ruzhivayutsya v spiske FROM s pomoshch'yu opisatelya TYPE i kopiruyutsya v ob- last' TO. Nizhe privoditsya tipichnyj fajl so spiskom marshrutov. On ukazyvaet neskol'ko katalogov, v kotoryh proizvoditsya poisk fajlov. Obratite vni- manie, chto eti katalogi nahodyatsya pod registracionnym katalogom: esli vy hotite skopirovat' VESX registracionnyj katalog polnost'yu, vy mozhete ukazat' etot katalog, no zdes' my hotim vybrat' tol'ko ukazannye kata- logi. /usr/russ/bin /pack1/russ/.bkp/bin * /usr/russ/doc /pack1/russ/.bkp/doc * /usr/russ/src /pack1/russ/.bkp/src *.c /usr/product1 /pack1/russ/.bkp/product1 *.[ch] |ti stroki kopiruyut katalogi bin, doc i src na lokal'noj mashine avtora. V sluchae kataloga src my ukazali, chto kopirovat' nuzhno tol'ko ishodnye fajly na yazyke Si. Budet takzhe skopirovana nekotoraya poleznaya informaciya iz drugogo mesta etoj zhe sistemy. Budut skopirovany tol'ko fajly s rasshireniem *.c i *.h. Mesto naznacheniya (pryamo ukazannoe v komandnom fajle avtomatichesko- go kopirovaniya) - drugaya sistema UNIX. Mesto naznacheniya - nekotoryj smontirovannyj disk, registracionnyj katalog, podkatalog kopij (bkp). Ispol'zovanie cron Teper', kogda procedura autobkp znaet, chto iskat', davajte skazhem ej, kogda iskat'. Cron, vechnyj rezidentnyj hranitel' vremeni, mozhet legko vypolnit' etu rabotu. Vhodnye dannye dlya cron obychno ustanavliva- yutsya sistemnym administratorom (ili kem-libo, kto imeet prava zapisi v /usr/lib/crontab), tak chto vy dolzhny poprosit' administratora ustano- vit' dlya vas vhod v fajl dannyh cron. Dlya polucheniya dopolnitel'noj in- formacii o vhodnyh dannyh cron, prochtite cron(1M) v Rukovodstve admi- nistratora. Korotko govorya, polyami v fajle /usr/lib/crontab yavlyayutsya minuta, chas, den' mesyaca, mesyac i den' nedeli. Ispol'zuya *, my mozhem ustanovit' prinuditel'no mnogie iz etih polej vo vse vozmozhnye znache- niya. Vhodnye dannye dlya cron, kopiruyushchie moj registracionnyj katalog v 4.00 utra kazhdyj den' kazhdoj nedeli kazhdogo mesyaca goda, vyglyadyat tak: 0 4 * * * /usr/russ/bin/autobkp.cron Obratite vnimanie, chto vhod v cron vyzyvaet upravlyayushchuyu proceduru vmesto togo, chtoby neposredstvenno ispol'zovat' autobkp. Imeetsya neskol'ko vazhnyh prichin, chtoby napisat' proceduru na baze utility autobkp. Vo-pervyh, cron ne pechataet diagnosticheskuyu informaciyu na vash terminal, poetomu esli chto-nibud' idet ne tak, vy nikogda ob etom ne uznaete. Vo-vtoryh, proshche podderzhivat' usechennuyu versiyu autobkp, a zvu- kovye preduprezhdeniya dobavlyat' v upravlyayushchuyu proceduru. Vy mozhete sde- lat' sobstvennye modifikacii upravlyayushchej programmy i ne bespokoit'sya ob otsutstvii soobshchenij ot samoj utility. Upravlyayushchuyu programmu mozhno nastol'ko uslozhnit', naskol'ko vy zhelaete. Predstavlennaya zdes' vpolne rabotosposobna, no legko mozhet byt' dopolnena. # Cron-driven autobkp driver echo "backed up: `date`" > /dev/tty00 /usr/bin/autobkp < /usr/russ/bin/autobkpath >> /usr/russ/bin/autobkp.log |tot drajver vydaet soobshchenie na terminal, zapuskaet autobkp, ispol'zuet dlya vvoda fajl so spiskom marshrutov v kataloge bin i pomeshcha- et vse vyvodnye soobshcheniya v fajl protokola. Otmetim, chto imya terminala dano kak absolyutnoe (tty00). |to pravil'no tol'ko v tom sluchae, kogda v vashej sisteme imeetsya takoj terminal. Ispol'zovanie etogo imeni termi- nala pozvolyaet soobshcheniyu poyavit'sya na ekrane dazhe esli nikto na nem ne zaregistrirovan. |to horosho, potomu chto pervoe, chto vy smozhete uvidet' utrom na vashem ekrane - eto soobshchenie. Esli u vas net ukazannogo termi- nala, vy mozhete sdelat' chto-to drugoe, naprimer, peredachu samomu sebe pochtovogo soobshcheniya. Primery 1. $ autobkp Zapuskaet programmu bez peredachi ej fajla so spiskom marshrutov i bez fajla protokola. Poskol'ku polya FROM, TO, TYPE ishchutsya v standartnom vvode, vvedite ih vruchnuyu. Kogda vy nazhmete vozvrat karetki, autobkp vypolnit ukazannye dejstviya, napechataet informaciyu na ekran terminala i budet ozhidat' dal'nejshego vvoda. Dlya zaversheniya vypolneniya komandnogo fajla vvedite ^d (v rezul'tate operator read vernetsya s nenulevym sta- tusom). 2. $ autobkp < pathlist Poluchaet vse vhodnye dannye iz fajla so spiskom marshrutov, no pe- chataet vsyu protokol'nuyu informaciyu na ekran terminala. Autobkp zaversha- etsya, kogda prochitaet vse dannye v fajle pathlist. 3. $ autobkp >> logfile Kak i v pervom sluchae, spiski marshrutov dolzhny byt' vvedeny s kla- viatury. Vse vyhodnye dannye vyvodyatsya v fajl protokola, a ne na ekran. Dlya zaversheniya autobkp vvedite ^d. 4. $ autobkp -c < pathlist >> logfile Kopiruet fajly iz odnoj oblasti zhestkogo diska v druguyu (oprede- lennuyu katalogom-priemnikom v fajle pathlist). Beret vse vhodnye dannye iz fajla pathlist i vyvodit vse vyhodnye dannye v fajl logfile. Poyasneniya Stroki 4-8 vypolnyayut proverku na nalichie oshibok. Autobkp mozhet byt' vyzvan libo bez ukazaniya opcij, libo s odnoj opciej (-c, pri ispol'zovanii cp). Vspomnite, chto perenaznachenie vvoda-vyvoda NE prini- maetsya vo vnimanie pri rassmotrenii argumentov, potomu chto komandnyj processor interpretiruet simvoly perenaznacheniya i to, chto sleduet za nimi, do vyzova komandy. Takim obrazom, esli kolichestvo pozicionnyh pa- rametrov bol'she odnogo (#1 -gt 1), poluchaem oshibochnoe uslovie. Zatem vydaetsya soobshchenie ob oshibke i sintaksicheskaya podskazka i programma za- vershaetsya. V strokah 10-13 proveryaetsya ispol'zovanie klyucha -c. Obratite vni- manie, chto my ne proveryaem, raven li parametr $# edinice i ne pytaemsya vydelit' pervyj simvol, chtoby posmotret', raven li on "-". |to potomu, chto takaya proverka privedet k oshibke, esli ne ukazan nikakoj klyuch (chto yavlyaetsya vernym sintaksisom, kak ukazyvalos' ranee). Esli my skazali if [ $1 = -c ] i ne ukazali klyuchej, to komanda proverki ne srabotaet i budet vy- dano soobshchenie o tom, chto "no argument in the statement" ("v operatore net argumentov"). No esli my vypolnim ekranirovanie, naprimer, tak: if [ "$1" = "-c" ] to kavychki dopuskayut nulevoe znachenie argumenta, tak chto proverka pravil'no ocenit nedostayushchee znachenie $1 kak "raven li nul' -c?" |to dast rezul'tat "lozh'", poetomu vse horosho. Poputno davajte vnimatel'no rassmotrim rabotu komandy proverki. Vy mozhete vypolnit' proverku znacheniya dvumya sposobami. Pervyj - sravnenie strok, a vtoroj - chislovoe sravnenie. Peremennye komandnogo processora VSEGDA hranyatsya v vide strok. Vy mozhete, tem ne menee, zastavit' siste- mu rassmatrivat' eti posledovatel'nosti kak chisla i interpretirovat' ih znacheniya kak chislovye, podobno operatoru number = val(STRING$) yazyka Bejsik. Vy mozhete skazat' sisteme, chtoby ona izmenila svoj sposob rassmotreniya simvol'nyh strok putem izmeneniya sintaksisa operacii srav- neniya. Dlya simvol'nyh strok sravnenie vyglyadit tak: str1 = str2 a chislovoe sravnenie vyglyadit tak: num1 -eq num2 -lt -gt Sver'te eto s rukovodstvom. Esli vy popytaetes' smeshat' simvol'noe sravnenie s chislovym, sravnenie ne budet rabotat'. U menya zabralo mnogo mesyacev programmirovanie na komandnom processore, poka nakonec ya zame- til eto neznachitel'noe razlichie. Esli ne rassmatrivat' podrobno chto-li- bo podobnoe, to takie tehnicheskie oshibki kazhutsya neulovimymi, no mozhno najti ob®yasneniya, pochemu chto-nibud' rabotaet ne tak. Vernemsya k vozmozhnosti proverki koda. Esli byl peredan klyuch -c, peremennaya COPY ustanavlivaetsya, chto znachit "Da, my sobiraemsya kopiro- vat' komandoj cp, a ne ispol'zovat' uucp". Esli klyuch -c ne ispol'zu- etsya, peremennaya COPY ne ustanavlivaetsya. V strokah 15-16 pechataetsya zagolovochnoe soobshchenie o tom, chto budet vypolnyat'sya kopirovanie. Obratite vnimanie, chto my spryatali komandu date sistemy UNIX vnutri operatora echo, sokrativ chislo perehvachennyh dannyh, kotorye my dolzhny imet', chtoby poluchit' datu neposredstvenno. Prosledite za kavychkami v etom operatore. Vneshnie kavychki yavlyayutsya dvojnymi dlya togo, chtoby upakovat' ves' argument dlya operatora echo. Znaki udareniya (`) obramlyayut komandu date tak, chto ona yavlyaetsya "vypol- nyaemoj vnutri" i ee vyhodnoe soobshchenie perehvatyvaetsya dlya nashih nuzhd. Odinarnye kavychki vnutri komandy date ispol'zuyutsya dlya peredachi forma- ta, kotoryj izmenyaet vneshnij vid znachenij tak, chtoby zagolovok vyglyadel bolee krasivo. V konce operatora echo kavychki sleduyut odna za drugoj. |to ne predstavlyaet problemy, poskol'ku vo vlozhennosti net nikakoj dvusmyslennosti. Vy dolzhny pomnit', chto nuzhno sledit' za situaciej, kogda vy i komandnyj processor mozhete rashodit'sya vo mneniyah, t. e., kogda vy dolzhny obrashchat'sya k zapisi vida "\". V stroke 18 peremennoj SYSTEM prisvaivaetsya imya udalennoj sistemy, v kotoruyu vy budete kopirovat' komandoj uucp. Zdes' ona ravna nulyu, chto pozzhe vyzovet vypolnenie drugoj operacii dlya obespecheniya funkcionirova- niya po umolchaniyu. Esli zhe vy hotite vsegda kopirovat' na vpolne oprede- lennuyu sistemu, modificirujte etu stroku, chtoby naznachit' imya etoj sistemy. Esli ostavit' stroku 18 tak, chtoby ona naznachala nol', stroka 14 pojmaet eto znachenie i prisvoit peremennoj SYSTEM imya vashej tekushchej sistemy. Drugimi slovami, esli vy ostavite stroku 18 tak, kak ona est', i vyzovete autobkp bez klyucha -c, vy budete kopirovat' komandoj uucp sa- mi na sebya, chto vpolne dopustimo. Odnako, iz soobrazhenij effektivnosti vy, veroyatno hoteli by vypolnit' autobkp -c dlya polucheniya lokal'noj ko- pii. Stroka 19 illyustriruet koncepciyu, chasto ispol'zuemuyu pri program- mirovanii na komandnom yazyke. Davajte vkratce rassmotrim ee. Pervyj simvol - eto ":". V dannom sluchae my interesuemsya, chto pro- ishodit pri proverke, a ne vozvrashchaemym znacheniem, poetomu my zastavili holostuyu komandu ("ne delat' nichego") poluchat' rezul'tat kak argument. Tekst, sleduyushchij za dvoetochiem, interpretiruetsya tak: "Esli peremennaya SYSTEM ne ustanovlena ili ustanovlena v nol', prisvoit' ej znachenie, kotoroe sleduet za nej". V dannom sluchae znachenie - eto vyhod komandy uuname -l. |ta komanda ustanavlivaet, chto sistema-priemnik yavlyaetsya toj zhe sistemoj, chto i ishodnaya, esli sistema-priemnik ne byla pryamo ukaza- na ranee. My ispol'zuem uuname -l, a ne standartnoe vyrazhenie uname -n po prichine sovmestimosti. Uname -n pravil'no poluchaet imya uzla iz struktu- ry uts yadra operacionnoj sistemy, no ne vse sistemy XENIX ispol'zuyut element uzla v vide struktury uts yadra sistemy. Vmesto etogo oni posy- layut imya v fajl /etc/systemid, kotoryj sootvetstvuet mikroseti (micnet), razrabotannoj dlya XENIX firmoj Microsoft. Komanda uuname -l - eto lokal'noe imya (ili ishodnaya mashina) dlya sistemy uucp. |ta komanda vozvrashchaet pravil'noe znachenie i v UNIX, i v XENIX. Imeet smysl ispol'- zovat' to, chto vsegda rabotaet! Stroka 21 pechataet imya ishodnoj sistemy i sistemy-priemnika. |to soobshchenie dobavlyaet informaciyu v zapis' o tom, chto sobiraetsya delat' autobkp, poetomu vy mozhete videt' po vyhodnym dannym, kak vy ustanovili dannyj komandnyj fajl. Snova my spryatali komandu uuname vnutri operato- ra echo. U nas net neobhodimosti sohranyat' imya ishodnoj sistemy, poskol'ku ono nam vsegda dostupno pri pomoshchi komandy uuname. Poskol'ku my vsego dva raza ispol'zuem eto imya, to reshili ne ispol'zovat' dlya ne- go kakuyu-libo peremennuyu. Stroki 23-41 - eto polnyj cikl, kotoryj upravlyaet avtomaticheskim kopirovaniem. Upravlyayushchim ciklom yavlyaetsya operator while, kotoryj chita- et znacheniya iz standartnogo vvoda. Zamet'te, chto vy mozhete schitat' neskol'ko znachenij v operatore read. |to udobno, esli vy hotite chitat' bolee odnogo znacheniya, no ne dolzhny vydelyat' kazhduyu porciyu vhodnyh dan- nyh dlya togo, chtoby opredelit', yavlyaetsya eto pervym, vtorym ili tret'im elementom dannyh. My chitaem ih vse srazu i oni prisvaivayutsya ukazannym peremennym. Poskol'ku vypolnyaetsya chtenie standartnogo vvoda, my mozhem perenapravit' stdin pri vyzove autobkp i operator read nikogda ne uzna- et, chem oni otlichayutsya. Esli my ne perenaznachaem vhodnye dannye, my dolzhny vvodit' ih s klaviatury. Cikl zavershaetsya pri chtenii konca fajla - v dannom sluchae konec fajla so spiskom marshrutov ili simvola control-d (^d) s klaviatury. Poetomu upravlyayushchij cikl rabotaet tak: "poka eshche est' dannye dlya chteniya, chitat' ih, obrabatyvat', zatem chitat' sleduyushchie." Stroki 25-28 proveryayut, yavlyaetsya li katalog-istochnik dejstvitel'no katalogom. Esli net, vydaetsya soobshchenie ob oshibke i operator continue privodit k sleduyushchej iteracii cikla while. V stroke 30 proizvoditsya smena kataloga na katalog-istochnik. Vot pochemu vyhodnye dannye komandy find yavlyayutsya otnositel'nymi k tochke (.). Esli by my ne vypolnili komandu cd, to polnoe imya stalo by abso- lyutnym, chto moglo by otrazit'sya na sisteme-priemnike. Togda marshrut, nachinayushchijsya s kataloga-priemnika, imel by vniz ot sebya lishnij absolyut- nyj put'. Stroka 31 pechataet katalog, v kotorom ishchutsya ishodnye fajly. Horo- sho imet' ih v fajle protokola, poskol'ku vam legche budet chitat' i sle- dit', gde v dannyj moment rabotaet autobkp. Stroki 33-40 vypolnyayut neposredstvenno kopirovanie fajlov. Zdes' ciklom yavlyaetsya cikl for, kotoryj chitaet imena fajlov iz vyhoda komandy find. Zamet'te, chto eto avtomaticheski ogranichivaet obshchee chislo fajlov, kotorye mozhet obrabatyvat' cikl. |tot fakt ranee byl ob®yasnen v etoj knige, no davajte rassmotrim ego eshche raz. Esli find vydaet spisok, sostoyashchij iz soten fajlov, to spisok slov operatora for perepolnyaetsya i narushaet rabotu vashego komandnogo processora (ili po krajnej mere ko- mandy find). Zdes' prinyato dopushchenie, chto vy ne hotite imet' tak mnogo fajlov v ishodnom kataloge. Vy mozhete izbezhat' etogo, razbivaya ishodnyj katalog na bolee melkie chasti i peresylaya ih v fajl pathlist. Esli vy hotite sozdat' dejstvitel'no horoshij cikl, izmenite ego, naprimer, tak: find . -type f -ctime 0 -name "$FILES" -print | while read FILE Blagodarya ispol'zovaniyu takogo cikla, chislo imen fajlov teper' mozhno izmenit' ot vhodnyh ogranichenij dlya komandnogo processora do raz- merov kanala sistemy (kotoryj ochen' bol'shoj, prakticheski neogranichen- nyj). Izmenenie etoj odnoj stroki ne okazyvaet vliyaniya na drugie chasti cikla. Davajte rassmotrim detal'no komandu find. Vo-pervyh, my ukazali ej poisk fajlov v tekushchem kataloge (.). |to delaet vse polnye imena ot- nositel'nymi po otnosheniyu k tochke. Zatem my skazali komande find najti vse fajly tipa f, chto oznachaet obychnye fajly, a ne katalogi ili fajly ustrojstv. My ne hotim kopirovat' takie fajly. Dal'she my govorim ej najti fajly, kotorye byli izmeneny. Pod "izmeneniem" my podrazumevaem dostup ili modifikaciyu. (Posmotrite v opisanii stat(2), kakie komandy izmenyayut dostup, izmenyayut i modificiruyut vremya. Govorya "delat' poisk dlya nahozhdeniya "ctime 0"", my imeem v vidu vse fajly, izmenennye za poslednie 24 chasa. Ob®yasneniya, kotorye dokumentaciya po find daet po po- vodu etih chisel, dovol'no neponyatny, poetomu otnesites' k nim s nedove- riem.) Zatem my govorim komande find "najti tol'ko te fajly, kotorye opredeleny putem sootvetstviya ih imen marshrutnym imenam, ukazannym v peremennoj $FILES, znachenie kotoroj my chitaem". V etom meste my mozhem otfil'trovat' fajly, kotorye nam ne nuzhny (kak ob®yasnyalos' predvari- tel'no) ili vybrat' fajly, kotorye nam nuzhny. V konce my govorim koman- de find "napechatat' imena vseh fajlov, kotorye sootvetstvuyut pere- chislennym kriteriyam". Zatem imena fajlov peredayutsya v cikl for. Drugimi slovami, vyhodnye dannye komandy find stanovyatsya argumentom dlya ohvaty- vayushchego cikla for. V strokah 35-38 operator case opredelyaet, kakogo roda kopirovanie my sobiraemsya delat', i zapuskaet komandy kopirovaniya. Esli peremennaya COPY ne ustanovlena, my kopiruem fajly komandoj uucp. Obratite vnima- nie, chto mestom naznacheniya yavlyaetsya SYSTEM. Esli my ostavili SYSTEM v nule v stroke 18, to SYSTEM - eto nasha sobstvennaya sistema i my kopiru- em komandoj uucp fajly k sebe. Esli COPY ustanovlena, to nezavisimo ot znacheniya SYSTEM my kopiruem (no ne komandoj uucp) fajly v drugoj kata- log tekushchej sistemy. |tot katalog mozhet byt' na tom zhe zhestkom di