neobhodimuyu rutinnuyu rabotu - ubiraet "musor". |ta programma pozvolyaet vam vybrat' tipy vremennyh fajlov, ko- torye dolzhny periodicheski udalyat'sya. Napravlyaya ih v "musornyj" katalog, can predostavlyaet vam vozmozhnost' prosmotret' vse, chto bylo udaleno, i vosstanovit' to, chto vy na samom dele hotite sohranit'. Programma dosflp dopuskaet primenenie simvolov-shablonov v imenah fajlov, ispol'zuemyh pri kopirovanii otobrannyh fajlov s disket formata MS-DOS v XENIX. |to uproshchaet operaciyu kopirovaniya i umen'shaet chislo na- zhatij na klavishi. 3.1.3. SREDSTVA KOPIROVANIYA Dalee predstavlyaetsya "rabochaya loshadka" - sredstva kopirovaniya. Autobkp ispol'zuet spisok marshrutnyh imen, chtoby opredelit', kakie chasti fajlovoj sistemy dolzhny byt' provereny. Zatem eta programma kopi- ruet iz vybrannyh oblastej te fajly, kotorye byli dobavleny ili izmene- ny v poslednie 24 chasa. Cpiobr predostavlyaet interaktivnoe dopolnenie k komande cpio sistemy UNIX. Ona pozvolyaet vam skopirovat' fajly s zhestkogo diska na gibkij i, esli neobhodimo, vosstanovit' ih s gibkogo diska na zhestkij. 3.1.4. SREDSTVA PROVERKI OPERACIJ KOPIROVANIYA Vypolnenie kopirovaniya ne izbavit vas ot volnenij, poka vy ne bu- dete znat', chto vy skopirovali vse, chto hoteli, i chto kopirovanie prosh- lo korrektno. Programma dsum ispol'zuet kontrol'nuyu summu dlya proverki togo, chto ishodnyj katalog i katalog-kopiya soderzhat odni i te zhe fajly. Programma log otobrazhaet registracionnyj fajl, chtoby pokazat', kakoe avtomaticheskoe kopirovanie vypolnyalos' v chetyre chasa utra, kogda vy (nadeemsya) spali. Pri sozdanii etih sredstv my prosmotrim nekotorye vazhnye komandy sistemy UNIX i obnaruzhim novye sposoby ih ispol'zovaniya. Kogda vy pro- rabotaete vsyu dannuyu glavu, vy budete znat', kak rabotat' "s mel'chajshi- mi chasticami" pri ispol'zovanii fajlovoj sistemy UNIX. Vy smozhete avto- matizirovat' inuyu bol'shuyu oblast' vashih komp'yuternyh budnej. Vy dolzhny sumet' sozdat' pol'zovatel'skie utility kopirovaniya i verifikacii, udovletvoryayushchie vashim nuzhdam. Vy smozhete perevesti vashu sistemu v rezhim raboty, obespechivayushchij ej samostoyatel'noe vyzhivanie. (My ostavlyaem fi- losofam opredelyat', dast li eto vashemu komp'yuteru primitivnuyu formu zhizni!) Mezhdu prochim, mnogie sredstva v dannoj glave pol'zuyutsya preimu- shchestvami rekursivnyh metodov obhoda dereva, kotorye my razrabotali v predydushchej glave. Vy mozhete prosmotret' tot material, esli u vas ime- yutsya zatrudneniya v ponimanii togo, chto predstavleno zdes'. 3.2. PERESYLKA FAJLOV 3.2.1. cptdir - kopirovanie dereva kataloga IMYA: cptdir cptdir Kopiruet derevo kataloga v drugoe mesto FUNKCIYA Kopiruet derevo fajlovoj sistemy, koren' kotorogo raspolozhen v ka- taloge, v drugoj katalog sistemy. Net ogranichenij na kakoj-libo speci- ficheskij katalog ili zhestkij disk. FORMAT cptdir [-s] katalog-istochnik katalog-priemnik PRIMER VYZOVA cptdir $HOME /bkp Kopiruet kazhdyj fajl iz $HOME v katalog /bkp. KOMANDNYJ FAJL cptdir 1 : 2 # &(#) cptdir v.1.0 Copy a directory tree Autor: Russ Sage 4 if [ $# -lt 2 -o $# -gt 3 ] 5 then echo "cptdir: argument error" >&2 6 echo "usage: cptdir [-s] srcdir desdir" >&2 7 echo " -s silent mode" >&2 8 exit 1 9 fi 11 if [ "$1" ="-s" ] 12 then OPT="-pd" 13 shift 14 else OPT="-pdv" 15 fi 17 SRC=$1 18 DEST=$2 19 umask 0 21 if [ -d $DEST ] 22 then echo "\"$DEST\" already exist. Remove it? (y/n): \c" 23 read CMD 24 if [ "$CMD" = "y" ] 25 then rm -rf $DEST 26 mkdir $DEST 27 fi 28 else mkdir $DEST 29 fi 31 if [ "`echo $DEST|cut -c1`" = "/" ] 32 then cd $SRC 33 find . -print | sort | cpio $OPT $DEST 34 else PWD=`pwd` 35 cd $SRC 36 find . -print | sort | cpio $OPT $PWD/$DEST 37 fi PEREMENNYE SREDY CMD Komanda, poluchennaya ot pol'zovatelya DEST Katalog-priemnik, v kotoryj nuzhno kopirovat' OPT Opcii, kotorye peredayutsya utilite cpio PWD Tekushchij rabochij katalog SRC Katalog-istochnik, iz kotorogo nuzhno kopirovat' Opisanie Zachem nam nuzhen cptdir? My uzhe otmechali neobhodimost' v dopolnitel'nyh komandah, kotorye rekursivno obhodyat drevovidnuyu strukturu fajlovoj sistemy UNIX. V ran- nih versiyah UNIX edinstvennaya komanda tar mogla upravlyat' dvizheniem po derevu. V bolee novyh versiyah sistemy imeetsya opciya -r v komande cp, kotoraya delaet cp rekursivnoj (eta vozmozhnost' realizovana tol'ko v poslednej versii System V) i komanda cpio. Poslednyaya yavlyaetsya mnogoce- levoj komandoj kopirovaniya, kotoraya mozhet imet' delo kak s potokovym formatom, tak i s formatom fajlovoj sistemy. Problema pri ispol'zovanii dazhe takih uluchshennyh standartnyh ko- mand sistemy UNIX sostoit v tom, chto vam neobhodimo ukazat' mnozhestvo detalej i ubedit'sya v tom, chto vy pravil'no ispol'zuete sintaksis. Oshibki mogut privesti k potere vremeni i dazhe huzhe togo, k neozhidannym pobochnym effektam. S nekotorymi iz etih effektov svyazany izmeneniya prav dostupa i vladel'ca, poryadok raspredeleniya indeksnyh deskriptorov faj- lov (inode), razmeshcheniya fajlov-priemnikov i rezul'tiruyushchie polnye ime- na. Ochen' mnogo neobhodimo zapomnit' i zanovo vyzyvat' kazhdyj raz pri kopirovanii. Poskol'ku takoe kopirovanie delaetsya ne chasto, tyazhelo za- pomnit' vse eti detali. My razreshaem etu problemu, avtomatiziruya detali processa i v to zhe vremya predostavlyaya pol'zovatelyu gibkost' i upravle- nie rezul'tatami. My sozdaem instrumenty dlya upravleniya fajlami, koto- rye yavlyayutsya horoshimi dopolnitel'nymi sredstvami k osnovnym komandam sistemy UNIX. CHto delaet cptdir? Procedura cptdir kopiruet katalog (i vse derevo pod nim, esli ono sushchestvuet) v drugoj katalog sistemy. Poskol'ku katalogi predusmatriva- yut logicheskij dostup i ne yavlyayutsya apparatno-zavisimymi (v otlichie ot imen ustrojstv), to vy mozhete legko kopirovat' fajly v drugoe mesto na tom zhe diske ili kopirovat' ih na drugoj disk polnost'yu bez special'no- go sintaksisa ili opcij. Vy mozhete ukazat', hotite li vy, chtoby na ekran vyvodilis' imena kopiruemyh fajlov. Esli vy ne hotite etogo, ispol'zujte opciyu -s ("silent" - molchalivyj). Po umolchaniyu ispol'zuetsya rezhim "verbose" (mnogoslovnyj), kotoryj otobrazhaet imena po mere kopirovaniya fajlov. Zamet'te, chto eto kopirovanie, a ne peremeshchenie fajlov. Nedostatok kopirovaniya v otlichie ot peremeshcheniya zaklyuchaetsya v tom, chto esli priem- nikom yavlyaetsya katalog na tom zhe diske, to vam trebuetsya dopolnitel'noe mesto na diske dlya razmeshcheniya vtorogo obraza. Vam takzhe neobhodimo imet' dostatochno opisatelej fajlov (inodes) dlya sohraneniya vseh fajlov. V protivnom sluchae vy mozhete lishit'sya shansa sbrosit' v "musornuyu korzi- nu" vashi rabochie fajly. V komandnoj stroke dopustimo ukazanie kataloga-istochnika i imya ka- taloga-priemnika. Edinstvennyj klyuch, dopustimyj v komandnoj stroke - eto "-s". Lyuboj drugoj klyuch privodit k zaversheniyu komandy, ne vyzyvaya nikakih razrushenij. Vy, konechno, mozhete dobavit' programmnyj kod s cel'yu proverki opcii i vydachi soobshcheniya o dopustimyh klyuchah, esli uka- zano nechto otlichnoe ot -s. Esli vy delaete eshche kakuyu-libo proverku na nalichie oshibok sverh togo, chto trebuetsya dlya predotvrashcheniya razrusheniya dannyh ili sistemy, to eto delo lichnogo vkusa. Minimizaciya proverok na nalichie oshibok daet bolee kompaktnye i bystrye scenarii, podhodyashchie dlya opytnyh pol'zovatelej. Esli ukazannyj katalog-priemnik ne sushchestvuet, to on sozdaetsya. Esli katalog-priemnik uzhe sushchestvuet, vydaetsya soobshchenie ob etom i vam zadaetsya vopros o tom, hotite li vy ochistit' ego. Esli vy otvetite "yes", katalog unichtozhaetsya i sozdaetsya snova pustym. Esli vy otvetite "no", katalog ostaetsya takim, kakoj est' i kopiruemye fajly prosto do- bavlyayutsya k uzhe sushchestvuyushchim v nalichii. Pri etom mozhet vozniknut' neko- toraya putanica, osobenno esli nekotorye fajly s takimi imenami uzhe su- shchestvuyut v kataloge-priemnike. V bol'shinstve sluchaev, odnako, u pol'zo- vatelej ne poyavlyaetsya zhelaniya dobavlyat' svoyu kopiyu v sushchestvuyushchij kata- log. Tem ne menee katalog-priemnik dolzhen byt' sozdan, poskol'ku neob- hodimo ego nalichie, chtoby komanda cpio rabotala pravil'no. Esli zhe ego net, cpio ne vypolnitsya i vydast soobshchenie ob oshibke. Procedura cptdir nachinaet kopirovanie putem prohozhdeniya po katalo- gu-istochniku i formirovaniya spiska fajlov, nahodyashchihsya v nem, rekursiv- no obhodya derevo sverhu vniz. V rezul'tate mozhet poluchit'sya, chto skopi- ruetsya bol'she, chem vy planirovali, poetomu vam neobhodimo znat' razmer fajlovoj struktury, kotoruyu vy hotite skopirovat'. Zatem fajly kopiru- yutsya v katalog-priemnik. Ishodnye fajly nikak ne modificiruyutsya i ne izmenyayutsya (za isklyucheniem togo, chto data poslednego dostupa mozhet byt' modificirovana). Kogda idet kopirovanie, na ekran vydaetsya soobshchenie ot cpio, koto- roe pokazyvaet polnyj marshrut k fajlam-priemnikam. |tot marshrut dolzhen sootvetstvovat' marshrutu, ukazannomu v komandnoj stroke, v protivnom sluchae chto-to ne tak. Primery 1. $ cd /mnt $ cptdir /bin . Perejti na drugoj disk (obychno smontirovannyj v kataloge /mnt) i kopirovat' vse fajly iz kataloga /bin v tekushchij katalog. Obratite vni- manie, chto rezul'tiruyushchimi fajlami budut /mnt/*, chto mozhet ne sovpadat' s vashim zhelaniem. 2. $ cd /bin $ cptdir . /mnt/bin To zhe, chto i v predydushchej komande, no obratite vnimanie, chto tochka izmenila svoyu poziciyu. Komanda ukazyvaet kopirovanie vseh fajlov teku- shchego kataloga v katalog /mnt/bin. Poluchayutsya fajly /mnt/bin/*, chto vyg- lyadit bolee rezonnym. 3. $ cptdir /bin /mnt To zhe, chto i v primere 1. 4. $ cptdir /bin /mnt/bin To zhe, chto i v primere 2. Poyasneniya V strokah 4-9 proizvoditsya proverka argumentov komandnoj stroki. Esli ukazano men'she dvuh argumentov, etogo nedostatochno. Kak minimum dolzhny byt' ukazany imena kataloga-istochnika i kataloga-priemnika. Bo- lee treh argumentov slishkom mnogo. Samoe bol'shee, tam dolzhny byt' opciya -s, katalog-istochnik i katalog-priemnik. V strokah 11-15 ustanavlivayutsya klyuchi komandy cpio. Po umolchaniyu eto pdv, chto oznachaet "pass" (peredacha) dlya kopirovaniya v formate faj- lovoj sistemy (v otlichie ot neobrabotannogo potoka dannyh), "directory" (katalog) dlya sozdaniya kataloga pri neobhodimosti i "verbose" (mno- goslovnyj) dlya vydachi imen fajlov po mere ih kopirovaniya. Esli pervym pozicionnym parametrom yavlyaetsya klyuch -s, kotoryj ukazyvaet zapusk cptdir v molchalivom rezhime, klyuchi komandy cpio ne soderzhat klyucha vydachi soobshchenij i, takim obrazom imena fajlov ne vydayutsya na ekran. Stroki 17,18 i 19 ustanavlivayut katalogi "otkuda" i "kuda" i usta- navlivayut peremennuyu umask v 0. Peremennaya umask opredelyaet podrazume- vaemye prava dostupa dlya vseh fajlov, sozdannyh nashim komandnym pro- cessorom. My izmenyaem umask dlya garantii togo, chto vse fajly kopiruyutsya v derevo-priemnik i ni odin iz nih ne budet zablokirovan iz-za otsutstviya prav chteniya ili zapisi. Pobochnym effektom yavlyaetsya to, chto vse katalogi imeyut prava dostupa vida rwxrwxrwx, a vse fajly - vida rw-rw-rw-, chto mozhet potrebovat' izmenenij dlya obespecheniya vashej bezo- pasnosti. Izmenenie umask imeet dejstvie tol'ko na vremya raboty proce- dury. Kogda cptdir zavershaetsya, umask vashego vyzyvayushchego komandnogo processora ostaetsya neizmennym. Stroki 21-29 vypolnyayut proverku kataloga-priemnika. Esli on uzhe sushchestvuet, vas zaprashivayut, nuzhno li ego udalit' i zanovo sozdat'. Esli on ne sushchestvuet, on sozdaetsya dlya raboty cpio. Stroki 31-36 vypolnyayut neposredstvenno kopirovanie. Prezhde chem ob®yasnit', chto zdes' delaetsya, davajte sperva posmotrim, kak rabotaet cpio. Poskol'ku operator find generiruet spisok fajlov, nam neobhodimo predstavlyat', kak ego vyhod mozhet vliyat' na vypolnenie cpio. Esli my ukazali "find . -print", to polnye imena fajlov budut imet' tochku vperedi, naprimer: ./dir ./dir/file1 ./dir/file2 |to otnositel'naya notaciya, kotoraya ochen' polezna, kogda vy ne ho- tite, chtoby vashi fajly peredavalis' soglasno absolyutnym marshrutnym ime- nam, no hotim sohranit' ih vzaimosvyaz' drug s drugom. Esli na nih ssy- lat'sya otnositel'no tochki, to mesto, kuda oni budut pomeshcheny, mozhet byt', gde ugodno. Odnako, esli my skazhem "find /dir -print", spisok bu- det vyglyadet' tak: /dir /dir/file1 /dir/file2 V oboih sluchayah my ssylaemsya na nash tekushchij katalog, no primenenie zapisi vida /dir zastavlyaet polnoe imya nachinat'sya s "/" i ne dopuskaet ispol'zovanie otnositel'noj notacii. Peredacha takoj zhe informacii ko- mande cpio mozhet radikal'no izmenit' mesto razmeshcheniya vashih fajlov. Naprimer, esli ya skazal "cd /src; find . -print | cpio -pdv /dest", re- zul'tiruyushchij spisok budet takim: /dest/./dir /dest/./dir/file1 /dest/./dir/file2 gde na pervom meste stoit, veroyatno, to, chto vy hoteli. Odnako, esli ya skazal "find /src -print | cpio -pdv /dest", rezul'tiruyushchie marshrutnye imena budut takimi: /dest/src/dir /dest/src/dir/file1 /dest/src/dir/file2 chto ne ochen' horosho, poskol'ku eto sozdaet uroven' kataloga, v ko- torom net neobhodimosti. Zamet'te, chto imya kataloga "src" bylo perehva- cheno pri raspechatke. |to proizoshlo potomu, chto ego vydal find, a cpio schitaet, chto src bylo chast'yu imeni kataloga-priemnika. Povsemestnoe ispol'zovanie otnositel'noj notacii mozhet privesti nas k potere uzhe imeyushchejsya informacii. Naprimer, esli by ya skazal "cd /nowhere; find /src ....", katalog-priemnik poluchil by nevernoe imya. My dolzhny umet' ispol'zovat' etot tip notacii i ne popadat' v lovushki sin- taksisa. |to i est' to, chto delaet cptdir. V stroke 31 proizvoditsya proverka na to, yavlyaetsya li pervyj simvol v marshrutnom imeni celevogo kataloga simvolom "kosaya cherta" ("/"). Esli da, to my tochno znaem, chto imya kataloga-priemnika vyrazheno v vide abso- lyutnogo marshrutnogo imeni, poetomu my mozhem smenit' katalogi bez poteri informacii o nashem tekushchem kataloge. V strokah 32-33 my perehodim v ka- talog-istochnik i kopiruem fajly. No esli pervyj simvol kataloga-priemnika NE yavlyaetsya naklonnoj chertoj, ispol'zuemaya notaciya yavlyaetsya otnositel'noj. |to znachit, chto esli my smenim katalog, my poteryaem informaciyu o tom, gde my nahodi- lis', kogda byl zapushchen komandnyj fajl. CHtoby izbezhat' etogo, my polu- chaem v stroke 34 polnoe imya tekushchego kataloga putem perehvata vyvoda komandy pwd i prisvoeniya etogo znacheniya peremennoj takim obrazom, chto pozzhe my smozhem ee vosstanovit'. Zatem my perehodim v katalog-istochnik i kopiruem fajly, ispol'zuya prefiks absolyutnogo marshrutnogo imeni ot komandy pwd i otnositel'nyj suffiks togo mesta, gde my nahodimsya. Prichinoj togo, chto my tak postupaem, yavlyaetsya ispol'zovanie ot- nositel'noj (tochechnoj) notacii v operatore find. Kak mozhno bylo videt' v predydushchem opisanii, otkaz ot ispol'zovaniya tochechnoj notacii mozhet privesti k putanice v marshrutnyh imenah kataloga-priemnika. Dlya togo chtoby vsegda ispol'zovat' tochku v operatore find, nam neobhodimo ube- dit'sya, kuda my sobiraemsya peresylat' fajly. Eshche raz napomnim, chto ko- manda cd dejstvuet tol'ko dlya dannogo komandnogo processora "nizkogo" urovnya, poetomu ona ne vliyaet na tot komandnyj processor, kotoryj za- pustil komandnyj fajl. Voobshche, komandnyj fajl dolzhen ostavit' pol'zova- telej v teh zhe usloviyah, v kotoryh oni nahodilis' pered ego zapuskom, za isklyucheniem vypolneniya neobhodimyh rabot, pri kotoryh ne proizvo- ditsya smena tekushchego kataloga. Kogda cptdir zavershaetsya, upravlenie vozvrashchaetsya vyzyvayushchemu ko- mandnomu processoru, kotoryj po-prezhnemu vedet svoj sobstvennyj tekushchij katalog. Napomnim, chto vsegda, kogda vy perehodite na bolee nizkij uro- ven' komandnogo processora, eksportiruemye peremennye peredayutsya vniz, no NICHEGO ne peredaetsya naverh. VOZMOZHNYE MODIFIKACII KOMANDNOGO FAJLA V nyneshnej realizacii nikakie dopolnitel'nye klyuchi ne dopuskaetsya peredacha nikakih dopolnitel'nyh klyuchej komande cpio. CHto sluchitsya, esli vy zahoteli zamenit' kopirovanie fajlov, gde eto vozmozhno, sozdaniem ssylok (klyuch -l) ili ne menyat' vremya poslednego dostupa k ishodnomu fajlu pri ego kopirovanii (opciya -a)? Takie vozmozhnosti byli by nedo- pustimy. Mozhno legko dobavit' vozmozhnost' peredachi dopolnitel'nyh argumen- tov. Oni dolzhny byt' opoznany kak argumenty, sohraneny i zatem vybrany iz komandnoj stroki. Dlya etogo potrebuetsya takoj cikl: for ARG in $* do if [ "`echo $ARG|cut -c1`" = "-" ] then CPIOARG="CPIOARG $ARG" shift fi done Zatem peremennaya CPIOARG mozhet byt' peredana komande cpio. Eshche odna oblast', gde mogut byt' proizvedeny izmeneniya - eto up- ravlenie pravami dostupa k fajlam. Kak ob®yasnyalos' ranee, znachenie 0 dlya umask delaet vse prava takimi, chto oni razreshayut zapis'. Esli eto vam ne podhodit, operator find mozhet byt' izmenen tak, chto budet proiz- vodit'sya vyborochnoe kopirovanie (i izmenenie prav dostupa). Predpolozhim, naprimer, vy imeete katalog s dvumya fajlami. Esli vy- polnilsya operator "find /dir -print", spisok fajlov budet takim: /dir /dir/file1 /dir/file2 Obratite vnimanie, chto imya kataloga poyavlyaetsya pervym. Problema voznikaet, esli imya kataloga ne prinadlezhit vam ili vy ne imeete prava zapisi. Proishodit sleduyushchee: imya kataloga kopiruetsya pervym, ustanav- livayutsya prava dostupa (blokiruya vas) i posle etogo file1 i file2 ne mogut byt' skopirovany v katalog dir. V cptdir my primenyaem reshenie iz- menit' umask tak, chtoby vy vsegda imeli prava zapisi. |to svoego roda kludzh, no on rabotaet. Drugoj put' - eto izmenit' operator find. Vypolnenie operatora "find /dir -depth -print" sgeneriruet takoj spisok fajlov: /dir/file1 /dir/file2 /dir Obratite vnimanie, chto imya kataloga stoit POSLEDNIM! |to pravil'- no. Klyuch -depth perevorachivaet spisok fajlov tak, chto imya kataloga pe- chataetsya poslednim. CHto eto daet? Fokus v tom, chto snachala kopiruyutsya file1 i file2, a zatem ustanavlivayutsya prava dostupa dannogo kataloga. Vy mozhete za- pisat' fajly v katalog, dlya kotorogo vy ne imeete prava zapisi. Blago- darya tomu, chto fajly kopiruyutsya pervymi, vy mozhete ne bespokoit'sya o tom, kakogo roda prava dostupa imeet etot katalog. K sozhaleniyu, klyuch -depth komandy find podderzhivaetsya ne vsemi versiyami sistemy UNIX. 3.2.2. can - udalenie fajlov v "musornuyu korzinu" ---------------------------------------------------------------------- Imya: can ______________________________________________________________________ can Upravlenie "musornoj korzinoj" fajlov NAZNACHENIE Peremeshchaet fajly v "musornuyu korzinu", simuliruya ih udalenie. |to dopuskaet vosstanovlenie fajlov posle ih kazhushchegosya udaleniya. Format vyzova can [-l] [-r] file [file ...] Primer vyzova can junk Posylaet fajl junk v "musornuyu korzinu" Ishodnyj kod dlya can 1 : 2 # @(#) can v1.0 Maintain file trash can Author: Russ Sage 4 CAN=$HOME/.trashcan 6 if [ ! -d $CAN ] 7 then mkdir $CAN 8 fi 10 if [ "`echo \"$1\"|cut -c1`" = "-" ] 11 then case $1 in 12 -l) echo "$CAN:" 13 ls -al $CAN 14 exit 0;; 15 -r) echo "removing $CAN/*:" 16 rm -rf $CAN/* 17 exit 0;; 18 -z|-?) echo "usage can [-l] [-r] file [file ...]" >&2 19 exit 0;; 20 esac 21 fi 23 mv $@ $CAN Peremennye sredy vypolneniya CAN Polozhenie kataloga "musornoj korziny" HOME Polozhenie vashego registracionnogo kataloga Opisanie Zachem nam nuzhen can? Po bol'shomu schetu sistema UNIX, pri vsem ee velikolepii, yavlyaetsya prosto strukturoj dlya nakopleniya i manipulirovaniya dannymi v fajlah. Kak my otmechali ran'she, eta sistema vklyuchaet sotni fajlov. Nekotorye fajly vy zhelaete hranit' neopredelenno dolgo, v to vremya kak drugie otsluzhili svoe i sozdayut besporyadok na diske. K neschast'yu, legko vyb- rosit' to, chto v dejstvitel'nosti vy hoteli sohranit'. Komandu rm so- vershenno ne ukrashaet to, chto ona yavlyaetsya pech'yu dlya szhiganiya musora: bros'te chto-nibud' v nee i ono propadet (esli tol'ko vy ne imeete ko- pii, a vosstanovlenie kopii - eto trudoemkaya rabota). Vot neskol'ko klassicheskih primerov nevernogo primeneniya komandy rm: rm * /tmp <-- Udalit' vse fajly v kataloge /tmp My hoteli skazat' rm /tmp/*, a na samom dele proizoshlo snachala udalenie vseh fajlov v tekushchem kataloge, a zatem popytka udalit' /tmp. Poslednee budet bezuspeshnym, poskol'ku tmp - eto katalog. V rezul'tate my udalili vse, chto hoteli sohranit', i sohranili vse, chto hoteli uda- lit'! |tot sintaksis pohozh na drugie operatory UNIX, vrode "grep * file": protivnaya oshibka. rm -rf / tmp <-- Udalit' katalog tmp so vsemi fajlami My hoteli skazat' rm -rf /tmp, no nechayanno vstavili probel v ko- mandu. Na samom dele udalyatsya VSE fajly vo vsej sisteme (esli my dadim komande vypolnyat'sya dostatochno dolgo), potomu chto my skazali UNIX uda- lit' kornevoj katalog i vseh ego potomkov! Vy dolzhny byt' vnimatel'ny s komandoj rm. Esli pokazhetsya, chto chto-to ne tak, udalite etu komandu. Ona mozhet pogubit' vas. Odna takaya oshibka mozhet isportit' vam celyj den'. Posle togo, kak eto sluchitsya, vy stanete ostorozhnym na nekotoroe vremya, potom vnimanie oslabnet. Esli vy ne budete bditel'nym, oshibki vernutsya, chtoby presle- dovat' vas. Dlya nas "musornaya korzina" bolee zhelatel'na, chem pech' dlya szhiganiya "musora". Ispol'zuya etot put', vy mozhete vernut'sya i vosstanovit' to, chto vy vybrosili po oshibke. Vy takzhe hoteli by kontrolirovat', kogda poyavitsya musorosborshchik, zahvatit i okonchatel'no udalit "musor". Vy mo- zhete periodicheski prosmatrivat' soderzhimoe "musornoj korziny", a zatem ochishchat' korzinu, kogda vy uvereny, chto vy ne hotite nichego v nej sohra- nyat'. Nel'zya dopuskat', chtoby korzina byla slishkom zapolnena, potomu chto ona zanimaet diskovoe prostranstvo. CHto delaet can? Komandnyj fajl can prednaznachen dlya upravleniya "musornoj korzinoj" vashih fajlov. Ispol'zuya utilitu, vy mozhete svesti k minimumu sluchajnye poteri vo vremya raboty i dazhe vposledstvii vosstanavlivat' fajly pri neobhodimosti. Can ne tol'ko pomeshchaet vashi fajly v "musornuyu korzinu", no i poka- zyvaet vam, chto v nej v nastoyashchee vremya nahoditsya i ochishchaet ee, kogda vy etogo hotite. Can raspoznaet tol'ko klyuchi -l i -r. Klyuch -l pokazyvaet, chto naho- ditsya v "musornoj korzine", a -r udalyaet vse ee soderzhimoe. Zapomnite, chto esli vy chto-to udalili iz "musornoj korziny", vy ne smozhete ego vosstanovit'. Process pomeshcheniya fajlov v "musornuyu korzinu" vypolnyaetsya komandoj mv. Klyuchi, prednaznachennye dlya can, dolzhny byt' pervym argumentam v ko- mandnoj stroke. Esli vy zhelaete peredat' klyuchi komande mv, to ih mozhno pomestit' v lyubom meste komandnoj stroki. Edinstvennye klyuchi, dayushchie sintaksicheskuyu podskazku, - eto -z i -?. Ih prednaznachenie - byt' fla- gami tol'ko dlya obrabotki oshibok. Blagodarya nalichiyu special'nyh flagov obrabotki oshibok, vydayushchih spravochnuyu (help) informaciyu, klyuchi komandy mv, kak i klyuchi can, mozhno pomeshchat' pervymi v komandnoj stroke, ne oka- zyvaya vliyaniya na can. Esli vy sozdaete vashi komandnye fajly tak, chtoby eti klyuchi vsegda vydavali informaciyu ob ispol'zovanii (t.e. nikogda ne byli "nastoyashchimi" klyuchami), to vy imeete horoshij sposob polucheniya pomo- shchi po sintaksisu. Mnogie (no, uvy, ne vse) standartnye komandy UNIX da- yut po klyucham -z ili -? podskazku ob ispol'zovanii i eto polezno pomnit' vsyakij raz, kogda vy popali v tupik. Esli can ne poluchaet nikakih klyuchej, dejstvie po umolchaniyu zaklyu- chaetsya v peresylke vseh ukazannyh fajlov v "musornuyu korzinu", razme- shchennuyu v vashem registracionnom kataloge pod imenem $HOME/.trashcan. Esli etot katalog otsutstvuet, on avtomaticheski sozdaetsya pri pervom vypolnenii komandnogo fajla can. |to pozvolyaet vam zapuskat' komandu, ne ukazyvaya special'nogo polozheniya "korziny". Esli vy primenyaete klyuch -r, fajly v "musornoj korzine" budut udaleny, a sama ona net. Primery 1. $ can *.c Peremeshchaet vse fajly, kotorye okanchivayutsya na .c, v "musornuyu kor- zinu". 2. $ can -l Vydaet spisok vseh fajlov, razmeshchennyh sejchas v "musornoj korzi- ne". 3. $ can -r Udalyaet vse fajly iz "musornoj korziny". 4. $ can -q * Peredaet klyuch -q komande mv. Poskol'ku eto nedopustimyj klyuch ko- mandy mv, ona vydaet soobshchenie ob oshibke i zavershaetsya. Poyasneniya Stroka 4 ustanavlivaet mesto "musornoj korziny" tak, chtoby ona razmeshchalas' v vashem registracionnom kataloge pod imenem .trashcan. Za- met'te, chto ee imenovanie, nachinaya s tochki, delaet ee neraspechatyvae- mym, ili skrytym fajlom. Edinstvennyj sposob uvidet' takie fajly - ispol'zovat' klyuch -a v komande ls. Stroki 6-8 proveryayut, opredelen li sejchas katalog "musornoj korzi- ny". Esli net, on sozdaetsya. Obratite vnimanie, chto poskol'ku ego soz- daete vy, on imeet takie prava dostupa na chtenie i zapis', kak v vashem registracionnom kataloge. Stroki 10-21 proveryayut, nachinaetsya li pervyj pozicionnyj parametr s chertochki (-). Esli takoj parametr obnaruzhen, proveryaetsya, yavlyaetsya li on klyuchom komandnogo fajla can (-l, -r, -z ili -?). Obratite vnimanie, chto dlya togo, chtoby dlya ispol'zovaniya dvojnyh kavychek vnutri dvojnyh kavychek (stroka 10), vy dolzhny ekranirovat' kavychki. Simvol obratnoj kosoj cherty (\) ispol'zovan imenno dlya etoj celi. Esli ukazan klyuch -l, vydaetsya napominanie ob imeni kataloga "musornoj korziny", komanda ls vyvodit spisok fajlov v "musornoj korzi- ne" i procedura can zavershaetsya, poskol'ku trebovalos' tol'ko vyvesti spisok. Esli ukazan klyuch -r, vydaetsya soobshchenie ob imeni kataloga ochishchae- moj "musornoj korziny" i fajly v nej udalyayutsya komandoj rm. |to razru- shitel'naya veshch' i udalyaet vashi fajly navsegda. Posle udaleniya can zaver- shaet rabotu. Vy mozhete dopolnit' programmu procedury tak, chtoby davat' podtverzhdenie pered vypolneniem komandy, esli eto pozvolit vam chuvstvo- vat' sebya bolee spokojno. Esli ukazan klyuch -z ili -?, vydaetsya podskazka ob ispol'zovanii i can zavershaetsya. |to ne sovsem horosho, no my ne mozhem ispol'zovat' sim- vol *, sootvetstvuyushchij lyubomu drugomu klyuchu, poskol'ku klyuch mozhet byt' prednaznachen dlya komandy mv, a ne dlya can. Blagodarya ispol'zovaniyu vse- go dvuh argumentov dlya obrabotki oshibok, my mozhem razreshit' peredachu vseh ostal'nyh argumentov. Esli klyuch ne yavlyaetsya odnim iz klyuchej can, ili odnim iz ukazannyh klyuchej obrabotki oshibok, to on peredaetsya koman- de mv. Esli klyuch nedopustim dlya etoj komandy, komanda mv vydaet svoe soobshchenie ob oshibke i zavershaet rabotu. Vy mozhete, estestvenno, modifi- cirovat' komandnyj fajl tak, chtoby on proveryal dopustimost' klyuchej ko- mandy mv na "vneshnem" urovne. Togda on mozhet vydat' soobshchenie ob oshibke i zavershit'sya, esli ukazannyj klyuch nedopustim ni dlya can, ni dlya mv. Vopros v tom, stoit li platit' za bolee polnyj kontrol' nad obrabotkoj oshibok cenoj razbuhaniya programmy i vremenem ispolneniya. Stroka 23 vypolnyaet sobstvenno peremeshchenie fajlov v "musornuyu kor- zinu". Zamet'te, chto eto vypolnyaetsya tol'ko esli ne ukazany nikakie klyuchi can, poskol'ku eto povedenie can, prinyatoe po umolchaniyu. Zdes' ispol'zuetsya parametr $@. Putem vklyucheniya vseh parametrov v komandnuyu stroku, lyubye klyuchi, prednaznachennye komande mv, peredayutsya ej. Takim sposobom my mozhem izmenit' put', kotorym fajly posylayutsya v "musornuyu korzinu". 3.2.3. dosflp - kopirovanie fajlov s gibkogo diska formata MS-DOS s ispol'zovaniem simvolov shablona v imenah fajlov ------------------------------------------------------------------- Imya: dosflp _____________________________________________________________________ dosflp Kopirovanie fajlov s gibkogo diska formata DOS s ispol'zovaniem simvolov shablona v imenah fajlov NAZNACHENIE Kopiruet fajly s gibkogo diska v formate DOS (v XENIX) na zhestkij disk. Obespechivaet vozmozhnost' ispol'zovaniya zapisi s pomoshch'yu simvo- lov-shablonov dlya imen fajlov na gibkom diske, gde takaya zapis' obychno nedopustima. FORMAT VYZOVA dosflp [-a] [-c] [-dDRIV] [-eEXP][-h] [-l] [-r] [-sDIR] gde -a oznachaet kopirovanie fajlov, sootvetstvuyushchih *.asm -c oznachaet kopirovanie fajlov, sootvetstvuyushchih *.c -d vybiraet imya ustrojstva DRIV iz nabora A,B,X,Y (po umolchaniyu A) -e ispol'zuet vyrazhenie EXP, chtoby primenit' k fajlam grep -h kopiruet fajly, sootvetstvuyushchie *.h -l tol'ko vydaet spisok fajlov -r udalyaet fajly vmesto ih kopirovaniya -s ukazyvaet podkatalog DIR na gibkom diske formata DOS Primer vyzova dosflp Kopirovanie vseh fajlov s ustrojstva A: v tekushchij katalog Ishodnyj kod dlya dosflp 1 : 2 # @(#) dosflp v1.0 Wildcard copies from DOS floppy Author: Russ Sage 4 EXP=.\* 5 DRIVE="A:" 6 OP="c" 8 if [ "$#" -gt 0 ] 9 then for ARG in $@ 10 do 11 case "$ARG" in 12 -a) EXP='.*\.asm$';; 13 -c) EXP='.*\.c$';; 14 -d*) DRIVE="`echo $ARG | cut -c3-`:";; 15 -e*) EXP='`echo $ARG | cut -c3-`';; 16 -h) EXP='.*\.h$';; 17 -l) OP="l";; 18 -r) OP="r";; 19 -s*) DRIVE="$DRIVE`echo \"$ARG" | cut -c3- `/";" 20 *) echo "dosflp: arg error" 21 echo "usage: dosflp [-a] [-c] [-d] [-e] [-h] [-l] [-r] [-s]" 22 exit 1;; 23 esac 24 done 25 fi 27 case $OP in 28 c) echo "\nCopying files from $DRIVE to `pwd`";; 29 l) echo "\nListing files on $DRIVE" 30 dosdir $DRIVE | more 31 exit;; 32 r) echo "This option removes all the data on the floppy." 33 echo -n "Do you want to do this (y/n): " 34 read RSP 35 if [ "$RSP" = "y" ] 36 then echo "\nRemoving files on $DRIVE" 37 else exit 38 fi;; 39 esac 41 dosls $DRIVE | tr "[A-Z]" "[a-z]" > /tmp/doslist 43 for FILE in `grep "$EXP" /tmp/doslist` 44 do 45 echo $FILE 46 case $OP in 47 c) doscp $DRIVE$FILE .;; 48 r) dosrm $DRIVE$FILE;; 49 esac 50 done 52 rm /tmp/doslist Peremennye sredy vypolneniya ARG Hranit argumenty komandnoj stroki DRIVE Ustrojstvo s gibkim diskom formata DOS EXP Vyrazhenie, imitiruyushchee dejstvie simvola-shablona FILE Hranit imya fajla, nad kotorym proizvoditsya dejstvie OP Klyuch, opredelyayushchij neobhodimoe dejstvie Opisanie Zachem nam nuzhen dosflp? |to komanda tol'ko dlya sistemy XENIX. Operacionnaya sistema XENIX, yavlyayas' produkciej firmy Microsoft, imeet sredstva dlya obshcheniya s fajlo- voj sistemoj MS-DOS. Dlya oznakomleniya s osnovami sovmestnogo ispol'zo- vaniya DOS i XENIX davajte rassmotrim osnovnye parametry. Kazhdyj zhestkij disk mozhet imet' maksimum chetyre razdela. |to ogra- nichenie MS DOS, kotoroe pereneseno v mir XENIX. Nichego plohogo v etom net, poka my ne nachinaem rabotat' s zhestkim diskom bol'shoj emkosti. Dlya 70-megabajtnogo diska, naprimer, vy mozhete sozdat' chetyre rav- nyh razdela, kazhdyj iz kotoryh soderzhit priblizitel'no 17 Mbajt. Vy mo- zhete sozdat' men'shij razdel, no togda drugoj razdel dolzhen byt' bol'she. V zavisimosti ot togo, kakaya chast' vashih programm i dannyh dolzhna byt' ispol'zovana v osnovnom MS-DOS i kakaya - XENIX, mozhet byt' ispol'zovana razlichnaya konfiguraciya. Bol'shim preimushchestvom sistemy XENIX/DOS yavlyaetsya to, chto XENIX mo- zhet razmeshchat'sya v odnom razdele, a DOS v drugom. Kak eto sdelat'? Nuzhno zapustit' programmu "fdisk" v kazhdoj operacionnoj sisteme. |to znachit, chto XENIX mozhet obshchat'sya s razdelom DOS, poluchaya polnoe imya ustrojstva, ukazyvayushchee na drugoj razdel. Drajver, kotoryj chitaet razdel DOS, dol- zhen znat', kak vyglyadit DOS (t.e. znat' fajlovuyu sistemu DOS). Esli vy- polnit' takuyu operaciyu, mozhno poluchat' spiski fajlov i kopirovat' ih tuda i obratno. K sozhaleniyu, DOS ne imeet vozmozhnosti chteniya razdelov XENIX. Pri rabote s gibkim diskom vy imeete delo tol'ko s odnim razdelom. |to snova ogranichenie DOS. Nekotorye sistemy UNIX, v otlichie ot DOS, pozvolyayut imet' stol'ko razdelov na zhestkom ili gibkom diske, skol'ko vy hotite, v otlichie ot DOS. Po opredeleniyu, gibkij disk DOS sformati- rovan v sisteme DOS, kotoraya vypolnyaet formatirovanie nizkogo urovnya i pomeshchaet fajlovuyu sistemu DOS na gibkij disk. V sisteme XENIX gibkij disk mozhet byt' libo v formate fajlovoj sistemy, libo nestrukturirovannym ustrojstvom posledovatel'nogo dostupa podobno magnitnoj lente. Dlya procedury dosflp my ispol'zuem tol'ko gib- kie diski v formate DOS. Teper' k delu. Predpolozhim, vy imeete sistemu DOS i fajly, nahodya- shchiesya na diske DOS, vy mozhete chitat' i pisat' fajly na gibkij disk iz XENIX. No sushchestvuyut nekotorye ogranicheniya na vypolnenie operacii kopi- rovaniya, kotorye ne slishkom udobny pol'zovatelyu. Naprimer, vy mozhete skazat' "doscp *.c a:". V rezul'tate vse fajly tekushchego kataloga koto- rye okanchivayutsya na .c, budut skopirovany na gibkij disk formata DOS na ustrojstve a:. Pobochnyj effekt vypolneniya doscp zaklyuchaetsya v tom, chto vse simvoly perevoda stroki (ili progona stroki) prevrashchayutsya v simvol vozvrat karetki/perevod stroki, poskol'ku DOS obrabatyvaet konec stroki inache, chem XENIX. Takim zhe obrazom, kogda vy kopiruete s gibkogo diska formata DOS v XENIX, lishnie simvoly vozvrata karetki ubirayutsya. CHto vy ne mozhete sdelat', tak eto skazat' "doscp a:*.c". Komanda doscp ne dopuskaet ukazaniya vida *.c pri kopirovanii s gibkogo diska. |to proishodit potomu, chto komandnyj processor rasprostranyaet metasim- voly (*,?,[]) i ne mozhet neposredstvenno chitat' razdel DOS. Poetomu vy ne mozhete ispol'zovat' simvoly pri kopirovanii s gibkogo diska DOS. Otmetim, chto mozhet nablyudat'sya gorazdo bol'she pobochnyh effektov, kogda vy imeete delo s gibkimi diskami DOS. Vo-pervyh, dlina imeni faj- la ogranichena. DOS dopuskaet do vos'mi simvolov imeni fajla plyus tri simvola rasshireniya. V rezul'tate posle kopirovaniya vseh vashih fajlov XENIX na gibkij disk mnogie iz nih mogut imet' ne te imena, kotorye oni imeli v XENIX. |to sushchee stradanie, kogda vy pytaetes' sdelat' kopiyu na gibkie diski DOS, potomu chto vy bol'she ne imeete uverennosti, kak obra- shchat'sya k fajlam, kogda vy kopiruete ih obratno s gibkogo diska. Krome togo, poskol'ku rasshirenie imeni fajla v DOS imeet tol'ko tri simvola, fajl s imenem "spreadsheet.finance" mozhet okazat'sya na gibkom diske DOS s imenem "spreadsh.fin" i raspoznavanie ego mozhet predstavlyat' oprede- lennye trudnosti. No eto eshche ne vse. Kogda fajl kopiruetsya iz XENIX v DOS, VSE imena v DOS zapisyvayutsya zaglavnymi bukvami. Esli u vas est' fajly s imenami, v kotoryh smeshany verhnij i nizhnij registry, to vy neskol'ko poteryaete ponyatnost' imen. Esli vy ispol'zuete v imenah simvoly verhnego registra pri kopirovanii fajlov obratno v XENIX, oni ne perevodyatsya na nizhnij registr. V rezul'tate vse imena vashih fajlov okazyvayutsya zapisannymi simvolami verhnego registra v XENIX, chto ne ochen' udobno. V chem my nuzhdaemsya, tak eto v takom sredstve, kotoromu my mozhem ukazyvat', kakie fajly kopirovat' s gibkogo diska na zhestkij disk, i kotoroe kopiruet ih s sohraneniem registra v imeni fajla. Vse eto dela- et procedura dosflp. CHto delaet dosflp? Dosflp pytaetsya isklyuchit' vse negativnye aspekty kopirovaniya faj- lov XENIX/DOS. |to vysokoe trebovanie, no ono dostizhimo. Vkratce podhod dosflp sleduyushchij: poluchit' spisok imen fajlov s gibkogo diska, pere- vesti imena v nizhnij registr, vybrat' iz polnogo spiska imena teh faj- lov, kotorye sootvetstvuyut vashim trebovaniyam, i zatem kopirovat' fajly odin za drugim v tekushchij katalog XENIX. Dlya togo, chtoby sdelat' eto, trebuetsya gorazdo bol'she komand XENIX vida dosxx, a takzhe razlichnyh drugih komand XENIX. V dopolnenie k kopirovaniyu, dosflp takzhe vydaet spisok fajlov, ko- torye imeyutsya na gibkom diske DOS, i udalyaet fajly s gibkogo diska. |ti funkcii legko realizovat', potomu chto kak tol'ko odin raz procedura dostupa napisana, dobavit' novye komandy dlya vypolneniya operacij nad fajlami dovol'no prosto. Obychno my hotim upravlyat' fajlami opredelennogo tipa kak gruppoj. Syuda otnosyatsya assemblernye ishodnye fajly, ishodnye fajly na yazyke C i fajly-zagolovki na yazyke C. Poetomu, chtoby snyat' s vas obyazannosti po vvodu universal'nyh simvolov dlya etih tipov fajlov, my pryamo ukazyvaem ih v kachestve opcij komandy dosflp. Naprimer, klyuch -a kopiruet tol'ko fajly, kotory