| tee $HBB/board/session$$ Stroka 25 prisvaivaet peremennoj HDIRS vse imena katalogovyh pe- remennyh, chto oblegchaet podklyuchenie vseh katalogov bez povtornogo vvo- da ih imen. My mozhem prosmotret' vse katalogi i napechatat' razmer ispol'zuemogo diskovogo prostranstva: $ for DIR in $HDIRS > do > echo "disk usage for $DIR: `du -s $DIR`" > done Stroka 26 eksportiruet peremennye tak, chtoby my mogli vsegda ih ispol'zovat'. Otmetim, chto my eksportirovali $HDIRS i HDIRS. Pered tem, kak vypolnit' eksportirovanie, $HDIRS bylo rasprostraneno na vse razlichnye imena peremennyh. Sledovatel'no, fakticheski my eksportirova- li vse imena plyus samu peremennuyu HDIRS. Stroka 28 inicializiruet P tak, chtoby eto byl vash katalog v PUBDIR, to est' /usr/spool/uucppublic. Teper' u nas est' prostoj sposob ssylat'sya na nashi fajly pri rabote s komandoj uucp. Stroka 30 ustanavlivaet CDPATH. |to put', kotoryj proveryaetsya, kogda vy vypolnyaete komandu cd. Snachala proveryaetsya tekushchij katalog (.) na predmet togo, est' li v nem imya kataloga, v kotoryj vy hotite popast'. Zatem proveryaetsya .. (roditel'skij katalog). Posle etogo prosmatrivaetsya vash registracionnyj katalog. Poslednim naznacheniem CDPATH yavlyaetsya $HDIRS, chto podklyuchaet imena vseh podkatalogov. Cel' etih imen - pozvolit' komande cd iskat' v sootvetstvuyushchem kataloge vvedennoe vami imya. Naprimer, esli by vy byli v /etc i nabrali "cd doc", vy by popali v $HOME/doc, poskol'ku CDPATH soderzhalo v sebe $HOME. Analogichno, esli by vy imeli podkatalog $HOME/doc/status i vveli "cd status" otkuda-li- bo iz drugogo mesta v sisteme, vy by prishli v $HOME/doc/status, tak kak koren' $HOME/doc byl v CDPATH. Poryadok poiska v katalogah takoj zhe, kak ob®yavleno v peremennoj CDPATH. Esli vy vvodite imya kataloga, kotoroe vstrechaetsya bolee chem v odnom meste, vy popadaete v pervyj katalog, obnaruzhennyj pri posledo- vatel'nom poiske. Naprimer, esli by vy skazali "cd sys", to popali by v $HOME/sys prezhde, chem v $HOME/ src/sys. V tabl. 1-1 priveden primer ekvivalentnyh komand cd, predstavlen- nyh v treh razlichnyh formah, kotorye ponimaet UNIX. To, kakuyu formu vy ispol'zuete, zavisit ot togo, chto schitaetsya naibolee udobnym i trebuet kak mozhno men'she nazhatij klavish. Tablica 1-1 Tri sposoba ispol'zovaniya komandy cd ------------------------------------------------------------- Absolyutnyj CDPATH Otnositel'no peremennoj ------------------------------------------------------------- cd /usr/russ cd cd $HOME cd /usr/russ/src/asm cd asm cd $HSR/asm cd /usr/russ/doc/paper/conf cd paper/conf cd $HD/paper/conf cd /usr/russ/tmp cd tmp cd $HT ------------------------------------------------------------- Stroka 31 inicializiruet peremennuyu PATH. PATH rabotaet takim zhe obrazom, kak CDPATH. Ona ishchet programmy, kotorye nuzhno zapustit', v kazhdom kataloge, ukazannom v peremennoj PATH. Esli imya ne najdeno ni v odnom iz etih katalogov, pechataetsya soobshchenie ": not found" (": ne najdeno"). Poskol'ku my mozhem ustanovit' nash PATH kak ugodno, mozhno ukazat' vse tainstvennye mesta v sisteme, v kotoryh raspolozheny ispolnyaemye moduli. Kogda my hotim ih vypolnit', my ne obyazany ih iskat' i nabi- rat' polnoe marshrutnoe imya. CHtoby dopolnit' PATH, vvedite, naprimer, sleduyushchee: PATH=$PATH:/usr/lib/uucp Komanda paths, predstavlennaya dalee v etoj knige, ispol'zuet $PATH, chtoby soobshchit' nam, v kakom kataloge razmeshchen ispolnyaemyj mo- dul'. Stroka 32 inicializiruet peremennuyu SHELL. |tu peremennuyu mogut ispol'zovat' ne bolee chem odna ili dve utility. Obychno ona ustanavli- vaetsya sistemoj, kogda vy registriruetes'. Stroka 33 eksportiruet pe- remennye CDPATH, PATH i SHELL. Stroki 35-39 - eto hitryj sposob ustanovki opredelenij termina- lov. Stroka 35 nachinaetsya so spryatannoj komandy tty, zaklyuchennoj v znaki udareniya (`...`). Vyhodom komandy tty yavlyaetsya "/dev/tty00". Za- tem my berem osnovnoe imya etoj stroki, t.e. "tty00". Dalee my ispol'- zuem strukturu pereklyuchatelya po etomu znacheniyu, chtoby uvidet', chto my hotim sdelat' dlya kazhdogo konkretnogo terminala. Komandy tset, poka- zannye zdes', otnosyatsya k srede XENIX i mogut byt' nepriemlemymi v va- shej srede. Stroka 41 delaet eho-otobrazhenie znacheniya TERM na ekran, chtoby soobshchit' vam tip vashego terminala, esli on vam nuzhen. |to znachenie dostupno, esli opisannaya ranee komanda tset ustanavlivaet dlya vas TERM kak chast' svoej obychnoj raboty. V stroke 42 ustanavlivaetsya peremennaya TERMCAP, ukazyvayushchaya na /etc/termcap. |to obychnyj sposob ustanovki peremennoj TERMCAP. Drugoj sposob - prisvoit' TERMCAP tekushchuyu zakodirovannuyu stroku, kotoraya na- hoditsya v fajle opisaniya terminala. Esli TERMCAP ustanovlen na zakodi- rovannuyu stroku, to utilite vi net neobhodimosti obrashchat'sya k fajlovo- mu vvodu-vyvodu, chtoby poluchit' harakteristiki vashego terminala. Stro- ka 43 eksportiruet eti znacheniya tak, chtoby oni byli dostupny na lyubom urovne interpretatora shell. Stroka 45 ustanavlivaet chastotnuyu peremennuyu. |to peremennaya iz XENIX i, vozmozhno, imeetsya v System V. Ona ispol'zuetsya dlya ustanovki informacii o vremeni. Stroka 46 ustanavlivaet informaciyu o zone vremeni, kak eto trebu- etsya v bibliotechnom vyzove ctime(3). Imeya peremennuyu TZ, vy mozhete pe- rekryt' podrazumevaemuyu zonu vremeni pri dostupe ko vremeni iz prog- rammy na yazyke Si. Stroka 47 eksportiruet eti peremennye. Stroka 49 ustanavlivaet vashe znachenie maski pol'zovatelya (umask). Ona upravlyaet podrazumevaemym razresheniem dostupa dlya vseh fajlov, ko- torye vy sozdaete. Sistema vychitaet znachenie umask iz 777. Rezul'tat stanovitsya pravom dostupa k fajlu, v dannom sluchae 755. Kogda vy soz- daete katalog s pravom dostupa 755, etot katalog pokazyvaetsya komandoj "ls -l" kak rwxr-xr-x. Kogda vy sozdaete nekatalogovyj fajl s pravom dostupa 755, etot fajl pokazyvaetsya kak rw-r--r--, chto ekvivalentno 644. Nekatalogovye fajly ne imeyut bita x, poetomu ih nel'zya ispolnit'. Katalogam zhe nuzhen ustanovlennyj bit x, chtoby oni byli dostupny po ko- mande cd. Stroki 51 i 52 soobshchayut vam o vremeni vashego seansa raboty v sisteme. Stroka 51 soobshchaet vam tekushchee vremya vashego vhoda v sistemu, a stroka 52 vyzyvaet programmu lastlog, kotoraya pechataet datu vashej poslednej registracii v sisteme. Programma lastlog opisana v glave 5. Stroki 54-58 inicializiruyut peremennye, generiruyushchie cveta na cvetnom monitore. Upravlyayushchie znacheniya yavlyayutsya standartnymi znacheniya- mi kodov ANSI. |to rabotaet v sisteme XENIX i mozhet rabotat' v vashej sisteme. Rastrovaya grafika ne dostupna, no imeetsya simvol'naya grafika i razlichnye osnovnye (foreground) i fonovye (background) cveta. Osnov- nye cveta kodiruyutsya chislami, nachinaya s 30, a fonovye cveta - chislami s 40. Stroki 60-66 - prosto dlya zabavy. Oni predstavlyayut soboj hitryj sposob ustanavlivat' kazhdyj den' na ekrane razlichnye cveta. Stroka 60 nachinaetsya s zapuska komandy date i peredachi ee vyhoda po konvejeru komande cut. Vyrezaetsya pervoe pole, kotoroe yavlyaetsya dnem nedeli. Za- tem my sozdaem strukturu pereklyuchatelya po stroke dnya, vypolnyaya razlich- nye dejstviya dlya kazhdogo dnya. Blagodarya eho-otobrazheniyu upravlyayushchih posledovatel'nostej, monitor reagiruet nemedlenno. TEORIYA OTNOSITELXNOSTI VNUTRI SISTEMY UNIX Teper', kogda my oznakomilis' s "domashnej" sredoj, sleduyushchij shag - obratit'sya k sredam, nahodyashchimsya vne registracionnogo kataloga ($HOME). Naprimer, chto predstavlyayut soboj drugie katalogi na tom zhe urovne, chto vash $HOME ? Kto eshche rabotaet v sisteme? Kak poproshche polu- chit' dostup k ih katalogam? Mozhete li vy zapuskat' programmy v chuzhih katalogah? Takogo roda voprosy i dejstviya otnosyatsya k drugim lyudyam v vashej sisteme. Edinstvennyj sposob otvetit' na eti voprosy - posmotret' vokrug sebya. Nikto ne sobiraetsya rasskazyvat' vam, chto takoe sistema. Vy dolzhny sami issledovat' ee i vyyasnit', kuda vy mozhete hodit', a kuda net. Sistema konechna, tak chto vy mozhete sebe pomoch', delaya raspechatki vseh katalogov i fajlov. Vy mozhete manevrirovat' v sisteme UNIX, ispol'zuya otnositel'nuyu notaciyu. Poskol'ku sistemnoe derevo obrazovano iz katalogov, oboznache- niya . i .. pozvolyayut nam dvigat'sya vverh i vniz po derevu. V lyuboj tochke .. oznachaet roditel'skij katalog tekushchego kataloga, v kotorom my nahodimsya. Nizhe pokazany nekotorye primery otnositel'nyh komand. ls -l $HOME/.. perechislyaet fajly v moem roditel'skom kataloge. cd ../../.. v predpolozhenii, chto tekushchim katalogom yavlyaetsya /usr/russ/src/c, delaet moim tekushchim katalogom /usr. ls . perechislyaet fajly v tekushchem kataloge. ls .. perechislyaet fajly v moem roditel'skom kataloge. $HOME/../../bin/ls zapuskaet ls v kataloge /usr/russ/../../bin, t.e. v /bin/ls. ../fred/bin/ls zapuskaet komandu ls v kataloge dvoichnyh modulej Freda, kotoryj imeet tot zhe roditel'skij katalog, chto i ya, t.e. /usr/fred/bin/ls. OBSHCHAYA SISTEMNAYA SREDA Sistemnaya sreda ne prosto NAHODITSYA v sisteme UNIX, a YAVLYAETSYA sistemoj UNIX. Kak my uvidim v etoj knige, vsya sistema - UNIX, Si, ko- mandy, fajly i t.d. - eto prosto logicheskij podhod k funkcionirovaniyu komp'yutera. Programmnoe obespechenie - eto to, chto opredelyaet sistema dlya konechnogo pol'zovatelya. My mozhem predstavlyat' vse mashiny, rabotayu- shchie v sisteme UNIX, kak odinakovye i traktovat' kazhdyj UNIX kak odin i tot zhe. My predpolagaem, chto reakciya mashiny budet kazhdyj raz odinako- voj. My mozhem smotret' na UNIX takim zhe obrazom, kak na fizicheskie za- kony. My ogranicheny imi, no my takzhe vol'ny primenyat' eti zakony v si- tuaciyah i oblastyah, s kotorymi my do etogo nikogda ne vstrechalis'. My mozhem doveryat' etim zakonam i dopuskat', chto oni primenimy vezde, kuda by my ni napravilis'. Takova sistema UNIX, po krajnej mere v ideale. Sistema imeet mnogo sred. Vazhno ponimat', chto oni soboj predstav- lyayut, kak vzaimodejstvuyut i dlya chego mogut byt' ispol'zovany. Tak zhe, kak programmy = struktury dannyh + algoritmy tak i UNIX = fajlovoe derevo + utility Sreda UNIX - eto sochetanie dvuh vazhnejshih veshchej: fajlovogo dereva i interfejsa sistemnyh vyzovov. |to derevo dopuskaet beskonechnoe rasshirenie vozmozhnostej, pozvolyaya montirovat' vneshnie diskovye oblasti v lyuboj tochke fajlovoj sistemy. Derevo pomogaet takzhe v sbore logi- cheski svyazannyh fajlov, chto delaet sistemu bolee organizovannoj. Interfejs sistemnyh vyzovov obespechivaet nabor instrumentov, iz kotoryh mozhno postroit' bol'shinstvo drugih funkcij. Opredelenie inter- fejsa System V imeetsya v vide tipografskoj knigi i mozhet byt' najdeno v knizhnyh magazinah. Strogoe sledovanie etomu standartu garantiruet sovmestimost' s postoyanno razvivayushchejsya AT&T System V. OBSHCHEE FAJLOVOE DEREVO Dlya togo chtoby luchshe ponyat' mir UNIX, posmotrite primer raspechat- ki struktury UNIX na ris.1-3 . |to naglyadnoe predstavlenie polnogo de- reva kornevoj fajlovoj sistemy. Lyubye drugie rasshireniya fajlovoj sistemy montiruyutsya na etu fajlovuyu sistemu. Tochkoj vremennogo montirovaniya yavlyaetsya /mnt. Bolee postoyannye tochki montirovaniya dolzhny byt' sozdany administratorom, naprimer /0, /1 i t.d. ili /usr1, /usr2 i t.d. PERVYJ SLOJ Samym levym katalogom yavlyaetsya /bin, kotoryj soderzhit vse glavnye dvoichnye utility. |to naibol'shij iz dvuh osnovnyh katalogov dvoichnyh modulej. Sleduyushchij katalog - /dev, v kotorom razmeshcheny vse fajly ust- rojstv. Fajly ustrojstv yavlyayutsya tochkami dostupa k periferii, podsoe- dinennoj k sisteme. |tot fajl privyazan k periferii s pomoshch'yu yadra i drajvera ustrojstva. Administrativnye utility i konfiguracionnye fajly hranyatsya v /etc. Primerami yavlyayutsya getty i gettydef, init i inittab, a takzhe fajl parolej (/etc/passwd). Sleduyushchij katalog - /lib, gde razmeshcheny biblioteki kompilyatora. Zdes' mogut hranit'sya i drugie tipy bibliotek. Katalog /lost+found ispol'zuetsya utilitoj fsck (glavnoe sredstvo podderzhaniya fajlovoj sistemy) dlya hraneniya logicheski udalennyh fajlov. Esli na samom dele vy hotite sohranit' eti fajly, oni mogut byt' izv- lecheny iz etoj uderzhivayushchej oblasti posle zaversheniya uborki fajlovoj sistemy. Sleduyushchij katalog - /mnt. |to vremennaya tochka montirovaniya dlya fajlovyh sistem. My chasto montiruem i demontiruem fajlovye sistemy prosto dlya togo, chtoby zapustit' bystruyu proverku chego-libo. Zdes' pod- hodyashchee mesto dlya etogo. Glavnym vremennym rabochim katalogom sistemy yavlyaetsya /tmp. Mnogie utility, takie kak vi, fsck, interpretatory shell i programmy rezerv- nogo kopirovaniya, ispol'zuyut /tmp dlya hraneniya rabochih fajlov. Sleduyushchij katalog - /usr, kotoryj primenyaetsya kak tochka montiro- vaniya. Fajlovaya sistema, smontirovannaya zdes', soderzhit dopolnitel'nuyu sistemnuyu informaciyu i katalogi pol'zovatelej. |to razdelenie mezhdu zagruzhaemoj fajlovoj sistemoj i pol'zovatel'skoj fajlovoj sistemoj by- lo sdelano, chtoby sbalansirovat' zagruzku diska. Esli by vse vazhnye fajly byli v odnom razdele, on byl by slishkom bol'shim. Proizvoditel'- nost' mozhet byt' uhudshena, esli vse dejstviya napravleny v odnu logi- cheskuyu oblast' diska. Blagodarya razbivke vsej sistemy na dve, kazhdaya fajlovaya sistema podderzhivaet razumnoe kolichestvo svobodnogo prost- ranstva. CHut' nizhe my rassmotrim katalog /usr bolee podrobno. Poslednij fajl - eto samo yadro, /unix. Ves' /unix fakticheski su- shchestvuet i predstavlyaet soboj bol'shoj a.out (skompilirovannyj ob®ekt- nyj fajl). YAdro izgotavlivaetsya putem zapuska ld na gruppe bibliotek, kotorye zagruzhayutsya po ocheredi v ogromnyj ispolnyaemyj modul', nazyvae- myj /unix. Mashina zapuskaetsya s pervyh 512 bajtov kornevoj fajlovoj sistemy. Programma nachal'noj zagruzki, kotoraya nahoditsya zdes', zagru- zhaet programmu zagruzki bol'shego razmera, inogda nazyvaemuyu /boot. /boot zagruzhaet i zapuskaet /unix. VTOROJ SLOJ Vtoroj sloj katalogov razmeshchaetsya pod /usr. Kak upominalos' ra- nee, /usr ispol'zuetsya kak tochka montirovaniya dlya drugoj fajlovoj sistemy. |to znachit, chto vse fajly, kotorye imeyutsya v /usr, nahodyatsya v drugom razdele zagruzhaemogo diska ili voobshche na drugom diske. Pervym katalogom yavlyaetsya adm, dlya administrirovaniya. On soderzhit uchetnye fajly i registracionnyj fajl dlya su (super- pol'zovatelya), a takzhe drugie administrativnye fajly. V kataloge bin imeyutsya ispolnyaemye moduli, kotorye ispol'zuyutsya menee chasto, chem moduli v dvoichnom kataloge kornevogo urovnya (/bin). Pochti vse ispolnyaemye moduli raspredeleny mezhdu etimi dvumya kataloga- mi. Drugie ispolnyaemye moduli rasseyany po vsej sisteme, naprimer /usr/lib/uucp/uucico i /usr/lib/ ex3.7preserve. Dalee games. UNIX prihodit s assortimentom interesnyh igr. Bol'- shinstvo iz nih tekstovye, no predostavlyaetsya neskol'ko programm grafi- cheskogo tipa, naprimer worm, worms i rain. Katalog include soderzhit vse fajly-zagolovki. Fajly-zagolovki ispol'zuyutsya v programmah na yazyke Si dlya opredeleniya struktur i sistemnyh prisvaivanij, poleznyh dlya programmirovaniya. Zdes' imeetsya podkatalog sys, kotoryj soderzhit vse fajly= zagolovki, otnosyashchiesya k sisteme. CHitaya eti fajly-zagolovki, mozhno mnogoe uznat' o sisteme UNIX. Sleduyushchij katalog - lib, kotoryj soderzhit bibliotechnye fajly dlya vseh vidov "imushchestva": fajly pechatayushchih ustrojstv, fajly podderzhki utility vi, drugie yazyki i uucp. Katalog /usr/ lib predstavlyaetsya skladom vsyakih bibliotek, kotorye imeyutsya v sisteme, otlichnyh ot bib- liotek kompilyatora. Katalog lost+found nahoditsya zdes' dlya toj zhe celi, chto i odnoi- mennyj katalog kornevogo urovnya. Kazhdaya fajlovaya sistema dolzhna imet' takoj fajl. Bez nego fsck ne imeet vremennogo mesta dlya razmeshcheniya po- luudalennyh fajlov i poetomu udalyaet ih navsegda. V kataloge mail nahoditsya vash sistemnyj pochtovyj yashchik. Kogda vy zapuskaete komandu mail, zdes' nakaplivaetsya ochered' soobshchenij. V ka- taloge usr/mail kazhdyj fajl nosit imya pol'zovatelya. V etom fajle hra- nitsya pochta pol'zovatelya, poka on ne prochitaet ee. Katalog man prednaznachen dlya aktivnyh stranic rukovodstv po sisteme UNIX. Nalichie postoyannogo dostupa k stranicam rukovodstv yavlya- etsya horoshim sredstvom. Odnako, eti stranicy zanimayut mnogo mesta, i dostup k nim mozhet potrebovat' dovol'no mnogo vremeni pri sil'no zag- ruzhennoj sisteme. V kataloge news hranyatsya vse fajly novostej. |ti fajly imenovany v sootvetstvii s poryadkom, v kotorom oni byli vvedeny v katalog. Ko- manda news(1) smotrit na datu fajla $HOME/ .news_time, chtoby soobshchit', kakie novosti vy eshche ne chitali. Katalog preserve prednaznachen dlya fajlov, svyazannyh s utilitoj vi. Oni pomeshchayutsya syuda, kogda vy rabotaete s vi ili s redaktorom ex i propadaet pitanie mashiny libo vash seans raboty preryvaetsya v vide "za- visaniya". Kogda v sisteme vosstanavlivaetsya pitanie, /tmp soderzhit fajly redaktora ex. Iz kataloga /etc/rc zapuskaetsya utilita /usr/lib/ex3.7preserve, kotoraya prosmatrivaet /tmp, preobrazuet ego v sohranennyj fajl i pomeshchaet ego v /usr/preserve. Kogda vy vhodite v sistemu, vy poluchaete pochtu o tom, chto u vas imeetsya sohranennyj fajl redaktora, kotoryj vy mozhete vosstanovit' i pomestit' ego na ishodnoe mesto. Katalog pub ne soderzhit nichego osobennogo, obychno v nem prosto nekotorye informacionnye fajly vrode tablicy ASCII ili grecheskih sim- volov. Katalog spool - eto glavnaya tochka vhoda dlya vseh buferizovannyh fajlov v sisteme. V etom kataloge imeetsya mnogo podkatalogov, soderzha- shchih specificheskie tipy buferizovannyh fajlov. Nekotorymi tipichnymi podkatalogami yavlyayutsya lp, uucp i uucppublic. V kataloge src hranitsya ishodnyj kod sistemy UNIX, esli on ime- etsya v sisteme. Ot etogo kataloga otvetvlyaetsya mnogo urovnej: komandy, biblioteki, kod yadra, kod mashinnogo yazyka i avtonomnye utility. CHasto v /usr/src hranitsya takzhe ishodnyj kod dlya lokal'noj mashiny. Katalog sys tradicionno hranit fajly, neobhodimye dlya generacii novogo yadra. |to fajly-zagolovki, konfiguracionnyj fajl, biblioteki i komandnyj fajl dlya sozdaniya novogo yadra iz vseh etih fajlov. Poslednij katalog - tmp. |to vtorichnaya vremennaya oblast' hrane- niya, kotoraya ispol'zuetsya ne tak chasto, kak /tmp. Ee, odnako, ispol'- zuet utilita sort. ZHIZNX SISTEMY UNIX: NEKOTORYE METAFORY UNIX - eto osobyj mir, zhivushchij svoej zhizn'yu. Ego social'naya struktura imitiruet real'nuyu zhizn', s pravitel'stvom, soderzhashchim pra- vitelya (koren' root), shtatom podderzhki (bin, cron, lp, sys) i massami (/usr/*). Massy ne imeyut dostupa k moshchi pravitelya, esli ne ispol'zuyut predvaritel'no ustanovlennyh sredstv (/bin/su) ili ne zanimayutsya kri- minal'nymi dejstviyami i narusheniem mer bezopasnosti. Kak i v lyubom ob- shchestve, bol'shaya mnogopol'zovatel'skaya sistema UNIX ustanavlivaet prava i obyazannosti svoih pol'zovatelej. Pri vhode v sistemu pol'zovatel' poluchaet svoe "mesto pod soln- cem" (registracionnyj katalog - $HOME ). |to mesto zavisit ot togo, chto bylo ran'she (ot roditel'skogo kataloga ..), a budushchie mesta za- visyat ot togo, chto proishodit pozzhe (katalogi, podchinennye $HOME). Rabota raspredelyaetsya po organizaciyam i ierarhiyam v zavisimosti ot ih funkcij v obshchestve (vse pol'zovateli v /usr, vse tranzitnye faj- ly v /usr/spool, vse funkcii bezopasnosti v /etc). Posmotrite vokrug sebya v vashej sisteme, chtoby oznakomit'sya s vashim mirom. Vy mozhete posle etogo vybrat', uchastvovat' li v nekotoroj chasti etogo mira ili ignorirovat' ee. Dvizhenie lyudej v sisteme UNIX proishodit parallel'no. Nekotorye oblasti (/tmp) dostupny vsem, a nekotorye oblasti sil'no ohranyayutsya ot bol'shinstva lyudej (/etc/passwd). Transportnaya sluzhba mozhet perevezti nashi veshchi (peredacha fajlov po setyam uucp). My dazhe mozhem vospol'zo- vat'sya obshchestvennym transportom, chtoby dobrat'sya v raznye chasti goroda (vhod v drugie sistemy (rlogin), eta osobennost' imeetsya tol'ko v BSD). V mire UNIX nam dostupny razlichnye puti. |ti puti pomogayut nam sformirovat' svoyu sud'bu (diskovye razdely, montirovannye v lyuboe mesto fajlovogo dereva). Kogda diskovyj paket montiruetsya, on stano- vitsya dostupnym nam. Kogda on demontiruetsya, my teryaem dostup k nemu. Kogda zapuskayutsya processy, oni prohodyat cherez razlichnye etapy svoej zhizni. Oni rozhdayutsya (otvetvlyayutsya), rastut (stanovyatsya planiru- emymi i pomeshchayutsya v tablicu processov) i, nakonec, stanovyatsya proiz- voditel'nymi rabochimi v obshchestve (perehodyat v sostoyanie zapuska i vy- polnyayutsya). Vse processy imeyut famil'noe derevo. Porozhdennyj process vsegda imeet roditelya, a roditel'skie processy mogut porozhdat' mnogo "detej". V zavisimosti ot prilozheniya, oni mogut byt' "dedami" i "vnukami". Pro- cessy "umirayut" tak zhe legko, kak sozdayutsya. Odnoj iz neobychnyh veshchej v mire UNIX yavlyaetsya to, chto "deti" pochti vsegda "umirayut" ran'she svo- ih "roditelej". Pravitel'stvo (yadro) provodit v zhizn' parametry sredy, kotorye vyglyadeli by v dovol'no totalitarnom duhe, esli by eto bylo v real'nom mire. Tol'ko opredelennoe chislo rabochih dopuskaetsya k rabochemu mestu odnovremenno (eto maksimal'noe kolichestvo yacheek v tablice processov). Rabochie ogranicheny v chisle "detej", kotoryh oni mogut imet' (maksi- mal'noe kolichestvo processov na pol'zovatelya). Poskol'ku rabochie na- kaplivayut material'nye cennosti, oni ogranicheny v kolichestve tovarov, kotorye oni mogut pomestit' v komnaty svoih domov (maksimal'nyj razmer fajla, ili ulimit). Hotya ne ustanovlen limit na chislo razlichnyh fajlov (komnat) maksimal'nogo razmera, kotorye mogut sushchestvovat', vsya siste- ma imeet predel (df pokazyvaet svobodnoe prostranstvo), i odna ne- nasytnaya persona mozhet nanesti udar po okruzhayushchim. Zdes' voznikaet svoego roda ekologiya. Tak zhe, kak komp'yuternyj vek prohodit pod prismotrom elektronnoj avtomatiki, tak i UNIX vedet tablicy o deyatel'nosti vseh pol'zovate- lej. Mehanizmy ucheta organizovany pravitel'stvom (vnutri yadra) i vseg- da zapisyvayut dejstviya kazhdogo pol'zovatelya. Tem ne menee, eto svobod- noe obshchestvo v toj mere, chto vy mozhete poluchit' raspechatku o vashem kreditnom sostoyanii (ispol'zuya acctcom dlya pechati uchetnyh zapisej). Hotya sistema UNIX imeet negativnye aspekty (kak i chelovecheskoe obshchestvo), v nej est' takzhe nekotorye ochen' pozitivnye osobennosti. Gibkost' sistemy i bogatstvo instrumentov daet nam ochen' produktivnuyu i detal'no razrabotannuyu rabochuyu sredu. Nasha proizvoditel'nost' v etom smysle ogranichena v osnovnom nashim sobstvennym voobrazheniem. Kogda ra- bota stanovitsya slishkom utomitel'noj i skuchnoj, my vsegda mozhem sozdat' sredstva, delayushchie za nas etu rabotu. |to obstanovka svobodnoj inicia- tivy, v kotoroj horoshie idei mogut dat' znachitel'noe uvelichenie proiz- voditel'nosti.  * GLAVA 2. Dostup k fajlam *  SODERZHANIE Vvedenie 2.1. Poisk fajlov 2.1.1. tree - vizualizaciya fajlovogo dereva 2.1.2. thead - pechat' nachala kazhdogo fajla 2.1.3. tgrep - poisk strok v dereve fajlovoj sistemy 2.1.4. paths - nahozhdenie puti dostupa k ispolnyaemym fajlam, so special'nymi opciyami 2.2. Vyvod informacii 2.2.1. lc - vyvod fajlovoj informacii na ekran po stolbcam 2.2.2. ll - vyvod fajlovoj informacii v dlinnom formate 2.2.3. kind - vyvod odnotipnyh fajlov 2.2.4. m - prostoj dostup k komande more 2.2.5. mmm - obrabotka programmoj nroff makrokomand dlya rukopisej 2.2.6. pall - pechat' vseh fajlov v dereve VVEDENIE V glave 1 byl predstavlen obzor obshchej struktury sistemy UNIX i pokazano, kak vzaimodejstvuyut ee razlichnye chasti. |to pohozhe na vvede- nie v geografiyu, kogda na globuse pokazyvayut kontinenty i krupnye vod- nye prostranstva. Takaya informaciya, hotya i yavlyaetsya horoshim fundamen- tom dlya obshchih znanij, vryad li pomozhet najti nailuchshij put' iz San-Francisko v Los-Anzheles. Neobhodim sleduyushchij uroven' detalizacii: nazvaniya poselenij, dorog, razvilok, ulic, adresov. Fajlovaya sistema UNIX pohozha na kontinent so mnozhestvom gorodov i, dejstvitel'no, s adresami vnutri gorodov. Katalogi i razlichnye urovni podkatalogov mozhno sravnit' s marshrutami mezhdu razlichnymi punk- tami naznacheniya, nazvaniya fajlov - s adresami. Bol'shoe chislo putej i mest naznacheniya mozhet vyglyadet' pugayushche, no blagodarya regulyarnosti i logichnosti, fajlovaya sistema UNIX pozvolyaet vam legko peremeshchat'sya iz odnogo mesta v drugoe, esli vy znaete neskol'ko osnovopolagayushchih principov. Buduchi pol'zovatelyami UNIX, vse my nauchilis' pol'zovat'sya osnov- nymi komandami fajlovoj informacii, kak, naprimer, ls s razlichnymi op- ciyami. My znaem, kak peremeshchat'sya mezhdu katalogami i kopirovat' ili peremeshchat' fajly. Tem ne menee, nahodit' nuzhnuyu informaciyu o fajlah iz vsej massy informacii ne tak-to legko. Nam neobhodimo sozdat' instru- mental'nye sredstva, kotorye ispol'zuyut drevovidnuyu strukturu fajlov v UNIX, chtoby nahodit' to, chto my ishchem, i, sootvetstvenno, vyvodit' in- formaciyu o fajlah na ekran, pechatat' listingi soderzhimogo fajlov i t.d. |ta glava znakomit s instrumental'nymi sredstvami, kotorye obleg- chayut zadachu poiska i dostupa k fajlam. Dostup k fajlam mozhet byt' obespechen razlichnymi sposobami, poetomu tehnika i stil' menyayutsya ot odnogo komandnogo fajla k drugomu. Naprimer, v nekotoryh sluchayah vam nuzhno najti imena vseh fajlov v dannom segmente fajlovogo dereva, v drugih sluchayah vas budut interesovat' fajly tol'ko zadannogo tipa: tekstovye fajly voobshche ili ishodnye fajly na yazyke Si v chastnosti. KOMBINIROVANIE PRODUKTIVNYH IDEJ Dve koncepcii yavlyayutsya obshchimi pochti dlya vseh fajlovyh instrumen- tal'nyh sredstv. Pervaya - eto ideya rekursivnogo poiska, kotoraya ozna- chaet, chto nekotorye komandy sistemy UNIX (naprimer, find) prosmatriva- yut vse fajlovoe derevo, nachinaya s nekotoroj zadannoj nachal'noj tochki (ili s tekushchego kataloga). Esli v dannom kataloge vstrechaetsya podkata- log, to ego soderzhimoe tozhe issleduetsya - i tak dalee vniz k samomu nizhnemu pod-podkatalogu. Tak prohodyatsya marshruty ko vsem fajlam v ce- lom dereve. Standartnye komandy sistemy UNIX obespechivayut tol'ko ogranichennoe chislo osnovnyh funkcij, kotorye mogut rabotat' rekursivno po vsemu fajlovomu derevu. Nasha strategiya pri sozdanii instrumental'nyh sredstv v etoj glave - vospol'zovat'sya preimushchestvami takogo rekursivnogo po- iska i rasprostranit' ih na mnogie drugie funkcii. Vtoraya klyuchevaya ideya, svyazannaya s poleznymi fajlovymi instrumen- tal'nymi sredstvami - eto vozmozhnost' soedineniya komand s programmnymi kanalami i upravlenie potokom dannyh s pomoshch'yu pereadresacii. Veroyat- no, vy uzhe vstrechalis' s podobnymi osobennostyami v vashej sobstvennoj rabote s UNIX i effektivno ih ispol'zovali. Vozmozhno, vy eshche ne osoz- nali, chto soedinenie rekursivnogo poiska, predostavlyaemogo nekotorymi standartnymi komandami, so specificheskimi funkciyami, predostavlyaemymi drugimi komandami, pozvolyaet nam sozdat' komandy, kotorye avtomati- cheski obhodyat obshirnye fajlovye derev'ya i izvlekayut nuzhnuyu informaciyu. (V sleduyushchej glave my vyjdem za predely raspechatki i otobrazheniya in- formacii na ekran i nauchimsya rabotat' s fajlami tak, chto my smozhem ko- pirovat', peremeshchat' i vosstanavlivat' ih po mere nadobnosti.) Dlya udobstva my sgruppiruem instrumental'nye sredstva v dva raz- dela: poisk fajlov i raspechatka fajlovoj informacii. Imeet smysl predstavlyat' ih v takom poryadke, tak kak vy snachala dolzhny najti fajl, chtoby potom s nim rabotat'. POISK FAJLOV |tot razdel posvyashchen poisku fajlov, gde by oni ni nahodilis', vy- vodu na ekran vybrannoj informacii i poisku simvol'nyh strok vnutri fajlov. Pervaya programma, tree, obhodit vse fajlovoe derevo i pechataet imena vseh fajlov v formate vizual'nogo dereva. Ona rekursivno spuska- etsya v kazhdyj katalog i nahodit vse ego fajly, obespechivaya tem samym global'nyj osmotr fajlovyh oblastej i ih vlozhennoj po glubine struktu- ry. Drugoe instrumental'noe sredstvo - eto thead. Thead pechataet neskol'ko pervyh strok tekstovyh fajlov, kotorye nahodyatsya v dannom segmente fajlovogo dereva. Prosmatrivaya zagolovok, t.e. pervye neskol'ko strok fajla, vy mozhete poluchit' dostatochno informacii, chtoby identificirovat' soderzhimoe fajla. Pri vyzove thead vy mozhete yavno za- dat' katalog libo peredat' komande thead po konvejeru spisok polnyh imen fajlov. |to delaet komandu thead fil'trom - osobym vidom komand sistemy UNIX, kotoryj my obsudim pozzhe. Sleduyushchee instrumental'noe sredstvo - tgrep. Kak sleduet iz naz- vaniya, eto eshche odna komanda, svyazannaya s fajlovym derevom, kotoraya ispol'zuet utilitu grep. Tgrep ishchet simvol'nye stroki v kazhdom fajle, kotoryj nahoditsya v dannom segmente fajlovogo dereva. Tgrep takzhe yav- lyaetsya fil'trom, tak chto imena fajlov mozhno peredavat' ej po konveje- ru. V nashem poslednem proekte v etom razdele my obratimsya k ispol'zo- vaniyu katalogov kak sredstva "navigacii". Snachala my opishem osnovnoj algoritm dlya utility, kotoraya dlya kazhdogo fajla iz zadannogo spiska fajlov proveryaet, nahoditsya li etot fajl v kakom-libo kataloge po uka- zannomu marshrutu poiska. Zatem my postroim paths - utilitu, kotoraya dopolnyaet funkciyu poiska poleznymi opciyami. RASPECHATKA FAJLOVOJ INFORMACII |tot razdel znakomit vas s instrumental'nymi sredstvami, prednaz- nachennymi dlya vyvoda na ekran imen fajlov i ih soderzhimogo. Instrumen- ty takogo roda ves'ma polezny, tak kak oni mogut znachitel'no umen'shit' kolichestvo neobhodimyh simvolov, nabiraemyh s klaviatury pri zapuske komandy, i vnesti bol'she smysla v odnu komandu. Pervye dva komandnyh fajla yavlyayutsya pre- i postprocessorami dlya komandy ls. Komanda lc vyvodit fajlovuyu informaciyu po stolbcam, koman- da ll perechislyaet fajly v dlinnom formate. |ti komandnye fajly dopol- neny opciyami komandy ls, chtoby sdelat' raspechatki bolee informativny- mi. Tak kak komanda ls ispol'zuetsya dovol'no chasto, upakovka naibolee chasto primenyaemyh nazhatij klavish v komandnye fajly predstavlyaetsya ce- lesoobraznoj. Upakovka umen'shaet kolichestvo postoyanno nabiraemyh sim- volov i uproshchaet ispol'zovanie komand, isklyuchaet neobhodimost' zapomi- naniya podrobnogo sintaksisa. Tret'e instrumental'noe sredstvo - eto kind. Kind - eshche odin ko- mandnyj fajl preprocessornogo tipa, ispol'zuyushchij komandu UNIX file. Komanda file chitaet ukazannyj fajl i zatem soobshchaet, yavlyaetsya li etot fajl tekstovym, arhivnym ili ispolnyaemym. Poskol'ku raspechatki komandy file ne vybirayut fajly zadannogo tipa, voznikaet neobhodimost' v soz- danii dlya etogo special'noj utility. Komanda kind rabotaet s raspechat- koj komandy file. Kind vyvodit na ekran imena fajlov tol'ko zadannogo tipa. Eshche odin komandnyj fajl - m, kotoryj oblegchaet rabotu so stan- dartnoj komandoj more sistemy UNIX, umen'shaya kolichestvo neobhodimyh dlya zapuska komandy simvolov i uproshchaya interfejs. Delaetsya eto bez po- teri gibkosti: tak zhe, kak vy mozhete ispol'zovat' komandu more dlya fajla ili peredat' komande more dannye po programmnomu kanalu, vy mo- zhete sdelat' to zhe samoe dlya m. Sleduyushchij komandnyj fajl - eto mmm. On sostoit iz odnoj zagotov- lennoj komandnoj stroki dlya programmy nroff sistemy UNIX. Sushchestvuet mnogo sposobov vyzova komandy nroff i mnozhestvo razlichnyh opcij k nej. Esli zhe vy redko ispol'zuete nroff, u vas mogut vozniknut' trudnosti v zapominanii specificheskih opcij, neobhodimyh dlya vashej raboty s koman- doj. |ti problemy otpadut, esli u vas est' komanda mmm. Opredelite op- cii, kotorye vy obychno ispol'zuete, i vvedite ih v komandnyj fajl mmm (o tom, kak eto sdelat' prakticheski, rech' pojdet nizhe). Teper' dosta- tochno nabrat' mmm - i vy imeete vozmozhnost' rabotat' s vashej komandoj nroff. Poslednyaya utilita - pall. Pall obhodit fajlovoe derevo, vedya po- isk fajlov zadannogo tipa, i gotovit ih k vyvodu na printer. Komanda pr sistemy UNIX ispol'zuetsya dlya razbivki na stranicy vseh fajlov vmeste i vklyucheniya zagolovkov. |ta komanda predlagaet na rassmotrenie printeru odin bol'shoj fajl i naibolee polezna v teh sluchayah, kogda u vas imeetsya mnozhestvo katalogov s tekstovymi fajlami ili s ishodnymi fajlami programm. Opredeliv v obshchem osnovnye nashi zadachi, perejdem k bolee blizkomu znakomstvu s upomyanutymi instrumental'nymi sredstvami. 2.1. POISK FAJLOV 2.1.1. tree - vizualizaciya fajlovogo dereva ---------------------------------------------------- IMYA: TREE ---------------------------------------------------- tree - vyvod na ekran struktury fajlovogo dereva NAZNACHENIE Nahodit vse fajly v fajlovom dereve i vyvodit na ekran imena faj- lov, pokazyvaya ierarhicheskuyu strukturu fajlovogo dereva. FORMAT VYZOVA tree [dir] PRIMER VYZOVA $ tree $HOME Vyvodit strukturu fajlovogo dereva registracionnogo kataloga. TEKST PROGRAMMY 1 : 2 # @(#) tree v1.0 Visual display of a file tree Author: Russ Sage 2a vyvod na ekran struktury fajlovogo dereva 4 if [ "$#" -gt 1 ] 5 then echo "tree: wrong arg count">&2 6 echo "usage: tree [dir]" >&2 7 exit 2 8 fi 9 if [ "$#" -eq 1 ] 10 then if [ ! -d $1 ] 11 then echo "$0: $1 not a directory">&2 12 echo "usage: tree [dir]" >&2 13 exit 2 14 fi 15 fi 17 find ${1:-.} -print | sort | sed -e "1p" -e "1d" \ 18 -e "s|[^/]*/| /|g" \ 19 -e "s|[^ */|/|" \ 20 -e "s|/\([^/]*\)$|\1|" OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL tree? Kak my uzhe otmechali, vsya sistema UNIX stroitsya vokrug fajlovoj sistemy, kotoraya pohozha na derevo. Derevo, s kotorym my rabotaem v sisteme UNIX, rastet vverh nogami: koren' nahoditsya vverhu, a vetvi i listva rastut vniz ot kornya. Fizicheskaya struktura real'nyh derev'ev i fajlovyh derev'ev, ispol'zuemyh v sisteme UNIX, ochen' shodna: odin ko- ren' (nachal'naya tochka) i odin stvol. Kak gluboko i kak daleko mogut uhodit' vetvi ot osnovnogo stvola - ne ogranichivaetsya nichem, krome og- ranichenij fizicheskogo prostranstva. Analogichno, chislo list'ev, kotorye mozhet imet' kazhdaya vetv', fakticheski ne ogranicheno. Mnogoe v sisteme UNIX zadumano dlya togo, chtoby prisposobit'sya k derevu. Nekotorye komandy obhodyat derevo i soobshchayut o ego komponentah, no obychno ih soobshcheniya vydayutsya v forme, ne ochen' udobnoj dlya chteniya chelovekom. |to delaet komandnye fajly ves'ma moshchnymi instrumentami. Perevesti neobrabotannye, nedruzhestvennye soobshcheniya komandnyh fajlov v udobnyj, informativnyj vid dovol'no legko. Komanda tree yavlyaetsya kombinaciej komand sistemy UNIX, kotorye predstavlyayut logicheskuyu fajlovuyu strukturu v naglyadnoj forme. |ta ko- manda polezna dlya polucheniya global'noj kartiny fajlov, ih raspolozheniya v ierarhicheskoj strukture fajlovogo dereva, gnezdovoj struktury kata- logov i podkatalogov. CHTO DELAET tree? Komanda tree - eto postprocessor dlya komandy UNIX find. Find prosmatrivaet segment fajlovogo dereva i polnye imena vseh fajlov, ko- torye sootvetstvuyut zadannomu kriteriyu. Komanda tree ispol'zuet utili- tu sed sistemy UNIX, chtoby perevesti vyhod komandy find v naglyadnuyu formu. Vhodnym parametrom dlya komandy tree yavlyaetsya imya kataloga, koto- roe mozhet byt' ukazano v lyubom absolyutnom vide, naprimer, /usr/spool/uucp, ili v otnositel'nom, naprimer, ../../bin. Esli nika- kogo imeni ne ukazano, podrazumevaetsya ., chto yavlyaetsya tekushchim katalo- gom. Imya kataloga yavlyaetsya nachalom (ili kornem) otobrazhaemogo dereva. CHtoby pokazat' glubinu dereva, vse fajly, podchinennye dannomu katalo- gu, otobrazhayutsya s otstupom. Dlya udobstva predstavleniya gnezdovoj struktury, mezhdu sleduyushchimi drug za drugom otvetvleniyami pechataetsya kosaya cherta (/). Rassmotrim primer struktury kataloga. Pust' kornevym katalogom budet /tmp s dvumya katalogami: a i b. V kataloge a nahoditsya podkata- log aa, kotoryj soderzhit fajl file1, a v kataloge b , sootvetstvenno, podkatalog bb, soderzhashchij fajl file2. Komanda find vydast raspechatku takogo vida: # find /tmp -print /tmp /tmp/a /tmp/a/aa /tmp/a/aa/file1 /tmp/b /tmp/b/bb /tmp/b/bb/file2 Kak vidno iz etogo listinga, fajly a i aa est' katalogi, a fajl file1 nahoditsya vnizu fajlovogo dereva. Sravnite etot rezul'tat s re- zul'tatom, kotoryj vydaet komanda tree, ispol'zuya utilitu sed. # tree /tmp /tmp / a / / aa / / / file1 / b / / bb / / / file2 Kornevym katalogom v etom listinge yavlyaetsya katalog /tmp. Tam, gde derevo perehodit na bolee glubokij uroven', pechatayutsya tol'ko sim- voly kosoj cherty. Pervyj uroven' - /tmp, pod etim urovnem nahodyatsya fajly-katalogi a i b, zatem, sootvetstvenno, ih podkatalogi aa i bb. Ishodya iz etogo listinga, my delaem vyvod, chto na pervom urovne kata- loga nahodyatsya dva fajla (i eti fajly v dejstvitel'nosti yavlyayutsya ka- talogami) i chto dva fajla nahodyatsya v podchinennyh katalogah. Otmetim, chto my smogli identificirovat' aa i bb kak katalogi tol'ko potomu, chto v nih prisutstvuyut fajly file1 i file2. Sravnite etot listing s vyhodom "neobrabotannoj" komandy find. Vyhod komandy tree isklyuchaet otvlekayushchee vnimanie povtorenie elementov putej dostupa pri kazhdom perehode k bolee nizkomu urovnyu. Blagodarya etomu, srazu zhe vidno SUSHCHESTVENNUYU informaciyu. Vot chto my imeem v vi- du, kogda govorim o sozdanii bolee naglyadnogo dlya cheloveka interfejsa s sistemoj UNIX. PRIMERY 1. $ tree Ispol'zuet podrazumevaemyj katalog (tekushchij katalog, chto rav- nosil'no komande "$ tree .") v kachestve nachala fajlovogo dereva. 2. $ tree / Pechataet drevovidnyj listing dlya KAZHDOGO fajla vsej sistemy. Ko- manda find pri takom ee zapuske nachinaet s kornevogo kataloga i vydaet informaciyu o vseh fajlah sistemy. 3. $ tree $HOME/.. Pokazyvaet drevovidnyj format dlya vseh drugih pol'zovatelej sistemy (predpolagaetsya, chto vse pol'zovatel'skie katalogi nahodyatsya v odnom i tom zhe kataloge, naprimer /usr/*). POYASNENIYA Pervaya stroka soderzhit tol'ko znak dvoetochiya (:) - "nulevuyu ko- mandu". |to svyazano s tem, chto vse komandnye fajly, opisyvaemye v etoj knige, sdelany tak, chtoby ih mozhno bylo zapuskat' v srede interpreta- tora Bourne shell. Nash kommentarij v stroke 2, identificiruyushchij versiyu, nachinaetsya so znaka reshetki (#). Si-shell ishchet etot znak kak pervyj znak komandnogo fajla. Esli on najden, to predprinimaetsya po- pytka vypolnit' dannyj komandnyj fajl. V protivnom sluchae Si-shell pe- redaet komandnyj fajl interpretatoru Bourne shell. Vot pochemu my ne hotim nachinat' pervuyu stroku so znaka #. My, konechno, mogli by osta- vit' pervuyu stroku chistoj, no chistaya stroka nevidima i mozhet byt' slu- chajno udalena. Sootvetstvenno my budem ispol'zovat' chistye stroki v drugih sluchayah, chtoby vydelit' vazhnye uchastki programmy. Stroka 2 identificiruet versiyu. Simvol'naya stroka @(#) est' spe- cial'naya posledovatel'nost' v stroke kommentariya, kotoraya raspoznaetsya kak stroka "what" ("chto"). Komanda what v sisteme UNIX chitaet fajl i pechataet soobshchenie, kotoroe sleduet za strokoj "what". CHtoby identifi- cirovat' versiyu dannogo komandnogo fajla, naberite # what tree i budet napechatano sleduyushchee soobshchenie: tree: tree v1.0 Visual display of a file tree Author: Russ Sage Stroki 4-7 proveryayut, ne slishkom li mnogo argumentov bylo pereda- no komandnoj stroke. |to osushchestvlyaetsya putem issledovaniya peremennoj $#, kotoraya predstavlyaet soboj schetchik chisla pozicionnyh parametrov komandnoj stroki. Esli naschityvaetsya bolee odnogo parametra, pechata- etsya sootvetstvuyushchee soobshchenie ob oshibke v standartnyj fajl oshibok (stderr) i programma ostanavlivaetsya s plohim znacheniem statusa. Otmetim, chto komanda echo obychno pechataet v standartnyj vyhod (stdout). My mozhem perenapravit' stdout v drugoj fajlovyj deskriptor, ukazav ego. V dannom sluchae my sobiraemsya pechatat' v stderr. Sintaksis perevoditsya tak: "vyvesti etu stroku i perenapravit' ee v fajlovyj deskriptor (&) standartnogo fajla oshibok (2)". Pechat' soobshchenij ob oshibkah v stderr obespechivaet soglasovannoe povedenie komandnogo fajla nezavisimo ot sredy, v kotoroj on zapushchen. Otmetim