3 Znakomstvo s Linux

Soderzhimoe etogo razdela

3.1 Vvedenie

Novye pol'zovateli UNIX i Linux mogut byt' oshelomleny razmerami i ochevidnoj slozhnost'yu sistemy, kotoraya predstala pered nimi. Sushchestvuet mnogo horoshih knig po ispol'zovaniyu UNIX dlya vseh urovnej podgotovki: ot novichka do eksperta. No ni odna iz etih knig ne obsuzhdaet osobennosti Linux. Hotya 95% vsego svyazannogo s ispol'zovaniem Linux absolyutno analogichno drugim UNIX-sistemam, naibolee pryamoj put' osvoeniya etoj sistemy - eto po uchebniku, napisannomu primenitel'no k Linux. Vot eta kniga i est' takoj uchebnik.

|ta glava ne zavodit v debri detalej i ne obsuzhdaet naibolee slozhnye prim. perevodchika: oni (i uzhe u nas tozhe) govoryat - prodvinutye aspekty Linux. Vmesto etogo delaetsya popytka postavit' novichka krepko na nogi, chtoby on mog v dal'nejshem chitat' i bolee obshchie knigi po UNIX, ponimaya bazovye razlichiya drugih UNIX-sistem i Linux.

Zdes' ne predpolagaetsya kakih-to predvaritel'nyh znanij, za isklyucheniem pervonachal'nogo znakomstva s personal'nym komp'yuterom i MS-DOS. No dazhe esli vy ne uspeli pobyvat' pol'zovatelem MS-DOS, vy vse ravno vse zdes' pojmete. Na pervyj vzglyad UNIX ochen' pohozh na MS-DOS (v konce-koncov fragmenty MS-DOS byli sproektirovany s oglyadkoj na operacionnuyu sistemu CP/M, kotoraya, v svoyu ochered', proektirovalas' s oglyadkoj na UNIX). No tol'ko pri ochen' uzh poverhnostnom vzglyade mozhno govorit' o pohozhesti UNIX i MS-DOS. Esli vy absolyutnyj novichok v mire personal'nyh komp'yuterov, etot uchebnik vam pomozhet.

I prezhde, chem nachat', prizyvaem: ne bojtes' eksperimentirovat'. Sistema vas ne ukusit. Rabotaya na nej vy nichego ne smozhete slomat'. UNIX imeet vstroennye sredstva zashchity, chtoby ne dat' "normal'nym" pol'zovatelyam (eto teper' i vy) vozmozhnost' isportit' vazhnye dlya sistemy fajly. Samoe plohoe, chto vy mozhete natvorit' - eto unichtozhit' vse svoi fajly, a togda, mozhet byt' pridetsya i pereinstallirovat' zanovo sistemu prim. perevodchika: kak pravilo, chtoby dovesti sistemu do pereinstallyacii, nado imet' prav bol'she, chem u "normal'nogo" pol'zovatelya.

3.2 Bazovye koncepcii UNIX

UNIX eto mnogozadachnaya, mnogopol'zovatel'skaya operacionnaya sistema. |to oznachaet, chto mnogo lyudej mozhet odnovremenno ispol'zovat' odin komp'yuter, vypolnyaya mnogo razlichnyh zadach. (|to sushchestvennoe otlichie ot MS-DOS, gde tol'ko odin chelovek mozhet ispol'zovat' v dannyj moment operacionnuyu sistemu). V UNIX pol'zovateli dolzhny sebya identificirovat' pri vhode, chto sostoit iz dvuh shagov: vvoda imeni (imya, po kotoromu vas identificiruet sistema) i vhodnoj parol', kotoryj yavlyaetsya vashim sekretnym slovom dlya otkrytiya vashego scheta (registracii v sisteme). Poskol'ku tol'ko vy znaete parol', nikto ne mozhet vojti v sistemu pod vashim imenem.

