lzhna byt' takoj: paths -s Format setuid i formaty vydachi marshruta yavlyayutsya vzaimoisklyuchayu- shchimi, poskol'ku predpolagaetsya, chto vy hotite uznat' ot komp'yutera, kakie i gde nahodyatsya fajly, a ne otgadyvat' imena fajlov. Esli v komandnoj stroke nahoditsya kakaya-to drugaya opciya, to v standartnyj vyvod vyvoditsya soobshchenie ob oshibke i komandnyj fajl za- vershaetsya. Opcii ustanavlivayut flag formata vyvoda v odno iz treh zna- chenij. Ves' dal'nejshij vyvod iz komandnogo fajla upravlyaetsya vybrannym formatom vyvoda. PRIMERY 1. $ paths ls more who paths /bin/ls /usr/bin/more /bin/who /usr/russ/bin/paths Poisk marshrutov k komandam ls, more, who, paths. Pri vyvode uka- zyvayutsya polnye absolyutnye marshrutnye imena. Obratite vnimanie, chto v konce imeni kazhdogo fajla pechataetsya simvol novoj stroki, chtoby polu- chit' raspechatku, v kotoroj kazhdoe imya fajla stoit v otdel'noj stroke. 2. $ more `paths gettydefs termcap paths` Esli vasha peremennaya PATH soderzhit katalog /etc, to etot primer budet rabotat'. Esli net, to pervye dva fajla ne budut najdeny. Snacha- la zapuskaetsya komanda paths, i ee vyvod pomeshchaetsya na svoe mesto v komandnoj stroke komandy more. Kogda zapuskaetsya komanda more, ona ne znaet, chto ee argumenty polucheny ot drugoj komandy. Posle zaversheniya raboty komandy paths komanda more prinimaet vid: more /etc/gettydefs /etc/termcap /usr/russ/bin/paths s polnymi marshrutnymi imenami kazhdogo fajla. |tot primer pokazyvaet, kak mozhno zastavit' komandu paths vypolnyat' vsyu rabotu po poisku i po- kazu fajlov, kotorye vy hotite uvidet'. 3. $ ll `paths ll` V etom primere v dlinnom formate vyvodyatsya fajly s imenami ll, kotorye najdet path. (My predstavim nashu versiyu komandy ll neskol'ko pozzhe v etoj zhe glave.) Kak i v predydushchem sluchae, snachala generiru- etsya informaciya o marshrute, zatem ona pomeshchaetsya v komandnuyu stroku, a zatem zapuskaetsya komanda ll. 4. $ m `paths paths` V dannom primere generiruetsya marshrutnoe imya samogo komandnogo fajla paths i peredaetsya programme m, kotoraya ispol'zuet komandu more dlya raspechatki. (Komandnyj fajl m my takzhe pokazhem vam pozzhe.) POYASNENIYA V stroke 4 inicializiruetsya peremennaya FORMAT, ukazyvaya marshrut- nyj tip poiska. Vypolnyaetsya dejstvie po umolchaniyu, tochno takoe zhe, kak v komandnom fajle path, kotoryj my rassmotreli ranee. V strokah 6-19 vse argumenty komandnoj stroki proveryayutsya na kor- rektnost'. Kriteriem togo, chto argument est' opciya, yavlyaetsya defis v roli pervogo simvola. Zametim, chto zdes' ne razresheno ispol'zovanie sintaksisa "-xyz". |to zastavlyaet vas pol'zovat'sya sintaksisom "-x -y -z". Hotya etot moment mozhet pokazat'sya nesushchestvennym, na samom dele on vazhen. Vsegda nuzhno dostigat' kompromissa mezhdu bystroj razrabotkoj komandnogo fajla pri soglasii na nedostatki zhestkogo sintaksisa - i razresheniem gibkogo formata za schet dopolnitel'nyh usilij po kodirova- niyu i otladke i za schet bolee medlennogo vypolneniya. Vash vybor zavisit ot vashih prioritetov, ot kolichestva lyudej, ispol'zuyushchih vashe instru- mental'noe sredstvo, i ot togo, naskol'ko kritichna skorost' vypolne- niya. Konechno, esli skorost' kritichna, vy, veroyatno, zahotite ispol'zo- vat' kakim-to obrazom yazyk Si. My ostavlyaem obrabotku konkatenirovan- nyh opcij v kachestve uprazhneniya dlya chitatelya. Cikl for prohodit po vsem pozicionnym parametram. Esli pervym simvolom argumenta yavlyaetsya "-", to on sveryaetsya so spiskom dopustimyh argumentov s pomoshch'yu operatora case v strokah 9-17. Opciya "-l" izmenya- et peremennuyu formata, posle chego ubiraetsya iz rassmotreniya. |to dela- etsya dlya osvobozhdeniya etoj pozicii, chtoby konechnym rezul'tatom byli prosto imena fajlov v komandnoj stroke. Opciya "-s" takzhe izmenyaet peremennuyu formata. Odnako, vmesto to- go, chtoby ubrat' opciyu iz komandnoj stroki, ona likvidiruet vsyu ko- mandnuyu stroku i zamenyaet ee simvolom "l". |to zastavlyaet cikl for prohodit' tol'ko odnu iteraciyu, tak kak v komandnoj stroke teper' tol'ko odin parametr. Blagodarya takomu obrashcheniyu s komandnoj strokoj, nam ne nuzhen drugoj cikl: my mozhem ispol'zovat' tot zhe cikl, chto i v opredelenii marshruta, bez vsyakih modifikacij. Poskol'ku posle opcii s ne ozhidaetsya nikakih imen fajlov, my bol'she ne hotim rassmatrivat' ko- mandnuyu stroku. Esli ispol'zovana opciya, kotoraya ne yavlyaetsya ni l, ni s, to etoj opcii sootvetstvuet zvezdochka (*) i v standartnyj fajl oshibok vyvo- ditsya soobshchenie ob oshibke. Zatem komandnyj fajl zavershaetsya. My by mogli prosto proverit' pervyj parametr komandnoj stroki, chtoby vyyasnit', yavlyaetsya li on opciej, i esli yavlyaetsya, to ustanovit' etu opciyu. Poskol'ku mozhno ispol'zovat' tol'ko odnu opciyu za odin raz, my mogli by predpolagat', chto v ostal'noj chasti komandnoj stroki byli imena fajlov. Tem ne menee, etot cikl dopuskaet prostoe dobavlenie drugih opcij, kotorye mogli by dejstvovat' v dopolnenie k odnoj osnov- noj. |to bolee predpochtitel'no, i ono ne vliyaet na proizvoditel'nost'. V stroke 21 my dobavlyaem simvol dvoetochiya (:) k drugim simvolam razdelitelya polej. My dolzhny imenno dobavit' dvoetochie, a ne prevra- tit' razdelitel' polej tol'ko v dvoetochie. Esli by my sdelali posled- nee, to eto zaputalo by razbor imen fajlov v komandnoj stroke. Osnovnoj cikl predstavlen v strokah 23-40. |to dvojnoj cikl for. Vneshnij cikl prohodit po kazhdomu fajlu v komandnoj stroke, a vnutren- nij cikl obrabatyvaet kazhdyj katalog, ukazannyj v vashej peremennoj PATH. Obratite vnimanie, chto vneshnij cikl idet po imenam fajlov, a ne po zapisyam katalogov. Esli by my vybrali vtoroe, to v raspechatke naru- shilsya by poryadok imen fajlov, poskol'ku poisk shel by snachala po kata- logam. Sledovatel'no, dlya kazhdogo imeni fajla i kataloga dejstvie za- visit ot trebuemogo formata. Marshrutnyj format pechataet polnoe imya, listingovyj format vypolnyaet komandu ls, a format set ne ishchet ukazan- nye imena fajlov, no proveryaet prava dostupa i ishchet fajly s ustanov- lennym pol'zovatel'skim identifikatorom. Obrat PRIEMY PROFESSIONALXNOJ RABOTY V UNIX analogami. Opciya ls est' dopolnenie, kotoroe sokrashchaet ob®em raboty pri vyzove. Nalichie kombinacii poiska i komandy ls osvobozhdaet togo, kto vyzyvaet etot komandnyj fajl ot neobhodimosti primenyat' komandu podstanovki. Staraya i novaya komandy vyglyadyat primerno tak: ll `path ll` Nahodit put' k ll, a zatem zapuskaet na nem komandu ls -l. paths -l ll Nahodit put' i vmesto togo, chtoby ego napechatat', vypolnyaet komandu ls -l primenitel'no k etomu puti. Format setuid v stroke 34 proshchaetsya s podhodom "odin fajl za odin raz" i vklyuchaet katalogovuyu mashinu. Poskol'ku vneshnij cikl ustanovlen na odnu iteraciyu, vnutrennij cikl stanovitsya glavnym. Dlya kazhdogo ka- taloga, ukazannogo v PATH, pechatayutsya oformlenie iz dvoetochij i imya kataloga. |to delaet raspechatku priyatnoj, informativnoj i naglyadnoj. Klyuchevoj komandoj yavlyaetsya kombinaciya ls-grep. Kazhdoe imya fajla v kataloge raspechatyvaetsya v dlinnom formate, zatem prosmatrivaetsya bit ustanovki pol'zovatel'skogo identifikatora. Model' takova, chto komanda ls -al $DIR pechataet sleduyushchee: ------------------------------- | | -rws--x--x 1 root bin 16235 Sep 13 1985 /bin/su | | Argument "^[^ ]*s[^ ]*" oznachaet poisk ot nachala stroki simvola, otlichnogo ot probela, za kotorym sleduet odin ili bolee simvolov, ot- lichnyh ot probela, zatem simvol s i zatem odin ili bolee simvolov, ot- lichnyh ot probela. |to vyrazhenie ogranichivaet poisk bitami prav dostu- pa v nachale stroki. Esli imeetsya simvol s gde-libo v pravah dostupa (libo v pol'zovatel'skom identifikatore processa, libo v gruppovom identifikatore processa), to komanda grep otrabatyvaet uspeshno i pecha- taetsya vsya stroka. Takoj vid poiska ustanovlennogo pol'zovatel'skogo identifikatora neskol'ko "legkovesen" v tom smysle, chto poisk vedetsya tol'ko soglasno peremennoj PATH, kotoraya u vas est'. Fajly s ustanovlennym pol'zova- tel'skim identifikatorom mogut nahodit'sya v katalogah, kotorye ne uka- zany v PATH. Odnako v takoj realizacii dannaya opciya obespechivaet byst- roe obrashchenie k vashim lokal'nym fajlam s ustanovlennym pol'zova- tel'skim identifikatorom. VOZMOZHNYE MODIFIKACII Dannyj komandnyj fajl otkryt dlya mnogih razlichnyh vidov modifika- cii. Poisk polnogo imeni fajla yavlyaetsya fundamental'noj zadachej prog- rammnogo obespecheniya po soprovozhdeniyu fajlov. |ta vozmozhnost' pozvolya- et nam polagat'sya na samu programmu paths ili ispol'zovat' paths v ka- chestve kuska bolee ob®emnoj programmy. Pri razrabotke vashih sobstvennyh programm sleduet obratit' vnima- nie na gibkost' komandnogo fajla paths, kotoraya vyrazhaetsya v otlichii mezhdu obrabatyvaemymi formatami. Pervye dva formata ispol'zuyut otdel'- nye fajly, a format set ispol'zuet katalogi. Dal'nejshie dopolneniya k komandnomu fajlu paths mogut kasat'sya lyuboj iz etih strok ili mogut kombinirovat' ih. Esli est' neobhodimost', programmnoe obespechenie mo- zhet prisposobit'sya k etomu. 2.2. VYVOD INFORMACII 2.2.1. lc - vyvod fajlovoj informacii na ekran po stolbcam ------------------------------------------------------------- IMYA: lc ------------------------------------------------------------ lc Vydaet spisok fajlov v kolonochnom formate NAZNACHENIE Vydaet informaciyu o fajlah v formate kolonok, pokazyvaya katalogi i ispolnyaemye moduli. |tot listing mozhno propustit' cherez komandu more. FORMAT VYZOVA lc [-m] [ls options] file [file ...] PRIMER VYZOVA lc -R $HOME Vydaet spisok vseh fajlov vo vseh podkatalogah moego registra- cionnogo kataloga. TEKST PROGRAMMY 1 : 2 # @(#) lc v1.0 List files in a column Author: Russ Sage 2a Vyvodit spisok fajlov v kolonochnom vide 4 if [ "$1" = "-m" ] 5 then MORE="| /usr/bin/more" 6 shift 7 else MORE="" 8 fi 10 eval "/bin/ls -a $@ | /bin/pr -5t" $MORE # pre System V 11 eval /bin/ls -aCF $@ $MORE # System V PEREMENNYE SREDY VYPOLNENIYA MORE Soderzhit programmnyj kanal k komande more OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL lc? V mire komp'yuterov mnogie lyudi izobretayut koleso, a drugie lyudi izobretayut ego snova. Esli pervoe koleso ne togo razmera ili ne togo cveta, delaetsya drugoe koleso. V nashej konkretnoj situacii ishodnym kolesom yavlyaetsya komanda ls sistemy UNIX, kotoraya imeet nekotorye ne- dostatki v svoih rannih realizaciyah. Ona vydaet horoshuyu informaciyu, no ona pechataet imena fajlov tol'ko v odnu kolonku, chto privodit k nera- cional'nomu rashodovaniyu mesta i zatrudnyaet chtenie imen fajlov. Poeto- mu my sozdaem versiyu komandy ls, kotoraya otobrazhaet raspechatki v neskol'ko kolonok. Kak vidno iz predydushchego listinga, lc imeet dve formy. Odna pred- naznachena dlya sistem, bolee rannih, chem System V, a drugaya - dlya System V i posleduyushchih versij UNIX. Prichina v tom, chto System V versii 2 imeet novuyu komandu ls, kotoraya delaet imenno to, chto my hotim. Sistema Berkeley takzhe imeet versiyu komandy ls, kotoraya po umolchaniyu ispol'zuet neskol'ko kolonok pri vyvode na terminal. No dlya XENIX i rannih versij System V my dolzhny delat' eto sami. Delo v tom, chto hotya v vashej versii UNIX, XENIX ili chego-libo eshche mogut otsutstvovat' ko- mandy, imeyushchiesya v drugih versiyah, vy obychno mozhete postroit' to, chto vam nuzhno. |to mozhet potrebovat' opredelennyh usilij, i vashi programmy mogut rabotat' ne tak bystro i ne tak effektivno, no vy MOZHETE polu- chit' nuzhnoe sredstvo. Pol'zovatelyam interpretatorov csh i poslednego sh, imeyushchego funk- cii, vidimo, luchshe by zamenit' ves' etot scenarij na to, chtoby sdelat' lc psevdonimom (alias). Ispol'zovat' vozmozhnost' vvedeniya psevdonimov, chtoby prisvoit' imya lyuboj korrektnoj komandnoj stroke UNIX (naprimer, vyzovu komandy ls s ukazannymi opciyami). |to legche, chem pisat' komand- nyj fajl, no ogranichivaet vas neobhodimost'yu rabotat' s uzhe imeyushchimisya komandami ili opciyami. |to bystree, tak kak ne sozdaetsya nikakih do- polnitel'nyh processov. Pri rabote so starym interpretatorom sh my dolzhny projti cherez obychnuyu proceduru izgotovleniya komandnogo fajla i razmeshcheniya ego v ka- taloge bin. S drugoj storony, SCO XENIX System V reshaet etu problemu, svyazyvaya eti zhe imena (lc, lf, l) s obychnoj komandnoj ls i ispol'zuya vyzyvayushchee imya dlya opredeleniya formy raspechatki. Itak, zachastuyu imeetsya mnogo al'ternativ. Mastera UNIX, stalkiva- yas' s kakoj-libo problemoj, ne boryutsya s nej s pomoshch'yu Si ili komand- nogo fajla interpretatora shell. Poskol'ku oni znakomy s sushchestvuyushchimi resursami sistemy UNIX, oni mogut rassmotret' problemu i vybrat' stra- tegiyu, ispol'zuyushchuyu naimenee slozhnoe sredstvo, vypolnyayushchee dannuyu ra- botu s priemlemym urovnem proizvoditel'nosti. V poryadke vozrastaniya slozhnosti, eto mogut byt' neponyatnaya, no sushchestvuyushchaya komanda i/ili opciya, psevdonim, komandnyj fajl interpretatora shell ili programma na yazyke Si. CHTO DELAET lc? Obshchij podhod k razrabotke etoj komandy zaklyuchaetsya v tom, chtoby sobrat' vmeste nekotorye opcii i sdelat' novuyu komandu s bolee moshchnym interfejsom. CHtoby dostich' etoj moshchi, my mozhem sdelat' pre- ili post- processor dlya obychnoj komandy sistemy UNIX. Glavnaya zadacha zdes' - pechat' kolonok, poetomu my smotrim na op- cii komandy ls, chtoby zadejstvovat' ih. Konechno, my vklyuchaem opciyu -C. Kakie eshche opcii ls nam nuzhny? Obychno UNIX ne pechataet fajly, imena ko- toryh nachinayutsya s tochek, naprimer, .profile, esli tol'ko vy ne ukazy- vaete ls -a. |to zabyvaetsya pri prosmotre etih vazhnyh fajlov, poetomu my konstruiruem nashu komandu tak, chtoby ona pechatala ih po umolchaniyu. Nikakie fajly ne skryvayutsya ot nas. Dlya pol'zovatelej System V i BSD (ili dlya lyubogo, kto imeet opciyu -F), listing uluchshaetsya za schet vyvo- da "/" posle imeni kataloga i "*" posle ispolnyaemogo fajla. Rannyaya ko- manda ls sistemy UNIX ne imela vozmozhnosti pechatat' v takom stile. Ot- metim, chto dannoe ispol'zovanie termina "ispolnyaemyj" oznachaet pokaz togo, chto flagi prav dostupa imeyut bit "x", a ne to, chto eto fajl tipa a.out s magicheskim chislom. |to otlichie vazhno tem, chto delaet nash ko- mandnyj fajl bolee poleznym. Esli ozhidaetsya dlinnaya raspechatka, kak eto byvaet obychno dlya re- kursivnyh katalogov, to vy hotite imet' dostup k komande more. My vstraivaem komandu more tak, chtoby ee mozhno bylo aktivirovat' s po- moshch'yu opcii -m. Opciya -m dolzhna byt' pervoj opciej posle imeni koman- dy, iz-za sposoba, kotorym ona proveryaetsya vnutri programmy. Esli ona peredaetsya posle pervoj opcii, ona perehodit k komande UNIX ls i in- terpretiruetsya kak pechat' v potokovom formate. |to takoj format, v ko- torom vse imena raspolozheny v strokah, razdelennyh zapyatymi (,). Kak my uzhe otmechali, vy mozhete sdelat' interfejs etogo komandnogo fajla bolee gibkim za schet dopolnitel'noj raboty nad nim. PRIMERY 1. $ lc `path lc` Poluchaet polnoe imya dlya lc i raspechatyvaet fajlovuyu informaciyu v vide kolonok. 2. $ lc -m -R / Pechataet kolonochnyj spisok VSEH fajlov v sisteme, rekursivno pro- hodya vniz po ierarhii sistemnogo dereva i propuskaya raspechatku cherez komandu more. Eshche odin malen'kij fokus: etot sintaksis byl ispol'zovan dlya soz- daniya drugoj komandy, nazvannoj expose. Komandnaya stroka "lc -m -R $@" davala by rekursivnyj spisok vseh fajlov v lyubom kataloge po vashemu vyboru v priyatnom postranichnom formate. 3. $ lc -m -R /usr/lib Rekursivno raspechatyvaet spisok vseh fajlov vo vseh katalogah, nachinaya s /usr/lib, i propuskaet listing cherez komandu more. 4. $ lc -m . | more Vydaet spisok fajlov v tekushchem kataloge i propuskaet listing che- rez komandu more, a zatem snova propuskaet vse cherez more. Rabotaet li eto ? Nikoim obrazom. Voznikaet polnaya putanica, i klavisha preryvaniya obychno yavlyaetsya nailuchshim sposobom vyhoda iz dannoj situacii. POYASNENIYA V strokah 4-8 proveryaetsya, yavlyaetsya li pervym argumentom komand- noj stroki -m - opciya komandy more. Esli eta opciya najdena, to v pere- mennuyu MORE zanositsya ukazanie konvejera i komanda more. Tem samym ustanavlivaetsya postobrabotka, kotoruyu sleduet primenit' k vyhodu ko- mandy ls. Zatem eta opciya ubiraetsya iz komandnoj stroki. |to delaetsya dlya togo, chtoby ostatok komandnoj stroki mozhno bylo peredat' komande ls, ne vyzvav pri etom nezhelatel'nyh effektov. Esli pervoj opciej ne yavlyaetsya -m, peremennoj MORE prisvaivaetsya nulevoe znachenie, chtoby ona vposledstvii ne vliyala na komandnuyu stroku. Stroka 10 - eto komandnaya stroka, kotoruyu vy by ispol'zovali na staroj UNIX-mashine tipa Version 7 ili System III. Ona ne imeet ni vstroennoj opcii dlya pechati simvolov kosoj cherty (/) i zvezdochek (*), ni vozmozhnosti pechati v vide kolonok. Vy dolzhny pozhertvovat' pervoj vozmozhnost'yu, a raspechatki v vide neskol'kih kolonok mozhno poluchit' s pomoshch'yu komandy pr sistemy UNIX. Komanda pr ispol'zovana s opciej "-5t", poetomu ona pechataet v pyat' kolonok (chto obychno priemlemo, no esli vstrechayutsya dlinnye imena fajlov, to pyati kolonok mozhet okazat'sya slishkom mnogo) i ne pechataet verhnij i nizhnij kolontituly. Blagodarya otkazu ot kolontitulov, 24-strochnyj format ne slishkom neudoben dlya vas. Otmetim, chto zdes' ispol'zovana komanda eval. |to special'naya vstroennaya komanda interpretatora shell, kotoraya vypolnyaet perevy- chislenie tekushchej stroki, podlezhashchej vypolneniyu. Interpretator shell povtorno analiziruet etu stroku, chtoby raskryt' znachenie imen peremen- nyh v komandnoj stroke i obespechit' raspoznavanie peremennyh kak tako- vyh. Zdes' my perevychislyaem peremennuyu MORE. Napomnim, chto my pomesti- li v etu peremennuyu konvejer. Esli my ne perevychislim komandnuyu stro- ku, to komanda pr popytaetsya otkryt' fajly "|" i "more", kotorye ne sushchestvuyut. Dlya togo, chtoby shell vmesto etogo vosprinyal eti simvoly kak ukazaniya konvejerov i programm, i ispol'zuetsya komanda eval. Stroka 10 imeet eshche odnu osobennost'. V komandnoj stroke uzhe est' odin konvejer. Otkuda shell znaet, traktovat' li simvol "|" kak imya fajla ili kak konvejer? Blagodarya tomu, chto argument komandy eval zak- lyuchen v kavychki. |to ukazyvaet komande eval sohranit' vse, chto naho- ditsya v kavychkah, bez izmenenij, no raskryt' znachenie peremennoj MORE i pomestit' ego v konec komandnoj stroki, nahodyashchejsya v kavychkah. Neskol'ko neponyatno, no esli vy dumaete ob etom paru let, ono stano- vitsya osmyslennym. Dlya teh iz vas, kto imeet novuyu komandu ls (System V, versiya 2 ili BSD 4.2), ne trebuetsya dva konvejera v komande. Kak pokazyvaet stroka 11, my poluchaem podhodyashchij kolonochnyj format iz samoj komandy ls, vmeste s pokazom vseh fajlov i special'nymi simvolami / i * dlya katalogov i ispolnyaemyh fajlov. Oboznachenie $@ otnositsya ko vsemu so- derzhimomu komandnoj stroki, t.e. k vashim dopolnitel'nym opciyam komandy ls i k imenam fajlov, spisok kotoryh vy hotite raspechatat'. Postupaya takim obrazom, my sozdaem fundament (opcii a,C,F), a vy mozhete nadstraivat' ego (ispol'zuya opcii R,t i t.d.). Skromnyj, no elegantnyj fokus zastavit' ls soobshchit' svoi opcii zaklyuchaetsya v tom, chtoby vyz- vat' ee s nevernoj opciej. Bol'shinstvo komand ne ispol'zuyut opcii z ili ?, poetomu vyzov "ls -z" ili "ls -?" privedet k takomu rezul'tatu: -------------------------------- | | ls: illegal option -- z | usage: -1ACFRabcdfgilmnopqrstux [files] | Vse eti opcii predstavlyayut opredelennyj interes. Esli vy chasto ispol'zuete kakie-libo iz nih, pomestite ih v komandnyj fajl lc, i vy poluchite vashu sobstvennuyu adaptirovannuyu komandu. Vy obratili vnimanie, chto vse obychnye komandy sistemy UNIX, ispol'zuemye v nashem komandnom fajle, imeyut polnye marshrutnye imena? |to mozhet pokazat'sya neskol'ko strannym, no prichina ukazaniya polnyh marshrutnyh imen v tom, chto kogda shell zapuskaet komandu, on ne dolzhen vozvrashchat'sya k analizu peremennoj PATH i iskat', gde raspolozhena ko- manda. Esli vy obrashchaetes' k komandam otnositel'nym sposobom, vremya poiska fajlov predstavlyaet soboj bol'shie nakladnye rashody. Kogda vy vyzyvaete lc, interpretator shell ishchet etu komandu, zatem lc vyzyvaet ls, kotoruyu tozhe nuzhno najti. Esli posle etogo rezul'taty propuskayutsya cherez more ili pr, to trebuetsya dopolnitel'nyj poisk. A polnye marsh- rutnye imena raspoznayutsya interpretatorom shell srazu zhe (on vidit, chto pervym simvolom yavlyaetsya /), i nuzhnaya komanda mozhet byt' vyzvana bystro. Izderzhki na poisk - edinstvennye izderzhki komandy lc. Ispol'zovanie polnyh imen, estestvenno, trebuet, chtoby vy znali, gde v sisteme razmeshcheny utility, k kotorym vy hotite obratit'sya. Vy mozhete primenit' komandu paths, chtoby poluchit' korrektnye polnye imena dlya zhestkogo ukazaniya ih v tekste vashego komandnogo fajla, a mozhete perepisat' dannyj komandnyj fajl pri perehode v druguyu sistemu. |to prosto eshche odna illyustraciya universal'nogo kompromissa mezhdu skorost'yu i effektivnost'yu, s odnoj storony, i gibkost'yu i mobil'nost'yu, s dru- goj. 2.2.2. ll - vyvod fajlovoj informacii v dlinnom formate ------------------------------------------------------------- IMYA: ll ------------------------------------------------------------- ll Vydaet spisok fajlov v dlinnom formate NAZNACHENIE Vydaet spisok fajlov v dlinnom formate (-l). Raspechatku mozhno propustit' cherez komandu more. FORMAT VYZOVA ll [-m] [ls options] file [file...] PRIMER VYZOVA ll *.c Vydacha spiska fajlov s ishodnymi tekstami na yazyke Si v dlinnom formate. TEKST PROGRAMMY 1 : 2 # @(#) ll v1.0 Long listing of files Author: Russ Sage 2a Vyvodit spisok fajlov v dlinnom formate 4 if [ "$1" = "-m" ] 5 then MORE="| /usr/bin/more" 6 shift 7 else MORE="" 8 fi 10 eval /bin/ls -al $@ MORE PEREMENNYE SREDY VYPOLNENIYA MORE Soderzhit stroku peredachi rezul'tatov po konvejeru komande more OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL ll? Motivy dlya sozdaniya komandy ll te zhe, chto my obsudili ranee dlya komandy lc. My mozhem ispol'zovat' ll dlya neskol'kih celej. Ona umen'- shaet kolichestvo trebuemyh nazhatij na klavishi, pozvolyaet izbezhat' neob- hodimosti pomnit' special'nye opcii i voobshche nastraivaet sistemu soot- vetstvenno nashim trebovaniyam vmesto togo chtoby nam prisposablivat'sya k sisteme. CHTO DELAET ll? Osnovoj etoj komandy yavlyaetsya izvestnaya komanda "ls -l". Ona, esli vy pomnite, daet ochen' emkuyu informaciyu o kazhdom fajle, vklyuchaya prava dostupa, svyazi, imya vladel'ca, razmer i tak dalee. (Kstati, programmisty, ispol'zuyushchie yazyk Si, mogut poluchit' etu informaciyu pri pomoshchi sistemnogo vyzova stat(2).) Poskol'ku takoj spisok pri nalichii mnozhestva fajlov mozhet legko perepolnit' ekran, to predostavlyaetsya op- ciya -m. Ona obespechivaet postranichnyj vyvod s pomoshch'yu komandy more. Otmetim, chto esli ispol'zuetsya eta opciya, to ona dolzhna stoyat' pervoj. Stroka simvolov, sootvetstvuyushchaya etoj opcii, udalyaetsya komandoj shift, tak chto ona ne smeshivaetsya s imenami fajlov i obychnymi opciyami komandy ls, kotorye peredayutsya kak argumenty. Posle opcii -m (esli ona est') ll dopuskaet ukazanie lyubyh drugih dopustimyh opcij komandy ls. Mozhno takzhe ispol'zovat' lyubuyu kombinaciyu imen fajlov. Zdes' primenimy obychnye sredstva porozhdeniya imen fajlov: * sootvetstvuet lyubym simvolam, ? - odnomu simvolu, a simvoly [] zada- yut diapazon iz nekotorogo nabora simvolov. V itoge my poluchili komandu ls, kotoraya po umolchaniyu rabotaet kak "ls -l", vyzyvaet komandu more s pomoshch'yu odnoj opcii vmesto neobhodimosti ukazaniya konvejera v komand- noj stroke i pri etom sohranyaet gibkost' komandy ls. PRIMERY 1. $ ll /etc/*mount* Vyvodit spisok vseh fajlov v kataloge /etc, imena kotoryh soder- zhat v kakom-libo meste slovo mount (naprimer, mount, umount, unmountable). 2. $ ll -i `who|awk '{print "/dev/" $2}'` Sperva vypolnyaetsya komanda who, zatem rezul'tat ee raboty po kon- vejeru peredaetsya komande awk, kotoraya vyrezaet imya ustrojstva i pri- pisyvaet emu prefiks /dev/. V rezul'tate spisok polnyh marshrutnyh imen ko vsem terminal'nym ustrojstvam, zaregistrirovannym v nastoyashchij mo- ment, pomeshchaetsya v komandnuyu stroku komandy ls -li. V raspechatke uka- zana vsya informaciya ob indeksnom deskriptore fajla (inode) dlya kazhdogo terminal'nogo ustrojstva. 3. $ ll `kind -a /lib` Vyvodit v dlinnom formate spisok vseh fajlov arhiva v kataloge /lib. |tot katalog soderzhit biblioteki kompilyatorov vseh yazykov siste- my UNIX. (Komanda kind, kotoraya otbiraet fajly po ih tipu, rassmatri- vaetsya v sleduyushchem razdele.) 4. $ ll -m -i /dev Vyvodit vsyu obychnuyu informaciyu plyus nomer indeksnogo deskriptora dlya vseh fajlov v kataloge /dev. Vydacha na ekran proishodit s pomoshch'yu komandy more. POYASNENIYA Esli pervym pozicionnym parametrom yavlyaetsya -m, to v stroke 4 inicializiruetsya peremennaya MORE dlya podklyucheniya konvejera i programmy /usr/bin/more. (Vopros o tom, pochemu ispol'zuetsya absolyutnoe marshrut- noe imya, obsuzhdalsya v predydushchem razdele.) Zatem simvol'naya stroka -m komandoj shift ubiraetsya iz komandnoj stroki. Esli zhe pervoj opciej ne yavlyaetsya -m, to peremennaya MORE ustanavlivaetsya v nul', chtoby ne vli- yat' na povtornyj razbor komandnoj stroki, vypolnyaemyj s pomoshch'yu koman- dy eval (stroka 10). V stroke 10 komanda eval ispol'zovana dlya polucheniya rezul'tiruyu- shchej komandnoj stroki. Komanda ls vyzyvaetsya s opciyami -al (vydacha spiska vseh fajlov v dlinnom formate), kotorye my ustanovili po umol- chaniyu. Zatem berutsya argumenty komandnoj stroki (minus pervyj argu- ment, esli eto byl -m, kotoryj my ubrali komandoj shift). |timi argu- mentami mogut byt' dopolnitel'nye opcii komandy ls plyus imena fajlov ili katalogov. V konce stroki znachenie peremennoj MORE obespechivaet konvejer s komandoj more, esli byla ukazana opciya -m. V protivnom slu- chae znachenie peremennoj MORE ravno nulyu i ne okazyvaet nikakogo vliya- niya na analiz soderzhimogo komandnoj stroki. CHto proizoshlo by, esli by pol'zovatel' ukazal opciyu -m v kachestve vtoroj (ili posleduyushchej) opcii? V etom sluchae opciya -m peredalas' by komande ls. Komanda ls traktovala by etu opciyu kak "potokovyj vyvod", a eto sovsem ne to, chto my hoteli. Odnako komanda ls byla vyzvana tak- zhe s opciej -l, kotoraya otmenyaet opciyu -m v sootvetstvii s tekstom programmy ls. Vy ne poluchili by vyvod s pomoshch'yu komandy more, no vashi vyhodnye dannye po-prezhnemu byli by vyvedeny v pravil'nom formate. 2.2.3. kind - vyvod odnotipnyh fajlov ------------------------------------------------------------- IMYA: kind ------------------------------------------------------------- kind Vydacha spiska imen fajlov opredelennogo vida NAZNACHENIE Vybiraet i vyvodit imena vseh fajlov v ukazannom kataloge (kata- logah), imeyushchih ukazannyj tip. Esli ne ukazan nikakoj tip, vybirayutsya tekstovye fajly. FORMAT VYZOVA kind [-a] [-d] [-t] [-x] [file...] PRIMER VYZOVA more `kind /etc/*` Vyvod komandoj more vseh tekstovyh fajlov, imeyushchihsya v katalo- ge /etc. TEKST PROGRAMMY 1 : 2 # @(#) kind v1.0 Prints files of the same kind Author: Russ Sage 2a Vyvodit spisok fajlov opredelennogo vida 4 if [ $# -gt 0 ] 5 then if [ `echo $1 | cut -c1` = "-" ] 6 then case #1 in 7 -a) KIND='archive' 8 shift;; 9 -d) KIND='data' 10 shift;; 11 -t) KIND='text' 12 shift;; 13 -x) KIND='executable' 14 shift;; 15 *) echo "kind: arg error" >&2 16 echo "usage: kind [-a] [-d] [-t] [-x] [file...]" >&2 17 echo " -a archive" >&2 18 echo " -d data" >&2 19 echo " -t text, default" >&2 20 echo " -x executable" >&2 21 echo " if no args, reads stdin" >&2 22 exit 1;; 23 esac 24 fi 25 fi 27 : ${KIND:='text'} 29 case $# in 30 0) while read FILE 31 do 32 file $FILE | fgrep $KIND | cut -d: -f1 33 done;; 34 *) file $@ | fgrep $KIND | cut -d: -f1;; 35 esac PEREMENNYE SREDY VYPOLNENIYA FILE Soderzhit imena fajlov po mere ih chteniya iz stdin (standartnogo vvoda) KIND Soderzhit stroku, opredelyayushchuyu tip fajla OPISANIE ZACHEM NUZHEN KOMANDNYJ FAJL kind? Fajlovaya sistema UNIX imeet strogie standarty pri rassmotrenii fajlov. Imeetsya tri vida fajlov: obychnye fajly (teksty, dannye, ispol- nyaemye fajly), katalogi i ustrojstva. Kazhdyj vid fajlov imeet svoe prednaznachenie i obychno imeet osobye komandy ili fajly dannyh, kotorye rabotayut s nim. Davajte rassmotrim, kak nekotorye iz sushchestvuyushchih komand sistemy UNIX rassmatrivayut tipy fajlov. Komanda ls delaet razlichie mezhdu kata- logami i drugimi fajlami, poetomu ona mozhet byt' polezna. Drugoj vazh- noj komandoj yavlyaetsya komanda file. Ona soobshchaet vam, kakoj tip imeet dannyj fajl, chto potencial'no polezno, no slishkom malo. Dlya togo chtoby izvlech' iz komandy file kakuyu-libo poleznuyu informaciyu, vy dolzhny nadstroit' nad nej nekotoruyu programmu. CHto nam dejstvitel'no nuzhno, tak eto nekij gibrid komand ls i file, t.e. utilita, kotoraya vyvodit imena vseh fajlov ukazannogo tipa. Primerom poleznosti takogo roda utility mozhet sluzhit' analiz so- derzhimogo katalogov. Voz'mem, naprimer, katalog /etc. On soderzhit programmy, fajly dannyh i tekstovye fajly. Dlya kazhdogo iz etih tipov trebuetsya svoj sobstvennyj tip analiza. Programmy analiziruyutsya koman- dami ls, size, nm i file. Fajly dannyh analiziruyutsya komandoj od. Tekstovye fajly analiziruyutsya komandami more, wc, head, tail i drugi- mi. Takim obrazom, obychno vam neobhodimo rabotat' v dannyj moment vre- meni s fajlami kakogo-nibud' odnogo tipa. CHTO DELAET kind? Komandnyj fajl kind - eto utilita, kotoraya raspechatyvaet imena vseh fajlov, imeyushchih ukazannyj tip. Ona imeet interfejs, pohozhij na interfejs komandy ls, t.e. vy mozhete peredat' ej opcii i imena fajlov ili simvoly rasshireniya imen fajlov. Pri vyvode otobrazhayutsya polnye imena, esli oni byli ukazany, no vy mozhete izbezhat' poyavleniya lishnej informacii pri vyvode, esli predvaritel'no perejdete v nuzhnyj katalog s pomoshch'yu komandy cd. Naprimer, esli by ya nahodilsya v moem registraci- onnom kataloge (/usr/russ) i vvel komandu $ kind -d /etc/* to vyvod mog by vyglyadet' tak: -------------------------------- | | /etc/mnttab | /etc/utmp | /etc/wtmp | To est', vyvelsya spisok vseh fajlov dannyh. A esli by ya vypolnil takuyu posledovatel'nost' komand: $ cd /etc $ kind -d * to pri vyvode ubralsya by marshrut, ispol'zovannyj v vyzyvayushchej posledo- vatel'nosti, i napechatalos' by sleduyushchee: ----------------------------------------------- | | mnttab | utmp | wtmp | Zatem vyhod v takom vide mozhet byt' ispol'zovan vo vneshnej koman- de dlya raspechatki i analiza fajlovoj informacii. Dopustimymi opciyami komandy kind yavlyayutsya -a dlya fajlov arhivov, -d dlya fajlov dannyh, -t dlya tekstovyh fajlov (chto yavlyaetsya umolchani- em) i -x dlya ispolnyaemyh fajlov. Opredelenie etih tipov sootvetstvuet komande UNIX file. Zametim, chto kriterii togo, chto fajl yavlyaetsya ispolnyaemym, v komande file otlichayutsya ot teh, kotorye primenyaet ko- manda ls: ls proveryaet bity x v indeksnom deskriptore fajla, v to vre- mya kak file proveryaet, yavlyayutsya li pervye neskol'ko bajtov soderzhimogo fajla "magicheskim chislom". |to magicheskoe chislo yavlyaetsya identifikato- rom struktury a.out (sm. /usr/include/a.out.h), kotoryj soobshchaet "YA yavlyayus' skompilirovannoj Si-programmoj". Imena fajlov poyavlyayutsya v komandnoj stroke posle opcij. |ti imena mogut byt' porozhdeny lyubym standartnym metodom sistemy UNIX. Esli v komandnoj stroke net imen fajlov, to kind prevrashchaetsya v fil'tr i chi- taet standartnyj vvod dlya polucheniya spiska imen fajlov. (Obratite vni- manie, chto ya skazal "imen fajlov", a ne "fajlov". Mozhno ispol'zovat' opcii, poskol'ku oni ubirayutsya iz komandnoj stroki komandoj shift po mere togo, kak oni vstrechayutsya.) Takim obrazom, vy mozhete ispol'zovat' drugie komandy dlya togo, chtoby peredat' po konvejeru spisok fajlov utilite kind. Ona otfil'trovyvaet i vyvodit tol'ko te iz nih, kotorye sootvetstvuyut nuzhnomu vam tipu. PRIMERY 1. $ od `kind -d /etc/*` Vyglyadit tak, kak budto eto dolzhno rabotat', no komanda od ne ra- botaet s naborom imen fajlov. Ona mozhet obrabatyvat' tol'ko odin fajl v dannyj moment vremeni. 2. $ ll `sh -x kind -a /lib/*` | m |to dlinnyj primer. Vyvodit v dlinnom formate spisok vseh fajlov arhivov, kotorye nahodyatsya v kataloge /lib. My zapuskaem shell v otla- dochnom rezhime vypolneniya, tak chto vy mozhete uvidet' kazhduyu komandnuyu stroku pered ee vypolneniem. Rezul'tat po konvejeru peredaetsya komande more. 3. # find / -print | kind -x | while read FILE > do > ll $FILE > done > /tmp/filelist Dannyj cikl obnaruzhivaet vse dejstvitel'no ispolnyaemye fajly. Dlya kazhdogo iz nih vypolnyaetsya komanda "ls -l". Otmetim, chto zdes' komanda ll vyzyvaetsya dlya kazhdogo imeni fajla. Vy mogli by vypolnit' tu zhe operaciyu pri pomoshchi takogo operatora find: # find / -perm -0111 -exec ll {} \; no opciya perm v dannom sluchae opyat' zhe proveryaet bity prav dostupa v indeksnom deskriptore fajla, a ne ishchet magicheskoe chislo v strukture a.out, kak opisano ranee. Kstati, dlya togo, chtoby vy mogli uspeshno za- pustit' komandu file (i tem samym kind) na sistemnyh fajlah, vy dolzhny imet' prava chteniya, chtoby mozhno bylo prochitat' magicheskoe chislo. 4. $ for F in `kind /bin/* /usr/bin/* /etc/*` > do > fgrep "trap" $F /dev/null > done $ fgrep "trap" `kind /bin/* /usr/bin/* /etc/*` $ find /bin /usr/bin /etc -exec fgrep "trap" {} \; |to tri razlichnyh sposoba poiska slova "trap" vo vseh tekstovyh fajlah. POYASNENIYA Opcii, kotorye mogut byt' ukazany v komandnoj stroke, dolzhny byt' samym pervym argumentom. |to sozdaet bolee strogij sintaksis, po koto- romu mozhno vylovit' oshibku. No eto neskol'ko ogranichivaet gibkost'. Kak bylo ranee otmecheno, vy mozhete, esli hotite, po-svoemu razreshit' kompromiss mezhdu effektivnost'yu i gibkost'yu putem dopolnitel'nogo programmirovaniya. V stroke 4 proveryaetsya, vklyucheny li kakie-libo parametry. Esli parametry est', to oni obrabatyvayutsya. Esli ne ispol'zuyutsya nikakie parametry, nichego ne delaetsya i upravlenie peredaetsya na stroku 27. Esli byli ispol'zovany kakie-libo argumenty i pervym simvolom yav- lyaetsya znak minusa (-), to vypolnyaetsya operator case dlya opredeleniya togo, kakoj tip fajla ukazan. Peremennaya KIND ustanavlivaetsya v soot- vetstvii s tipom fajla, i dannyj parametr udalyaetsya iz komandnoj stro- ki komandoj shift. Esli argument ne sovpadaet ni s odnoj iz dopustimyh opcij, to emu sootvetstvuet sluchaj *, chto oznachaet oshibku. Na stan- dartnoe ustrojstvo registracii oshibok vyvoditsya sootvetstvuyushchee soob- shchenie ob oshibke i sintaksicheskaya podskazka, posle etogo kind zaversha- etsya s plohim statusom vypolneniya. V stroke 27 proizvoditsya proverka togo, ustanovlena peremennaya KIND ili ravna nulyu. Esli ona ravna nulyu, v nee podstavlyaetsya simvol'- naya stroka "text". Esli KIND uzhe ustanovlena, to ona ne menyaetsya. |to neplohoj operator prisvoeniya znacheniya po umolchaniyu. Takim obrazom, pol'zovatel' ne obyazan ukazyvat' opciyu -t v komandnoj stroke. Esli zhe opciya -t byla ukazana, to ej est' chto sopostavit' v operatore case. Ostavshayasya chast' programmy v strokah 29-35 predstavlyaet soboj eshche odin operator case, kotoryj proveryaet kolichestvo argumentov, ostav- shihsya v komandnoj stroke posle obrabotki oshibok. Esli byla ukazana ka- kaya-libo opciya, to peremennaya KIND ustanovlena i opciya ubrana komandoj shift. V komandnoj stroke mogli ostat'sya tol'ko argumenty, kotorye yav- lyayutsya imenami fajlov ili marshrutami. Esli k tomu vremeni, kogda my uzhe gotovy k zaklyuchitel'noj obrabotke, ne ostalos' nikakih argumentov, to znachit v komandnoj stroke ne bylo ukazano ni odnogo imeni fajla. V etom sluchae v strokah 30-33 organizovyvaetsya cikl, kotoryj chi- taet imena fajlov iz standartnogo vvoda, zapuskaet komandu file i ispol'zuet komandu fgrep dlya opredeleniya togo, sootvetstvuet li tip fajla, vydannyj komandoj file, interesuyushchemu nas tipu (hranimomu v pe- remennoj KIND). Zatem my ispol'zuem komandu cut dlya vydeleniya togo, chto nam nuzhno. Obychnyj vyvod komandy file soderzhit imya fajla, dvoeto- chie i zatem opisanie. Nam nuzhno tol'ko imya fajla, poetomu my vyrezaem pervoe pole, ispol'zuya razdelitel' ":". Kogda nikakie dannye bol'she ne postupayut, cikl while zavershaetsya, my popadaem v konec operatora case i vyhodim iz programmy. Esli zhe argumenty NAJDENY v komandnoj stroke, to vmesto vsego etogo vypolnyaetsya vetv' operatora case v stroke 34. S pomoshch'yu obozna- cheniya $@, imena vseh fajlov v komandnoj stroke vklyucheny v komandu file. Takim obrazom, ne nuzhen nikakoj cikl. Vo vsem ostal'nom obrabot- ka identichna stroke 32. VOZMOZHNYE MODIFIKACII Bylo by neploho, esli by komandnyj fajl kind mog rabotat' odnov- remenno s raznymi tipami fajlov. |to oznachaet nalichie neskol'ko opcij v komandnoj stroke, naprimer -a i -d. Vam mogla by ponadobit'sya sostavnaya stroka, v kotoroj kazhdaya chast' byla by otdelena simvolom |. Zatem eta stroka mogla by byt' ispol'zovana v komande egrep, naprimer, "egrep 'archive|data'". Vam prishlos' by organizovat' cikl po komandnoj stroke vmesto ispol'zovaniya fiksirovannyh pozicij i ubedit'sya v tom, chto vy ne poluchite zaciklivshijsya konvejer, kogda zadana tol'ko odna opciya. 2.2.4. m - prostoj dostup k komande more ------------------------------------------------------------- IMYA: m ------------------------------------------------------------- m Prostoj dostup k komande more NAZNACHENIE Obespechivaet bystryj i prostoj sposob postranichnogo vyvoda FORMAT VYZOVA m [more options] [file ...] PRIMER VYZOVA m * Vyvod komandoj more vseh fajlov tekushchego kataloga TEKST PROGRAMMY 1 : 2 # @(#) m v1.0 Easy access to more 2a Prostoj dostup k komande more 4 /usr/bin/more $@ OPISANIE ZACHEM NUZHEN KOMANDNYJ FAJL m? Sistema UNIX sil'no zagromozhdaetsya po mere svoego funkcionirova- niya. V nej obychno imeetsya mnozhestvo tekstov i dannyh. Prosmotr gromad- nogo kolichestva dannyh trebuet mnogokratnogo nazhatiya na klavishi, esli vy dolzhny vruchnuyu upravlyat' postranichnym vyvodom ili periodicheski vy- zyvat' komandu more. Nam neobhodimy programmnye sredstva, kotorye po- mogut nam uskorit' etu rabotu. Odnim iz takih sredstv yavlyaetsya m. Ono ochen' korotkoe i prostoe, no eto ne znachit, chto ono bespolezno. Imeetsya dva osnovnyh sposoba vyvoda dannyh na ekran. Pervyj sposob - neposredstvennyj vyzov komandy, naprimer, "more datafile". Vy napravlyaete dannye na ekran samoj komandoj. Vtoroj sposob - ispol'zo- vat' kakuyu-nibud' komandu dlya polucheniya dannyh, a zatem v konce pereh- vatit' ih komandoj more, naprimer "od -c . | more". V oboih etih slu- chayah my vvodim s klaviatury mnogo simvolov. Sdelav tak, chtoby komanda more vyzyvalas' po odnomu simvolu, my mogli by umen'shit' poslednie dve komandy na shest' nazhatij na klavishi. Za celyj den' eto hot' nemnogo predohranit klaviaturu ot razrusheniya! (Esli vasha sistema podderzhivaet vyzov komand po psevdonimam (aliasing), to, kak ukazyvalos' ranee, vy mogli by ispol'zovat' v etom sluchae komandu alias: "alias m more".) CHTO DELAET m? Nadeemsya, vse vashi sistemy imeyut komandu more ili hotya by ee za- menu. Postranichnyj vyvod imeet vazhnoe znachenie pri rabote s tekstom bol'shogo ob®ema. Vse opcii i argumenty peredayutsya v komandnoj stroke. Vy mozhete ukazat' opcii komandy more v komandnoj stroke komandy m. Oni pereda- yutsya bez izmenenij. Mozhno ukazat' imena fajlov. Esli oni ukazany, ko- manda more vyvodit ih. V protivnom sluchae ozhidaetsya postuplen