) i osnovyvat' poisk na etom chisle, a ne na chisle, vvedennom pol'zovatelem. Vy takzhe mogli by ispol'zovat' kazhduyu cifru sluchajnogo chisla dlya upravleniya vyborom slova iz razlichnyh baz s zhargonnymi terminami, imeya, vozmozhno, po odnomu fajlu dlya kazhdoj iz treh pozicij slova i organizuya cikl na sluchajnoe znachenie dlya chteniya kazhdogo slova. Slova mogli by chitat'sya i udalyat'sya iz fajla do teh por, poka ne prochitaetsya slovo, kotoroe sootvetstvuet sluchajnoj cifre. Imeetsya mnozhestvo drugih vozmozhnostej. Esli vy vovremya ne ostanovi- tes', to obnaruzhite, chto vy napisali komp'yuternuyu igru! -------------------------------------------------------- IMYA: phone -------------------------------------------------------- phone Baza dannyh s telefonnymi nomerami NAZNACHENIE Upravlyaemoe menyu sredstvo, podderzhivayushchee bazu dannyh s telefon- nymi nomerami FORMAT VYZOVA phone PRIMER VYZOVA phone Vyzov telefonnoj bazy dannyh s Vvod opcii poiska russ Poisk nomera telefona Rassa TEKST PROGRAMMY phone 1 : 2 # @(#) phone v1.0 Maintain telephone database Author: Russ Sage 2a Soprovozhdenie telefonnoj bazy dannyh 4 if [ $# -gt 0 ] 5 then echo "phone: argument error" >&2 6 echo "usage: phone" >&2 7 exit 1 8 fi 10 BASE="$HOME/.phone.list" 12 while : 13 do 14 echo " 16 phonebase = $BASE 18 PHONE MENU 19 ---------- 20 add name to list 21 delete name from list 22 edit list 23 search for name in list 24 view complete list 25 - exit program 27 Press a,d,e,s,v or : \c" 28 read RSP 30 case $RSP in 31 "") exit 0 32 ;; 33 a|A) echo "\nEnter name to add ( to exit ): \c" 34 read NAME 35 if [ "$NAME" = "" ] 36 then continue 37 fi 38 echo "Enter description of person: \c" 39 read DESC 40 echo "Enter number to add: \c" 41 read NUM 42 echo "$NAME\t$DESC\t\t\t$NUM" >> $BASE 43 sort -t" " +1 -1.3b -o $BASE $BASE 44 ;; 45 d|D) echo "\nEnter name to delete ( to exit ): \c" 46 read NAME 47 if [ "$NAME" = "" ] 48 then continue 49 fi 50 sed -e "/$NAME/d" $BASE.new 51 mv $BASE.new $BASE 52 ;; 53 e|E) vi $BASE 54 ;; 55 s|S) echo "\nEnter name to search: \c" 56 read NAME 57 echo "\n----------------------------------" 58 grep -y "$NAME" $BASE 59 echo "------------------------------------" 60 ;; 61 v|V) echo "\n\tPhone List\n\t---------" & 62 more $BASE 63 echo "\nhit \c" 64 read RSP 65 ;; 66 *) echo "Not a valid command" 67 ;; 68 esac 69 done PEREMENNYE SREDY VYPOLNENIYA BASE Fakticheskoe imya fajla telefonnoj bazy dannyh DESC Opisanie, vvodimoe v bazu dannyh NAME Imya, vvodimoe v bazu dannyh NUM Nomer telefona, vvodimyj v bazu dannyh RSP Otvet pol'zovatelya na priglashenie OPISANIE ZACHEM NAM NUZHEN phone? Telefony predstavlyayut soboj ochen' vazhnuyu chast' nashego rabochego dnya. My ispol'zuem ih dlya soobshcheniya svoih planov, otdachi rasporyazhenij i dlya mnogih drugih celej. Nemnogo porazmyshlyaem. Esli pochti na kazhdom rabochem meste v SSHA ustanovlen telefon, to telefonnyh nomerov millio- ny. Kakim obrazom vy hranite vse vashi telefonnye nomera? Nam neobhodima ocherednaya baza dannyh. |ta baza dannyh dolzhna up- ravlyat' vvodom dannyh, ih izvlecheniem, modifikaciej i udaleniem. U nas teper' est' opyt v realizacii programm, upravlyaemyh s pomoshch'yu menyu, poetomu imeet smysl ispol'zovat' menyu i zdes'. CHTO DELAET phone? Phone - eto universal'naya utilita dlya ispol'zovaniya i upravleniya bazoj dannyh telefonnyh nomerov. Polnost'yu upravlyaemaya pri pomoshchi me- nyu, phone soderzhit vse neobhodimye funkcii, svyazannye s upravleniem bazoj dannyh: dobavlenie, udalenie, prosmotr, redaktirovanie i poisk. Fajl, predstavlyayushchij soboj bazu dannyh, razmeshchen v vashem regist- racionnom kataloge. |to fajl $HOME/.phone.list. Phone ispol'zuet vash registracionnyj katalog, tak chto odin i tot zhe ispolnyaemyj modul' ra- botaet dlya lyubogo pol'zovatelya. Nezavisimo ot togo, gde razmeshchaetsya komandnyj fajl phone ili kto i otkuda ego zapustil v vashej sisteme, vy vsegda poluchite imenno vash fajl telefonnyh nomerov, poskol'ku on podk- lyuchen k vashemu registracionnomu katalogu posredstvom vstroennoj pere- mennoj shell s imenem HOME. Imeetsya vsego odno glavnoe menyu. Ono vyvoditsya na ekran, i vnizu poyavlyaetsya priglashenie. Bol'shinstvo variantov vybora zaprashivayut do- polnitel'nuyu informaciyu. Menyu vyglyadit tak: ------------------------ | | | phonebase = /usr/russ/.phone.list | | PHONE MENU | ---------- | add name to list (dobavit' imya k spisku) | delete name from list (udalit' imya iz spiska) | edit list (redaktirovat' spisok) | search for name in list (poisk imeni v spiske) | view complete list (prosmotr spiska) | - exit program (vyhod iz programmy) | | Press a,d,e,s,v or : | V verhnej stroke menyu vyvoditsya imya telefonnoj bazy dannyh, koto- ruyu vy ispol'zuete. Esli eto ne vash fajl, vy tochno znaete, chto proi- zoshla oshibka. Opcii vybirayutsya nazhatiem klavishi, sootvetstvuyushchej per- voj bukve slova. Esli byl nazhat tol'ko vozvrat karetki, programma za- vershaetsya. PRIMERY 1. $ phone a russ sage unix master 123-4567 Takaya posledovatel'nost' dejstvij ispol'zuetsya dlya dobavleniya eshche odnogo nomera v bazu dannyh. Vyzyvajte menyu, vybirajte opciyu dobavle- niya i v otvet na zaprosy utility phone vvodite imya, opisanie i nomer telefona. 2. $ phone V Prosmotr vseh zapisej v vashej baze dannyh. POYASNENIYA Stroki 4-8 vypolnyayut nekotoruyu proverku na nalichie oshibok. Esli vy vyzvali phone s kakimi-libo argumentami, vyvoditsya soobshchenie ob oshibke i programma zavershaetsya. Poskol'ku phone upravlyaetsya pri pomoshchi menyu, ona ne ispol'zuet argumenty. Stroka 10 inicializiruet peremennuyu BASE imenem fajla telefonnoj bazy dannyh. |to naznachenie vypolnyaetsya s pomoshch'yu peremennoj HOME dlya polucheniya vashego registracionnogo kataloga. Stroki 12-69 predstavlyayut soboj odin bol'shoj beskonechnyj cikl while. Vsya eta struktura podobna strukture drugih programm, upravlyae- myh s pomoshch'yu menyu, kotorye my rassmotreli. Samo menyu vyvoditsya opera- torom echo. Tekst menyu NE vydelen otstupami podobno ostal'noj chasti programmy, poskol'ku operator echo vosprinimaet etot tekst kak lite- ral'nye dannye, vklyuchaya probely. Stroka 28 chitaet otvet pol'zovatelya, a stroki 30-68 predstavlyayut soboj operator case, kotoryj proveryaet znachenie otveta. Esli byl nule- voj vvod, programma zavershaetsya. Esli byla vvedena bukva a, vybiraetsya opciya dobavleniya. (V dejstvitel'nosti kazhdaya opciya proveryaetsya i na verhnem, i na nizhnem registre dlya obespecheniya gibkosti). Tekst programmy, sootvetstvuyushchij dobavleniyu, zaprashivaet imya, opisanie i nomer telefona. Esli vy okaza- lis' v opcii dobavleniya sluchajno, ispol'zujte vozmozhnost' vozvrata pu- tem nazhatiya vozvrata karetki v otvet na zapros imeni. Odnako posle to- go, kak vy vveli imya, vyjti uzhe nel'zya. Vam neobhodimo v etom sluchae pomestit' v bazu fiktivnuyu zapis' ili nazhat' klavishu avarijnogo zaver- sheniya dlya vyhoda iz programmy voobshche. Opisanie mozhet byt' proizvol'noj dliny, odnako ono ne smotritsya, esli ochen' dlinnoe. Posle togo kak vse polya vvedeny, vsya stroka pomeshchaetsya v konec bazy dannyh. Otmetim, chto dobavlyayutsya simvoly tabulyacii dlya razbieniya zapisi na polya. Posle eto- go baza dannyh peresortirovyvaetsya, chtoby novaya zapis' zanyala svoe mesto v alfavitnom poryadke. Esli byla vvedena bukva d, to ona raspoznaetsya v stroke 45. Zap- rashivaetsya udalyaemoe imya. Esli vvoditsya tol'ko vozvrat karetki, opera- tor continue vozvrashchaet nas obratno v cikl while i snova vyvoditsya glavnoe menyu. Dlya udaleniya zapisi ispol'zovana komanda sed, poetomu vvodimoe imya dolzhno ukazyvat'sya tochno v takom zhe vide, kak ono hra- nitsya v fajle. Rezul'tat udaleniya pomeshchaetsya vo vremennyj fajl, koto- ryj zatem v stroke 51 pereimenovyvaetsya v ishodnyj fajl bazy dannyh. Odnoj iz modifikacij mozhet byt' pokaz pol'zovatelyu togo, chto on sobi- raetsya udalyat', i zapros podtverzhdeniya. Esli podtverzhdenie polucheno, to dannye udalyayutsya okonchatel'no. Sejchas sdelano tak, chto vy na samom dele ne znaete, chto imenno sobiraetes' udalyat'. Poetomu neobhodimo tochno ukazyvat' udalyaemoe imya. Zdes' vybran otnositel'no bystryj i ne sovsem chestnyj podhod. A voobshche vy dazhe mogli by ispol'zovat' ne- posredstvenno redaktor vi dlya poiska i udaleniya. Opciya redaktirovaniya v stroke 53 vypolnyaet tol'ko odno - vyzyvaet redaktor vi dlya raboty s bazoj telefonnyh nomerov. Ispol'zuya redaktor vi, vy mozhete vruchnuyu sdelat' fajl bazy dannyh takim, kak vam nuzhno. Zachastuyu format vhodnyh dannyh "plyvet" iz-za raznoj dliny. Vse dannye hranyatsya v svobodnom formate i poetomu ih mozhno kak ugodno smeshchat' vdol' stroki. Kogda vy redaktiruete vash fajl redaktorom vi, vse ego komandy ak- tivny. Dejstvuet dazhe vyhod v shell i vypolnenie obychnyh dejstvij s sistemoj. Poetomu ne zabud'te prekratit' rabotu etogo shell'a, inache vy budete ves'ma udivleny v konce rabochego dnya pri vyhode iz sistemy. Dlya vyhoda iz redaktora i vozvrata k utilite phone ispol'zujte obychnye metody, takie kak ZZ, :x i :wq. Opciya poiska v stroke 55 zaprashivaet imya, kotoroe nuzhno iskat', chitaet eto imya, vyvodit dekorativnye elementy do i posle dannyh i ispol'zuet utilitu grep dlya nahozhdeniya trebuemoj zapisi. Utilita grep v stroke 58 ispol'zuet komandu -y, vyzyvayushchuyu nechuvstvitel'nost' k re- gistru. |to oznachaet, chto vy mozhete proizvodit' vvod iskomogo elementa kak na verhnem, tak i na nizhnem registre. Esli ne najdeno nichego, to nichego i ne vyvoditsya na ekran. Opciya prosmotra nachinaetsya so stroki 61. Snachala vyvoditsya zago- lovok v fonovom rezhime. |to delaetsya dlya bystroty. Na samom dele eto prosto eksperiment dlya togo, chtoby uvidet', budut li asinhronnye soby- tiya proizvodit' vyvod na ekran sinhronno. V dannom sluchae eto imenno tak. Fajl vyvoditsya komandoj more. Poka utilita more postranichno vyvo- dit fajl, vse ee komandy nam dostupny. (Nash komandnyj fajl m v glave 4 illyustriruet, chto my mozhem delat' s pomoshch'yu more.) V stroke 63 vyvoditsya soobshchenie pol'zovatelyu o tom, chto on dolzhen nazhat' vozvrat karetki. Stroka 64 vypolnyaet chtenie. |ta posledovatel'- nost' priderzhivaet raspechatannyj fajl dannyh na ekrane, chtoby ego stroki ne propali pri sdvige vverh. Esli by etih operatorov ne bylo, napechatalos' by glavnoe menyu i my poteryali by to, chto nahodilos' v verhnej chasti ekrana. Stroka 66 vypolnyaet proverku na oshibki dlya menyu v celom. Esli vy vveli dannye, kotorye ne sootvetstvuyut ni odnomu iz predydushchih shablo- nov, to im sopostavlyaetsya shablon *. V etom sluchae pechataetsya soobshchenie ob oshibke, upravlenie perehodit iz operatora case v konec cikla while i pri sleduyushchej iteracii etogo cikla snova pechataetsya glavnoe menyu. ---------------------------------------------------------- IMYA: office ---------------------------------------------------------- office Deloproizvoditel' NAZNACHENIE Obespechivaet prostoj dostup ko mnogim utilitam upravleniya delop- roizvodstvom, kotorye my uzhe rassmotreli. FORMAT VYZOVA office PRIMER VYZOVA office Proveryaet moj pochtovyj yashchik i soobshchaet, pust li on m TEKST PROGRAMMY office 1 : 2 # @(#) office v1.0 Office Manager Author: Russ Sage 2a Deloproizvoditel' 4 if [ $# -gt 0 ] 5 then echo "office: argument error" >&2 6 echo "usage: office" >&2 7 exit 1 8 fi 10 while : 11 do 12 c 13 set `date` 14 echo " 15 $1, $2 $3 $4 17 Office Menu 18 ----------- 19 Mail 20 News 21 Calendar 22 Phone 23 Automatic Reminders 24 Shell Command 25 to exit 27 press m,n,c,p,a,s or : \c" 29 read CMD 31 case $CMD in 32 "") exit;; 33 m|M) if [ -s /usr/spool/mail/$LOGNAME ] 34 then echo 35 ll /usr/spool/mail/$LOGNAME 36 echo "\nWould yuo like to see it ( y/n): \c" 37 read CMD 38 if [ "$CMD" = "y" ] 39 then echo 40 mail 41 fi 42 else echo "\nNo mail today" 43 fi 44 echo "\nhit \c" 45 read CMD;; 46 n|N) PWD=`pwd` 47 cd /usr/news 48 echo "\nThe following files are news item in /usr/news:\n" 49 lc 50 echo "\nEnter filename or to exit: \c" 51 read NAME 52 while [ "$NAME" != "" ] 53 do 54 if [ -s $NAME ] 55 then echo "\n-------------------" 56 cat $NAME 57 echo "---------------------" 58 else echo "$NAME is not a news file" 59 fi 60 echo "\nEnter filename or to exit: \c" 61 read NAME 62 done 63 cd $PWD;; 64 c|C) echo "\n" 65 today 66 if [ -s $HOME/calendar ] 67 then echo "Calendar file:\n`ll $HOME/ calendar`" 68 echo "\nCalendar notifications:" 69 PWD=`pwd` 70 cd $HOME 71 calendar 72 cd $PWD 73 echo "\nCheck your mail for calendar notifications" 74 else echo "\nYou do not have a calendar file at $HOME" 75 fi 76 echo "\nhit \c" 77 read CMD;; 78 p|P) phone;; 79 a|A) greet 80 $HB/at 11:45 echo ^GLunch in 15 minutes 81 $HB/at 16:45 echo ^GShift change in 15 minutes 83 echo "\nYou will receive notices at 11:45 & 4:45" 84 echo "\nWould you like to leave some reminders (y/n): \c" 85 read CMD 86 if [ "$CMD" = "y" ] 87 then echo "\nThe syntax is: at HR:MN executable_phrase" 88 echo "The time now : `date '+%T'`" 89 echo "\n\ncmd ( to exit): \c" 90 read CMD 91 while [ "$CMD" != "" ] 92 do 93 eval $CMD 94 echo "cmd ( to exit ): \c" 95 read CMD 96 done 97 fi;; 98 s|S) echo "\nenter command: \c" 99 read CMD 100 eval $CMD 101 echo "\nhit \c" 102 read CMD;; 103 *) echo "\nInvalid command" 104 echo "\nhit \c" 105 read CMD;; 106 esac 107 done PEREMENNYE SREDY VYPOLNENIYA CMD Soderzhit razlichnye komandy na raznyh urovnyah menyu HOME Eshche odna eksportiruemaya peremennaya, vzyataya iz sredy vypolneniya LOGNAME Shell-peremennaya, predvaritel'no eksportirovannaya NAME Soderzhit imya fajla s novostyami OPISANIE ZACHEM NAM NUZHEN office? Mnogie instrumental'nye sredstva v sisteme UNIX mogut vypolnyat' poleznye funkcii, otnosyashchiesya k deloproizvodstvu. V silu sposoba orga- nizacii UNIX, eto otdel'nye i samostoyatel'nye sredstva. Dlya togo chtoby uznat' o nih, neobhodimo najti vse eti sredstva v spravochnyh ruko- vodstvah, izuchit' kazhdoe iz nih i vse vremya pomnit', kak s nimi rabo- tat'. |to ochen' neudobno. Krome, togo, nam neobhodimo dobavit' ryad moshchnyh komand k nashemu UNIX, vklyuchaya neskol'ko otdel'nyh upravlyaemyh s pomoshch'yu menyu utilit. Kakim obrazom my mozhem vse eto ob'edinit'? Nam neobhodim mehanizm, s pomoshch'yu kotorogo my mozhem poluchit' dostup ko vsem funkciyam, imeyushchim otnoshenie k deloproizvodstvu. Esli ispol'zovat' menyu, my smozhem vyzyvat' kazhduyu funkciyu nazhatiem odnoj klavishi. CHTO DELAET office? Office predstavlyaet soboj popytku sobrat' naibolee chasto ispol'- zuemye funkcii deloproizvodstva v odin paket, upravlyaemyj s pomoshch'yu menyu. Tem samym office uproshchaet vyzov etih funkcij, poskol'ku vam ne obyazatel'no znat', gde eti utility razmeshchayutsya i kak k nim obrashchat'sya. Esli u vas est' pomoshchnik-sekretar' bez vsyakogo opyta raboty v sisteme UNIX, vy mozhete poruchit' emu vypolnenie mnogih iz etih funkcij. Vy mo- zhete dobavit' novye funkcii i urovni menyu, esli eto neobhodimo. V office imeyutsya kak neot®emlemye obshchie funkcii deloproizvodstva, tak i specificheskie dobavki. Dannaya utilita pytaetsya upravlyat' kak osnovnymi funkciyami, tak i krugom zadach po vashemu vkusu. K bazovym funkciyam otnosyatsya pochta, novosti, kalendar' i baza telefonnyh nome- rov. Dobavlyaemye osobennosti vklyuchayut v sebya sistemu napominanij, osnovannuyu na utilite at, i vozmozhnost' zapuska eshche odnogo komandnogo interpretatora shell, ne vyhodya iz programmy office. Blagodarya vsem etim kachestvam, vse nahoditsya v odnom meste i obespechivaetsya prostota dostupa i soprovozhdeniya. Glavnoe menyu soderzhit vse dostupnye funkcii. Ono vyglyadit tak: ----------------------- | | Fri, Jun 20 16:18:23 | | Office Menu | ----------- | Mail (Pochta) | News (Novosti) | Calendar (Kalendar') | Phone (Telefony) | Automatic Reminders (Avtomaticheskie napominaniya) | Shell Command (Perehod v shell) | to exit (Vyhod) | | press m,n,c,p,a,s or : | Den' i data v levom verhnem uglu polucheny komandoj UNIX date. Kazhdyj raz pri vyvode menyu pechataetsya novoe znachenie vremeni. Ono soobshchaet vam o tom, kogda vy nachali rabotat' s etim menyu, i kak dolgo vy rabotali. Pervym variantom vybora yavlyaetsya pochta. Zdes' vash pochtovyj fajl proveryaetsya na nenulevoj razmer. Esli razmer nulevoj (ili takoj fajl otsutstvuet), vyvoditsya soobshchenie "no mail today" (segodnya pochty net). Esli dlya vas est' pochta, to informaciya iz fajla pochtovogo yashchika raspe- chatyvaetsya v dlinnom formate komandoj ls i vyvoditsya zapros o tom, ho- tite li vy prochitat' vashu pochtu. Esli vy skazali "yes" (da), vypolnya- etsya obychnaya komanda UNIX mail. Vtorym variantom vybora yavlyayutsya novosti. Fajly novostej hranyatsya v odnom kataloge, gde kazhdaya porciya novostej predstavlyaet soboj neza- visimyj fajl. Vse porcii novostej hranyatsya v special'nom kataloge s imenem /usr/news. Office vyvodit spisok vseh fajlov novostej i zatem sprashivaet, hotite li vy prosmotret' odin iz nih. Esli da, vvedite imya fajla - i on raspechataetsya komandoj more. My predpolagaem, chto u vas est' setevaya svyaz' mezhdu pol'zovatelyami ili kakoe-to drugoe sredstvo dlya polucheniya novostej. Tretij variant vybora - kalendar'. Poskol'ku s kalendarem svyazana raznoobraznaya informaciya, dannaya opciya podrazdelyaetsya na razlichnye funkcii. Snachala vyvoditsya polnost'yu kalendar' na tekushchij mesyac s vy- delennoj segodnyashnej datoj. |to delaetsya s pomoshch'yu utility today, rassmotrennoj ranee. Zatem vypolnyaetsya obrashchenie k sistemnoj utilite raboty s kalendarem. Esli v vashem registracionnom kataloge est' fajl s imenem calendar, to utilita calendar (vypolnyaemaya komandoj cron dlya prosmotra kazhdogo registracionnogo kataloga) prosmatrivaet zapisi va- shego kalendarya. Esli kakie-libo zapisi otnosyatsya k segodnyashnemu ili zavtrashnemu dnyu, eta utilita posylaet ih vam po pochte. Komandnyj fajl office ispol'zuet neskol'ko inoj podhod. Snachala vash fajl kalendarya proveryaetsya na sushchestvovanie i nenulevoj razmer. Esli fajl sushchestvuet, to on vyvoditsya na ekran v dlinnom formate, tak chto vy mozhete uvidet' sam fajl i informaciyu, otnosyashchuyusya k nemu. Posle etogo vypolnyaetsya funkciya calendar. Pri takom vyzove na standartnoe ustrojstvo vyvoda pechatayutsya vse zapisi, podhodyashchie po vremeni. Utili- ta calendar, vyzyvaemaya komandoj cron, obespechivaet svyaz' tol'ko pri pomoshchi pochty. Esli kalendarnogo fajla net, to vyvoditsya soobshchenie, in- formiruyushchee ob etom. Sleduyushchim variantom vybora yavlyayutsya telefony. Dlya upravleniya ba- zoj dannyh telefonnyh nomerov ispol'zuetsya utilita phone, rassmotren- naya v predydushchem razdele. Poskol'ku pri vyzove phone ne vypolnyaetsya nikakoj predvaritel'noj ili posleduyushchej obrabotki dannyh, vy mozhete perechitat' etot razdel, chtoby vspomnit', kak rabotaet eta utilita. Pyatyj variant vybora - avtomaticheskie napominaniya. |ta opciya prednaznachena dlya togo, chtoby pomogat' vam v slezhenii za vazhnymi mo- mentami vremeni v techenie dnya. Pervym delom ona privetstvuet vas v du- he utility greet. Zatem zapuskayutsya v fonovom rezhime dva komandnyh fajla at. Oni srabatyvayut v 11:45 dlya ob®yavleniya o lenche i v 16:45 dlya ob®yavleniya o konce rabochego dnya. Esli vy hotite zapustit' nekotorye iz vashih sobstvennyh komandnyh fajlov v fonovom rezhime vypolneniya, ot- vet'te "yes" (da) na sleduyushchij vopros. Dlya napominaniya vyvoditsya sin- taksis utitlity at, pechataetsya tekushchee vremya, i ozhidaetsya vash vvod ko- mand dlya at. Krasivo i prosto v primenenii! (Esli v vashej sisteme ime- etsya vstroennaya vozmozhnost' at, a vy realizovali nashu versiyu at pod drugim imenem ili v drugom kataloge, prosledite za sootvetstvuyushchimi izmeneniyami v tekste komandnogo fajla.) Blagodarya sposobu vypolneniya vvedennoj vami komandy at, vy mozhete vvesti lyubuyu komandu, no ne samu at. Cikl sdelan tak, chto on prinimaet stol'ko komand, skol'ko vam nuzhno. Dlya vyhoda iz cikla vvedite vozvrat karetki. Poslednyaya opciya prednaznachena dlya vypolneniya lyuboj zhelaemoj ko- mandy vne programmy office, ostavayas' tem ne menee v office. Vy dazhe mozhete by zapustit' eshche odin shell vne programmy office (vvedya s kla- viatury sh), a zatem po control-D vernut'sya v office. Net pochti nichego nevozmozhnogo. Dlya vyhoda iz office dostatochno prosto nazhat' vozvrat karetki. Tem samym proizojdet vyhod iz beskonechnogo cikla i vozvrat k predydu- shchemu shell. PRIMERY $ office s sh $ Zapusk office i vybor raboty s shell. Zatem zapusk shell-komandy s imenem sh, t.e. samogo shell. Pri etom vy zapuskaete novyj shell i poluchaete ego simvol priglasheniya. Po okonchanii raboty s etim shell vvedite ^d dlya vyhoda iz nego i vozvrata k glavnomu menyu utility office. POYASNENIYA Stroki 4-8 vypolnyayut proverku na oshibki. Esli vy vyzvali office s kakimi-libo opciyami, to vy sozdali situaciyu oshibki. Stroki 10-107 - eto odin bol'shoj cikl while. Ego struktura podob- na ranee rassmotrennym utilitam, upravlyaemym s pomoshch'yu menyu. Stroka 12 ochishchaet ekran komandoj c (sm. glavu 7). Esli vy ne hotite chitat' s za- beganiem vpered i vklyuchat' v tekst etu komandu, vy mozhete poka pro- pustit' etu stroku ili, esli u vas sistema BSD, ispol'zovat' komandu clear. V stroke 13 pozicionnym parametram prisvaivaetsya rezul'tat ko- mandy date. Stroki 14-27 vyvodyat samo menyu, a stroka 29 chitaet vvodimuyu pol'- zovatelem komandu. Stroki 31-106 predstavlyayut soboj operator case, ko- toryj raspoznaet vvedennuyu komandu i vypolnyaet sootvetstvuyushchie dejstviya. Stroka 32 vypolnyaet vyhod iz programmy office, esli byl vveden tol'ko vozvrat karetki. Stroki 33-45 upravlyayut komandoj mail. Vnachale s pomoshch'yu komandy test proveryaetsya, imeet li fajl s pochtovymi soobshche- niyami razmer bol'she nulya. Esli da, vyvoditsya pustaya stroka i pochtovyj fajl pechataetsya v dlinnom formate komandy ls. Zatem vam zadaetsya vop- ros o tom, hotite li vy prosmotret' pochtu. Esly vy vvodite "y", vyzy- vaetsya komanda mail. Pri lyubom drugom vvode vypolnyaetsya vozvrat v glavnoe menyu. Stroki 46-63 obrabatyvayut komandu novostej. Snachala peremennaya PWD ustanavlivaetsya na nash tekushchij rabochij katalog. |to delaetsya dlya togo, chtoby pri perehode komandoj cd v kakoe-to drugoe mesto, my smog- li po okonchanii obrabotki vernut'sya tuda, gde my nachali rabotat'. Za- tem po komande cd my perehodim v katalog /usr/news. |to katalog, v ko- torom hranyatsya fajly novostej. V sisteme Berkeley dostupen katalog /usr/msgs. |tot katalog ochen' pohozh na /usr/news i mozhet ispol'zo- vat'sya vmesto nego, esli u vas est' takoe zhelanie. Vyvoditsya v vide stolbcov spisok fajlov iz kataloga /usr/news (stroka 49), i vam zada- etsya vopros o tom, hotite li vy posmotret' kakie-nibud' iz etih faj- lov. Esli vy vvodite vozvrat karetki, komanda test vosprinimaet eto kak nulevoj vvod i vypolnyaetsya vyhod iz operatora while. Cikl while vypolnyaetsya do teh por, poka znachenie peremennoj NAME ne ravno nulyu (stroka 52). Vvedennoe imya proveryaetsya na sushchestvovanie. Esli takoj fajl sushchestvuet, to on raspechatyvaetsya komandoj cat, obram- lennoj strokami iz chertochek. Esli fajl ne sushchestvuet, to vyvoditsya soobshchenie o tom, chto takogo fajla novostej net. Zatem vas prosyat vvesti imya drugogo fajla. |tot process prodolzhaetsya v cikle, poka vy ne vvedete tol'ko vozvrat karetki. Kogda vy vyhodite iz cikla v stroke 62, vypolnyaetsya komanda cd dlya vozvrata v tot katalog, otkuda vy nacha- li rabotat'. |ta komanda cd ne okazyvaet nikakogo vliyaniya posle za- puska utility office. Vy dolzhny ukazat' komandu cd vashemu registraci- onnomu shell. Nikakaya drugaya programma, zapushchennaya iz porozhdennogo shell, ne mozhet vypolnit' dlya vas komandu cd. Stroki 64-77 vypolnyayut funkcii kalendarya. Snachala vyvodyatsya dve pustye stroki. Pochemu dve? Potomu chto obychno komanda echo vstavlyaet simvol novoj stroki v konce kazhdoj vyvodimoj stroki, a vyvodimoj v dannyj moment strokoj yavlyaetsya eshche odin simvol novoj stroki. Zatem v stroke 65 zapuskaetsya programma today. Ona pechataet izobrazhenie kalen- darya na mesyac. Stroka 66 proveryaet, imeetsya li kalendarnyj fajl v va- shem registracionnom kataloge. Esli da, on vyvoditsya v dlinnom formate komandy ls v stroke 67. Pechataetsya takzhe soobshchenie-zagolovok "Calendar Notifications" (kalendarnye izveshcheniya). Stroka 69 zapominaet tekushchij rabochij katalog peremennoj PWD. Za- tem my perehodim komandoj cd v katalog $HOME, chtoby nahodit'sya v tom zhe kataloge, chto i kalendarnyj fajl. V stroke 71 vyzyvaetsya komanda UNIX calendar. Ona prosmatrivaet kalendarnyj fajl i vyvodit vse podho- dyashchie po vremeni soobshcheniya. Po komande cd my vozvrashchaemsya v nash ishod- nyj katalog dlya togo, chtoby vosstanovit' poryadok. Stroka 73 vyvodit soobshchenie, chtoby vy proverili vashu pochtu na nalichie kalendarnyh za- pisej. Kak ukazyvalos' ranee, komanda calendar rabotaet dvumya sposoba- mi. Operator else v stroke 74 vyvodit vam soobshchenie, esli u vas net kalendarnogo fajla. Po zavershenii operatora if, v strokah 76 i 77 pe- chataetsya soobshchenie o tom, chto nuzhno nazhat' vozvrat karetki, i vypolnya- etsya operator read. |to blokiruyushchee chtenie, kotoroe oznachaet ostanovku i ozhidanie kakogo-libo vvoda. |to protivopolozhnost' neblokiruyushchemu chteniyu, ili bolee shiroko izvestnoj tehnike chteniya s oprosom. Opros vozmozhen v programmah, napisannyh na Si, no zapusk oprosa v shell mo- zhet potrebovat' nemnogo bol'shih usilij. Dlya izucheniya chteniya s oprosom oznakom'tes' s glavoj, opisyvayushchej terminal'nye ustrojstva. Stroka 78 upravlyaet komandoj phone. Ona vyzyvaet utilitu phone, kotoruyu my rassmotreli ranee, posle chego upravlenie peredaetsya v konec cikla while. Pechataetsya glavnoe menyu, i vse nachinaetsya snachala. Stroki 79-97 upravlyayut avtomaticheskimi napominaniyami. Snachala za- puskaetsya programma greet. Ona byla opisana ranee v etoj glave. Zatem v strokah 80 i 81 v rezhime fonovogo vypolneniya vyzyvayutsya dva komand- nyh fajla at, kotorye vypolnyatsya pozzhe v techenie dnya. V stroke 84 vam zadaetsya vopros, zhelaete li vy ostavit' kakie-to svoi napominaniya. Esli vy otvechaete "y", vypolnyayutsya stroki 87-96. Esli vy ne vveli "y", operator else ne vypolnyaetsya, poetomu upravlenie peredaetsya glavnomu menyu. Vy vidite, chto eta vozmozhnost' predpolagaet odnokratnoe ispol'- zovanie v techenie dnya. Stroki 87-89 vyvodyat nekotoruyu informaciyu, neobhodimuyu dlya togo, chtoby vy zaveli dlya sebya napominaniya. Vyvoditsya sintaksis programmy at, tekushchaya data (tol'ko vremya) i zatem priglashenie vvodit' vashu ko- mandu. Stroka 90 chitaet vashu komandu. Stroka 91 oznachaet, chto esli byl vveden ne tol'ko vozvrat karetki, to nuzhno vypolnit' etot cikl. Poeto- mu cikl while prodolzhaetsya, poka vy ne nazhmete tol'ko vozvrat karetki. Stroka 93 pytaetsya vypolnit' komandu, kotoruyu vy vveli. Komanda eval ispol'zuetsya dlya togo, chtoby raskryt' znacheniya teh peremennyh, kotorye mogli byt' ne raskryty ranee. Stroka 94 prosit vvesti sleduyushchuyu koman- du, a stroka 95 chitaet ee. Poskol'ku chtenie stoit v samom konce cikla, operator while vypolnyaet proverku novogo vvoda s klaviatury. Stroki 98-102 upravlyayut vyhodom v shell. |ta chast' programmy poch- ti identichna ciklu, ispol'zovannomu dlya napominanij. Nam vydaetsya priglashenie na vvod komandy, ona zachityvaetsya v peremennuyu, zatem de- laetsya sintaksicheskij razbor etoj peremennoj s pomoshch'yu komandy eval. Esli vy hotite perejti v shell, vypolnite komandu sh - i ona porodit shell. Stroki 101 i 102 ne dayut poyavit'sya na ekrane glavnomu menyu do teh por, poka vy ne nazhmete vozvrat karetki. Stroki 103-105 vypolnyayut proverku na oshibki vvoda. Lyubaya nepra- vil'naya komanda popadaet syuda. Vyvoditsya soobshchenie ob oshibke i vyda- etsya priglashenie "hit " (nazhmite vozvrat karetki).  * GLAVA 6. UPRAVLENIE LICHNOJ INFORMACIEJ II: *  OSVEDOMLENNOSTX POLXZOVATELYA I ZASHCHITA LICHNOJ INFORMACII OSVEDOMLENNOSTX POLXZOVATELYA activ pokazat' aktivnost' terminalov info pokazat' informaciyu o parolyah pol'zovatelej uchk posmotret' processy drugih pol'zovatelej watch nablyudat' za registraciej v sisteme whox komanda who s dopolnitel'nymi vozmozhnostyami ZASHCHITA LICHNOJ INFORMACII acme pokazat' uchetnuyu informaciyu inuse zapretit' ispol'zovanie terminala lock blokirovat' i razblokirovat' fajly UPRAVLENIE LICHNOJ INFORMACIEJ II: OSVEDOMLENNOSTX POLXZOVATELYA I ZASHCHITA LICHNOJ INFORMACII VVEDENIE My uzhe razrabotali celyj ryad instrumental'nyh sredstv, kotorye pomogayut nam bolee effektivno upravlyat' nashej lichnoj informaciej. Od- nako my rabotaem ne v vakuume. Kazhdyj iz nas rabotaet s drugimi lyud'mi i obychno ispol'zuet sistemu vmeste s drugimi pol'zovatelyami. Po neskol'kim prichinam vazhno imet' predstavlenie o tom, chto delayut v sisteme drugie lyudi. Vo-pervyh, u nas mozhet vozniknut' neobhodimost' nametit' rabotu, intensivno ispol'zuyushchuyu processor, na to vremya, kogda zagruzka sistemy nevelika. Izuchenie tipichnyh variantov zagruzki siste- my mozhet pomoch' nam splanirovat' takuyu rabotu i sotrudnichat' s drugimi pol'zovatelyami so vzaimnoj vygodoj. Nam takzhe mozhet ponadobit'sya znat', nahoditsya li kto-to na svoem rabochem meste, chtoby my mogli pogovorit' s nim, ili znat', chto kto-to ochen' zanyat i byl by nedovolen, esli ego prervut. Nakonec, sushchestvuyut voprosy zashchity informacii, kotorym my udelim bol'she vnimaniya v posleduyushchih glavah. Osnovoj zashchity informacii yavlya- etsya osvedomlennost' o tom, chto delayut drugie - i, vozmozhno, o tom, chto oni ne dolzhny delat'. Poetomu my zdes' predstavim dve gruppy instrumental'nyh sredstv. Sredstva OSVEDOMLENNOSTI POLXZOVATELYA pomogayut nam sledit' za tem, chto delayut drugie, i tem samym uprostit' svyaz' s nimi. Sredstva LICHNOJ ZA- SHCHITY vazhny dlya zashchity nashej uchetnoj informacii i nashih dannyh i dlya polucheniya informacii o nashih sobstvennyh dejstviyah. Pervaya gruppa rassmatrivaemyh zdes' sredstv, otnositsya k "osve- domlennosti pol'zovatelya". |timi sredstvami yavlyayutsya activ, info, uchk, watch i whox. Komandnyj fajl activ predstavlyaet soboj modifikaciyu komandy who, pokazyvayushchuyu imya kazhdogo pol'zovatelya, nomer terminala i svedeniya o tom, naskol'ko davno dannoe lico vvodilo chto= libo s klaviatury. Po etoj informacii my mozhem skazat', kto eshche rabotaet v sisteme, aktivno li oni rabotayut i, esli oni ispol'zuyut zakreplennye linii, to gde oni nahodyatsya. Sleduyushchee sredstvo - info. Ono predostavlyaet vozmozhnost' poluchit' informaciyu o parolyah vseh ukazannyh v spiske pol'zovatelej. S pomoshch'yu etoj utility vy mozhete poluchit' obshchuyu informaciyu ob etih pol'zovatelyah i uvidet', gde razmeshchayutsya ih registracionnye katalogi. Eshche odno informativnoe sredstvo - uchk. |tot komandnyj fajl pole- zen dlya vyyasneniya togo, chto delaet ukazannyj pol'zovatel' v nastoyashchee vremya. Po etoj informacii vy mozhete skazat', prostaivayut li oni ili zhe delayut chto-to vazhnoe i ih nel'zya preryvat'. Sleduyushchee sredstvo - watch. |ta programma pohozha na "demon", ko- toryj vypolnyaetsya v fonovom rezhime i postoyanno sledit za registraciej opredelennyh pol'zovatelej. Kogda nuzhnoe vam lico registriruetsya, na vash terminal posylaetsya soobshchenie o tom, chto dannyj pol'zovatel' voshel v sistemu. Takim obrazom, vy mozhete prodolzhat' rabotu vmesto togo, chtoby postoyanno preryvat' ee. Poslednyaya utilita v dannom razdele - eto whox. Whox daet vam ischerpyvayushchie svedeniya obo vseh pol'zovatelyah, zaregistrirovavshihsya na mashine. Vy mozhete poluchit' informaciyu, pohozhuyu na rezul'tat komandy who, kotoraya otsortirovana razlichnym obrazom, otobrazit' informaciyu o terminalah ili dazhe peredat' pochtovoe soobshchenie lyubomu pol'zovatelyu. OSVEDOMLENNOSTX POLXZOVATELYA ------------------------------------------------------------ IMYA: activ ------------------------------------------------------------- activ Pokazyvaet aktivnost' terminalov NAZNACHENIE Pokazyvaet imena vseh zaregistrirovannyh pol'zovatelej, nomera ih terminalov i vremya, kogda oni poslednij raz rabotali s klaviaturoj. FORMAT VYZOVA activ PRIMER VYZOVA activ Vyvodit na ekran informaciyu ob aktivnosti pol'zovatelej na svoih terminalah TEKST PROGRAMMY 1 : 2 # @(#) activ v1.0 Display terminal activity Author: Russ Sage 2a Pokazat' aktivnost' terminalov 4 if [ $# -gt 0 ] 5 then echo "activ: argument error" >&2 6 echo "usage: activ" >&2 7 exit 1 8 fi 10 who -u | cut -c1-17,38-42 OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL activ? Pervonachal'no komp'yutery ispol'zovalis' isklyuchitel'no dlya zapuska zamknutyh, nezavisimyh zadach obrabotki informacii. Poyavlenie mnogo- pol'zovatel'skih sistem sdelalo vozmozhnym po krajnej mere elementarnoe obshchenie pol'zovatelej mezhdu soboj. Takoe obshchenie v nastoyashchee vremya yav- lyaetsya aspektom vozrastayushchej vazhnosti pri rabote s komp'yuterom. Sistema UNIX predostavlyaet komandy mail i write dlya paketnogo i interaktivnogo dialoga sootvetstvenno. S pomoshch'yu telefona my ne mozhem skazat', dostupen li kto-libo dlya obshcheniya s nami, poka ne pozvonim i ne pogovorim, vozmozhno, s odnim ili neskol'kimi drugimi lyud'mi. Poskol'ku sistema UNIX postoyanno zapisyvaet informaciyu o deyatel'nosti pol'zovatelej, bylo by poleznym umet' ispol'zovat' etu informaciyu, chtoby uznat', kto dostupen dlya obshcheniya, i poluchit' obshchee predstavlenie o tom, chem oni zanimayutsya. Posle etogo my mozhem reshat', kak i kogda my hotim svyazat'sya s nimi. Activ mozhet rasskazat' nam o tom, skol'ko vremeni proshlo s teh por, kogda kto-libo nazhimal klavishi na svoej klaviature. Esli v vashej mashine est' vydelennye linii, to vy takzhe mozhete uznat', nahoditsya li dannoe lico na svoem rabochem meste. CHTO DELAET activ? Activ pechataet informaciyu ob aktivnosti vseh pol'zovatelej siste- my. Raspechatka soderzhit imya pol'zovatelya, nomer terminala, na kotorom on zaregistrirovalsya, i vremya poslednego obrashcheniya k klaviature. Esli klaviatura byla ispol'zovana v techenie poslednej minuty, etot terminal otmechaetsya tochkoj. Esli terminal ne byl ispol'zovan v techenie posled- nih 24 chasov, naprotiv nego pechataetsya slovo "old". Vo vseh ostal'nyh sluchayah vyvoditsya vremya poslednego ispol'zovaniya terminala v minutah i sekundah. Vot primer takoj raspechatki: ------------------------ | | root tty01 01:23 | sage tty05 . | batch tty12 old | nuucp tty16 . | Vazhnym voprosom yavlyaetsya to, kak sistema uznaet, kogda kto-libo rabotaet s klaviaturoj? Poskol'ku terminal'nye ustrojstva yavlyayutsya fajlami, my mozhem sobrat' informaciyu o terminale putem prosmotra sostoyaniya fajla, svyazannogo s nim. V dannom sluchae iskomaya informaciya - vremya poslednego ispol'zovaniya klaviatury. To, chto my ishchem, uzhe est' v sisteme. |to opciya -u komandy who. |ta opciya, odnako, sushchestvuet tol'ko v sisteme AT&T UNIX System V, po- etomu komanda activ, po krajnej mere v predstavlennom vide, mozhet byt' realizovana tol'ko v etoj sisteme. Activ beret vyhod komandy "who -u" i "otrezaet" nekotorye dannye, ne imeyushchie otnosheniya k nashej celi. Putem prob i oshibok, a zatem proverki ishodnogo koda ya obnaruzhil, chto znachenie, ispol'zuemoe v komande "who -u", yavlyaetsya vremenem "mo- difikacii" fajla ustrojstva, kotoroe soobshchaet sistemnyj vyzov stat(2). Na stranicah rukovodstva po stat daetsya polnaya tablica sistemnyh vyzo- vov, kotorye izmenyayut vremennye harakteristiki fajlov. V tabl. 6.1 predstavleny eti harakteristiki: Tablica 6.1 Vremennye harakteristiki fajla -------------------------------------------------------------- Vremennye Sistemnye vyzovy, izmenyayushchie vremennye harakteristiki harakteristiki -------------------------------------------------------------- Vremya dostupa creat, mknod, pipe, utime, read Vremya modifikacii creat, mknod, pipe, utime, write Vremya sozdaniya creat, mknod, pipe, utime, write, chmod, chown, link -------------------------------------------------------------- Davajte na nekotoroe vremya otvlechemsya i pogovorim o tom, chto eti vremennye harakteristiki oznachayut i kak oni mogut byt' modificirovany. Odno interesnoe zamechanie: UNIX daet vam kak obychnomu pol'zovatelyu vozmozhnost' ustanovit' lyuboe vremya dostupa i vremya modifikacii fajla po vashemu zhelaniyu. |to i horosho, i ploho. |to obespechivaet gibkost', kogda delo kasaetsya informacii indeksnogo deskriptora fajla, no takzhe pozvolyaet skryvat' sledy pri narushenii zashchishchennoj informacii. Voz'mem, naprimer, fajl login. Kto-nibud' mog by vstavit' novuyu stroku regist- racii pered staroj i zatem vernut' vremya dostupa i vremya modifikacii v ishodnye znacheniya. Togda by nikto, prosmatrivaya fajl /bin/login koman- doj ls, ne smog by skazat', chto fajl byl izmenen. Odnako v sisteme UNIX imeetsya tret'e vremya - vremya sozdaniya. Sistema ne pozvolyaet vam izmenit' eto vremya pri pomoshchi obychnyh komand. Sistemnyj vyzov utime(2) obespechivaet izmenenie tol'ko vremeni dostupa i modifikacii. Komanda touch(1) takzhe mozhet izmenit' vremya dostupa i modifikacii, no ne vremya sozdaniya. Komanda touch stroitsya tol'ko na sistemnom vyzove. Ona mozhet delat' ne bol'she togo, chto obespechivaet sistemnyj vyzov. Komanda fsdb(1) (otladchik fajlovoj sistemy) yavlyaetsya edinstvennym sposobom preodoleniya zashchity ot izmeneniya vremeni sozda- niya. No dazhe fsdb ne mozhet upravlyat' vremenem sozdaniya. Vy dolzhny vyj- ti za predely podderzhivaemyh fsdb trebovanij bezopasnosti. Kak eto sdelat', pokazano v posleduyushchih glavah. V sluchae izmeneniya registracionnoj zapisi, rassmotrennom vyshe, vy mogli by posmotret' na vremya sozdaniya i uvidet', chto ono ochen' blizko k tekushchemu vremeni. Esli zhe kto-libo ispol'zoval fsdb dlya poddelki vremeni sozdaniya, vy nikogda ne budete imet' uverennosti v tom, chto fajl ne byl izmenen. Kakoe zhe vse eto imeet otnoshenie k opredeleniyu togo, delal li pol'zovat