V tradicionnyh UNIX-sistemah sistemnyj administrator prisvoit vam imya i nachal'nyj parol' pri vashej registracii v sisteme (pri zavedenii v sisteme novogo pol'zovatelya). No poskol'ku na svoem personal'nom komp'yutere vy i sistemnyj administrator, vy dolzhny sebya (kak pol'zovatelya) zaregistrirovat' v sisteme, prezhde chem v nee vojdete (smotrite Razdel 3.2.1 nizhe). Dlya dal'nejshih razgovorov voz'mem uslovnoe imya ``larry''.

Krome prochego, kazhdaya sistema UNIX imeet pripisannoe ej hostname (hozyajskoe imya). |to hozyajskoe imya dobavlyaet mashine haraktera i ocharovaniya. Hostname ispol'zuetsya dlya identifikacii otdel'nyh mashin v seti, no dazhe esli vasha mashina ne v seti, ona vse ravno dolzhna imet' hostname. V Razdele 4.10.2 my podrobno rasskazhem ob ustanovke hostname na vashej mashine. Naprimer, imya mashiny, obsuzhdaemoj nizhe - ``mousehouse'' (myshinnaya norka).

Registraciya v sisteme (otkrytie scheta)

Prezhde, chem vy smozhete ispol'zovat' sistemu, vy dolzhny zaregistrirovat' sebya v sisteme. |to neobhodimo potomu, chto nerazumno ispol'zovat' imya superpol'zovatelya (root) dlya obychnyh nuzhd. Pol'zovatel' root nuzhen dlya vypolneniya privilegirovannyh komand i soprovozhdeniya sistemy, kak eto opisyvaetsya v Razdele 4.1.

Dlya togo, chtoby zaregistrirovat' sebya, vam neobhodimo zajti v sistemu pod imenem root i ispol'zovat' komandu useradd ili adduser. Ob etoj procedure smotrite podrobnej v Razdele 4.4.

Vhod v sistemu

Pri vhode vy uvidite na ekrane podskazku, naprimer, takogo vida:

    mousehouse login:

Vvedite svoe imya i nazhmite klavishu Return. Nash geroj larry napechataet sleduyushchee:

    mousehouse login:  larry
    Password:

Teper' vvedite vash parol' (password). Pri vvode parol' ne budet otobrazhat'sya na ekrane, tak chto nabirajte vnimatel'nee. Esli vy nepravil'no nabrali parol', to uvidite na ekrane soobshchenie

    Login incorrect
i vam sleduet popytat'sya eshche raz.

Kogda vy nakonec pravil'no vvedete imya pol'zovatelya i parol', vy oficial'no budete dopushcheny v sistemu i mozhete v nej svobodno puteshestvovat'.

Virtual'nye konsoli

Sistemnaya konsol' - eto monitor i klaviatura, svyazannye neposredstvenno s sistemoj. (Poskol'ku UNIX mnogopol'zovatel'skaya sistema, vy mozhete imet' dopolnitel'nye terminaly, svyazannye cherez posledovatel'nye porty s vashej sistemoj, no oni ne budut konsolyami). Linux, kak i nekotorye drugie versii UNIX, obespechivaet dostup k virtual'nym konsolyam (ili VC), kotorye pozvolyayut vojti v sistemu pod neskol'kimi imenami v odno vremya.

Dlya demonstracii etogo vojdite v sistemu (kak bylo pokazano ranee). Teper' nazhmite alt-F2. Vy dolzhny snova uvidet' podskazku login: , to est' pered vami vtoraya virtual'naya konsol', a vy voshli cherez pervuyu. CHtoby pereklyuchit'sya obratno na pervuyu VC, nazhmite alt-F1. Op-lya! Vy snova na pervoj konsoli.

Svezheinstallirovannyj Linux vozmozhno pozvolit vam rabotat' s chetyr'mya pervymi VC, ispol'zuya ot alt-F1 do alt-F4. No vozmozhno obespechit' rabotu s 12-yu VC - po odnoj na kazhduyu funkcional'nuyu klavishu. Kak vidite, ispol'zovanie VC mozhet byt' ochen' effektivnym - vy mozhete rabotat' na neskol'kih VC odnovremenno.

V to vremya, kak ispol'zovanie virtual'nyh konsolej ogranicheno (krome prochego, v kazhdyj moment vremeni vy mozhete videt' tol'ko odnu virtual'nuyu konsol') ono daet vam predstavlenie o mnogopol'zovatel'skih vozmozhnostyah UNIX. Poka vy rabotaete na VC #1, vy mozhete pereklyuchit'sya na VC #2 i nachat' rabotu nad chem-to drugim.

Shells i komandy

V bol'shinstve vashih issledovanij mira UNIX vy budete obshchat'sya s nim cherez obolochku shell. Shell - eto prosto programma, kotoraya vosprinimaet vvedennoe pol'zovatelem, (t.e. komandy, kotorye vy napechataete) i transliruet eto v komandy sisteme. |to mozhno sravnit' s programmoj COMMAND.COM pod MS-DOS, kotoraya delaet nechto pohozhee. Shell - eto lish' odin iz interfejsov UNIX. Sushchestvuet mnogo razlichnyh interfejsov, takih kak X Window System, kotoraya pozvolyaet vypolnyat' komandy ispol'zuya mysh' i klaviaturu v sochetanii.

Kak tol'ko vy voshli, sistema zapuskaet shell i vy mozhete vvodit' dlya nego komandy. Vot korotkij primer. Kak raz Larry voshel v sistemu i sistema vnov' vydala podskazku:

    mousehouse login:  larry
    Password:  larry's password
    Welcome to Mousehouse!
    /home/larry#

``/home/larry#'' eto podskazka shell, pokazyvayushchaya, chto on gotov prinimat' komandy. (Podrobnee pro podskazky pozzhe). Davajte poprosim sistemu sdelat' chto-nibud' interesnen'koe:

    /home/larry# make love
    make:  *** No way to make target `love'.  Stop.
    /home/larry#

Hm, kak okazalos', "make" - eto imya sushchestvuyushchej v sisteme programmy i shell pytalsya vypolnit' etu komandu. (ZHal', no sistema otneslas' k pros'be nedruzhestvenno).

|to podvodit nas k zhguchemu voprosu: CHto takoe komandy? CHto proishodit, kogda vy vvodite ``make love''? Pervoe slovo komandnoj stroki ``make'' eto imya komandy, kotoruyu predpolagaetsya vypolnit'. Vse ostal'noe v komandnoj stroke vosprinimaetsya kak argumenty komandy.

Primery:

    /home/larry# cp foo bar

Zdes' imya komandy ``cp'', a argumenty ``foo'' i ``bar''.

Kogda vy vvodite komandu, shell delaet neskol'ko veshchej. Vo-pervyh, smotrit na to, chto mozhet (dolzhno) byt' imenem komandy i yavlyaetsya li eto vnutrennej dlya shell komandoj. (Vnutrennyaya, eto komanda, kotoruyu shell znaet kak vypolnyat'. Sushchestvuet ryad takih komand, my o nih pogovorim pozzhe). Shell takzhe proveryaet, ne yavlyaetsya li komanda sinonimom drugoj ili trebuetsya podstanovka imeni. Esli etogo ne nado delat', shell ishchet sootvetstvuyushchuyu etomu imeni programmu na diske. Esli shell nahodit takuyu programmu, on ee vypolnyaet, peredavaya ej argumenty iz komandnoj stroki.

V nashem primere shell ishchet programmu po imeni make i pytaetsya vypolnit' ee s argumentom love. make - eto programma, kotoraya chasto ispol'zuetsya pri kompilyacii bol'shih programm, ona beret v kachestve argumenta imya "celevogo" fajla kompilyacii. V sluchae ``make love'' my prikazali komande make otkompilirovat' love. Poskol'ku make ne smog najti fajla s takim imenem, on soobshchil (neskol'ko zabavnym obrazom) o nevozmozhnosti vypolnit' komandu i vernulsya v podskazku.

CHto sluchitsya, esli my vvedem komandu, a shell ne smozhet najti programmu s etoj komandoj? Davajte poprobuem:

    /home/larry# eat dirt
    eat:  command not found
    /home/larry#

Vse ochen' prosto, esli shell ne mozhet najti programmu s imenem dannym v komandnoj stroke (zdes' ``eat''), on vydaet soobshchenie ob oshibke, kotoroe ob'yasnyaet prichinu nevypolneniya komandy. Vy chasto budete videt' eto soobshchenie, esli budete vvodit' imena komand s oshibkami. (naprimer, napechataete ``mkae love'' vmesto ``make love'').

Vyhod iz sistemy

Prezhde, chem idti dal'she, my rasskazhem, kak vyjti iz sistemy. Pri nalichii podskazki shell ispol'zujte komandu

    /home/larry# exit
dlya vyhoda. Est' drugie sposoby vyhoda, no etot samyj bezopasnyj.

Smena parolya

Vy takzhe dolzhny predstavlyat', kak mozhno menyat' parol'. Komanda "passwd" prim. perevodchika: imenno s propushchennymi bukvami ona i pishetsya sprosit vas pro staryj parol' i pro novyj. Ona poprosit dvazhdy vvesti novyj porol' dlya nadezhnosti. Vnimanie! Ne zabyvajte svoj parol', inache vam pridetsya prosit' sistemnogo administratora unichtozhit' ego i ustanovit' novyj (Esli vy i est' sistemnyj administrator, smotrite Razdel 4.4).

Fajly i katalogi

Vo mnogih operacionnyh sistemah (vklyuchaya UNIX) sushchestvuet koncepciya fajla, po kotoroj ego mozhno rassmatrivat' prosto, kak nabor informacii, kotoromu dano imya. Primerami fajlov budut: programma, kotoraya mozhet vypolnyat'sya, pis'mo, poluchennoe po elektronnoj pochte, napisannaya vami stat'ya. Sushchestvenno to, chto vse, chto hranitsya na diske, hranitsya v otdel'nyh fajlah.

Fajly identificiruyutsya po imenam. Naprimer, fajl, soderzhashchij vashu stat'yu mozhet byt' sohranen pod imenem my-paper. |ti imena obychno kakim-to obrazom otrazhayut soderzhanie. Ne sushchestvuet standartnogo formata imen fajlov, kak v MS-DOS i drugih operacionnyh sistemah; v obshchem sluchae imena fajlov mogut soderzhat' lyubye simvoly (krome / - smotrite nizhe obsuzhdenie formirovaniya "putej") i ogranicheny 256 simvolami po dline.

Odnovremenno s koncepciej fajla rassmotrim i koncepciyu kataloga. Katalog - eto sovokupnost' fajlov. Ego mozhno rassmatrivat' kak "papku", soderzhashchuyu mnozhestvo razlichnyh fajlov. Katalogi sami po sebe takzhe poluchayut imena, po kotorym vy ih razlichaete. Katalogi organizovany v drevovidnuyu strukturu, t.e. katalogi mogut soderzhat' drugie katalogi.

K fajlu mozhno obrashchat'sya po puti (pathname), formiruemoj iz imeni fajla, kotoromu predshestvuet imya kataloga, soderzhashchego fajl Naprimer, skazhem, Larry imeet katalog, nazvannyj papers, kotoryj soderzhit tri fajla: history-final, english-lit, i masters-thesis. (Kazhdyj iz etih treh fajlov soderzhit informaciyu o provodimyh Larry rabotah). Dlya togo, chtoby obratit'sya k fajlu english-lit, Larry mozhet ukazat' marshrut:

    papers/english-lit

Kak vy vidite, imena katalogov i fajlov razdelyayutsya edinichnym sleshem (/). Poetomu imena fajlov sami po sebe ne mogut soderzhat' etot simvol. Pol'zovateli MS-DOS uvidyat v etom chto-to znakomoe, poskol'ku v MS-DOS dlya etogo ispol'zuetsya bekslesh (\).

Kak uzhe govorilos', katalogi mogut byt' vstavleny drug v druga. Naprimer, pust' Larry v kataloge papers imeet drugoj katalog s nazvaniem notes. |tot katalog soderzhit fajly s imenami math-notes i cheat-sheet. Put' fajla cheat-sheet budet

    papers/notes/cheat-sheet

Poetomu put' - eto marshrut, kotoryj nado prodelat', chtoby dobrat'sya do konkretnogo fajla. Katalog vyshe dannogo (pod)kataloga nazyvaetsya roditel'skim katalogom. Zdes' katalog papers yavlyaetsya roditel'skim dlya kataloga notes.

Derevo katalogov

Bol'shinstvo sistem UNIX imeet standartnuyu strukturu katalogov, chto oblegchaet konkretnuyu ustanovku sistemy. Struktura predstavlyaet iz sebya derevo katalogov, nachinayushcheesya s kataloga ``/'', izvestnogo pod nazvaniem "kornevoj katalog". Katalogi nizhe / otnosyatsya k chislu vazhnejshih podkatalogov: sredi nih /bin, /etc, /dev, i /usr. |ti katalogi v svoyu ochered' soderzhat drugie katalogi, kotorye soderzhat sistemnye konfiguracionnye fajly, programmy i t.d.

V chastnosti, kazhdyj pol'zovatel' imeet domashnij katalog, kotoryj vydelyaetsya pol'zovatelyu dlya hraneniya ego fajlov. V vysheprivedennom primere vse fajly Larry (takie kak cheat-sheet i history-final) soderzhalis' v domashnem kataloge Larry. Obychno pol'zovatel'skij domashnij katalog nahoditsya pod katalogom /home i nazyvaetsya imenem pol'zovatelya. Tak domashnij katalog Larry budet /home/larry.

Na Ris. 3.2.8 predstavleno prostoe derevo katalogov. Ono dast vam nekotoroe predstavlenie o tom, kak organizuetsya derevo katalogov v vashej sisteme.

Tekushchij rabochij katalog

Komandy, kotorye vy daete shell, vydayutsya iz vashego tekushchego kataloga. Vy mozhete dumat' o vashem rabochem kataloge, kak o kataloge v kotorom vy nahodites'. Pri nachal'nom vhode v sistemu vashim rabochim katalogom avtomaticheski stanovitsya domashnij katalog (v nashem sluchae /home/larry). Pri obrashchenii k fajlu vy mozhete obrashchat'sya k nemu s uchetom vashego mestopolozheniya, vmesto togo, chtoby ukazyvat' polnyj put'.

/_____bin
    |_dev
    |_etc
    |_home_____larry
    |        |_sam
    |_lib
    |_proc
    |_tmp
    |_usr__X386
         |_bin
         |_emacs
         |_etc
         |_g++-include
         |_include
         |_lib
         |_local_____bin
         |         |_emacs
         |         |_etc
         |         |_lib
         |_man
         |_spool
         |_src_____linux
         |_tmp



     Ris 3.1: Tipichnoe (urezannoe) derevo katalogov Unix

Vot naprimer, u Larry est' katalog papers, a papers soderzhit fajl history-final. Esli Larry hochet posmotret' etot fajl, on mozhet ispol'zovat' komandu

    /home/larry# more /home/larry/papers/history-final

Komanda more prosto pokazyvaet fajl na ekrane porciyami. Poskol'ku tekushchij rabochij katalog Larry /home/larry, on vmesto etogo mozhet obratit'sya k fajlu s uchetom svoego tekushchego mestopolozheniya. Komanda budet

    /home/larry# more papers/history-final

Tak chto vy mozhete nachinat' imya fajla (takogo kak papers/final) s simvola, otlichnogo ot ``/'', sistema predpolagaet, chto vy obrashchaetes' k fajlu s uchetom vashego tekushchego rabochego kataloga. |to nazyvayut otnositel'nym imenem (a polnyj marshrut - polnoe (absolyutnoe) imya - t.e. put' ot kornya do dannogo imeni).

Obrashchenie k domashnemu katalogu

Obolochki (shell), t.e. programmy, kotorye chitayut i vypolnyayut komandy pol'zovatelya, mogut ispol'zovat'sya (odnovremenno v odnoj sisteme) raznye. V bol'shinstve sistem Linux ispol'zuyutsya tcsh ili bash pri nachal'noj registracii v sisteme. V tcsh i bash vy mozhete obratit'sya k svoemu domashnemu katalogu, ispol'zuya til'du (``~''). Naprimer, komanda

    /home/larry# more ~/papers/history-final

ekvivalentna

    /home/larry# more /home/larry/papers/history-final

Simvol ``~'' prosto zamenyaet imya vashego domashnego kataloga.

Vy takzhe mozhete obratit'sya k domashnemu katalogu drugogo pol'zovatelya s pomoshch'yu til'dy. Imya ``~karl/letters'' budet interpretirovano shell, kak ``/home/karl/letters'' (esli /home/karl - domashnij katalog dlya pol'zovatelya karl). Ispol'zovanie til'dy uproshchaet obrashchenie; ne sushchestvuet kataloga s imenem ``~'' - tak chto eto prosto "sintaksicheskij sahar", kotoryj imeetsya v rasporyazhenii shell.

3.3 Pervye shagi v UNIX

Pered tem, kak nachat', vazhno zametit', chto vse imena fajlov i komand chuvstvitel'ny k bol'shim i malym bukvam (chego net v sistemah tipa MS-DOS). Naprimer, komanda make ochen' otlichaetsya ot Make ili MAKE. To zhe otnositsya i k imenam katalogov.

Pervaya progulka

Teper' my mozhem vojti v sistemu i uznat', kak obrashchat'sya k fajlam i menyat' mestopolozhenie v fajlovoj sisteme, chtoby uproshchat' svoyu zhizn' v nej. Komanda dlya peremeshcheniya po derevu katalogov - cd, (``change directory''). Vy skoro obratite vnimanie, chto mnogie chasto ispol'zuemye komandy Unix sostoyat iz dvuh-treh bukv. Format komandy cd:

    cd <directory>
gde <directory> - imya kataloga, v kotoryj vy zhelaete perejti. Kak my uzhe govorili, kogda vy vhodite v sistemu, vy avtomaticheski okazyvaetes' v svoem domashnem kataloge. Esli Larry zhelaet dvinut'sya nizhe po derevu, on dolzhen ispol'zovat' komandu

    /home/larry# cd papers
    /home/larry/papers#

Kak vidite, izmenilas' podskazka, otraziv izmenenie mestopolozheniya (novyj rabochij katalog). Teper' on v kataloge papers i mozhet posmotret' na svoj fajl history-final s pomoshch'yu komandy

    /home/larry/papers# more history-final

CHtoby vernut'sya nazad iz podkataloga papers, nado ispol'zovat' komandu

    /home/larry/papers# cd ..
    /home/larry#

(Obratite vnimanie na probel mezhdu ``cd'' i ``..''). Kazhdyj katalog soderzhit imya ``..'' , kotoroe otsylaet k roditel'skomu (dlya dannogo kataloga) katalogu. Takzhe kazhdyj katalog imeet imya ``.'', kotoroe ssylaetsya na nego samogo. Poetomu komanda

    /home/larry/papers# cd .

nikuda ne perevedet.

V komande cd vy mozhete ispol'zovat' marshruty. CHtoby perejti v domashnij katalog Karla, vy mozhete vospol'zovat'sya komandoj

    /home/larry/papers# cd /home/karl
    /home/karl#

Ispol'zuya komandu cd bez argumentov vy iz lyubogo mesta dereva vernetes' v svoj domashnij katalog.

    /home/karl# cd
    /home/larry#

Razglyadyvanie soderzhimogo katalogov

Teper' vy znaete, kak hodit'-brodit' po katalogam, no veroyatno voznikaet vopros:"Nu i chto s togo?" Samo po sebe hozhdenie po katalogam bespolezno, davajte poznakomimsya s novoj komandoj ls. ls (LiSt) vydaet na ekran perechen' fajlov i katalogov (po umolchaniyu iz tekushchego kataloga). Naprimer,

    /home/larry# ls
    Mail
    letters
    papers
    /home/larry#

Zdes' my vidim, chto u Larry tri "edinicy hraneniya" v ego tekushchem kataloge: Mail, letters i papers. No eto malo, chto govorit: katalogi eto ili fajly? Mozhno ispol'zovat' opciyu (prim. perevodchika: chasto v dokumentacii po UNIX ispol'zuyut v etom kontekste slovo "flag") -F v komande ls, chtoby poluchit' bol'she informacii.

    /home/larry# ls -F
    Mail/
    letters/
    papers/
    /home/larry#

Pripisannye sprava k imenam fajlov / govoryat o tom, chto eto (pod)katalogi.

Ispol'zovanie ls -F (obratite vnimanie "-F" pishetsya bez probela) mozhet dat' takzhe ``*'' v konce nekotoryh imen fajlov. |to budet govorit' o tom, chto eto vypolnyaemye fajly ili programmy. Esli, pri vyzove ls -F, nichego sprava ne pripisano k imeni, to eto "normal'nyj" fajl, t.e. ne katalog i ne vypolnyaemyj fajl.

V obshchem, kazhdaya komanda UNIX mozhet imet' neskol'ko opcij v dopolnenie k drugim argumentam. |ti opcii obychno zapisyvayutsya so znakom ``-'', kak eto bylo pokazano na primere ls -F. Opciya -F soobshchaet komande ls, chto neobhodimo vydat' dopolnitel'nuyu informaciyu o tipe fajlov.

Esli vy napishete v komande ls imya kataloga, to ona vydast soderzhimoe ukazannogo kataloga.

    /home/larry# ls -F papers
    english-lit
    history-final
    masters-thesis
    notes/
    /home/larry#

Ili, chtoby bylo interesnee, davajte posmotrim, chto imeetsya v sistemnom kataloge /etc/.

    /home/larry# ls /etc

Images       ftpusers     lpc          rc.new     shells
adm          getty        magic        rc0.d      startcons
bcheckrc     gettydefs    motd         rc1.d      swapoff
brc          group        mount        rc2.d      swapon
brc~         inet         mtab         rc3.d      syslog.conf
csh.cshrc    init         mtools       rc4.d      syslog.pid
csh.login    init.d       pac          rc5.d      syslogd.reload
default      initrunlvl   passwd       rmt        termcap
disktab      inittab      printcap     rpc        umount
fdprm        inittab.old  profile      rpcinfo    update
fstab        issue        psdatabase   securetty  utmp
ftpaccess    lilo         rc           services   wtmp
/home/larry#

(Dlya vyshedshih iz MS-DOS pol'zovatelej polezno obratit' vnimanie, chto imena fajlov mogut byt' dlinnee 8 simvolov i soderzhat' tochku na lyuboj pozicii. Mozhno dazhe ispol'zovat' neskol'ko tochek v odnom imeni).

Davajte podnimemsya vverh po derevu (prim. perevodchika: tak uzh slozhilos', chto v UNIX nachal'noj vershinoj dereva yavlyaetsya "koren' (root)") , ispol'zuya komandu ``cd ..'', a zatem spustimsya v drugoj katalog (/usr/bin ).

    /home/larry# cd ..
    /home# cd ..
    /# cd usr
    /usr# cd bin
    /usr/bin#

Vy, razumeetsya, mozhete peredvigat'sya po katalogam bol'shimi shagami, naprimer, srazu vypolnit' cd /usr/bin.

Postarajtes' pogulyat' po katalogam, ispol'zuya komandy ls i cd. V nekotoryh sluchayah vy mozhete naporot'sya na razdrazhayushchee soobshchenie ``Permission denied''(obrashchenie zapreshcheno). |to vsego lish' srabotala sistema zashchity UNIX, chtoby vypolnyat' komandy v teh ili inyh katalogah vy dolzhny imet' na eto razreshenie. Podrobnee ob etom pogovorim v Razdele 3.9.

Sozdanie novyh katalogov

Pora poznakomit'sya s tem, kak sozdavat' katalogi. |to svyazano s ispol'zovaniem komandy mkdir. Poprobujte sleduyushchee:

    /home/larry# mkdir foo
    /home/larry# ls -F
    Mail/
    foo/
    letters/
    papers/
    /home/larry# cd foo
    /home/larry/foo# ls
    /home/larry/foo#

Nashi vam pozdravleniya! Vy tol'ko chto sozdali novyj katalog i zashli v nego. Poskol'ku poka net fajlov v etom novom kataloge, davajte poznakomimsya s tem, kak kopirovat' fajly.

Kopirovanie fajlov

Kopirovanie fajlov osushchestvlyaetsya komandoj cp (CoPy):

       /home/larry/foo# cp /etc/termcap  .
       /home/larry/foo# cp /etc/shells  .
       /home/larry/foo# ls -F
       shells     termcap
       /home/larry/foo# cp shells bells
       /home/larry/foo# ls -F
       bells     shells     termcap
       /home/larry/foo#

Komanda cp kopiruet fajly, perechislennye v komandnoj stroke, v fajl ili katalog, ukazannyj poslednim argumentom. (prim. perevodchika: neskol'ko fajlov odnoj komandoj cp mozhno skopirovat' tol'ko v katalog; v fajl mozhno skopirovat' tol'ko odin fajl). Obratite vnimanie na to, kak my ispol'zuem katalog ``.''dlya ssylki na tekushchij katalog.

Peremeshchenie fajlov

Novaya komanda s imenem mv (MoVe) peremeshchaet fajly vmesto ih kopirovaniya. Sintaksis komandy ocheviden.

       /home/larry/foo# mv termcap sells
       /home/larry/foo# ls -F
       bells     sells     shells
       /home/larry/foo#

Obratite vnimanie, chto teper' termcap uzhe ne sushchestvuet, a na ego meste fajl sells. |to mozhno ispol'zovat' dlya pereimenovaniya fajlov, chto my sejchas i sdelali. No mozhno i perenosit' fajly v sovsem drugie katalogi.

Vnimanie! Komandy mv i cp unichtozhat soderzhimoe fajla v kotoryj oni pishut (esli on sushchestvoval), ne sprashivaya vashego razresheniya. Bud'te vnimatel'ny, kogda vy perenosite fajl v drugoj katalog: tam uzhe mozhet sushchestvovat' fajl s takim imenem i vy ego zatrete.

Udalenie fajlov i katalogov

My tut s vami "narifmovali" nenuzhnyh fajlov, izuchaya rabotu komandy ls. Dlya udaleniya fajlov ispol'zuetsya komanda rm (ReMove).

    /home/larry/foo# rm bells sells
    /home/larry/foo# ls -F
    shells
    /home/larry/foo#

U nas nichego ne ostalos', krome shells, no ne budem perezhivat'. Obratite vnimanie, chto komanda rm ne budet vas peresprashivat' pered udaleniem, tak chto bud'te ostorozhny.

Rodstvennaya rm komanda rmdir. |ta komanda udalyaet katalogi, no tol'ko pustye katalogi. Esli v kataloge est' hot' kakie-nibud' fajly ili podkatalogi, ona raspishetsya v bessilii.

Rassmatrivanie fajlov

Komandy more i cat ispol'zuyutsya dlya prosmotra soderzhimogo fajlov. more vydaet fajl na displej "poekranno", v to vremya, kak cat vydaet ves' fajl razom. (prim. perevodchika: esli fajl mnogostrochnyj, to, pri ispol'zovanii komandy cat fajl promel'knet i na ekrane ostanutsya poslednie stroki).

CHtoby posmotret' fajl shells, ispol'zuem komandu

    /home/larry/foo# more shells

Pri ispol'zovanii komandy more nazhimajte klavishu probel dlya perehoda k sleduyushchej stranice i b dlya vozvrata k predydushchej. Nazhav q, vy vyjdete iz more.

A teper' poprobujte komandu cat etc/termcap/. Tekst promel'knet slishkom bystro, chtoby uspet' ego prochitat'. Na samom dele komanda ``cat'' (conCATenate) v osnovnom ispol'zuetsya dlya drugih celej, dlya toj zhe konkatenacii neskol'kih fajlov. |to v dal'nejshem budet obsuzhdat'sya.

Poluchenie operativnoj pomoshchi

Prakticheski kazhdyj UNIX imeet to, chto nazyvaetsya "Rukovodstvo" - man ( ``manual pages''). |ta komanda man soderzhit dokumentaciyu na razlichnye komandy sistemy, resursy, konfiguracionnye fajly. Naprimer, esli vy hotite najti informaciyu o drugih opciyah komandy ls, vvedite

    /home/larry# man ls

i vam na ekran budut vyvedeny stranicy Rukovodstva.

K sozhaleniyu, bol'shinstvo stranic rukovodstva napisany s orientaciej na pol'zovatelej, imeyushchih nekotorye predstavleniya o rabote sootvetstvuyushchih komand. Poetomu stranicy Rukovodstva obychno soderzhat spravochnye dannye po komandam, a ne uchebnyj material.

No Rukovodstvo neocenimo dlya osvezheniya pamyati, esli vy zabyli sintaksis komandy. Rukovodstvo mozhet takzhe mnogo rasskazat' vam o komandah, kotorye my dazhe ne upomyanem v etoj knige.

YA predlagayu vam posmotret' v Rukovodstve te komandy, kotorye my uzhe obsuzhdali i vse, s kotorymi my budem vstrechat'sya. Vy obnaruzhite, chto ne na vse komandy est' Rukovodstvo. Tomu neskol'ko prichin. Odna - nekotorye stranicy Rukovodstva eshche prosto ne napisany (the Linux Documentation Project - programma podgotovki dokumentacii dlya Linux kak by otvechaet za reshenie etoj problemy. My uzhe sobrali bol'shuyu chast' dokumentacii). Vo-vtoryh, komanda mozhet byt' vnutrennej komandoj shell ili sinonimom (alias), chto obsuzhdalos' v Razdele 3.2.4, v kazhdom iz etih sluchaev dlya nih net sobstvennyh stranic. Voz'mem dlya primera cd, kotoraya yavlyaetsya vnutrennej komandoj shell. Shell vypolnyaet etu komandu, no ona ne imeet svoej otdel'noj programmy.

3.4 Kratkaya informaciya o bazovyh komandah

|tot razdel predstavlyaet nekotorye naibolee poleznye bazovye komandy UNIX, vklyuchaya te, o kotoryh govorili v predydushchem razdele.

Obratite vnimanie, chto opcii obychno nachinayutsya s ``-'' i vo mnogih sluchayah neskol'ko odnobukvennyh opcij mogut sledovat' za odnim minusom, zapisannye slitno. Naprimer, vmesto ispol'zovaniya ls -l -F, mozhno ispol'zovat' ls -lF.

Vmesto perechisleniya vseh vozmozhnyh opcij kazhdoj komandy, my budem govorit' tol'ko o teh, kotorye polezny ili vazhny v dannoe vremya. Dejstvitel'no, bol'shinstvo iz etih komand imeet bol'shoe chislo opcij (bol'shinstvo iz kotoryh nikogda ne ispol'zuetsya). Vy mozhete dlya kazhdoj komandy s pomoshch'yu man posmotret' vse vozmozhnye opcii.

Obratite takzhe vnimanie na to, chto mnogie iz komand berut spisok fajlov ili katalogov, kak argumenty, oboznachennye kak ``<file1> ... <fileN>''. Naprimer, komanda cp beret v kachestve argumentov spisok fajlov, kotorye nado kopirovat', za kotorymi sleduet imya celevogo fajla ili kataloga. Pri kopirovanii neskol'kih fajlov v kachestve celevogo mozhet vystupat' tol'ko katalog.

cd

Izmenyaet tekushchij rabochij katalog.
Sintaksis: cd <directory>;
<directory> - katalog, v kotoryj perejti (``.'' ssylaetsya na tekushij katalog, ``..'' - na roditel'skij katalog).
Primer: cd ../foo perevodit iz tekushchego kataloga v ../foo.

ls

Vydaet informaciyu o fajlah v kataloge.
Sintaksis: ls <file1> ... <fileN>
Gde <file1> ... <fileN> imena fajlov ili katalogov, informaciyu pro kotorye nado vydat'.
Opcii: Zdes' bol'she opcij, chem vy dumaete. Naibolee chasto ispol'zuemye: -F (dlya predstavleniya informacii o tipah fajlov), i -l (vydaet v dlinnom (``long'') formate informaciyu o razmerah fajlov, vladel'cah, pravah dostupa i t.d. V detalyah eto budet obsuzhdat'sya dalee).
Primer: ls -lF /home/larry vydast soderzhimoe kataloga /home/larry.

cp

Kopiruet fajl(y) v fajl ili katalog.
Sintaksis: cp <file1> ... <fileN> <destination>
Gde <file1> ... <fileN> imena kopiruemyh fajlov, a <destination> fajl ili katalog, v kotoryj kopiruyut.
Primer: cp ../frog joe kopiruet fajl ../frog v fajl ili katalog joe.

mv

Peremeshchaet fajl(y) v drugoj fajl ili katalog. |ta komanda ne ekvivalentna kopirovaniyu s posleduyushchim unichtozheniem originala. Ona mozhet byt' ispol'zovana dlya pereimenovaniya fajlov, kak komanda RENAME iz MS-DOS.
Sintaksis: mv <file1> ... <fileN> <destination>
Gde <file1> ... <fileN> imena peremeshchaemyh fajlov, a <destination> imya fajla ili kataloga, v kotoryj peremeshchayut.
Primer: mv ../frog joe peremeshchaet fajl ../frog v fajl ili katalog joe.

rm

Udalyaet fajly. Imejte v vidu, kogda v UNIX udalyayutsya fajly, oni nevosstanovimy (ne kak v MS-DOS, gde vy mozhete "razudalit'" fajl).
Sintaksis: rm <file1> ... <fileN>
Gde <file1> ... <fileN> imena udalyaemyh fajlov.
Opcii: -i potrebuet vashego podtverzhdeniya pered udaleniem fajla.
Primer: rm -i /home/larry/joe /home/larry/frog udalyaet fajly joe i frog v kataloge /home/larry.

mkdir

Sozdaet novye katalogi.
Sintaksis: mkdir <dir1> ... <dirN>
Gde <dir1> ... <dirN> sozdavaemye katalogi.
Primer: mkdir /home/larry/test sozdaet katalog test v kataloge /home/larry.

rmdir

|ta komanda udalyaet pustye katalogi. Pri ispol'zovanii rmdir vash tekushchij rabochij katalog dolzhen nahodit'sya vne udalyaemogo kataloga.
Sintaksis: rmdir <dir1> ... <dirN>
Gde <dir1> ... <dirN> udalyaemye katalogi.
Primer: rmdir /home/larry/papers udalyaet katalog /home/larry/papers, esli on pustoj.

man

Vydaet stranicu Rukovodstva po dannoj komande ili resursu. (zdes' "resurs" - eto lyubaya sistemnaya utilita, kotoraya ne yavlyaetsya komandoj, naprimer bibliotechnaya funkciya).
Sintaksis: man <command>
Gde <command> imya komandy ili resursa, o kotorom zaprashivaetsya informaciya.
Primer: man ls - daet pomoshch' po komande ls.

more

Vydaet soderzhimoe nazvannyh fajlov poekranno.
Sintaksis: more <file1> ... <fileN>
Gde <file1> ... <fileN> otobrazhaemye fajly.
Primer: more papers/history-final predstavlyaet fajl papers/history-final.

cat

Ispol'zuetsya dlya konkatenacii fajlov. cat ispol'zuetsya takzhe dlya vydachi polnogo soderzhaniya fajla razom
Sintaksis: cat <file1> ... <fileN>
Gde <file1> ... <fileN> vydavaemye fajly.
Primer: cat letters/from-mdw vydaet na displej fajl letters/from-mdw.

echo

Prosto povtoryaet argumenty.
Sintaksis: echo <arg1> ... <argN>
Gde <arg1> ... <argN> "povtoryaemye" argumenty.
Primer: echo "Hello world" vydaet na ekran ``Hello world''.

grep

vydaet vse stroki v nazvannom fajle(lah), kotorye soderzhat zadannyj obrazec.
Sintaksis: grep <pattern> <file1> ... <fileN>
Gde <pattern> - obrazec (predstavlennyj regulyarnym vyrazheniem) i <file1> ... <fileN> - fajly, v kotoryh proizvoditsya poisk.
Primer: grep loomer /etc/hosts vydast vse stroki, v kotoryh fajl /etc/hosts, soderzhit obrazec ``loomer''.

3.5 Issledovanie fajlovoj sistemy

Fajlovaya sistema est' sobranie fajlov i ierarhiya katalogov. YA obeshchal povodit' vas po fajlovoj sisteme - i vremya nastalo. U vas dostatochno intellekta i znanij izvlech' pol'zu iz togo, chto ya govoryu i u vas est' karta dorog. (Smotrite Ris. 3.2.8).

Pervo-napervo vernemsya v kornevoj katalog (cd /) i sdelaem ls -F. Vy, ochevidno, uvidite katalogi: bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr i var. (Mozhete uvidet' i neskol'ko otlichnyj variant - ne volnujtes', razlichnye versii Linux mogut imet' otlichiya).

Prismotrimsya k kazhdomu katalogu.

/bin

bin - eto sokrashchenno ot ``binaries'' (t.e. dvoichnye ili vypolnyaemye fajly). Zdes' nahoditsya mnogo vazhnyh sistemnyh programm. Ispol'zujte komandu ``ls -F/bin'' chtoby posmotret' imeyushchijsya zdes' spisok fajlov. Vy mozhete obnaruzhit' zdes' uzhe znakomye vam komandy, vrode cp, ls i mv. |to i est' programmy sootvetstvuyushchih komand. Kogda, naprimer, vy ispol'zuete komandu cp, vy vypolnyaete programmu /bin/cp.

Ispol'zuya ls -F, vy uvidite, chto bol'shinstvo (esli ne vse) fajlov v /bin imeyut sprava ot imeni zvezdochku (``*''). |to govorit o tom, chto fajly vypolnyaemye, kak opisano v Razdele 3.3.2.

/dev

Sleduyushchaya ostanovka na nashem puti - dev. Vnov' posmotrite na soderzhimoe s pomoshch'yu ls -F.

"Fajly" v /dev izvestny kak drajvery ustrojstv - oni ispol'zuyutsya dlya dostupa k ustrojstvam i resursam sistemy, takim kak diski, modemy, pamyat' i t.d. Naprimer, kak vy mozhete chitat' dannye iz fajla, tochno takzhe vy mozhete chitat' vhodnye signaly ot myshi, imeya dostup k /dev/mouse. Imena fajlov, nachinayushchiesya na fd - eto diskovody gibkih diskov. fd0 - pervyj diskovod, fd1 - vtoroj. Teper' samye shustrye iz vas zametyat, chto zdes' imeetsya bol'she diskovodov, chem te dva, kotorye mnoyu upominalis': oni predstavlyayut specificheskie tipy diskovodov. Naprimer, fd1H1440 predstavlyaet dostup k high-density, 3.5" disketam na diskovode 1.

Vot perechen' nekotoryh iz naibolee ispol'zuemyh fajlov ustrojstv.

  • /dev/console/ otnositsya k sistemnoj konsoli, t.e. k monitoru, napryamuyu svyazannomu s sistemoj.
  • Razlichnye /dev/ttyS i /dev/cua ustrojstva ispol'zuyutsya dlya dostupa k posledovatel'nym portam. Naprimer, /dev/ttyS0 otnositsya k ``COM1'' pod MS-DOS. Ustrojstva /dev/cua otnosyatsya k "zvonyashchim" (``callout'') ustrojstvam, kotorye ispol'zuyutsya sovmestno s modemami.
  • Ustrojstva, imena kotoryh nachinayutsya s hd, imeyut dostup k zhestkim diskam. /dev/hda otnositsya ko vsemu pervomu zhestkomu disku, a hda1 tol'ko k pervomu razdelu /dev/hda.
  • Ustrojstva s imenami, nachinayushchimisya na sd - SCSI-drajvery. Esli u vas SCSI zhestkij disk, vmesto dostupa k nemu cherez /dev/hda, vy budete obrashchat'sya k /dev/sda. SCSI lenty dostupny cherez ustrojstva st, a SCSI CD-ROM cherez sr.
  • Ustrojstva lp obespechivayut dostup k parallel'nym portam. /dev/lp0 otnositsya k ``LPT1'' v MS-DOS.
  • /dev/null ispol'zuetsya kak "chernaya dyra" - lyubye dannye, poslannye syuda, kanut v Letu. Esli vy hotite podavit' vyvod komandy na ekran, vy mozhete perenapravit' etot vyvod v /dev/null. My ob etom pozzhe eshche pogovorim.
  • Ustrojstva s imenami /dev/tty otnosyatsya k "virtual'nym konsolyam" vashej sistemy (dostup putem nazhatiya alt-F1, alt-F2 i t.d.). /dev/tty1 sootvetstvuet pervoj VC, /dev/tty2 sootvetstvuet vtoroj i t.d.
  • Ustrojstva, ch'i imena nachinayutsya na /dev/pty, eto "psevdoterminaly". Oni ispol'zuyutsya dlya vhoda s udalennyh "terminalov". Naprimer, esli vasha mashina v seti, vhod k vam po telnet budet ispol'zovat' odno iz ustrojstv /dev/pty.

/etc

/etc soderzhit mnozhestvo vsevozmozhnyh sistemnyh fajlov konfiguracii. Oni vklyuchayut /etc/passwd (fajl parolej), /etc/rc (komandnyj fajl inicializacii) i t.d.

/sbin

/sbin ispol'zuetsya dlya hraneniya vazhnyh sistemnyh dvoichnyh fajlov, ispol'zuemyh sistemnym administratorom.

/home

home soderzhit domashnie katalogi pol'zovatelej. Naprimer, /home/larry - domashnij katalog pol'zovatelya ``larry''. Na vnov' installirovannoj sisteme etot katalog mozhet byt' pust v svyazi s vremennym otsutstviem zaregistrirovannyh pol'zovatelej.

/lib

/lib soderzhit obrazy razdelyaemyh bibliotek (shared library images). |ti fajly soderzhat kod, kotoryj mogut ispol'zovat' mnogie programmy. Vmesto togo, chtoby kazhdaya programma imela svoyu sobstvennuyu kopiyu etih vypolnyaemyh fajlov, oni hranyatsya v odnom obshchedostupnom meste - v /lib. |to pozvolyaet sdelat' vypolnyaemye fajly men'she i sekonomit mesto v sisteme.

/proc

/proc - eto "virtual'naya fajlovaya sistema", v kotoroj fajly hranyatsya v pamyati, a ne na diske. Oni svyazany s razlichnymi processami, proishodyashchimi v sisteme, i pozvolyayut poluchit' informaciyu o tom, chto delayut programmy i processy v ukazannoe vremya. Bolee detal'no my rassmotrim eto v Razdele 3.11.1.

/tmp

Mnogie programmy nuzhdayutsya v sozdanii rabochih fajlov, kotorye nuzhny korotkoe vremya. Kanonicheskoe mesto dlya etih fajlov v /tmp (tam obychno chashche provoditsya uborka musora).

/usr

/usr - eto ochen' vazhnyj katalog. On sostoit iz ryada podkatalogov, kotorye v svoyu ochered' soderzhat naibolee vazhnye i poleznye programmy i fajly konfiguracii, ispol'zuemye sistemoj.

Razlichnye katalogi, opisannye vyshe, neobhodimy dlya normal'nogo funkcionirovaniya sistemy, no bol'shinstvo veshchej, soderzhashchihsya v /usr neobyazatel'ny dlya sistemy. No eto takie neobyazatel'nye veshchi, kotorye delayut sistemu poleznoj i interesnoj. Bez /usr vy by imeli dostatochno zanudnuyu sistemu, soderzhashchuyu tol'ko programmy, vrode cp i ls. /usr soderzhit mnogo bol'shih programmnyh paketov i konfiguracionnyh fajlov, kotorye ih soprovozhdayut.

/usr/X386

/usr/X386 soderzhit The X Window System, esli vy ee installirovali. The X Window System - eto moshchnaya graficheskaya sreda, kotoraya soderzhit bol'shoe kolichestvo graficheskih utilit i programm, otobrazhayushchih "okna" na vashem ekrane. Esli vy znakomy s Microsoft Windows ili Macintosh environments, to X Windows budet vyglyadet' ves'ma pohozhe. Katalog /usr/X386 soderzhit vse vypolnyaemye i konfiguracionnye fajly X Window, a takzhe fajly podderzhki. Bolee detal'no eto budet obsuzhdat'sya v Razdele 5.1.

/usr/bin

/usr/bin nastoyashchee hranilishche dlya razlichnyh programm UNIX. On soderzhit bol'shinstvo vypolnyaemyh programm, kotoryh net ni v kakih drugih mestah, naprimer, v tom zhe /bin ih net.

/usr/etc

Tochno takzhe, kak i /etc, soderzhit vsevozmozhnye sistemnye programmy i konfiguracionnye fajly. /usr/etc soderzhit dazhe bol'she utilit i fajlov. V obshchem, fajly, nahodyashchiesya v /usr/etc nesushchestvenny dlya sistemy, v otlichie ot teh, kotorye nahodyatsya v /etc, i ochen' sushchestvenny.

/usr/include

/usr/include soderzhit include-fajly dlya kompilyatora Si. |ti fajly (bol'shinstvo imen kotoryh zakanchivaetsya na .h (ot slova ``header'') ob'yavlyayut imena struktur dannyh, podprogramm i konstant, ispol'zuemyh pri napisanii programm na Si. Te fajly, kotorye nahodyatsya v /usr/include/sys v obshchem sluchae ispol'zuyutsya pri programmirovanii na sistemnom urovne UNIX. Esli vy znakomy s yazykom programmirovaniya Si, zdes' vy najdete takie hedery (fragmenty programm, vstavlyaemye obychno v nachalo programmy), stdio.h, kotorye opisyvayut takie funkcii, kak printf().

/usr/g++-include

/usr/g++-include soderzhit include-fajly dlya kompilyatora Ci++ (ochen' pohozhie na /usr/include).

/usr/lib

/usr/lib soderzhit biblioteki-"zaglushki" i "staticheskie" biblioteki, ekvivalentnye fajlam iz /lib. Pri kompilyacii programma "svyazyvaetsya" s bibliotekami, nahodyashchimisya v /usr/lib, kotorye v svoyu ochered' napravlyayut programmy obrashchat'sya v /lib, esli im nuzhet aktual'nyj kod. Krome togo, mnogie drugie programmy hranyat v /usr/lib svoi konfiguracionnye fajly.

/usr/local

/usr/local v bol'shoj stepeni pohozh na /usr - on soderzhit razlichnye programmy i fajly, nesushchestvennye dlya sistemy, no prevrashchayushchie ee v udovol'stvie i vostorg. V obshchem, eti programmy, nahodyashchiesya v /usr/local specializiruyutsya na specifike vashej sistemy, t.e. /usr/local sil'no otlichaetsya v razlichnyh UNIX. Zdes' vy najdete takie bol'shie programmnye pakety, kak TeX (sistema formatirovaniya dokumentov) i Emacs (bol'shoj i moshchnyj redaktor), esli vy ih ustanovite.

/usr/man

|tot katalog soderzhit stranicy Rukovodstva. Zdes' dva podkataloga dlya kazhdogo "razdela" Rukovodstva. (S pomoshch'yu komandy "man man" vy mozhete poluchit' bolee podrobnuyu informaciyu). Naprimer, /usr/man/man1 soderzhit ishodnye teksty (neotformatirovannyj original) stranic Rukovodstva v razdele 1 i /usr/man/cat1 soderzhit otformatirovannye stranicy dlya razdela 1.

/usr/src

/usr/src soderzhit ishodnye kody (neotkompilirovannye programmy) dlya razlichnyh programm vashej sistemy. Naibolee vazhnaya veshch' zdes', eto /usr/src/linux, soderzhashchij ishodnye kody yadra Linux.

/var

/var soderzhit katalogi, kotorye chasto menyayutsya v razmere ili imeyut tendenciyu bystro rasti. Mnogie iz etih katalogov "kvartirovalis'" v /usr, no poskol'ku my stremimsya sdelat' ego dostatochno stabil'nym, katalogi, kotorye chasto menyayutsya byli pereneseny v /var. K chislu takih katalogov otnosyatsya:

/var/adm

/var/adm soderzhit razlichnye fajly, interesnye sistemnomu administratoru, specificheskie sistemnye fajly, fiksiruyushchie oshibki i problemy, voznikayushchie v sisteme. Drugie fajly fiksiruyut vhody v sistemu, kak i neudachnye popytki vojti. |to budet obsuzhdat'sya v Glave 4.

/var/spool

/var/spool soderzhit fajly, kotorye predvaritel'no formiruyutsya dlya drugih programm. Naprimer, esli vasha mashina podklyuchena k seti, vhodnaya pochta budet pomeshchat'sya v /var/spool/mail do teh por, poka vy ne prochitaete ee ili ne udalite. Vhodyashchie i ishodyashchie novosti pomeshchayutsya v /var/spool/news i t.d.

3.6 Tipy obolochek

Kak ya uzhe mnogo raz govoril, UNIX - eto mnogozadachnaya, mnogopol'zovatel'skaya operacionnaya sistema. Mnogozadachnost' ochen' polezna - odnazhdy privyknuv k nej, vy budete vsegda ee ispol'zovat'. Prezhde vsego, vy smozhete vypolnyat' zadachi v fonovom rezhime, pereklyuchat' zadachi i ob'edinyat' ih v konvejer, dostigaya slozhnyh rezul'tatov prostymi sredstvami.

Mnogie iz vozmozhnostej, kotorye my budem obsuzhdat' v etom razdele, obespechivayutsya samoj obolochkoj (shell). Bud'te vnimatel'ny, ne putajte UNIX (fakticheskuyu operacionnuyu sistemu) s obolochkoj - obolochka, eto lish' interfejs s nahodyashchejsya za nej sistemoj. Obolochka obespechivaet vypolnenie gromadnogo chisla funkcij pomimo sobstvenno UNIX.

Obolochka - eto ne tol'ko interpretator interaktivnyh komand, kotorye vy mozhete vvesti, poluchiv ot obolochki podskazku (gotovnosti prinimat' komandy). |to takzhe moshchnyj komandnyj yazyk, kotoryj pozvolyaet pisat' programmy (shell-scripts), ob'edinyayushchie neskol'ko komand v komandnyj fajl. Pol'zovateli MS-DOS pochuvstvuyut zdes' nechto shozhee s ``batch-fajlami''. Ispol'zovanie programm na yazyke obolochki (shell) - eto ochen' moshchnoe sredstvo, kotoroe pozvolyaet avtomatizirovat' i i sushchestvenno povysit' effektivnost' ispol'zovaniya UNIX. Smotrite dopolnitel'no v Razdele 3.13.1.

Sushchestvuet neskol'ko tipov obolochek v mire UNIX. Dve glavnye - eto ``Bourne shell''(shell Baurna) i ``C shell'. Shell Baurna (ili prosto shell) ispol'zuet komandnyj sintaksis, pohozhij na pervonachal'no dlya UNIX pridumannyj (vrode UNIX System III). V bol'shinstve UNIX-sistem shell Baurna imeet imya /bin/sh (gde sh sokrashchenie ot ``shell''). C shell ispol'zuet inoj sintaksis, chem-to napominayushchij sintaksis yazyka programmirovaniya Si. V bol'shinstve UNIX-sistem on imeet imya /bin/csh.

V Linux est' neskol'ko variacij etih obolochek. Dve naibolee chasto ispol'zuemye, eto Novyj Shell Baurna (Bourne Again Shell) ili ``Bash'' (/bin/bash) i Tcsh (/bin/tcsh). Bash - eto razvitie prezhnego shell s dobavleniem mnogih poleznyh vozmozhnostej, chastichno soderzhashchihsya v C shell. Poskol'ku Bash mozhno rassmatrivat' kak nadmnozhestvo sintaksisa prezhnego shell, lyubaya programma, napisannaya na dobrom starom shell Baurna dolzhna rabotat' i v Bash. Dlya teh, kto predpochitaet ispol'zovat' sintaksis C shell, Linux podderzhivaet Tcsh, kotoryj yavlyaetsya rasshirennoj versiej C shell.

Tip obolochki, kotoruyu vy reshili ispol'zovat' - eto pochti kak vybor religii. Nekotorye predpochitayut sintaksis shell Baurna s dopolnitel'nymi vozmozhnostyami, predostavlyaemymi Bash, a nekotorye - bolee strukturirovannyj sintaksis C shell. Dlya "normal'nyh" komand, takih kak cp i ls, tip ispol'zuemogo vami shell nikakoj roli ne igraet. Tol'ko kogda vy nachnete pisat' komandnye fajly ili ispol'zovt' nekotorye novye svojstva obolochek, razlichiya mezhdu nimi stanovyatsya sushchestvennymi.

Pri obsuzhdenii dalee nekotoryh svojstv obolochek my budem obrashchat' vnimanie na razlichie mezhdu Baurnovskim shell i C shell. (Esli vam eto dejstvitel'no ochen' interesno, pochitajte Rukovodstvo po povodu bash i tcsh).

3.7 "Uajldkard" - "dikaya karta"

Klyuchevoe svojstvo bol'shinstva obolochek Unix - eto sposobnost' ssylat'sya srazu bolee, chem na odin fajl, ispol'zuya dlya etogo special'nye simvoly. |ti, tak nazyvaemye "dikie karty" (wildcards), pozvolyayut ssylat'sya, skazhem, na vse fajly, soderzhashchie simvol "n". (prim. perevodchika: Mne ne izvesten horoshij perevod etoj idiomy (wildcards), naibolee chasto u nas vstrechaetsya "generatory" i "rasshiriteli" simvolov - no eto tyazhelovato. CHtoby dalee ne ispytyvat' muchenij - budu ispol'zovat' slovo "uajldkard". Kstati, i obolochku udobnee dalee imenovat' kak shell, tak legche vosprinimaetsya to, chto eto yazyk programmirovaniya).

Uajldkard ``*'' otnositsya k lyubomu simvolu ili stroke simvolov v imeni fajla. Naprimer, kogda vy ispol'zuete simvol ``*'' v imeni fajla shell zamenyaet ee vsemi vozmozhnymi imenami fajlov iz kataloga, na kotoryj vy ssylaetes'. Vot prosten'kij primer. Predpolozhim, chto Larry imeet fajly frog, joe i stuff v svoem tekushchem kataloge:

    /home/larry# ls
    frog     joe     stuff
    /home/larry#

Dlya obrashcheniya srazu ko vsem fajlam s bukvoj ``o'' v imeni, my mozhem ispol'zovat' komandu

    /home/larry# ls *o*
    frog     joe
    /home/larry#

Kak vidite, ``*'' uajldkard byla zamenena vsemi vozmozhnymi imenami fajlov iz imevshihsya v tekushchem kataloge.

Ispol'zovanie prosto ``*''dast sovpadenie so vsemi imenami, poskol'ku vse simvoly sovpadayut s uajldkard.

    /home/larry# ls *
    frog     joe     stuff
    /home/larry#

Vot eshche neskol'ko primerov.

    /home/larry# ls f*
    frog
    /home/larry# ls *ff
    stuff
    /home/larry# ls *f*
    frog     stuff
    /home/larry# ls s*f
    stuff
    /home/larry#

Process zameny ``*'' na imena fajlov nazyvaetsya rasshireniem uajldkard i vypolnyaetsya shell. |to vazhno: konkretnye komandy, vrode ls, nikogda ne vidyat ``*'' v svoem spiske parametrov. Shell, rasshiryaya uajldkard, vklyuchaet v spisok parametrov vse imena, proshedshie sravnenie s shablonom. Tak chto komanda

    /home/larry# ls *o*

     rasshiryaetsya shell do fakticheskoj

    /home/larry# ls frog joe

Odno vazhnoe zamechanie otnositel'no ``*'' uajldkard. Ispol'zovanie etoj uajldkard ne dast sovpadeniya s imenami fajlov, kotorye nachinayutsya s tochki (``.''). |ti fajly vosprinimayutsya kak "spryatannye", hotya na samom dele ih nikuda ne pryatali. Oni ne pokazyvayutsya v spiske, vydavaemom normal'noj komandoj ls i ne vybirayutsya pri ispol'zovanii ``*'' uajldkard.

Vot primer. My uzhe upominali, chto kazhdyj katalog imeet dva special'nyh fajla: ``.'' - ukazanie na tekushchij katalog i ``..'' - ukazanie na roditel'skij katalog. Odnako, esli vy ispol'zuete komandu ls, eti dva fajla ne budut otobrazheny.

    /home/larry# ls
    frog     joe     stuff
    /home/larry#

Esli vy ispol'zuete opciyu -a v komande ls, to vy smozhete otobrazit' imena, nachinayushchiesya na ``.'':

    /home/larry# ls -a
    .      ..      .bash_profile      .bashrc      frog        joe
    stuff
    /home/larry#

Kak vidim, dva special'nyh fajla ``.'' i ``..'', takzhe, kak dva drugih "spryatannyh" fajla - .bash_profile i .bashrc. |ti dva fajla ispol'zuyutsya pri vhode larry v sistemu. Bolee podrobno o nih v Razdele 3.13.3.

Obratite vnimanie, chto kogda my ispol'zuem ``*'' uajldkard, ni odin iz fajlov, s imenami, nachinayushchimisya na ``.'' ne otobrazhaetsya.

    /home/larry# ls *
    frog     joe     stuff
    /home/larry#

|to mera predostorozhnosti: esli ``*'' uajldkard vybirala by imena fajlov, nachinayushchiesya na ``.'', ona by takzhe vybrala imena ``.'' i ``..''. No eto mozhet byt' opasno pri vypolnenii ryada komand.

Drugoj uajldkard yavlyaetsya ``?''. ``?'' uajldkard pozvolyaet podstavit' strogo odin simvol. Tak ``ls ?'' vydast na tol'ko imena fajlov, sostoyashchie iz odnogo simvola, a ``ls termca?'' vydast ``termcap'', no ne vydast na ekran ``termcap.backup''. Vot eshche odin primer:

    /home/larry# ls j?e
    joe
    /home/larry# ls f??g
    frog
    /home/larry# ls ????f
    stuff
    /home/larry#

Kak vidite, uajldkard pozvolyaet opisyvat' mnogo fajlov za odin raz. Pri obzore prostejshih komand v Razdele 3.4 my govorili, chto komandy cp i mv mogut kopirovat' ili peremeshchat' mnozhestva fajlov za odin raz. Naprimer,

    /home/larry# cp /etc/s* /home/larry

skopiruet vse fajly v /etc , nachinaya s ``s''v katalog /home/larry. Format komandy cp na samom dele

    cp <file1> ... <fileN> <destination>

gde <file1> ... <fileN> - spisok kopiruemyh fajlov, a <destination> eto fajl ili katalog, v kotoryj proizvoditsya kopirovanie. mv imeet analogichnyj sintaksis.

Obratite vnimanie, chto esli proizvoditsya kopirovanie ili peremeshchenie bolee, chem odnogo fajla, <destination> dolzhen byt' katalogom. V fajl skopirovat' ili peremestit' mozhno tol'ko odin fajl.

3.8 Truboprovody UNIX

Standartnyj vhod i standartnyj vyhod

Mnogie komandy UNIX poluchayut informaciyu s tak nazyvaemogo standartnogo vhoda i posylayut informaciyu na (opyat' zhe) tak nazyvaemyj standartnyj vyhod. (Dlya nih chasto ispol'zuyutsya sokrashcheniya ``stdin'' i ``stdout'' sootvetstvenno). Vash shell organizuet delo tak, chto standartnym vhodom sluzhit klaviatura, a standartnym vyhodom - ekran.

Vot primer ispol'zovaniya komandy cat. Normal'no cat chitaet dannye iz fajlov, ch'i imena dany v komandnoj stroke i posylaet eti dannye pryamehon'ko na stdout. Poetomu pri vypolnenii komandy

    /home/larry/papers# cat history-final masters-thesis

na ekran pojdet fajl history-final, a za nim sledom masters-thesis.

No esli komande cat ne dany imena fajlov v kachestve parametrov, ona chitaet dannye s stdin i opyat' zhe posylaet na stdout. Vot primer.

    /home/larry/papers# cat
    Hello there.
    Hello there.
    Bye.
    Bye.
    [ctrl-D]
    /home/larry/papers#

Kak vidite, kazhdaya stroka, kotoruyu napechatal pol'zovatel', nemedlenno vydaetsya komandoj cat na ekran. Pri vvode so standartnogo vhoda komanda znaet, chto vvod zakonchen togda, kogda ona poluchit v kakom-to vide signal EOT (End-Of-Text). Obychno on obespechivaetsya nazhatiem ctrl-D.

Vot drugoj primer. Komanda sortirovki sort chitaet postrochno tekst (zdes' opyat' s stdin, poskol'ku imena fajlov v parametrah ne ukazany, i posylaet otsortirovannyj rezul'tat na stdout. Poprobujte tak.

    /home/larry/papers# sort
    bananas
    carrots
    apples
    [ctrl-D]
    apples
    bananas
    carrots
    /home/larry/papers#

Teper' my mozhem uporyadochit' nash spisok produktov, podlezhashchih zakupke, v leksikograficheskom poryadke... nu razve UNIX ne poleznaya veshch'?

Perenapravlenie vhoda i vyhoda

Teper', predpolozhim, chto my hotim poslat' rezul'tat sortirovki v fajl, chtoby gde-to sohranit' spisok planiruemyh pokupok. Shell daet nam vozmozhnost' perenapravlyat' standartnyj vyhod v fajl, ispol'zuya simvol ``>''. Vot kak eto rabotaet.

    /home/larry/papers# sort > shopping-list
    bananas
    carrots
    apples
    [ctrl-D]
    /home/larry/papers#

Kak vy mozhete videt', rezul'tat raboty komandy sort ne otobrazhaetsya na ekrane, vmesto etogo on sohranyaetsya v fajle shopping-list (spisok pokupok). Davajte posmotrim na etot fajl.

    /home/larry/papers# cat shopping-list
    apples
    bananas
    carrots
    /home/larry/papers#

Teper' my mozhem ne tol'ko sortirovat' (uporyadochivat') spisok planiruemyh pokupok, no i sohranyat' ego! No predpolozhim, chto my hranili nash neotsortirovannyj ishodnyj zakupochnyj spisok v fajle pod imenem items. Odin iz sposobov sortirovki i sohraneniya ego, eto otsortirovat' fajl s dannym imenem, vmesto polucheniya fajla so standartnogo vhoda, i perenapravit' standartnyj vyhod v fajl. Naprimer tak

    /home/larry/papers# sort items > shopping-list
    /home/larry/papers# cat shopping-list
    apples
    bananas
    carrots
    /home/larry/papers#

No eto mozhno sdelat' i po-drugomu. Perenapravlen mozhet byt' ne tol'ko standartnyj vyhod, no takzhe i standartnyj vhod, ispol'zuya simvol ``<''.

    /home/larry/papers# sort < items
    apples
    bananas
    carrots
    /home/larry/papers#

Tehnicheski, sort < items ekvivalentno sort items, no poslednij variant pozvolyaet nam prodemonstrirovat' skazannoe: sort < items vedet sebya tak, slovno dannye fajla items byli napechatany na klaviature. shell obsluzhivaet perenapravlenie. sort ne bylo dano imya fajla (items) i komanda chitala so standartnogo vhoda, kak budto shel vvod s klaviatury.

|to illyustriruet koncepciyu fil'tra. Fil'tr, eto programma, kotoraya poluchaet dannye so standartnogo vhoda, obrabatyvaet ih kakim-to obrazom i posylaet rezul'tat obrabotki na standartnyj vyhod. S pomoshch'yu perenapravleniya standartnye vhod i vyhod mogut byt' perevedeny na fajly. sort - prostejshij fil'tr: ona sortiruet vhodnye dannye i posylaet rezul'tat na standartnyj vyhod. cat - dazhe eshche proshche: ona nichego ne delaet so vhodnymi dannymi, a tol'ko vydaet vse, chto ne postupit, na vyhod.

Ispol'zovanie konvejera

My uzhe pokazali, kak ispol'zovat' komandu sort v kachestve fil'tra. No eti primery predpolagali, chto vy otkuda-to poluchili dannye v fajl, ili vveli dannye s klaviatury svoimi sobstvennymi rukami. A chto, esli dannye, kotorye vy hotite otsortirovat', yavlyayutsya vyhodnymi dannymi drugoj programmy, naprimer, takoj kak ls? Esli vy ispol'zuete pri sortirovke opciyu -r, dannye budut raspolozheny v poryadke, obratnom leksikograficheskomu. Esli vy hotite poluchit' perechen' fajlov vashego kataloga v obratnom poryadke, odin iz sposobov sdelat' eto budet:

    /home/larry/papers# ls
    english-list
    history-final
    masters-thesis
    notes
    /home/larry/papers# ls > file-list
    /home/larry/papers# sort -r file-list
    notes
    masters-thesis
    history-final
    english-list
    /home/larry/papers#

Zdes' my sohranili rezul'tat raboty komandy ls v fajle, a zatem vypolnili sort -r nad etim fajlom. No eto ochen' koryavo vyglyadit i trebuet sozdaniya vremennogo fajla dlya hraneniya rezul'tata raboty ls.

Vyhod iz polozheniya daet truboprovod (pipeline) (prim. perevodchika: v nashej literature prinyat termin "konvejer", tak dalee i budem perevodit' "pipeline"). Konvejer - eto eshche odno zamechatel'noe svojstvo shell, kotoroe pozvolyaet svyazyvat' posledovatel'nost' komand v konvejer, gde stdout pervoj komandy posylaetsya pryamo na stdin vtoroj komandy i tak dalee. Zdes' my hotim poslat' stdout komandy ls na stdin komandy sort. Simvol ``|'' olicetvoryaet konvejer:

    /home/larry/papers# ls | sort -r
    notes
    masters-thesis
    history-final
    english-list
    /home/larry/papers#

|ta komanda namnogo koroche i, ochevidno, proshche nabiraetsya. Drugoj poleznyj primer. Komanda

    /home/larry/papers# ls /usr/bin

vydaet na displej dlinnyj spisok imen fajlov, bol'shinstvo iz kotoryh slishkom bystro promel'knet na ekrane, chtoby vy uspeli prochitat' ih. Davajte podklyuchim k prosmotru perechnya imen fajlov kataloga /usr/bin komandu more.

    /home/larry/papers# ls /usr/bin | more

Teper' vy mozhete postranichno listat' fajl v svoe udovol'stvie.

No chudesa na etom ne konchayutsya! My mozhem svyazat' v konvejer bolee, chem dve komandy. Komanda head predstavlyaet iz sebya fil'tr, kotoryj otobrazhaet pervye stroki vhodnogo potoka (zdes', prishedshego po konvejeru). Esli my hotim otobrazit' poslednee imya tekushchego kataloga, uporyadochennogo po alfavitu, my mozhem napisat':

    /home/larry/papers# ls | sort -r | head -1
    notes
    /home/larry/papers#

gde head -1 prosto vydaet pervuyu stroku poluchaemogo vhodnogo potoka (v dannom sluchae eto otsortirovannyj v obratnom poryadke perechen' imen fajlov tekushchego kataloga, vydannyh komandoj ls).

Perenapravlenie s dobavleniem

Ispol'zovanie ``>'' dlya perenapravleniya vyhoda smertel'no dlya fajla, v kotoryj proishodit perenapravlenie (esli bylo, chto unichtozhat'), drugimi slovami

    /home/larry/papers# ls > file-list

unichtozhaet prezhnee soderzhimoe fajla file-list. Esli vmesto etogo ispol'zovat' simvol perenapravleniya ``>>'', vyhod budet dobavlen k soderzhimomu nazvannogo fajla (vmesto togo, chtoby byt' zapisanym na mesto starogo).

    /home/larry/papers# ls >> file-list

dobavit vyhodnuyu informaciyu komandy ls v fajl file-list.

Imejte v vidu, chto perenapravleniya i konvejer, eto sredstva, predostavlyaemye obolochkoj shell, eto sintaksis shell i simvoly ``>'', ``>>'' i ``|'' ne imeyut nikakogo otnosheniya k komandam, kak takovym.

3.9 Prava dostupa k fajlam

Koncepciya prav dostupa

Poskol'ku UNIX - mnogopol'zovatel'skaya sistema, chtoby zashchitit' fajly kazhdogo pol'zovatelya ot durnogo vliyaniya drugih pol'zovatelej, UNIX podderzhivaet mehanizm, izvestnyj, kak sistema prav dostupa k fajlam. |tot mehanizm pozvolyaet kazhdomu fajlu pripisat' konkretnogo vladel'ca. Kak primer, poskol'ku Larry sozdal fajly v svoem domashnem kataloge, imenno Larry vladelec etih fajlov i imeet k nim dostup.

UNIX pozvolyaet takzhe sovmestno ispol'zovat' fajly neskol'kim pol'zovatelyam i gruppam pol'zovatelej. Esli Larry tak pozhelaet, on mozhet zakryt' dostup k svoim fajlam tak, chto nikto drugoj ne smozhet k nim podstupit'sya. Odnako v bol'shinstve sistem po umolchaniyu drugim pol'zovatelyam razreshaetsya chitat' vashi fajly, no zapreshchaetsya izmenyat' ili udalyat'.

Kak ob'yasnyalos' vyshe, kazhdyj fajl imeet konkretnogo vladel'ca. No, krome togo fajlami, takzhe vladeyut konkretnye gruppy pol'zovatelej, kotorye opredelyayutsya pri registracii pol'zovatelej v sisteme. Kazhdyj pol'zovatel' stanovitsya chlenom kak minimum odnoj gruppy pol'zovatelej. Sistemnyj administrator mozhet darovat' pol'zovatelyu dostup bolee, chem k odnoj gruppe.

Gruppy obychno opredelyayutsya tipami pol'zovatelej dannoj mashiny. Naprimer, v universitetskom UNIX pol'zovateli mogut byt' razbity na gruppy student, prepodavatel', rukovodstvo, gost'. (prim. perevodchika: osmelyus' predpolozhit', chto v otechestvennoj knige perechislenie primerov grupp bylo by nachato s gruppy "rukovodstvo"...).

Est' takzhe neskol'ko sistemno-zavisimyh grupp (vrode bin i admin), kotorye ispol'zuyutsya samoj sistemoj dlya upravleniya dostupom k resursam. Ochen' redko obychnyj pol'zovatel' prinadlezhit k etim gruppam.

Prava dostupa podrazdelyayutsya na tri tipa: chtenie (read), zapis' (write) i vypolnenie (execute). |ti tipy prav dostupa mogut byt' predostavleny trem klassam pol'zovatelej: vladel'cu fajla, gruppe, v kotoruyu vhodit vladelec, i vsem (prochim) pol'zovatelyam.

Razreshenie na chtenie pozvolyaet pol'zovatelyu chitat' soderzhimoe fajlov, a v sluchae katalogov - prosmatrivat' perechen' imen fajlov v kataloge (ispol'zuya, naprimer, ls). Razreshenie na zapis' pozvolyaet pol'zovatelyu pisat' v fajl i izmenyat' ego. Dlya katalogov eto daet pravo sozdavat' v kataloge novye fajly i katalogi, ili udalyat' fajly v etom kataloge. Nakonec, razreshenie na vypolnenie pozvolyaet pol'zovatelyu vypolnyat' fajly (kak binarnye programmy, tak i komandnye fajly). Razreshenie na vypolnenie primenitel'no k katalogam oznachaet vozmozhnost' vypolnyat' komandy vrode cd.

Interpretaciya prav dostupa

Davajte rassmotrim primer, demonstriruyushchij rabotu s pravami dostupa. Ispol'zuya komandu ls s opciej -l mozhno poluchit' na ekrane perechen' fajlov dannogo kataloga v "dlinnom" formate, vklyuchayushchem informaciyu o pravah dostupa.


    /home/larry/foo# ls -l stuff

    -rw-r--r--   1 larry    users         505 Mar 13 19:05 stuff

    /home/larry/foo#

Pervoe pole v vyvedennoj stroke predstavlyaet prava dostupa. Tret'e pole - vladel'ca fajla (larry) i chetvertoe - gruppu (users). Ochevidno, chto poslednee pole est' imya fajla (stuff), a ostal'nye polya my obsudim pozzhe.

|tim fajlom vladeet larry, i on prinadlezhit gruppe users. Davajte posmotrim na prava dostupa. V stroke -rw-r--r-- po poryadku ukazany prava vladel'ca, gruppy i vseh prochih.

Pervyyj simvol etoj stroki prav dostupa (``-'') predstavlyaet tip fajla. Simvol ``-'' oznachaet, chto eto obychnyj fajl (v protivopolozhnost' katalogu ili special'nomu fajlu kakogo-to ustrojstva). Sleduyushchie tri pozicii (``rw-'') predstavlyayut prava dostupa, kotorye imeet vladelec fajla larry. Simvol ``r''oznachaet ``read''(chitat'), ``w'' - ``write''(pisat'). Takim obrazom larry mozhet chitat' fajl stuff i pisat' v nego.

Kak my uzhe upominali, krome razreshenij na chtenie i zapis' sushchestvuet razreshenie na vypolnenie ``execute'' - predstavlyaemoe simvolom ``x''. No v dannom sluchae na etoj pozicii ``-'', tak chto u Larry net prav na vypolnenie etogo fajla. I eto chudesno, fajl stuff sovsem dazhe ne yavlyaetsya programmoj. Razumeetsya, poskol'ku Larry vladeet fajlom, on mozhet dat' sam sebe razreshenie na vypolnenie etogo fajla, esli zahochet. My etu proceduru skoro obsudim.

Sleduyushchie tri simvola r-- predstavlyayut prava dostupa gruppy dlya etogo fajla. |ta gruppa imeet imya users. Poskol'ku tut est' tol'ko ``r'', lyuboj pol'zovatel' etoj gruppy mozhet tol'ko chitat' fajl.

Poslednie tri simvola predstavlyayut tu zhe kombinaciyu r--, to est' dlya vseh prochih dostupno chtenie etogo fajla i zapreshcheny zapis' i vypolnenie.

Vot eshche neskol'ko primerov na prava dostupa.

-rwxr-xr-x

Vladelec fajla mozhet chitat', pisat' i vypolnyat' fajl. CHleny gruppy i vse prochie pol'zovateli mogut chitat' i vypolnyat' fajl.

-rw-------

Vladelec fajla mozhet chitat' i pisat' v fajl. Vsem ostal'nym dostup k fajlu zakryt.

-rwxrwxrwx

Vse mogut chitat' pisat' i vypolnyat' fajl.

Zavisimosti

Vazhno zametit', chto prava dostupa, kotorye imeet fajl zavisyat takzhe ot prav dostupa k katalogu, v kotorom etot fajl nahoditsya. Naprimer, dazhe esli fajl imeet -rwxrwxrwx, drugie pol'zovateli ne smogut do nego dobrat'sya, esli u nih ne budet prav na chtenie i vypolnenie kataloga, v kotorom nahoditsya fajl. Naprimer, esli Larry zahochet ogranichit' dostup ko vsem svoim fajlam, on mozhet mozhet prosto izmenit' prava dostupa svoego domashnego kataloga /home/larry na drwx------. Takim obrazom, nikto drugoj ne budet imet' dostup v ego katalog, a sledovatel'no postoronnim budut nedostupny i vse fajly. Tak chto Larry mozhet ne zabotit'sya ob individual'noj zashchite svoih fajlov.

Drugimi slovami, chtoby imet' dostup k fajlu, vy dolzhny imet' dostup ko vsem katalogam, lezhashchim na puti ot kornya k etomu fajlu, a takzhe razreshenie na dostup sobstvenno k etomu fajlu.

Obychno pol'zovateli UNIX ves'ma otkryty vsemi svoimi fajlami. Obychno fajlam ustanavlivaetsya zashchita -rw-r--r--, kotoraya pozvolyaet drugim pol'zovatelyam chitat' fajly, no ni koim obrazom ih ne menyat'. Katalogamm obychno ustanavlivayutsya prava dostupa drwxr-xr-x, chto pozvolyaet drugim pol'zovatelyam hodit' s pravami ekskursantov po vashim katalogam. No nichego v nih ne trogat' i ne zapisyvat'.

No mnogie pol'zovateli hotyat derzhat' drugih pol'zovatelej podal'she ot svoih fajlov. Ustanoviv prava dostupa fajla, -rw------- vy nikomu ne pokazhete etot fajl i ne dadite zapisat' v nego. Takzhe horosho zakryvaet ot vseh fajly zashchita sootvetstvuyushchego kataloga drwx------ .

Izmenenie prav dostupa

Komanda chmod ispol'zuetsya dlya ustanovki (izmeneniya) prav dostupa fajla. Tol'ko vladelec fajla mozhet menyat' prava dostupa k nemu.

Sintaksis komandy imeet vid:

    chmod {a,u,g,o}{+,-}{r,w,x} <filenames>

Kratko, vy vybiraete iz all (vse), user (pol'zovatel'), group (gruppa) ili other (drugie). Dalee ukazyvaete, libo vy dobavlyaete prava (+), libo lishaete prav (-). I nakonec, vy ukazyvaete odin ili neskol'ko rezhimov: read, write ili execute. Neskol'ko primerov dopustimyh komand:

chmod a+r stuff

Daet vsem pol'zovatelyam pravo chitat' fajl stuff.

chmod +r stuff

To zhe samoe, chto i ranee (a - po umolchaniyu).

chmod og-x stuff

Lishaet prava na vypolnenie vseh, krome vladel'ca.

chmod u+rwx stuff

Razreshaet vladel'cu vse (read, write i execute).

chmod o-rwx stuff

Zapreshchaet vse (read, write i execute) pol'zovatelyam kategorii drugie (other).

3.10 Upravlenie svyazyami fajlov

Svyazi pozvolyayut davat' odnomu fizicheskomu fajlu mnogo imen. Sistemoj fajly raspoznayutsya po indeksam fajlov, kotorye yavlyayutsya unikal'nymi identifikatorami v ramkah sistemy. Komanda ls -i vydast vam indeksy fajlov. Na samom dele katalog - eto perechen' indeksov fajlov s sootvetstvuyushchimi etim indeksam nomerami. Kazhdoe imya fajla v kataloge privyazano k konkretnomu indeksu.

ZHestkie svyazi

Komanda ln ispol'zuetsya dlya sozdaniya mnozhestva svyazej dlya odnogo fajla. Naprimer, skazhem, chto u vas est' fajl foo. Ispol'zuya ls -i mozhno posmotret' indeks etogo fajla.

    # ls -i foo
    22192 foo
    #

Zdes' fajl foo imeet v fajlovoj sisteme indeks 22192. My mozhem sozdat' novuyu svyaz' dlya etogo fajla pod imenem bar:

    # ln foo bar

S pomoshch'yu ls -i mozhno ubedit'sya, chto oba fajla imeyut odin i tot zhe indeks.

    # ls -i foo bar
    22192 bar   22192 foo
    #

Teper', obrashchayas' k foo ili bar my fakticheski obratimsya k odnom u tomu zhe fajlu. Poetomu, esli my menyaem chto-to v fajle foo, eti zhe samye izmeneniya proizojdut v fajle bar.

|ti svyazi izvestny, kak zhestkie svyazi (hard links), poskol'ku oni realizuyutsya pryamoj ssylkoj na indeks fajla. Obratite vnimanie, chto v ramkah odnoj fajlovoj sistemy vy mozhete organizovat' tol'ko zhestkie svyazi; simvolicheskie svyazi (smotrite nizhe) ne imeyut etogo ogranicheniya.

Kogda vy udalyaete fajl komandoj rm, na samom dele vy udalyaete tol'ko odnu ssylku na fajl. Esli vy vvedete komandu

    # rm foo

Udalayaetsya tol'ko svyaz', imeyushchaya imya foo; bar budet kak i prezhde sushchestvovat'. Fajl tol'ko togda dejstvitel'no udalyaetsya, kogda na nego bol'she net svyazej. Obychno fajly imeyut tol'ko odnu svyaz', tak chto komanda rm dejstvitel'no privedet k udaleniyu fajla. Odnako, esli fajl imeet mnogo ssylok, primenenie rm privedet tol'ko k udaleniyu odnoj svyazi; dlya togo, chtoby udalit' fajl, vy dolzhny udalit' vse svyazi na etot fajl.

Komanda ls -l pokazhet chislo ssylok na fajl (krome prochej informacii)

    # ls -l foo bar
    -rw-r--r--   2 root     root          12 Aug  5 16:51 bar
    -rw-r--r--   2 root     root          12 Aug  5 16:50 foo
    #

Vtoraya kolonka s cifroj ``2'' pokazyvaet chislo svyazej fajla.

Samom dele okazyvaetsya, chto katalogi predstavlyayut iz sebya spravochnik tipa "imena-indeksy". Krome prochego, kazhdyj katalog imeet minimum dve zhestkie ssylki: ``.'' (ssylka, ukazyvayushchaya na samogo sebya) i ``..'' (ssylka, ukazyvayushchaya na roditel'skij katalog). V kornevom kataloge (/) ssylka ``..'' ukazyvaet na sam zhe katalog /.

Simvolicheskie svyazi

Simvolicheskie svyazi, eto drugoj tip svyazej, otlichayushchijsya ot zhestkih svyazej. Simvolicheskie svyazi pozvolyayut davat' novye imena fajlam, no pri etom ne ssylayutsya na indeks fajla.

Komanda ln -s sozdast simvolicheskuyu ssylku na ukazannyj fajl. Naprimer, esli my vospol'zuemsya komandoj

    # ln -s foo bar

my sozdadim simvol'nuyu ssylku bar, ukazyvayushchuyu na fajl foo. Esli teper' ispol'zuem komandu ls -i, to uvidim, chto dva fajla imeyut razlichnye indeksy.

    # ls -i foo bar
    22195 bar   22192 foo
    #

Odnako, ispol'zuya ls -l, my vidim, chto fajl bar imeet simvolicheskij ukazatel' na foo.

    # ls -l foo bar
    lrwxrwxrwx   1 root     root           3 Aug  5 16:51  bar -> foo
    -rw-r--r--   1 root     root          12 Aug  5 16:50 foo
    #

Pri simvolicheskoj ssylke ne ispol'zuyutsya bity prav dostupa (oni vsegda otobrazhayutsya, kak rwxrwxrwx). Vmesto etogo, prava dostupa k fajlu, poluchennomu simvolicheskoj ssylkoj, opredelyayutsya pravami dostupa k fajlu, na kotoryj on ssylaetsya (v nashem primere opredelyaetsya pravami fajla foo).

Funkcional'no, zhestkie ssylki i simvolicheskie ssylki pohozhi, no est' nekotorye razlichiya. Naprimer, vy mozhete sozdat' simvolicheskuyu ssylku na fajl, kotoryj ne sushchestvuet; tak nel'zya sdelat' primenitel'no k zhestkoj ssylke. Simvolicheskie ssylki obrabatyvayutsya yadrom inym obrazom, chem zhestkie. |to skoree tehnicheskoe otlichie, no inogda vazhnoe. Simvolicheskie ssylki polezny, poskol'ku oni pozvolyayut identificirovat' fajl, na kotoryj oni ukazyvayut; dlya zhestkih ssylok net prostogo sposoba opredelit', kakie fajly privyazany k odnomu i tomu zhe indeksu.

Ssylki ispol'zuyutsya vo mnogih mestah sistemy Linux. Simvolicheskie ssylki osobenno vazhny dlya obrazov razdelyaemyh bibliotek v /lib. Smotri dopolnitel'nuyu informaciyu v Razdele 4.7.2.

3.11 Upravlenie rabotami

Raboty i processy

Upravlenie rabotami (job control) eto vozmozhnost', kotoruyu predostavlyayut mnogie obolochki, vklyuchaya (Bash i Tcsh). Upravlenie rabotami (prim. perevodchika: job - rabota v dobrye starye vremena strashnovatyh IBM/360 perevodilos' kak "zadanie", no luchshe eto ne tashchit' v segodnya) pozvolyaet upravlyat' mnozhestvom komand ili rabot odnovremenno. Prezhde, chem vy zakopaetes' znachitel'no glubzhe, sleduet pogovorit' o processah.

Kazhdyj raz, kogda vy vypolnyaete programmu, vy nachinaete to, chto izvestno, kak process. Process - eto nazvanie dlya vypolnyaemoj programmy. Komanda ps vydaet perechen' imeyushchih mesto v dannyj moment processov. Vot primer:

    /home/larry# ps

      PID TT STAT  TIME COMMAND
       24  3 S     0:03 (bash)
      161  3 R     0:00 ps

    /home/larry#

PID (Process IDentificator), perechislennye v pervoj kolonke, eto nepovtoryayushchiesya chisla pripisannye vsem idushchim processam.

Poslednij stolbec (COMMAND) daet imya vypolnyaemoj komandy. Zdes' my vidim tol'ko processy, kotorye iniciiroval Larry. (V sisteme vypolnyaetsya i mnogo drugih processov. Komanda ``ps -aux'' mozhet vydat' perechen' vseh proishodyashchih v dannyj moment processov).

V vyvedennom perechne ukazany bash (eto obolochka, ispol'zuemaya Larry) i sama komanda ps. Kak vy vidite, bash vypolnyaetsya parallel'no s komandoj ps. bash vypolnit ps, kogda Larry vvedet komandu. Posle okonchaniya ps (posle togo, kak vydana tablica processov), upravlenie vozvrashchaetsya k processu bash, kotoryj vydaet na ekran podskazk gotovnosti k priemu novyh komand.

Vypolnyaemyj process izvesten shell kak rabota. Terminy process i rabota vzaimozamenyaemy. Odnako process obychno vosprinimaetsya, kak "rabota", kogda rech' idet ob upravlenii rabotami (job control)- svojstve shell, pozvolyayushchem udelyat' vnimanie neskol'kim nezavisimym rabotam.

V bol'shinstve sluchaev pol'zovateli vypolnyayut v kazhdyj moment vremeni odnu rabotu, tu kotoraya sootvetstvuet poslednej peredannoj shell komande. Odnako, ispol'zuya upravlenie rabotami, vy mozhete odnovremenno vypolnyat' neskol'ko rabot, po neobhodimosti pereklyuchayas' s odnoj na druguyu. Kakaya ot etogo pol'za? Davajte predpolozhim, chto vy redaktiruete tekstovyj fajl i neozhidanno hotite prervat'sya i sdelat' chto-to drugoe. S pomoshch'yu upravleniya rabotami vy mozhete otlozhit' redaktirovanie i, vernuvshis' k podskazke shell, nachat' kakuyu-to druguyu rabotu. Posle etogo vy mozhete vernut'sya k redaktirovaniyu, imenno k tomu mestu, gde vy prervali redaktirovanie. |to vsego odin primer. Upravlenie rabotami ochen' polezno na praktike.

Vypolnenie rabot na perednem plane i v fone

Raboty mogut vypolnyat'sya kak na perednem plane, tak i v fone. Na perednem plane v kazhdyj moment mozhet byt' tol'ko odna rabota. Rabota perednego plana, eto rabota, s kotoroj vy vzaimodejstvuete, ona poluchaet informaciyu s klaviatury i posylaet rezul'taty na vash ekran. (Krome, razumeetsya, sluchaev, kogda vy sami perenapravlyaete vhod ili vyhod, kak opisyvalos' v Razdele 3.8). S drugoj storony, fonovye raboty ne poluchayut informacii s terminala, v obshchem sluchae oni tiho (v smysle - mirno) vypolnyayutsya, ne ispytyvaya potrebnosti v obshchenii s pol'zovatelem.

Nekotorye raboty trebuyut ochen' bol'shogo vremeni dlya svoego zaversheniya i ne svershayut nichego vneshne interesnogo v processe etoj raboty. Kompilyaciya programm - odna iz takih rabot, kak i kompressiya bol'shih fajlov. Net vrazumitel'nyh prichin, pochemu vy dolzhny pri etom sidet' ryadom i muchitel'no zhdat', kogda eti raboty zakonchatsya. Vy mozhete prosto zapustit' ih v fone. Poka oni tam vypolnyayutsya, vy mozhete zanyat'sya drugimi programmami.

Raboty mogut byt' takzhe otlozheny. Otlozhennaya rabota - eto rabota, kotoraya v dannyj moment ne vypolnyaetsya i vremenno ostanovlena. Posle togo, kak vy ostanovili rabotu, v dal'nejshem vy mozhete ee prodolzhit' kak na perednem plane, tak i v fone. Vozobnovlenie priostanovlennoj raboty ne izmenit ee sostoyaniya - pri vozobnovlenii ona nachnetsya s togo mesta, na kotorom byla priostanovlena.

Imejte v vidu, chto priostanovka raboty, eto ne preryvanie raboty. Kogda vy preryvaete idushchij process (nazhimaya klavishi preryvaniya, obychno eto ctrl-C), to ubivaete process nasovsem. (Klavishi preryvaniya mozhno pereustanavlivat' komandoj stty. Po umolchaniyu preryvanie nahoditsya pod ctrl-C, no my ne mozhem eto garantirovat' dlya vseh sistem). Esli rabota ubita, to uzh ubita, i net drugogo sposoba vozobnovit' ee, kak vnov' zapustit' snachala, ispol'zuya prezhnyuyu komandu. Zametim takzhe, chto nekotorye programmy mogut perehvatyvat' preryvaniya, togda nazhatie ctrl-C ne privedet k nemedlennomu prekrashcheniyu raboty. |to pozvolit programme vypolnit' neobhodimye operacii akkuratnogo zaversheniya. Nekotorye programmy voobshche ne pozvolyat vam ih prervat'.

Rabota v fone i likvidaciya rabot

Davajte nachnem s prostogo primera. Komanda yes - vrode by bespoleznaya komanda, posylayushchaya beskonechnyj potok "y" na standartnyj vyhod. (No eto ochen' polezno. Esli vy napravite cherez konvejer eti "y" na vhod drugoj komandy, kotoraya trebuet otvetov yes i "no" na voprosy, potok "y" dast podtverzhdenie na vse voprosy). Poprobujte.

    /home/larry# yes
    y
    y
    y
    y
    y

|to zakonchitsya v beskonechnosti. Vy mozhete ubit' process, nazhav klavishi preryvaniya; obychno eto ctrl-C. CHtoby nas bol'she ne razdrazhal potok neskonchaemyh "y", perenapravim ego v /dev/null. Kak vy pomnite, /dev/null vystupaet v kachestve "chernoj dyry" dlya dannyh. V nej ischezayut bessledno lyubye dannye.

    /home/larry# yes > /dev/null

Oh, teper' namnogo luchshe. Nichego ne pechataetsya, no i podskazka shell ne poyavlyaetsya. |to potomu, chto programma prodolzhaet rabotat', posylat' "y" v /dev/null. Snova nazhmite klavishi preryvaniya, chtoby prekratit' eto.

Davajte predpolozhim, chto my hotim, chtoby komanda yes prodolzhala rabotat', no takzhe hotim poluchit' obratno podskazku shell, chtoby vypolnyat' drugie raboty. My mozhem perevesti komandu yes v fonovyj rezhim, chto pozvolit ej vypolnyat'sya, no bez vyhoda na vzaimodejstvie s pol'zovatelem.

CHtoby peremestit' process v fonovyj rezhim, neobhodimo posle komandy simvol ``&''.

    /home/larry# yes > /dev/null &;
    [1] 164
    /home/larry#

Vy vidite, chto my vnov' poluchili podskazku. No chto znachit ``1 164''? I vypolnyaetsya li komanda yes na samom dele?

``1'' predstavlyaet nomer raboty dlya programmy yes. Shell pripisyvaet nomer kazhdoj vypolnyaemoj rabote. Poskol'ku "yes" - odna edinstvennaya rabota, kotoraya v dannyj moment vypolnyaetsya, ej prisvoen nomer 1. ``164'' - identifikator processa (PID); eto nomer, prisvoennyj sistemoj rabote. Lyuboj iz etih nomerov mozhno ispol'zovat' pri obrashchenii k rabote, kak eto budet pokazano v dal'nejshem.

Teper' my imeem vypolnyaemyj process yes v fonovom rezhime, nepreryvno posylayushchij potok "y"-kov v /dev/null. CHtoby proverit' sostoyanie etogo processa, ispol'zujte vnutrennyuyu komandu shell - jobs.

    /home/larry# jobs
    [1]+  Running                 yes >/dev/null  &
    /home/larry#

YAsno, chto ona vypolnyaetsya. Vy mozhete takzhe vospol'zovat'sya komandoj ps, pokazannoj ranee, dlya proverki statusa rabot.

Dlya zaversheniya raboty ispol'zujte komandu kill. |ta komanda mozhet brat' v kachestve argumenta kak nomer raboty, tak i identifikator processa. |to byla rabota nomer 1, tak chto ispol'zuya komandu

    /home/larry# kill %1

my likvidiruem rabotu. Pri identifikacii raboty po nomeru neobhodimo vperedi stavit' simvol procenta (``%'').

Teper', posle likvidacii, my mozhem snova ispol'zovat' jobs dlya proverki:

    /home/larry# jobs

    [1]+  Terminated              yes >/dev/null

    /home/larry#

Rabota dejstvitel'no mertva, i esli my snova vospol'zuemsya komandoj jobs, nichego ne budet vyvedeno na ekran.

Vy mozhete takzhe ubit' rabotu, ispol'zuya nomer identifikatora processa (PID), kotoryj vyvoditsya naryadu s rabotoj, kogda vy nachinaete rabotu (v fonovom rezhime). V nashem primer PID raven 164, tak chto komanda

    /home/larry# kill 164

     ekvivalentna

    /home/larry# kill %1

Vam ne nado ispol'zovat' ``%'', kogda vy obrashchaetes' k rabote po nomeru identifikatora processa.

Ostanovka i vozobnovlenie raboty

Est' drugoj sposob perevesti rabotu v fonovyj rezhim. Vy mozhete nachat' rabotu normal'no (v rezhime perednego plana), ostanovit' rabotu i prodolzhit' v fonovom rezhime.

Snachala nachnem rabotu "normal'no":

    /home/larry# yes > /dev/null

Poskol'ku opyat' rabota vypolnyaetsya na perednem plane, vy ne poluchite obratno na ekran podskazku shell.

Teper', vmesto togo, chtoby preryvat' rabotu s pomoshch'yu ctrl-C, my ostanovim rabotu. Priostanovka raboty ne ubivaet ee. CHtoby osushchestvit' priostanovku raboty, nado nazhat' sootvetstvuyushchie klavishi, obychno eto ctrl-Z.

    /home/larry# yes > /dev/null
    [ctrl-Z]
    [1]+  Stopped                 yes >/dev/null
    /home/larry#

Poka rabota ostanovlena, ona prosto ne vypolnyaetsya. Na nee ne tratitsya vremya processora. No vy vsegda mozhete vozobnovit' rabotu, i ona prodolzhitsya kak ni v chem ne byvalo.

Dlya vozobnovleniya raboty v rezhime perednego plana ispol'zujte komandu fg (``foreground'' - perednij plan).

    /home/larry# fg
    yes >/dev/null

Shell snova vydast na ekran imya komandy, chtoby vy mogli prokontrolirovat', kakuyu rabotu vy aktivizirovali v rezhime perednego plana. Vnov' ostanovite rabotu s pomoshch'yu ctrl-Z. V etot raz ispol'zujte komandu bg (``background'' - zadnij plan, fonovyj rezhim), chtoby perevesti rabotu v fonovyj rezhim. |ffekt budet analogichen tomu, kak esli by vy nabrali posle komandy ``&''.

    /home/larry# bg
    [1]+ yes >/dev/null &
    /home/larry#

I my poluchili nazad podskazku. Komanda jobs soobshchit, chto komanda yes dejstvitel'no vypolnyaetsya, i my mozhem snova ee ubit' s pomoshch'yu komandy kill, kak my eto uzhe delali.

Kak teper' ostanovit' rabotu? Ispol'zovanie ctrl-Z ne pomozhet, poskol'ku rabota nahoditsya v fonovom rezhime. Otvet - peremestit' rabotu na perednij plan, a zatem ostanovit'. Vy mozhete ispol'zovat' fg kak dlya ostanovlennyh rabot, tak i dlya rabot, nahodyashchihsya v fone.

Sushchestvuet bol'shaya raznica mezhdu fonovoj rabotoj i ostanovlennoj. Ostanovlennaya rabota ne vypolnyaetsya i ne ispol'zuet vremya processora, da i nikakoj raboty, chestno govorya, v etot moment ne delaet (no zanimaet pamyat', hotya po vole svoppinga mozhet okazat'sya na diske). Rabota v fonovom rezhime i vypolnyaetsya, i zanimaet pamyat'. Ona mozhet dazhe vyvodit' chto-to na ekran, hotya eto mozhet razdrazhat' vas, kogda vy rabotaete nad chem-to drugim. Naprimer, esli vy ispol'zovali komandu:

    /home/larry# yes &

bez perenapravleniya stdout v /dev/null, potok "y" budet vyvodit'sya na ekran bez vozmozhnosti prervat' eto (vy ne smozhete ispol'zovat' ctrl-C dlya preryvaniya rabot fonovogo rezhima). CHtoby ostanovit' etu beskonechnuyu vydachu, vam sleduet ispol'zovat' komandu fg dlya perevoda raboty v rezhim perednego plana, a zatem ispol'zovat' ctrl-C, chtoby ee ubit'.

Eshche odno zamechanie. Komandy fg i bg obychno perevodyat na perednij plan ili v fonovyj rezhim raboty, kotorye byli ostanovleny poslednimi (chto opredelyaetsya simvolom ``+'' posle nomera raboty, eto kogda vy ispol'zuete komandu jobs). Esli vy vypolnyaete mnogo rabot odnovremenno, vy mozhete perevesti na perednij plan ili, naoborot, v fonovyj rezhim konkretnuyu rabotu zadaniem identifikatora raboty v kachestve argumenta komand fg ili bg, kak v

    /home/larry# fg %2

(perevod na perednij plan raboty nomer 2) ili

    /home/larry# bg %3

(perevod v fon raboty nomer 3).

Dlya etih komand nel'zya ispol'zovat' identifikatory processov. Krome togo, ispol'zovanie tol'ko nomerov rabot, kak v

    /home/larry# %2

     ekvivalentno

    /home/larry# fg %2

Pomnite, chto upravlenie rabotami, eto svojstvo shell. Komandy fg, bg i jobs - vnutrennie komandy shell. Esli po kakoj-to prichine vy ispol'zuete shell, kotoryj ne podderzhivaet upravlenie rabotami, tam vy ne najdete etih komand.

V dopolnenie k etomu, est' nekotorye aspekty upravleniya rabotami, kotorye razlichayutsya v Bash i Tcsh. Nekotorye obolochki ne imeyut upravleniya rabotami, hotya bol'shinstvo obolochek Linux imeyut takuyu vozmozhnost'.

3.12 Ispol'zovanie redaktora vi

Tekstovyj redaktor, eto programma, ispol'zuemaya dlya redaktirovaniya fajlov, kotorye soderzhat tekst, naprimer pis'ma, S-programmy ili sistemnye konfiguracionnye fajly. Hotya v Linux mnogo vsyakih raznyh redaktorov, edinstvennyj redaktor, kotoryj vy s garantiej najdete v lyubom UNIX - eto vi (``visual editor''). vi - eto ne samyj prostoj v ispol'zovanii redaktor. No poskol'ku on tak rasprostranen v mire UNIX i v lyuboj moment mozhet vam potrebovat'sya, on zasluzhivaet hot' kakogo-to opisaniya zdes'.

Vybor redaktora, eto delo personal'nogo vkusa i stilya. Mnogie pol'zovateli predpochitayut vitievatyj i moshchnyj Emacs - redaktor s samym bol'shim naborom vozmozhnostej, po sravneniyu so vsemi drugimi redaktorami v mire UNIX. Naprimer, Emacs imeet svoj sobstvennyj vstroennyj dialekt yazyka programmirovaniya LISP i mnozhestvo rasshirenij (odno iz kotoryh ``Eliza''- v nekotorom rode programma iskusstvennogo intellekta). Odnako, poskol'ku Emacs so vsemi podderzhivayushchimi ego fajlami sravnitel'no velik, ego net na mnogih sistemah. vi, naoborot, malen'kij i udalen'kij, no, uvy, bolee slozhnyj v ispol'zovanii. No kogda vy s nim osvoites', vy pojmete, chto on ochen' prostoj. Pravda osvaivat' ego slozhno.

|tot razdel - vrazumitel'noe vvedenie v vi. My ne budem obsuzhdat' vse ego svojstva, a tol'ko te, kotorye vy dolzhny znat', chtoby nachat' rabotat'. Esli vy pozhelaete znat' bol'she detalej, obratites' k stranicam Rukovodstva.

Koncepcii

Pri ispol'zovanii vi v lyuboe vremya vy mozhete nahodit'sya v odnom iz treh rezhimov raboty. |ti rezhimy izvestny kak komandnyj rezhim, rezhim vstavki i rezhim poslednej stroki.

Kogda vy nachinaete rabotat' s vi - vy v komandnom rezhime. |tot rezhim pozvolyaet ispol'zovat' opredelennye komandy dlya redaktirovaniya fajlov ili perehoda v drugie rezhimy. Naprimer, napechatav ``x'' pri nahozhdenii v komandnom rezhime, udalyaete simvol, nahodyashchijsya pered kursorom. Strelki peredvigayut kursor po redaktiruemomu fajlu. Bol'shinstvo komand, ispol'zuemyh v komandnom rezhime, sostoit iz odnogo ili dvuh simvolov.

Vstavku ili redaktirovanie teksta vy osushchestvlyaete v rezhime vstavki. Pri ispol'zovanii vi vy, vozmozhno, bol'shuyu chast' vremeni nahodites' imenno v etom rezhime. Vy perehodite v rezhim vstavki s pomoshch'yu komandy ``i'' (``insert'' - vstavka) iz komandnogo rezhima. V rezhime vstavki vy vstavlyaete tekst v dokument na mesto, ukazyvaemoe kursorom. Dlya zaversheniya rezhima vstavki i vozvrata v komandnyj rezhim sleduet nazhat' esc.

Rezhim poslednej stroki - eto special'nyj rezhim, ispol'zuemyj dlya rasshireniya vozmozhnostej komandnogo rezhima. Pri vvode takih komand oni poyavlyayutsya v poslednej stroke ekrana. Naprimer, esli vy napechataete ``:'' v komandnom rezhime, vy perejdete v rezhim poslednej stroki i smozhete ispol'zovat' takie komandy, kak ``wq'' (zapisat' (write) fajl i vyjti (quit) iz vi), ili ``q!'' (vyjti iz vi bez sohraneniya izmenenij). Rezhim poslednej stroki v obshchem sluchae ispol'zuetsya dlya komand vi, kotorye dlinnee odnogo simvola. V rezhime poslednej stroki vy vvodite odnostrochnye komandy i nazhimaete enter dlya ih vypolneniya.

Nachala vi

Luchshij sposob osvoit' etu koncepciyu, eto vyzvat' vi i otredaktirovat' fajl. V primere ``screens'', privodimom nizhe, my sobiraemsya tol'ko pokazat' neskol'ko strok teksta, budto by ekran sostoit vsego iz shesti strok (vmesto dvadcati chetyreh).

     Vyzov vi

     vi <filename>

gde <filename> - imya redaktiruemogo fajla.

Nu tak vyzovite vi, napechatav

     /home/larry# vi test

dlya redaktirovaniya fajla test. Vy uvidite nechto vrode

____________________________________________________________________
|~_                                                                 |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|"test"_[New_file]__________________________________________________|

Stolbec simvolov ``~'' govorit o tom, chto vy stoite na konce fajla.

Vstavka teksta

Vy nahodites' v komandnom rezhime; dlya togo, chtoby vstavlyat' tekst v fajl, nazhmite i (chto perevedet vas v rezhim vstavki) i nachinajte pechatat'.

 ____________________________________________________________________
|Now is the time for all good men to come to the aid of the party._ |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Pri vstavke teksta vy mozhete napechatat' stol'ko strok, skol'ko pozhelaete (nazhimaya return posle kazhdoj stroki), i mozhete korrektirovat' oshibki ispol'zuya klavishu vozvrata (backspace).

Dlya zaversheniya rezhima vstavki i vozvrata v komandnyj rezhim nazhmite esc.

V komandnom rezhime vy mozhete ispol'zovat' klavishi so strelkami dlya peremeshcheniya po fajlu. Zdes', poskol'ku my imeem tol'ko odnu stroku teksta, popytki ispol'zovat' strelki "vverh" i "vniz" privedut lish' k tomu, chto vi na vas zagudit.

Est' neskol'ko sposobov vstavki teksta, otlichnyh ot ispol'zovaniya komandy i. Naprimer, komanda a vstavlyaet v tekst, nachinaya posle tekushchego polozheniya kursora, vmesto tekushchej pozicii kursora. Ispol'zujte levuyu strelku dlya peremeshcheniya kursora mezhdu slovami ``good'' i ``men''.

 ____________________________________________________________________
|Now is the time for all good_men to come to the aid of the party.  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Nazhmite a, dlya nachala rezhima vstavki, napechatajte ``wo'', a zatem nazhmite esc dlya vozvrata v komandnyj rezhim.

____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Dlya togo, chtoby nachat' vstavku teksta v stroku nizhe tekushchej, ispol'zujte komandu ``o''. Naprimer, nazhmite o i napechatajte strochku ili dve

 ____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|Afterwards, we'll go out for pizza and beer._                      |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

No pomnite, chto v lyuboe vremya vy nahodites' libo v komandnom rezhime (gde komandy, takie kak i, a ili o mogut primenyat'sya) ili v rezhime vstavki (gde vy vstavlyaete tekst, a zatem s pomoshch'yu esc vozvrashchaetes' v komandnyj rezhim) ili v rezhim poslednej stroki (v kotorom vy rasshiryaete rasshiryaemye komandy, kak eto obsuzhdaetsya nizhe).

Udalenie teksta

V komandnom rezhime komanda "x" udalyaet simvol pered kursorom. Esli vy nazhmete x pyat' raz, vy zakonchite v situacii:

 ____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|Afterwards, we'll go out for pizza and _                           |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Teper' nazhmite a, vstav'te nekotoryj tekst, a zatem nazhmite esc:

 ____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|Afterwards, we'll go out for pizza and Diet Coke._                 |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Vy mozhete udalyat' celye stroki, nabiraya komandu dd (t.e. nazhimaya d dvazhdy). Esli vash kursor na vtoroj stroke, i vy napechatali dd,

 ____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

CHtoby udalit' slovo, na kotorom nahoditsya kursor, ispol'zujte komandu dw. Pomestite kursor na slovo ``good'' i napechatajte dw.

 ____________________________________________________________________
|Now is the time for all women to come to the aid of the party.     |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Izmenenie teksta

Vy mozhete zamenit' fragmenty teksta, ispol'zuya komandu R. Pomestite kursor na pervuyu bukvu slova ``party'', nazhmite R i napechatajte slovo ``hungry''.

 ____________________________________________________________________
|Now is the time for all women to come to the aid of the hungry._   |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Ispol'zovanie R dlya redaktirovaniya teksta ochen' pohodit na na komandy i i a, no R zamenyaet prezhnij tekst vmesto vstavki v nego. Komanda r zamenyaet odin simvol, otmechennyj kursorom. Naprimer, peremestite kursor na nachalo slova ``Now'' i napechatajte r, a sledom C, to vy poluchite:

 ____________________________________________________________________
|Cow is the time for all women to come to the aid of the hungry._   |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Komanda ``˜'' izmenyaet razmer bukvy, otmechennoj kursorom: bol'shuyu delaet malen'koj i naoborot. Naprimer, esli vy pomestite kursor na ``o'' v ``Cow'' i zatem posledovatel'no budete nazhimat' ~, vy v konechnom itoge poluchite:

 ____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.    |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~__________________________________________________________________|

Komandy peremeshcheniya

Vy uzhe znaete, kak ispol'zovat' strelki dlya peremeshchenij po dokumentu. Vy takzhe mozhete ispol'zovat' komandy h, j, k, i l dlya peremeshcheniya kursora vlevo, vniz, vverh i vpravo sootvetstvenno. |to udobno, esli (po kakim-to prichinam) vashi klavishi so strelkami ne rabotayut kak nado.

Komanda w peremeshchaet kursor na nachalo sleduyushchego slova; b - peremeshchaet na nachalo predydushchego slova.

Komanda 0 (eto nol') peredvigaet kursor na nachalo tekushchej stroki, a komanda $ peremeshchaet na konec stroki.

Pri redaktirovanii bol'shih fajlov vy hotite peremeshchat'sya vpered i nazad srazu na razmer ekrana. Nazhatiem ctrl-F kursor peremeshchaetsya na ekran vpered, s pomoshch'yu ctrl-B - na ekran nazad.

Dlya togo, chtoby peremestit' kursor v konec fajla, napechatajte G. Mozhno peremestit'sya takzhe na lyubuyu stroku, napechatav komandu 10G vy peremestite kursor na desyatuyu stroku fajla. Dlya togo, chtoby vstat' na nachalo (na pervuyu stroku), ispol'zujte 1G.

Vy mozhete sochetat' komandy peremeshcheniya s drugimi komandami, takimi kak udalenie. Naprimer, komanda d$ udalit' ot mestopolozheniya kursora do konca stroki; dG udalit vse ot kursora do konca fajla i t.d.

Sohranenie fajlov i vyhod iz vi

Dlya vyhoda iz vi bez vneseniya izmenenij v ranee sushchestvovavshij fajl ispol'zujte komandu :q!.

Kogda vy napechataete ``:'', kursor peremestitsya na poslednyuyu stroku ekrana, poskol'ku vy perejdete v rezhim poslednej stroki.

 ____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.    |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|:__________________________________________________________________|

V rezhime poslednej stroki mogut vypolnyat'sya nekotorye rasshirennye komandy. Odna iz nih - q!, kotoraya pozvolyaet vyjti iz vi bez zapisi. Komanda :wq sohranyaet (zapisyvaet) fajl, a zatem vyhodit iz vi. Komanda ZZ (v rezhime komand, bez `:'') ekvivalentna :wq. Pomnite, chto vy dolzhny nazhat' enter posle nabora komandy v rezhime poslednej stroki. Esli hotite zapisat' fajl bez vyhoda iz /vi, ispol'zujte prosto :w.

Redaktirovanie eshche odnogo fajla

Dlya togo, chtoby otredaktirovat' drugoj fajl, ispol'zujte komandu :e. Naprimer, chtoby prekratit' redaktirovanie fajla test i perejti k redaktirovaniyu fajla foo, ispol'zujte komandu

 ____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.    |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|:e foo_____________________________________________________________|

Esli vy ispol'zuete :e bez predvaritel'nogo sohraneniya fajla, to snachala vy poluchite soobshchenie ob oshibke.

 ____________________________________________________________________
 |No_write_since_last_change_(":edit!"_overrides)____________________|

kotoroe prosto oznachaet, chto vi ne zhelaet redaktirovat' drugoj fajl, poka ne budet sohranen pervyj. V etot moment vy mozhete ispol'zovat' :w, chtoby sohranit' ishodnyj fajl, a zatem ispol'zovat' :e ili ispol'zovat' komandu

 ____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.    |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|~                                                                  |
|:e! foo_____________________________________________________________|

``!'' govorit vi, chto vy na samom dele imeete v vidu - redaktirovat' novyj fajl bez sohraneniya izmenenij, kotorye delalis' v pervom.

Vklyuchenie drugih fajlov

Esli vy ispol'zuete komandu :r, vy mozhete vklyuchit' soderzhimoe drugogo fajla v tekushchij fajl. Naprimer, komanda

    :r foo.txt

vstavit soderzhimoe fajla foo.txt v dannoe mesto teksta.

Vypolnenie komand Shell

Vy mozhete takzhe vypolnyat' komandy pryamo iz vi. Komanda :r! rabotaet kak :r, no vmesto chteniya fajla ona vstavlyaet vyhod dannoj komandy v bufer, v mesto, gde nahoditsya kursor. Naprimer, esli vy ispol'zuete komandu

    :r!  ls -F

vy poluchite v rezul'tate

 ____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.    |
|letters/                                                           |
|misc/                                                              |
|papers/_                                                           |
|~                                                                  |
|~__________________________________________________________________|

Vy mozhete vypolnit' komandu a, nahodyas' v redaktore vi i vernut'sya v redaktor posle ee zaversheniya Naprmier, esli vy ispol'zuete komandu

    :!  ls -F

budet vypolnena komanda ls -F, a rezul'tat vydan na ekran, a ne vstavlen v redaktiruemyj fajl. Esli vy ispol'zuete komandu

    :shell

vi zapustit shell, kotoryj pozvolit vremenno "otlozhit'" vi i vypolnit' komandy. Posle vyhoda iz shell (ispol'zuya komandu exit) vy vernetes' v vi.

