ya iz programmy cu (po komande escape, a ne exit), i primeniv komandu stty, kotoraya otobrazhaet skorost' obmena: ~!stty < /dev/tty00 |ta komanda dolzhna soobshchit' obychnye ustanovki stty dlya posledovatel'nogo porta /dev/tty00. Skorost' obmena dolzhna ravnyat'sya 1200. Modemy tipa Smartmodem avtomaticheski ponizhayut skorost' do 300 bod pri otvete po telefonu. Pri vyzove vy mozhete ponizit' skorost' modema do 300 bod dvumya razlichnymi sposobami. Pervyj sposob - zastavit' cu otkryt' liniyu so skorost'yu 300 bod, ukazav 300 v komandnoj stroke programmy cu. Zametim, chto kogda vy primenyaete al'ternativnuyu skorost' (otlichnuyu ot 1200 bod), zapis' o skorosti obmena DOLZHNA prisutstvovat' v fajle L-devices I v komandnoj stroke cu, kak v sleduyushchem primere: $ cu -ltty00 -s300 dir Vtoroj metod hitree, no zato predostavlyaet bol'she gibkosti. My mozhem vyzvat' cu so znacheniem po umolchaniyu 1200, zatem vremenno (po komande escape) vyjti iz cu i vyzvat' programmu stty, chtoby ukazat' skorost' obmena posledovatel'nogo porta ravnoj 300 bodam. |to nuzhno sdelat' posle togo, kak vy obratilis' k linii s pomoshch'yu cu. |ta izmenennaya skorost' obmena dejstvitel'na do teh por, poka vy ne zakroete liniyu (t.e. okonchatel'no vyjdete iz cu po komande exit). V etot moment port inicializiruetsya zanovo. Naprimer: $ cu -ltty00 dir # Zahvatit' liniyu na 1200 bod Connected # Otzyv programmy cu ~!stty 300 < /dev/tty00 # Vremenno vyjti iz cu i # ustanovit' dlya linii tty # skorost' 300 bod Otmetim, chto etot metod NE trebuet nalichiya zapisi o skorosti 300 bod v fajle L-devices, poskol'ku my rabotaem s posledovatel'nym portom vne oblasti dejstviya programmy cu. Poputno zametim, chto vremennyj vyhod (po komande escape) iz cu sovershenno analogichen vremennomu vyhodu iz lyuboj komandy sistemy UNIX. Vy mozhete vremenno vyjti dlya zapuska opredelennoj komandy, naprimer: ~!echo "you can run any command here" Vy mozhete takzhe perejti v shell i rabotat' tak, kak vy vsegda rabotaete: ~!sh Vy dolzhny, odnako, pomnit', chto vy vse eshche podklyucheny s pomoshch'yu programmy cu k posledovatel'nomu portu, a telefon po-prezhnemu podsoedinen k udalennoj sisteme do teh por, poka vy ne dadite vruchnuyu komandu vyhoda ili otklyucheniya telefona, ili poka udalennaya sistema ne otklyuchit telefon po tajm-autu. ZAHVAT DANNYH Teper' my umeem najti modem, podklyuchit'sya k posledovatel'noj linii i ustanovit' svyaz' s drugoj sistemoj. Esli my vyzyvaem dosku ob®yavlenij, nam mozhet ponadobit'sya zahvatyvat' fajly s cel'yu posleduyushchego ispol'zovaniya. Programma cu ne predostavlyaet takoj vozmozhnosti. Kak my uzhe otmechali, mikro-|VM delayut eto obychno pri pomoshchi RAM-bufera, kotoryj sohranyaetsya na diske, kogda on zapolnyaetsya. A UNIX ne mozhet dejstvovat' takim obrazom. Prostejshij sposob, pridumannyj mnoyu dlya zahvata dannyh iz drugoj sistemy - propustit' po konvejeru vse, chto vydaetsya na terminal, cherez komandu tee sistemy UNIX. Ves' vvod s vashej klaviatury ne perehvatyvaetsya, a vse, chto idet na standartnoe ustrojstvo vyvoda (stdout) popadaet v vyhodnoj fajl utility tee. |to vyglyadit tak: cu -ltty00 dir | tee fajl_perehvata Odno iz posledstvij perehvata informacii takim metodom sostoit v tom, chto vse simvoly vozvrata karetki, pechataemye iz udalennoj sistemy, popadayut v vyvodnoj fajl komandy tee. Vy obnaruzhivaete ih v vide "^M" v konce kazhdoj stroki fajla. Izbavit'sya ot vseh etih vozvratov karetki legko, poprobujte vypolnit' takuyu posledovatel'nost' komand redaktora ed: ed fajl_perehvata 1,$s/^M//g w q Smysl etih komand sleduyushchij. Dlya kazhdoj stroki vo vsem fajle (1, $) zamenit' vozvrat karetki (^M) na nichego (//). Sdelat' eto dlya proizvol'nogo kolichestva simvolov vozvrata karetki v otdel'noj stroke ("g" oznachaet global'nuyu zamenu v stroke). Vy mozhete prevratit' control-M v zamenyaemuyu stroku libo vvodom simvola obratnoj kosoj cherty (\) i nastoyashchim nazhatiem na klavishu vozvrata karetki, libo v redaktore vi ispol'zovat' prefiks control-V dlya razresheniya vvoda upravlyayushchih simvolov. Posle redaktirovaniya zapishite fajl i vyjdite iz redaktora ed. Konechno, vse eto vy mozhete dlya udobstva oformit' v vide komandnogo fajla interpretatora shell. INSTRUMENTALXNYE SREDSTVA DLYA KOMMUNIKACIONNYH LINIJ Dve utility, kotorye my zdes' predlagaem, svyazany s dostupom k posledovatel'nomu portu. Kogda liniya osvobozhdaetsya, vy srazu zhe uznaete ob etom i mozhete upravlyat' liniej s pomoshch'yu neskol'kih nazhatij klavish. -------------------------------------------------------- IMYA: cuchk -------------------------------------------------------- cuchk Cu check - proverka svobodnoj linii dlya cu NAZNACHENIE Oprashivaet tablicu sostoyaniya processov i ishchet processy cu. Kogda oni zavershayutsya, na vash ekran vydaetsya soobshchenie i programma prekrashchaet rabotu. FORMAT VYZOVA cuchk - Soobshchit', kogda cu osvobodit liniyu PRIMER VYZOVA cuchk TEKST PROGRAMMY 1 : 2 # @(#) cuchk v1.0 Check for a free cu line Author: Russ Sage Proverka svobodnoj linii dlya cu 4 if [ "$#" -gt "0" ] 5 then echo "cuchk: too many arguments" >&2 6 echo "usage: cuchk" >&2 7 exit 1 8 fi 10 while : 11 do 12 ps -e | fgrep cu > /dev/null \ 13 && sleep 5 14 || { echo "\ncu is free"; exit; } 15 done & OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL cuchk? Pohozhe, chto bol'shinstvo sistem UNIX skupy na posledovatel'nye porty. |to stanovitsya vazhnym momentom, kogda imeetsya tol'ko odin vyvodnoj port dlya shesti ili semi chelovek. Opyt pokazyvaet, chto esli vy ne poluchite dostup k portu srazu, to vam prijdetsya zhdat' snova i snova i vy ne budete znat', kak dolgo sobiraetsya tekushchij pol'zovatel' zanimat' opredelennyj port. Vmesto togo chtoby teryat' vremya na postoyannuyu proverku zanyatosti porta, pochemu by ne poruchit' mashine soobshchit' vam, kogda etot port osvoboditsya? CHTO DELAET cuchk? Pri vyzove programmy cuchk ona zapuskaetsya v fonovom rezhime. Ona upravlyaetsya beskonechnym ciklom, obespechivayushchim ee rabotosposobnost'. Programma cuchk nablyudaet za sistemoj, vedya poisk sredi vseh aktivnyh processov. Esli ona obnaruzhivaet process cu (kotoryj mozhet rabotat' s interesuyushchim nas portom, a mozhet i net), ona zasypaet na 5 sekund i snova vedet poisk. Esli net processov cu, funkcioniruyushchih na mashine, ona vydaet soobshchenie "cu is free" ("cu svobodna") i zavershaetsya. Takim obrazom, my ne obyazany vruchnuyu sledit' za rabotoj cuchk, ona sama zapuskaetsya i sama zavershaetsya. |to imeet smysl, poskol'ku vsya cennost' etoj utility svelas' by na net, esli by ee samu nuzhno bylo periodicheski proveryat'! POYASNENIYA V strokah 4-8 vypolnyaetsya proverka na oshibki. Poskol'ku cuchk ne imeet nikakih opcij, v komandnoj stroke ne dolzhno byt' nikakih parametrov. Esli parametry prisutstvuyut, eto schitaetsya oshibkoj. Stroki 10-15 organizuyut vechnyj cikl while. Obratite vnimanie, chto ampersand v stroke 15 avtomaticheski zapuskaet cuchk v fonovom rezhime, ved' net nikakogo rezona vypolnyat' etu programmu v prioritetnom rezhime. V stroke 12 vypolnyaetsya komanda "ps -e", kotoraya vydaet informaciyu o sostoyanii vseh znachitel'nyh pol'zovatel'skih processov. |ti dannye propuskayutsya po konvejeru cherez fgrep. Utilita fgrep ishchet nalichie simvolov "cu". My nadeemsya, chto eti simvoly sootvetstvuyut tol'ko processam cu, kotorye my ishchem. Oni mogut, odnako, otnosit'sya k chemu-to sovershenno neozhidannomu, naprimer "picuser" ili k kakomu-to analogichno postroennomu imeni. Rezul'tat raboty komandy fgrep napravlyaetsya na ustrojstvo /dev/null, chtoby izbavit'sya ot lishnej informacii. Nas interesuet tol'ko status zaversheniya komandy fgrep. On soobshchaet nam, najdeno li vhozhdenie simvolov "cu" ili net. V konce stroki 12 prisutstvuet simvol obratnoj kosoj cherty, ukazyvayushchij interpretatoru shell, chto sleduyushchaya fizicheskaya strochka yavlyaetsya na samom dele chast'yu toj zhe samoj programmnoj stroki i chto nuzhno dobavit' ee k stroke 12, a ne vypolnyat' samostoyatel'no. Razbienie dlinnyh strok na neskol'ko men'shih strok s pomoshch'yu simvolov obratnoj kosoj cherty pozvolyaet nam poluchat' krasivo oformlennyj, bolee naglyadnyj ishodnyj kod. Stroka 13 vypolnyaetsya v tom sluchae, esli fgrep otrabotala uspeshno (t.e. esli ona vydaet nulevoj status zaversheniya). |to oznachaet, chto simvoly "cu" najdeny, a znachit process cu rabotaet i v nastoyashchee vremya ne dostupen. Poetomu process cuchk zasypaet na 5 sekund. Kogda on probuzhdaetsya, vypolnenie prodolzhaetsya so stroki 10, vozobnovlyaetsya vechnyj cikl i proverka processov prodolzhaetsya. Esli fgrep ne nahodit simvoly "cu" (vozvrashchaetsya nenulevoj status zaversheniya), to vypolnyaetsya stroka 14, kotoraya vydaet soobshchenie o tom, chto programma cu svobodna, i rabota programmy zavershaetsya. Takim obrazom, my srazu zhe znaem, chto liniya cu otkryta dlya ispol'zovaniya, poetomu my mozhem poskoree zanyat' ee. ---------------------------------------------------- IMYA: talk ---------------------------------------------------- talk Obrashchenie k posledovatel'nomu portu NAZNACHENIE Vypolnyaet komandnuyu stroku, podgotavlivayushchuyu posledovatel'nyj port dlya obshcheniya s drugoj sistemoj. FORMAT VYZOVA talk [-bBAUD] [-l] [-tTTY] [-u] Opcii: -b ustanovit' novuyu skorost' obmena -l protokolirovat' vse postupayushchie dannye -t ispol'zovat' drugoj port tty -u ispol'zovat' prinyatuyu v UNIX skorost' obmena 9600 PRIMER VYZOVA talk -b300 -t01 -l Obratit'sya k posledovatel'nomu portu tty01 na skorosti 300 bod i protokolirovat' vyvodnye dannye v tekstovyj fajl. TEKST PROGRAMMY 1 : 2 # @(#) talk v1.0 Talk to the serial port Author: Russ Sage Obrashchenie k posledovatel'nomu portu 4 BAUD="1200" 5 TTY="tty11" 6 PIPE="" 8 for ARG in $@ 9 do 10 case $ARG in 11 -b*) BAUD="`echo $ARG|cut -c3-`";; 12 -l) echo "logging in /tmp/talk.$$" 13 PIPE="| tee /tmp/talk.$$";; 14 -t*) TTY="tty`echo $ARG|cut -c3-`";; 15 -u) BAUD="9600";; 16 *) echo "talk: invalid argument $ARG" >&2 17 echo "usage: talk [-bBAUD] [-l] [-tTTY] [-u]" >&2 18 echo " -b baud rate" >&2 19 echo " -l log the output" >&2 20 echo " -t use another tty" >&2 21 echo " -u 9600 baud to UNIX" >&2 22 exit 1;; 23 esac 24 done 26 eval cu -s$BAUD -l$TTY dir $PIPE PEREMENNYE SREDY VYPOLNENIYA ARG Argument iz komandnoj stroki BAUD Skorost' obmena, kotoruyu nuzhno ukazat' programme cu PIPE Soderzhit stroku, sozdayushchuyu konvejer dlya zahvata dannyh TTY Nomer ispol'zuemogo porta tty OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL talk? Registraciya v udalennoj sisteme rasshiryaet gorizonty vashih vychislitel'nyh vozmozhnostej. Uchityvaya, chto UNIX stanovitsya vse bolee rasprostranennoj sistemoj sredi mikro-|VM, sistemy UNIX, prigodnye dlya svyazi, skoro budut vezde. Krome togo, vy mozhete vyzvat' iz vashej sistemy UNIX mnogo sistem tipa dosok ob®yavlenij, funkcioniruyushchih na mikro-|VM. Nam nuzhen horoshij interfejs dlya upravleniya modemnoj liniej i oblegcheniya ee ispol'zovaniya. Nam neobhodimo zahvatyvat' dannye, esli eto vozmozhno, izmenyat' skorost' obmena i menyat' terminal'nyj port, esli v etom est' potrebnost'. Vse eto delaet komandnyj fajl talk. CHTO DELAET talk? Programma talk generiruet komandnuyu stroku, osnovannuyu na podrazumevaemoj konfiguracii. |ta konfiguraciya takova: 1200 bod, podklyuchenie k terminal'noj linii /dev/tty11 (posledovatel'nyj port 1 v sisteme SCO XENIX), zahvat dannyh ne proizvodit'. Vse podrazumevaemye parametry mozhno izmenit' v tekste ishodnogo fajla, a terminal'naya liniya dolzhna byt' ustanovlena s uchetom specifiki vashej sistemy. Esli vy hotite izmenit' skorost' obmena, ukazhite s pomoshch'yu opcii -b nuzhnuyu vam skorost' (podrazumevaetsya, chto eto odna iz standartnyh skorostej, podderzhivaemyh programmoj cu). Naprimer,"talk -b2400" ustanavlivaet skorost' 2400 bod. Ukazannaya skorost' peredaetsya komande cu, kotoraya neposredstvenno izmenyaet harakteristiki vashego podklyucheniya. Vazhno imet' v vidu, chto eta skorost' dolzhna byt' opredelena v fajle L-devices. Esli vy hotite zahvatit' vse dannye, vyvodimye na vash ekran, vklyuchite opciyu protokolirovaniya, ukazav -l. Fajl s zahvachennymi dannymi budet nazyvat'sya /tmp/talk.$$, gde $$ - unikal'nyj identifikatora processa vashego tekushchego interpretatora shell. |to imya vydaetsya na ekran pri vyzove dannoj opcii, tak chto vy uvidite ego na vashem ekrane. Unikal'nost' imen fajlov obespechivaetsya dlya togo, chtoby vy ne poteryali po nedosmotru registracionnye fajly ot predydushchih seansov raboty (ili chtoby, po krajnej mere, bylo ochen' malo shansov, chto eto proizojdet). Esli u vas fakul'tativnyj posledovatel'nyj port s modemom ili esli vy hotite podklyuchat'sya k lyuboj iz vozmozhnyh linij, primenite opciyu -t. Vmeste s etoj opciej ukazhite nomer tty, kotoryj budet zatem peredan v komandu cu. |to ochen' poleznaya opciya, esli u vas mnogo razlichnyh linij dlya ispol'zovaniya cu. Esli vy ne ispol'zuete vash posledovatel'nyj port dlya podklyucheniya modema, a imeete pryamoe podsoedinenie k drugoj sisteme UNIX, opciya -u totchas zhe ustanovit skorost' obmena 9600 bod. Zametim, chto togo zhe effekta mozhno bylo by dostich', ukazav -b9600, no opciyu -u proshche vvodit' i zapominat'. PRIMERY 1. $ talk -l -t12 Podklyuchit'sya k dopolnitel'nomu posledovatel'nomu portu i zahvatyvat' dannye, kotorye prohodyat na ekrane. 2. $ talk -u Podklyuchit'sya k osnovnomu posledovatel'nomu portu s ispol'zovaniem skorosti 9600 bod. Ne vklyuchat' zahvat dannyh. 3. $ talk -b2400 -t04 -u Vnimanie! Snachala opciya -b ustanavlivaet skorost' 2400, no dalee sleduet opciya -u, kotoraya pereustanavlivaet znachenie skorosti na 9600. 4. $ talk -u -l -b4800 Snova bud'te vnimatel'ny! Snachala liniya podklyuchaetsya napryamuyu so skorost'yu 9600 bod. Zatem vklyuchaetsya protokolirovanie. Nakonec, znachenie skorosti menyaetsya s 9600 na 4800. Esli na samom dele liniya, k kotoroj vy obrashchaetes', rabotaet na skorosti 9600 bod, vy dolzhny, esli eto vozmozhno, ponizit' skorost', nazhimaya ~%b dlya generacii signala break. POYASNENIYA V strokah 4-6 ustanavlivayutsya dejstviya, vypolnyaemye programmoj talk po umolchaniyu. |ti dejstviya mozhno polnost'yu izmenit' putem redaktirovaniya ishodnogo fajla. Glavnoe dostoinstvo etih umolchanij v tom, chto esli takuyu konfiguraciyu vy ispol'zuete chashche vsego, to vam dostatochno prosto vvesti "talk", bez vsyakih opcij. Stroka 4 inicializiruet peremennuyu BAUD znacheniem 1200, eto znachenie po umolchanie dlya skorosti modema. Stroka 5 prisvaivaet peremennoj TTY znachenie tty11, chto sootvetstvuet pervomu posledovatel'nomu portu apparatury. Obychno nuzhno tty00, no SCO XENIX imeet virtual'nuyu konsol', prichem tty02-tty10 yavlyayutsya otdel'nymi ekranami, dostup k kotorym osushchestvlyaetsya s odnogo konsol'nogo ustrojstva. Esli eto ne tak v vashej sisteme, ukazhite zdes' pravil'noe znachenie TTY. V stroke 6 peremennaya PIPE inicializiruetsya pustoj strokoj, tak kak konvejer primenyaetsya dlya protokolirovaniya dannyh, a po umolchaniyu zahvat dannyh ne vypolnyaetsya. Stroki 8-24 predstavlyayut soboj cikl, kotoryj perebiraet vse argumenty komandnoj stroki. V strokah 10-23 ispol'zuetsya operator vybora sredi opcij dlya vypolneniya trebuemyh funkcij. Stroka 11 proveryaet, nachinaetsya li dannaya opciya s simvolov -b, posle kotoryh sleduet chto-to eshche. Esli da, to simvoly, sleduyushchie posle -b, vyrezayutsya i zanosyatsya v peremennuyu BAUD. Obratite vnimanie, chto imenno poetomu vy dolzhny nabirat' "-b2400", a ne "-b 2400". V stroke 12 proveryaetsya, hotite li vy vklyuchit' protokolirovanie. Esli da, to na ekran vyvoditsya imya protokol'nogo fajla, a peremennaya PIPE ustanavlivaetsya tak, chtoby napravit' standartnyj vyvod po konvejeru programme tee sistemy UNIX. Programma tee - eto universal'naya konvejernaya programma rasshchepleniya, kotoruyu mozhno ispol'zovat' dlya posylki kopii potoka dannyh v opredelennyj punkt naznacheniya, ne vozdejstvuya na osnovnoj konvejer. V dannom sluchae my primenyaem programmu tee dlya posylki dannyh, prohodyashchih cherez posledovatel'nyj port, na ekran i v nash registracionnyj fajl /tmp/talk/.$$. (Esli vy predstavite sebe vodyanuyu trubu s T-obraznym stykom, to pojmete, chto proishodit.) Stroka 14 proveryaet, nachinaetsya li opciya s -t. Esli eto tak, to vyrezaetsya nomer terminala. Zdes' mozhno peredat' lyuboe znachenie tty, no ne zabyvajte, chto etot nomer tty dolzhen takzhe prisutstvovat' v fajle /usr/lib/uucp/L-devices. Blagodarya etomu fajlu, programma cu znaet, chto terminal'noe ustrojstvo podklyucheno k razreshennomu portu. V stroke 15 proveryaetsya, sobiraetes' li vy podklyuchat'sya k sisteme UNIX napryamuyu. Esli da, skorost' obmena avtomaticheski ustanavlivaetsya na 9600 bod v celyah povysheniya propusknoj sposobnosti terminala. Stroki 16-22 vypolnyayut proverku oshibok. Esli kakaya-libo opciya, peredannaya v komandnoj stroke, ne sootvetstvuet nikakomu iz predydushchih obrazcov operatora case, etot fakt fiksiruetsya zdes', vydayutsya soobshcheniya ob oshibkah i komandnyj fajl zavershaetsya. Stroka 26 - eto volshebnaya stroka. Poskol'ku vse shell-peremennye poluchili svoi znacheniya, my mozhem ispol'zovat' ih v komandnoj stroke, chtoby podstavit' v nee neobhodimye znacheniya. Snachala primenyaetsya komanda eval. Ona raskryvaet vse imena peremennyh, zamenyaya ih na sootvetstvuyushchie znacheniya. V dannom sluchae my formiruem polnuyu komandnuyu stroku utility cu: skorost' beretsya iz peremennoj BAUD, liniya iz TTY, a podsoedinenie pryamoe. Esli my ne vedem protokolirovanie dannyh, znachenie PIPE nulevoe i ono budet otbrosheno pri sintaksicheskom razbore. Esli zhe peremennaya PIPE soderzhit komandu dlya otpravki dannyh v protokol'nyj fajl, komanda eval obespechivaet eto, organizovyvaya takoj konvejer, kak my ukazali. DOSTUP IZ UNIX V UNIX Teper' davajte rassmotrim polnovesnoe obshchenie dvuh sistem UNIX. Imeetsya oblast', v kotoroj UNIX operedila svoe vremya. Sistema uucp pozvolyaet svyazat' neskol'ko mashin voedino i sozdat' to, chto v nekotoryh otnosheniyah yavlyaetsya virtual'nym okruzheniem, pozvolyayushchim vam rabotat' na lyuboj mashine. Funkcionirovanie takoj seti osnovano na udalennoj registracii v sisteme (cu(1)), distancionnom vypolnenii komand (uux(1)), elektronnoj pochte (mail(1)), peredache fajlov (uucp(1), uucico(1)) i opoznavanii uzla sistemy (uname(1) i uuname(1)). Poskol'ku my zanimaemsya realizaciej kommunikacij tipa UNIX-UNIX, davajte rassmotrim nekotorye sposoby fizicheskogo soedineniya UNIX-mashin v odnu rabochuyu sredu. SVYAZYVANIE UNIX-MASHIN V rabochej obstanovke mashinnye konfiguracii postoyanno menyayutsya v celyah testirovaniya, iz-za apparatnyh izmenenij, perestanovok i pereezdov i t.d. Planirovat' konfiguraciyu vashih mashin nuzhno tak, chtoby ona byla maksimal'no gibkoj, eto pomozhet izbezhat' haosa i razlada. Vashi potrebnosti vliyayut na to, kak vy soedinite razlichnye UNIX-mashiny. Esli imeetsya blok opredeleniya prioritetnogo zaprosa k portu (port contender), vam prihoditsya imet' s nim delo. Odni linii mogut byt' podsoedineny napryamuyu, drugie napryamuyu cherez blok oprede- leniya prioritetnogo zaprosa k portu, tret'i cherez modemnye kommutato- ry. Dlya togo chtoby nauchit'sya imet' delo so vsemi etimi vozmozhnostyami, poprobuem predstavit' eti konfiguracii v graficheskom vide. Pervyj tip podklyucheniya - pryamoe podklyuchenie (sm. ris. 8-7). Sleva pokazana vyzyvayushchaya sistema, sprava vyzyvaemaya. Vyzyvayushchaya sistema ispol'zuet posledovatel'nyj port dlya vyvoda, poetomu na etom portu ne dolzhno byt' processa getty. Iniciiruyushchaya komanda "cu -ltty00 -s9600 dir" obespechivaet podklyuchenie k posledovatel'nomu portu tty00 na ochen' vysokoj skorosti obmena. Pryamye podsoedineniya mogut podderzhivat' takuyu skorost'. Sam kabel' dolzhen byt' vypolnen v vide nulevogo modema (rassmotrennogo ranee v dannoj glave). V vyzyvaemoj sisteme zadejstvovany processy getty, rabotayushchie so skorost'yu 9600 bod na vhodyashchej terminal'noj linii. Kogda pol'zovatel' vvodit registracionnoe imya, getty vypolnyaet process login, zaprashivayushchij parol', i esli etot parol' vernyj, zapuskaetsya shell. Ris. 8-7. Pryamoe podklyuchenie odnoj sistemy UNIX k drugoj ------------------------------------------------------------------- DTE-1 DTE-2 +---------+ +---------+ | | | | | UNIX 1 | | UNIX 2 | | | Nulevoj modem | | | tty00 |-------------------->| tty00 | | | | | | | | | +---------+ +---------+ DEJSTVIYA DEJSTVIYA 1. Net getty 1. getty 9600 tty00 cu -ltty00 -s9600 dir login imya_pol'zovatelya sh 2. uucp fajl 2. getty 9600 tty00 unix 2!~/user login uucp uucico ------------------------------------------------------------------- Pri ispol'zovanii uucp proishodyat analogichnye veshchi. Komanda uucp generiruet process uucico, iniciiruyushchij vyzov sistemy, pokazannoj sprava. Registracionnaya posledovatel'nost' ta zhe samaya, za isklyucheniem togo, chto vmesto zapuska interpretatora shell v konce etoj posledovatel'nosti dejstvij zapuskaetsya eshche odin process uucico, kotoryj obshchaetsya s vyzyvayushchim processom. Sleduyushchaya konfiguraciya - pryamoe podklyuchenie cherez selektor porta - pokazana na ris. 8-8. Zdes' tozhe kabel', idushchij ot DTE-1 k selektoru porta, dolzhen byt' nulevym modemom. Ris. 8-8. Pryamoe podklyuchenie cherez selektor porta ------------------------------------------------------------------- +---------+ +----------+ +---------+ | | | | | | | UNIX 1 | | | | UNIX 2 | | | Nulevoj | Selektor | Pryamoj | | | tty00 |--------->| porta |-------->| tty00 | | | modem | | kabel' | | | | | | | | +---------+ +----------+ +---------+ DEJSTVIYA DEJSTVIYA 1. cu -ltty00 -s9600 dir 1. getty tty00 9600 login imya_pol'zovatelya sh 2. uucp fajl 2. getty 9600 tty00 unix 2!~/user login uucp uucico ------------------------------------------------------------------- Selektor porta prinimaet lyuboe kolichestvo vhodnyh linij i pereklyuchaet ih na men'shee kolichestvo fiksirovannyh vhodnyh linij komp'yutera. Takim obrazom, mozhno poluchit' dostup ko vsem terminalam, ne imeya vhodnoj linii, kotoraya chasto by pustovala, poskol'ku ona prednaznachena opredelennomu licu. Registracionnaya posledovatel'nost' v tochnosti takaya zhe, kak i dlya pryamogo podklyucheniya, krome kakih-libo dopolnitel'nyh nazhatij na klavishi, primenyaemyh dlya prohozhdeniya cherez selektor. Obychno vozvrat karetki aktiviziruet liniyu, chtoby poluchit' registracionnuyu podskazku. Poslednyaya konfiguraciya (na ris. 8-9) predstavlyaet soboj distancionnoe podklyuchenie dvuh sistem UNIX. Kazhdoe terminal'noe ustrojstvo DTE soedinyaetsya so svoim modemom pryamym kabelem. DTE-1 vyzyvaet DTE-2 libo vruchnuyu s pomoshch'yu cu, libo s pomoshch'yu utility uucp, ispol'zuyushchej uucico i programmu nabora telefonnogo nomera. Samoe bol'shoe otlichie v tom, chto eto podsoedinenie rabotaet na skorosti 1200 bod. |to znachit, chto libo DTE-2 zapuskaet 1200-bodovyj process getty, libo esli getty imeet skorost' 9600, to vam nuzhno sbrosit' ee. Dlya togo chtoby ponizit' skorost', v programme cu trebuetsya vvesti ~%b v kachestve signala break. Ili, esli vy rabotaete s pomoshch'yu uucp, mozhno pomestit' stroku BREAK v fajle L.sys, chtoby otpravit' ee v vyzvannuyu sistemu. Ris. 8-9. Distancionnoe soedinenie dvuh sistem UNIX ------------------------------------------------------------------- +---------+ +---------+ | | | | | UNIX 1 | ***** _||_ ***** | UNIX 2 | | | Pryamoj * * _||_ * * Pryamoj | | | tty00 |------->* modem *-- || --* modem *------->| tty00 | | | kabel' * * || * * kabel' | | | | ***** || ***** | | +---------+ +---------+ DEJSTVIYA DEJSTVIYA 1. cu -ltty00 -s9600 dir 1. getty 1200 tty00 login imya_pol'zovatelya sh 2. uucp fajl 2. getty 1200 tty00 unix 2!~/user login uucp uucico ------------------------------------------------------------------- OBLASTI DLYA PEREDAVAEMYH FAJLOV Kogda vy peresylaete fajly mezhdu mashinami, uucp priderzhivaetsya opredelennyh protokolov i standartov. Odin iz nih svyazan s tem, otkuda i kuda mogut postupat' fajly. CHtoby svesti vozmozhnuyu nerazberihu k minimumu i obespechit' opredelennuyu stepen' zashchity, sozdayutsya zashchishchennyj i publichnyj katalogi dlya hraneniya stoyashchih v ocheredi zadanij i peredannyh fajlov. Naibolee vazhen katalog /usr/spool/uucp. On soderzhit LOGFILE, chto daet vozmozhnost' s pomoshch'yu komandy "tail -f LOGFILE" zaglyanut' v operacii peredachi vo vremya ih vypolneniya. Tranzakcii uucp i mail popadayut v etot katalog. Obychno tranzakciya sostoit iz upravlyayushchego fajla (C.*) i fajla dannyh (D.*). Kogda odna mashina ispol'zuetsya v kachestve central'nogo uzla, ee katalog uucp mozhet zapolnit'sya ochen' bol'shim kolichestvom fajlov. Neobhodimo obychnoe soprovozhdenie i postoyannoe slezhenie za fajlami zanyatosti (LCK* i STST*), chtoby byt' uverennym, chto vse rabotaet pravil'no. Sleduyushchij interesnyj katalog /usr/spool/uucppublic, chashche vsego izvestnyj pod nazvaniem PUBDIR (eto shell-peremennaya). On soderzhit katalogi, nazvannye po imeni kazhdogo pol'zovatelya, chtoby hranit' fajly, prohodyashchie tranzitom s odnoj mashiny na druguyu. Bol'shinstvo katalogov imeyut vse prava dostupa, chto obespechivaet drugim pol'zovatelyam vozmozhnost' kopirovat' fajly. YA poschital poleznym sozdat' peremennuyu sredy interpretatora shell, kotoraya soderzhit marshrutnyj prefiks moego kataloga v /usr/spool/uucppublic, t.e. P=/usr/spool/uucppublic/russ. Teper' ya mogu obrashchat'sya k fajlam, vvodya $P/*. |to znachitel'no sokrashchaet vvod i uproshchaet peresylku fajlov v etot katalog i iz nego. Peremennaya PUBDIR podderzhivaetsya sintaksisom uucp. V dannom primere ispol'zuetsya sintaksis uucp: $ uucp * remote!~/user |ta komanda kopiruet kazhdyj fajl tekushchego kataloga v sistemu "remote", zatem oboznachenie ~/ prevrashchaetsya v prefiks /usr/spool/uucppublic. Esli v etoj komande user ne yavlyaetsya katalogom, kopiruemye fajly poluchayut imya user, a ne kopiruyutsya v katalog s imenem user. Vy dolzhny sami sozdat' katalog, posle chego primenit' k nemu komandu chmod 777, chtoby v nego mozhno bylo kopirovat'. Dlya spravki otmetim, chto ukazanie ^user prevrashchaetsya programmoj uucp v $HOME/user, a ^/user prevrashchaetsya uucp v $PUBDIR/user. Eshche odin sposob vvoda komandy s pomoshch'yu shell-peremennyh vyglyadit tak: $ uucp * remote!$P Takaya komanda kopiruet vse fajly v moj katalog PUBDIR. Esli ya zaregistrirovalsya v etoj sisteme, ya mogu vvesti: $ ls -al $P ili $ cd $P $ ls -al dlya togo, chtoby uvidet' vse skopirovannye fajly. Odin iz momentov, za kotorym vy dolzhny sledit',- razrushitel'nye komandnye fajly tipa "uuclean". |ti programmy obychno zapuskayutsya processom cron ili nekotorymi drugimi fonovymi programmami. Oni prohodyat po vsem oblastyam sistemy, svyazannym s uucp, nahodyat fajly, k kotorym ne bylo obrashchenij opredelennyj period vremeni, i udalyayut ih. |to mozhet byt' katastroficheskim, esli vy ispol'zuete PUBDIR v kachestve vremennoj oblasti hraneniya. Vot kak mozhet vyglyadet' odna iz takih "ochishchayushchih" operacij: PATH=/usr/bin:/bin export PATH cd /usr/spool/uucp find C. D. TM. X. XTMP -type f -mtime +7 -exec rm {} \; cd /usr/spool/uucppublic find . -type f -mtime +7 -exec rm {} \; Esli v vashej sisteme rabotayut takie ochishchayushchie komandnye fajly, imeetsya neskol'ko sposobov sohraneniya fajlov ot neumyshlennogo unichtozheniya. Pervyj sposob - postoyanno obrabatyvat' vse fajly utilitoj touch, chtoby oni ne raspoznavalis' operatorom find, kotoryj ishchet starye fajly. |to mozhno sdelat' tak: $ find $P -exec touch {} \; Utilita touch obnovlyaet datu dostupa i izmeneniya fajla. Figurnye skobki oznachayut, chto nuzhno pomestit' v nih literal'noe imya, sootvetstvuyushchee operatoru find. Vam zhelatel'no oformit' eto v vide zaplanirovannogo processa, kotoryj zapuskaetsya chashche, chem programma ochistki! Drugaya strategiya - proanalizirovat' ochishchayushchuyu programmu (ili komandnyj fajl). Ona zapuskaetsya superpol'zovatelem (root)? Esli net, to komanda "chmod 000 $P" mozhet pomeshat' ej vesti poisk imen vnutri moego kataloga. Esli zhe programma ochistki zapushchena superpol'zovatelem, to, konechno, nikakie ogranicheniya prav dostupa ee ne ostanovyat. V kakoe vremya ona zapuskaetsya? Mogu li ya prikazat' ej projti mimo menya, ne zaglyadyvaya v moi fajly? CHto yavlyaetsya startovym katalogom dlya ochishchayushchego komandnogo fajla? Uglublyayas' v eti voprosy, my mozhem sobrat' mnogo informacii o tom, chto delaet etot komandnyj fajl i kakie dejstviya my mozhem predprinyat', chtoby on nam ne navredil. Mozhet pokazat'sya, chto samyj legkij sposob - prosto udalit' programmu ochistki (v predpolozhenii, chto vy imeete na eto pravo). |to, odnako, ne sposobstvuet podderzhke svobodnogo prostranstva i chistyh katalogov. K tomu zhe esli vy hotite zapretit' ochistku katalogov, kotorye ochen' vazhny dlya vas, to vy dolzhny nesti otvetstvennost' za ih soprovozhdenie. SETEVAYA BEZOPASNOSTX Katalog uucppublic, kak my uzhe videli, soderzhit fajly, peredavaemye tranzitom mezhdu sistemami. Obychno vse podkatalogi v uucppublic imeyut rezhim dostupa rwxrwxrwx. |to srazu zhe porozhdaet problemu zashchity, ved' kto ugodno mozhet sozdat', razrushit' ili izmenit' fajly v etih katalogah. Takie prava dostupa dolzhny soblyudat'sya dlya lyubogo kataloga, kotoryj yavlyaetsya istochnikom ili adresatom dlya fajlov, peredavaemyh s pomoshch'yu uucp. Uucp trebuet, chtoby vse promezhutochnye katalogi imeli razreshenie na chtenie i zapis' dlya vseh pol'zovatelej. Esli uucp beret iz kataloga ishodnye fajly, dolzhny byt' obespecheny prava na chtenie. Esli zhe uucp zapisyvaet fajly v etot katalog, nuzhny prava na zapis' v katalog-adresat. Esli vy hotite, chtoby fajly uucp popadali pryamo v vash registracionnyj katalog, vy dolzhny razreshit' zapis' v vash katalog dlya vseh okruzhayushchih. SHiroko otkrytyj dostup na zapis' pozvolyaet dostavlyat' fajly pryamo k vashemu porogu, no vy ne znaete, komu vy otkryvaete dveri. Esli vy zabotites' o bezopasnosti, vam ne pon PRIEMY P. mozhet zapisat' vse, chto ugodno, v vashe rabochee prostranstvo. Odno iz reshenij - razblokirovat' vash registracionnyj katalog, no zablokirovat' vse vashi podkatalogi, krome teh, kotorye nuzhny dlya uucp. Osnovnaya problema pri etom - tak ustanovit' vse prava dostupa, chtoby kazhdyj fajl obrabatyvalsya nadlezhashchim obrazom. Bolee prostoe reshenie - derzhat' vashi katalogi dlya uucp za predelami vashego registracionnogo dereva katalogov. |to izbavlyaet vas ot problemy bezopasnosti, no oznachaet, chto vy dolzhny vruchnuyu kopirovat' fajly posle ih popadaniya v katalog tuda, gde vy hotite ih fakticheski razmestit'. OGRANICHITELXNYE FAJLY Kogda udalennaya sistema registriruetsya v central'noj sisteme s pomoshch'yu uucp, neskol'ko fajlov v central'noj sisteme opredelyayut, kakie vozmozhnosti imeet udalennaya sistema. |ti konfiguracionnye fajly razmeshchayutsya v kataloge /usr/lib/uucp. Pervyj iz takih fajlov nazyvaetsya L.cmds. On soderzhit imena vseh komand central'noj sistemy, kotorye mozhno vypolnit' iz udalennoj sistemy. Esli udalennaya sistema posylaet komandu posredstvom uux, to komanda vypolnyaetsya tol'ko pri uslovii, chto imya etoj komandy prisutstvuet v fajle L.cmds. Sleduyushchij fajl - USERFILE - opredelyaet, k kakim katalogam central'noj sistemy mozhet imet' dostup udalennaya sistema. Vy mozhete ogranichit' peresylki odnim katalogom ili razreshit' dostup k lyubomu fajlu sistemy. Po umolchaniyu v fajle USERFILE imeetsya takaya zapis': uucp, / chto pozvolyaet pol'zovatelyu uucp (podrazumevaemomu pol'zovatel'skomu imeni processa uucico) chitat' i pisat' fajly v lyubom meste dereva, nachinaya ot kornya i dvigayas' vniz, t.e. fakticheski vo vsej sisteme. |to otkryvaet lazejki v sisteme zashchity, naprimer: uucp central!/etc/passwd /tmp Zdes' izvlekaetsya parol'nyj fajl iz drugoj sistemy. S pomoshch'yu etogo fajla mozhno najti imena pol'zovatelej bez parolej, i drugie lyudi mogut prorvat'sya v vashu sistemu. Bolee strogij fajl USERFILE vyglyadit tak: uucp /usr/spool/uucppublic /tmp chto ogranichivaet fajlovye peresylki tol'ko ukazannymi katalogami. |to prepyatstvuet predydushchej popytke peresylki parol'nogo fajla. Poslednij fajl L.sys, veroyatno, naibolee vazhen dlya uucp s tochki zreniya sistemy zashchity. On soderzhit imena uzlov, telefonnye nomera, registracionnye imena i paroli dlya vseh udalennyh sistem, izvestnyh central'noj sisteme. Esli by kakaya-to chast' etoj informacii byla dostupna shirokoj publike, kto-nibud' smog by vypolnit' peresylku s pomoshch'yu uucp iz udalennoj sistemy i pretendovat' na rol' central'noj sistemy. Novaya sistema HoneyDanber uucp v System V koe-chto delaet dlya togo, chtoby ne davat' udalennym sistemam perehvatyvat' pochtu i peresylki dannyh putem maskirovki pod drugie udalennye sistemy. V glave 9 bolee podrobno rassmatrivayutsya voprosy bezopasnosti programmy uucp i kommunikacij voobshche. V sleduyushchem primere pokazan fajl L.sys, v kotorom opredeleny dva raznyh vida sistem: sistemy tipa pryamogo podklyucheniya i udalennye sistemy s nomeronabiratelem (dial-up systems). remote Any ACU 1200 5551212 ogin:--ogin: uucp word: uucp selector Any ACU 1200 5551213 \d--CLASS--CLASS A ogin:--ogin: uucp word: uucp direct Any tty00 9600 tty00 ogin:-@-ogin: uucp word: uucp Zapis' dlya sistemy "remote" otrazhaet, chto eto liniya s naborom nomera, mozhet byt' vyzvana proizvol'noe chislo raz ("any time"), dostupna cherez ACU (automatic call unit - avtomaticheskoe ustrojstvo vyzova) so skorost'yu 1200 bod i po nomeru 5551212. Registracionnaya posledovatel'nost' opredelena v vide registracionnogo imeni uucp i parolya uucp. Slovo "ogin" - ne opechatka. Uucp ispol'zuet podskazku "ogin:" dlya togo, chtoby otlichit' ee ot obychnoj podskazki login sistemy UNIX. Raspoznavanie shablona "ogin:" bolee nadezhno, chem ispol'zovanie "Login:" ili "login:". Ukazanie "Any" mozhno zamenit' na opredelennye intervaly vremeni, esli 24-chasovyj dostup ne razreshen. Zametim, chto oboznachenie "ACU" sootvetstvuet zapisi ACU v fajle L-devices (kak rassmotreno ranee). V sleduyushchej zapisi fajla L-devices imena cua0 i cul0 svyazany s ustrojstvom, prisoedinennym k modemu, v dannom sluchae /dev/tty00: ACU cul0 cua0 1200 |tu svyaz' mozhno proverit' s pomoshch'yu komandy "ls -li /dev/tty* /dev/cul* /dev/cua*". Sistema "selector" v nashem fajle L.sys takzhe imeet nabor nomera, tol'ko podklyuchaetsya cherez kommutator porta. Dlya obshcheniya s kommutatorom porta neobhodima dopolnitel'naya informaciya, kotoraya nachinaetsya s simvolov "\d". Polya v fajle L.sys sleduyut v takom poryadke: "ozhidanie posylka ozhidanie posylka ...". Kogda my v pervyj raz podklyuchaemsya k selektoru porta, v nashu liniyu nichego ne vyvoditsya. Prosto on tak rabotaet. Selektoru nuzhen simvol , chtoby stat' aktivnym, a pervoe pole uucp oznachaet ozhidanie. Kak nam nichego ne dozhdat'sya i poslat' vozvrat karetki? Putem ukazaniya uucp ozhidat' nevozmozhnyj simvol, naprimer control-D (\d). Uucp nikogda ne poluchit ego, poetomu po tajm-autu eta programma vydast vozvrat karetki (-). Esli slovo CLASS prihodit nazad, kogda my posylaem CR, to my otpravlyaem simvol "A", kotoryj oznachaet klass sistemnoj identifikacii, ukazannyj v dannoj zapisi. Kogda svyaz' ustanavlivaetsya, my ishchem "ogin:" v kachestve registracionnoj podskazki. Esli my ne nahodim ee, to posylaem simvoly vozvrata karetki. |to mozhet potrebovat'sya po toj prichine, chto iniciiruyushchij process getty v sisteme A mozhet byt' nastroen na 9600 bod. Togda my dolzhny budem poslat' libo simvoly vozvrata karetki, libo simvoly break, chtoby sbrosit' skorost' obmena do 1200 bod. Poslednyaya sistemnaya zapis' "direct" ne ispol'zuet ACU i telefonnyj nomer. Ona sobiraetsya obrashchat'sya k terminal'noj linii tty00 na skorosti 9600 bod, chtoby poluchit' registracionnuyu posledovatel'nost'. Zdes' net selektora porta, cherez kotoryj nuzhno projti, a est' prosto pryamaya liniya. V fajle L-devices eta liniya opisana tak: DIR tty00 0 9600 OTLADKA KOMMUNIKACIJ V teh sluchayah, kogda uucp rabotaet nepravil'no, mozhno vospol'zovat'sya nekotorymi hitrostyami otladki. Posledovatel'nost' dejstvij po otladke obychno prohodit po takomu ciklu: popytat'sya peredat' fajl, lokalizovat' problemu, razreshit' ee, sdelat' eshche odnu peredachu. Zdes' my rassmotrim lokalizaciyu problemy i vypolnenie eshche odnoj peresylki. Esli posle proverki i pereproverki vseh konfiguracionnyh fajlov imeyut mesto otkazy pri peredache fajlov, zapustite vruchnuyu programmu /usr/lib/uucico s nekotorymi aktivnymi otladochnymi flagami. Oni pomogut uvidet', kak proishodit rukopozhatie. Vot komandnaya stroka dlya otladochnogo rezhima: /usr/lib/uucp/uucico -r1 -x9 -ssystem_name gde r1 ukazyvaet programme uucico startovat' v vedushchem (master) rezhime, vyzyvaya system_name, a x9 ukazyvaet uroven' otladochnyh soobshchenij. Esli vy hotite poluchat' ot uucico pomen'she podrobnostej, mozhete ponizit' uroven' otladki do x4 ili drugogo znacheniya. Otladochnyj vyvod var'iruetsya v diapazone ot x1 do x9. Tipichnaya posledovatel'nost' dlya etoj komandy vyglyadit tak. Vo -pervyh, postavit' nekotorye fajly v ochered' dlya togo, chtoby napravit' ih v druguyu sistemu. Blagodarya postanovke fajlov v ochered', vy izbegaete avtomaticheskogo zapuska processa uucico. Posle togo kak fajly postavleny v ochered' i gotovy k peredache, zapustite otladochnyj rezhim i sledite za proishodyashchim. |to vyglyadit primerno tak: --------------------------------- | | $ uucp -r *.c remote!~/src | $ /usr/lib/uucp/uucico -r1 -x4 -sremote | Esli vam nuzhno tol'ko aktivizirovat' peredachu s pomoshch'yu uucp v obychnom rezhime, to proshche vsego primenit' komandu mail. Naprav'te pochtoj nekotoryj tekst pol'zovatelyu drugoj sistemy - i mehanizm uucp srazu zhe nachnet rabotu. Sleduyushchaya komanda privodit k tomu, chto etot mehanizm vyzyvaet sistemu "remote" i zapuskaet utilitu rmai(1) v drugoj sisteme, chtoby peredat' po pochte fajl "dummy" pol'zovatelyu "user": $ mail remote!user < dummy Est' komanda, kotoraya yavno vyzyvaet /usr/lib/uucp/uucico - eto komanda uusub(1M), razmeshchennaya v kataloge /usr/lib/uucp. Ona vyzyvaetsya s ukazaniem imeni sistemy, s kotoroj vy hotite svyazat'sya. Bol'shinstvo sistem imeyut takuyu komandu. Esli u vas ee net, pol'zujtes' uucico. Esli takaya koman