Poluchenie pomoshchi

vi ne slishkom silen v interaktivnoj pomoshchi (da i bol'shinstvo UNIX-ov takzhe), no vy vsegda mozhete posmotret' stranicy Rukovodstva dlya vi. vi - eto "vizual'naya sostavlyayushchaya" redaktora ex; eto ex delaet mnogoe dlya podderzhaniya rezhima poslednej stroki i komandnogo rezhima v vi. Tak chto v dopolnenie k chteniyu Rukovodstva po vi posmotrite takzhe Rukovodstvo po ex.

3.13 Ustanovka sredy

Shell obespechivaet razlichnye mehanizmy nastrojki vashej rabochej sredy. My uzhe upominali ranee, chto shell bol'she, chem komanda interpretacii - eto takzhe moshchnyj yazyk programmirovaniya. No obsuzhdenie programmirovaniya na shell uvelo by nas daleko v storonu, a my by hoteli poznakomit' vas s nekotorymi sposobami uproshcheniya vashej raboty v UNIX za schet ispol'zovaniya nekotoryh dopolnitel'nyh poleznyh svojstv shell.

Kak my upominali ranee, razlichnye obolochki ispol'zuyut razlichnyj sintaksis dlya napisaniya svoih programm. Naprimer, Tcsh ispol'zuet sintaksis, pohozhij na yazyk Si, v to vremya kak shell Baurna imeet drugoj sintaksis. V etom razdele my ne budem zanimat'sya ih razlichiyami, a rassmotrim primery, ispol'zuya sintaksis shell Baurna (prim. perevodchikf: kak vse obychno i delayut).

Scenarii shell

prim. perevodchika: primenitel'no k programmam etogo tipa v angloyazychnoj literature poslednee vremya preimushchestvenno ispol'zuyut slovo script - "scenarij", hotya to, chto pod etim imeetsya v vidu vo mnogih knigah na russkom nazyvaetsya "tradicionno" kak "programma na shell" ili "komandnyj fajl"

Predpolozhim, chto vy chasto ispol'zuete seriyu komand i hoteli by sokratit' ob'em postoyannoj pechati za schet gruppirovki ih v odnu komandu. Naprimer, komandy

    /home/larry# cat chapter1 chapter2 chapter3 > book
    /home/larry# wc -l book
    /home/larry# lp book

ob'edinyayut fajly, soderzhashchie glavy knigi: chapter1, chapter2, chapter3 i pomeshchayut rezul'tat v fajl book. Zatem podschityvaetsya chislo strok v knige (v fajle book) i otobrazhaetsya na displee i, nakonec, pechataetsya komandoj lp.

Vmesto vvedeniya kazhdyj raz etih komand, vy mozhete sobrat' ih v odin scenarij (komandnyj fajl). Scenarii shell my kratko opishem v Razdele 3.13.1. A scenarij, kotoryj vypolnit vysheprivedennye komandy, budet vyglyadet' sleduyushchim obrazom

    #!/bin/sh
    # A shell script to create and print the book

    cat chapter1 chapter2 chapter3 > book
    wc -l book
    lp book

Esli etot scenarij budet pomeshchen v fajl makebook, to vy mozhete prosto ispol'zovat' dalee komandu

    /home/larry# makebook

kotoraya vypolnit vse komandy scenariya. Scenarii shell - eto obychnye tekstovye fajly, kotorye vy mozhete sozdavat' s pomoshch'yu redaktora vrode emacs ili vi. (vi obsuzhdalsya v Razdele 3.12)

Davajte posmotrim na etot scenarij. Pervaya stroka ``#!bin/sh/'' govorit o tom, chto etot fajl est' scenarij i soobshchaet shell, kak vypolnit' scenarij. V dannom sluchae neobhodimo peredat' scenarij dlya vypolneniya komande bin/sh/, gde bin/sh/ - sama programma shell. Pochemu eto vazhno? V bol'shinstve sistem UNIX bin/sh/ - eto shell Baurnovskogo tipa, naprimer bash. Iniciiruya rabotu scenariya shell vypolnyaetsya, ispol'zuya bin/sh/, pri etom my garantiruem, chto scenarij budet vypolnyat'sya imenno pod shell Baurnovskogo tipa (a ne, skazhem, pod C shell). |tot scenarij budet vypolnyat'sya pod shell Baurna, dazhe esli vy ispol'zuete Tcsh (ili kakoj-to drugoj C shell) kak svoyu rabochuyu obolochku.

Vtoraya stroka predstavlyaet iz sebya kommentarij. Kommentarii nachinayutsya simvolom ``#'' i mogut prodolzhat'sya do konca stroki - oni ignoriruyutsya shell i mogut ispol'zovat'sya programmistom dlya poyasnenij.

Ostal'nye stroki scenariya - obychnye komandy v tom vide, v kakom by vy ih vvodili pryamo na vypolnenie. Shell chitaet kazhduyu stroku scenariya i vypolnyaet etu stroku, kak budto vy vveli etu stroku v otvet na podskazku shell.

Prava dostupa vazhny dlya scenariev. Esli vy sozdali scenarij, vy dolzhny ubedit'sya, chto vy imeete prava na ego vypolnenie. Esli vy sozdavali scenarij v redaktore, to on (obychno) ne poluchaet avtomaticheski prav na vypolnenie. Mozhno ispol'zovat' komandu

       /home/larry# chmod u+x makebook

chtoby dat' samomu sebe razreshenie na vypolnenie shell-scenariya makebook.

Peremeshchenie shell i sreda

Shell pozvolyaet opredelyat' peremennye, kak i bol'shinstvo yazykov programmirovaniya. Peremennaya - eto porciya dannyh, kotoroj dano imya. (prim. perevodchika: V yazyke shell peremennye ne opredelyayutsya (v tradicionnom smysle), tak kak vse oni odnogo tipa - "strokovogo", rech' mozhet idti tol'ko ob ih iniciirovanii: prisvaivanii nachal'nyh znachenij).

VNIMANIE! Imejte v vidu, chto Tcsh, takzhe, kak i C shell, ispol'zuyut razlichnye mehanizmy opredeleniya peremennyh, otlichayushchiesya ot ispol'zuemyh zdes'. Zdes' obsuzhdaetsya shell Baurna. Kogda vy prisvoite znachenie peremennoj (ispol'zuya operator ``='' ), vy smozhete poluchit' eto znachenie, dobaviv pered imenem peremennoj simvol ``$'', kak eto pokazano nizhe

       /home/larry# foo=``hello there''

Peremennoj foo prisvoeno znachenie ``hello there''. Teper' vy mozhete obratit'sya k etoj peremennoj, dobaviv pered imenem simvol ``$''. Komanda

       /home/larry# echo $foo
       hello there
       /home/larry#

daet tot zhe samyj rezul'tat, chto i

       /home/larry# echo ``hello there''
       hello there
       /home/larry#

|ti peremennye yavlyayutsya vnutrennimi dlya shell. |to oznachaet, chto tol'ko shell imeet dostup k etim peremennym. |to mozhet byt' polezno dlya scenariev; esli vam nado sohranit' informaciyu o imeni fajla, vy, naprimer, mozhete pomestit' ego v peremennuyu. Komanda set mozhet pokazat' vam perechen' vseh opredelennyh peremennyh shell.

Shell pozvolyaet eksportirovat' peremennye v sredu. Sreda - eto mnozhestvo peremennyh, k kotorym mogut imet' dostup vse vypolnyaemye komandy. Opredeliv odnazhdy peremennuyu vnutri shell (prim. perevodchika: opredelit' - zdes' oznachaet "prisvoit' znachenie"), komandoj export vy mozhete peredat' ee srede.

VNIMANIE! Zdes' vnov' est' otlichie mezhdu Bash i Tcsh. Pri ispol'zovanii Tcsh ispol'zuetsya drugoj sisntaksis dlya pomeshcheniya peremennyh v sredu (ispol'zuetsya komanda setenv). Dopolnitel'nuyu informaciyu mozhno najti v Rukovodstve po Tcsh.

Sreda ochen' vazhna v sistemah UNIX. Ona pozvolyaet konfigurirovat' nekotorye komandy za schet ustanovki peremennyh, o kotoryh znayut komandy.

Vot nebol'shoj primer. Peremennaya sredy PAGER ispol'zuetsya komandoj man. Ona ukazyvaet komandu, kotoraya ispol'zuetsya v svoyu ochered' komandoj man dlya prosmotra Rukovodstva na ekrane. Esli vy ustanovite v kachestve znacheniya PAGER imya drugoj komandy, to eta komanda vmesto budet obespechivat' prosmotr vmesto more (kotoraya primenyalas' po umolchaniyu).

Prisvojte PAGER znachenie ``cat''. Vydacha na ekran rukovodstva budet vsya razom, a ne poekranno, kak eto delala komanda more.

       /home/larry# PAGER=cat

Teper' eksportirujte PAGER v sredu.

       /home/larry# export PAGER

Poprobujte komandu man ls. Rukovodstvo promel'knet po vashemu ekranu bez (zhelatel'nyh) zaderzhek.

Teper', esli prisvoit' PAGER znachenie ``more'', to dlya vydachi na ekran budet ispol'zovat'sya komanda more.

       /home/larry# PAGER=more

Obratim vnimanie na to, chto nam ne nado zanovo ispol'zovat' komandu export posle izmeneniya znacheniya PAGER. Neobhodimo tol'ko raz eksportirovat' peremennuyu; lyubye izmeneniya, kotorye budut proishodit' posle etogo, budut otrazhat'sya v srede.

Stranicy Rukovodstva dlya konkretnyh komand soderzhat informaciyu o tom, ispol'zuet li komanda kakie-to peremennye sredy. Naprimer, Rukovodstvo po komande man govorit o tom, chto dlya opredeleniya rezhima vydachi stranicy rukovodstva na ekran ispol'zuetsya peremennaya PAGER. Nekotorye komandy sovmestno ispol'zuyut peremennye sredy, naprimer, mnogie komandy ispol'zuyut peremennuyu sredy EDITOR dlya ukazaniya ispol'zuemogo redaktora.

Peremennye sredy ispol'zuyutsya takzhe dlya sohraneniya vazhnoj informacii o procedure vhoda. Naprimer peremennaya HOME soderzhit imya vashego domashnego kataloga.

    /home/larry/papers# echo $HOME
    /home/larry

Drugaya interesnaya peremennaya sredy - PS1, kotoraya opredelyaet glavnuyu podskazkn shell. Naprimer,

    /home/larry# PS1=``Your command, please:  ''
    Your command, please:

Dlya pereustanovki podskazki obratno v normal'noe sostoyanie (kogda ona pokazyvaet tekushchij rabochij katalog, posle kotorogo sleduet znachek ``#''), vypolnite sleduyushchee:

    Your command, please:  PS1=``\w# ''
    /home/larry#

V Rukovodstve bash est' podrobnoe opisanie sintaksisa, ispol'zuemogo pri ustanovke podskazki.

Peremennaya sredy PATH

Kogda vy ispol'zuete komandu ls, kak shell nahodit sootvetstvuyushchij vypolnyaemyj fajl (programmu) dlya ls? Na samom dele v bol'shinstve sistem ls nahoditsya v /bin/ls. shell ispol'zuet peremennuyu sredy PATH ("TROPA") dlya ukazaniya vozmozhnogo mestopolozheniya vypolnyaemyh fajlov sootvetstvuyushchih komand.

Naprimer, vasha peremennayaPATH mozhet imet' znachenie

    /bin:/usr/bin:/usr/local/bin:.

|to spisok katalogov (v kotoryh shell budet iskat' komandu), otdelyaemyh drug ot druga dvoetochiem ``:''. Kogda vy ispol'zuete komandu ls, shell prezhde vsego proveryaet nalichie /bin/ls, zatem /usr/bin/ls i t.d.

Obratite vnimanie na to, chto peremennaya PATH ne pomogaet nahodit' obychnye fajly. Naprimer, esli vy ispol'zuete komandu

    /home/larry# cp foo bar

shell ne ispol'zuet PATH dlya nahozhdeniya mestoprebyvaniya fajlov foo i bar - predpolagaetsya, chto eti imena odnoznachno opredelyayut mesto. shell ispol'zuet PATH tol'ko dlya nahozhdeniya komandy cp.

|to ekonomit vam massu vremeni; eto oznachaet, chto vy ne obyazany pomnit', gde nahodyatsya vypolnyaemye fajly komand. Vo mnogih sistemah vypolnyaemye fajly razbrosany vo mnogih mestah, takih kak /usr/bin, /bin ili /usr/local/bin. Vmesto togo, chtoby pisat' polnoe imya komandy (vrode /usr/bin/cp), vy prosto ukazyvaete v PATH perechen' katalogov, kotorye by vy hoteli, chtoby shell avtomaticheski prosmatrival.

Obratite vnimanie, chto PATH soderzhit ``.'', chto oznachaet "tekushchij rabochij katalog". |to pozvolyaet vam sozdavat' shell-scenarii ili programmy i vypolnyat' ih kak komandy iz tekushchego kataloga, bez neobhodimosti ukazyvat' eto pryamo (kak v sluchae ./makebook). Esli katalog ne ukazan v PATH, to shell ne budet ego prosmatrivat' v poiske komand, eto kasaetsya i tekushchego kataloga.

Shell-Scenarii inicializacii

V dopolnenie k shell-scenariyam, kotorye sozdaete vy, sushchestvuet mnozhestvo scenariev, kotorye ispol'zuet sam shell dlya svoih celej. Naibolee vazhnymi sredi nih yavlyayutsya scenarii inicializacii, kotorye avtomaticheski vypolnyayutsya shell pri vashem vhode v sistemu.

Scenarii inicializacii sami po sebe - eto obychnye scenarii, kak eto opisyvalos' vyshe. No oni ochen' polezny pri ustanovke vyshej sredy putem avtomaticheskogo vypolneniya nabora komand pri vashem vhode v sistemu. Naprimer, esli vy vsegda ispol'zuete komandu mail dlya proverki svoej pochty v moment vhoda v sistemu, vy mozhete pomestit' etu komandu v svoj scenarij inicializacii i ona budet vypolnena avtomaticheski.

Kak Bash, tak i Tcsh delayut razlichie mezhdu nachal'nym shell (vyzyvaemym pri vhode v sistemu) i prochimi vyzovami shell. Nachal'nyj shell vyzyvaetsya v moment vhoda pol'zovatelya v sistemu; chasto eto edinstvennyj ekzemplyar shell, kotoryj vy ispol'zuete. No esli vy vyzyvaete shell iz drugoj programmy, takoj kakvi, vy tem samym zapuskaete novyj (ekzemplyar) shell. Krome togo, kogda vy zapuskaete na vypolnenie shell-scenarii, vy avtomaticheski iniciiruete novyj ekzemplyar shell.

Fajly inicializacii, ispol'zuemye v Bash: /etc/profile (ustanavlivaetsya sistemnym administratorom, vypolnyaetsya vsemi ekzemplyarami nachal'nyh pol'zovatel'skih bash, vyzvannymi pri vhode pol'zovatelej v sistemu), $HOME/.bash_profile (vypolnyaetsya pri vhode pol'zovatelya) i $HOME/.bashrc (vypolnyaemyj vsemi prochimi ne nachal'nymi ekzemplyarami bash). Esli .bash_profile otsutstvuet, vmesto nego ispol'zuetsya .profile.

Tcsh ispol'zuet sleduyushchie scenarii inicializcii: /etc/csh.login (vypolnyaetsya vsemi pol'zovatel'skimi tcsh v moment vhoda v sistemu), $HOME/.tcshrc (vypolnyaetsya vo vremya vhoda v sistemu i vsemi novymi ekzemplyarami tcsh) i $HOME/.login (vypolnyaetsya vo vremya vhoda posle .tcshrc). Esli .tcshrc otsutstvuet, vmesto nego ispol'zuetsya .cshrc.

Dlya togo, chtoby luchshe ponyat' funkcii etih fajlov, vam sleduet bol'she uznat' o shell. Programmirovanie na shell slozhnyj vopros, daleko vyhodyashchij za ramki etoj knigi. Dopolnitel'nuyu informaciyu mozhno poluchit' iz Rukovodstva na bash i tcsh.

3.14 Ne hotite li otpravit'sya v samostoyatel'noe plavanie

Nadeemsya, chto my dali dostatochno informacii otnositel'no togo, kak ispol'zovat' sistemu. Imejte v vidu, chto bol'shaya chast' interesnyh i vazhnyh aspektov Linux zdes' ne obsuzhdalas' - zdes' rassmatrivalis' tol'ko samye bazovye. No etot fundament pomozhet vam bystro osvoit' i ispol'zovat' bolee slozhnye prilozheniya. Esli vse rassmotrennoe zdes' vam ne pokazalos' volnuyushche interesnym, ne unyvajte - v Linux est' eshche mnogo togo, s chem sledovalo by poznakomit'sya. Odin iz nezamenimyh sposobov izucheniya sistemy - eto chtenie Rukovodstva. Hotya mnogie stranicy Rukovodstva mogut vyglyadet' i dostatochno slozhnymi, esli vy budete dostatochno gluboko kopat', vy otkopaete nesmetnye rossypi poleznoj informacii.

My takzhe sovetuem prochitat' kakuyu-to polnuyu knigu po sisteme UNIX. V UNIX znachitel'no bol'she raznoobraznyh vozmozhnostej, chem mozhno uvidet' s pevogo vzglyada - k sozhaleniyu, oni vyhodyat za ramki etoj knigi. Nekotorye horoshie knigi po UNIX ukazany v Prilozhenii A.

Sled. Glava, Pred. Glava

Soderzhimoe etoj glavy, Glavnoe oglavlenie

Nachalo dokumenta, Nachalo etoj glavy