
                     Pogosto zastavljena vpraanja o Unixu

                       Ted Timar <tmatimar@isgtec.com>

                            v2.9, 11. junij 1996
     _________________________________________________________________

                                 Povzetek

   Pred vami je slovenski prevod spisa Unix FAQ, pogosto zastavljenih
   vpraanj z odgovori v noviarskih skupinah comp.unix.questions in
   comp.unix.shell. Prosim, ne ponavljajte teh vpraanj, ker so bila
   zastavljena e velikokrat, in prosim, ne pljuvajte po ljudeh, ki morda
   niso videli tega obvestila. Hvala!
     _________________________________________________________________


   Kazalo


1. Administrativni podatki

     * 1.1 O tem spisu
     * 1.2 Pravna zaita
     * 1.3 Dostopnost
     * 1.4 Zahvale

2. Splona vpraanja

     * 2.1 Kaj pomeni tevilka v oklepajih pri sklicevanju na ,rm(1)` ali
       ,ctime(3)`?
     * 2.2 Kaj pomeni {kaken nerazumljiv ukaz na Unixu}?
     * 2.3 Kako deluje most med noviarsko skupino
       ,,comp.unix.questions``
     * 2.4 Katere so uporabne knjige o Unixu ali C-ju?
     * 2.5 Kaj se je zgodilo s seznamom izgovarjave, ki je bil del tega
       spisa?

3. Relativno osnovna vpraanja, ki jih navadno spraujejo zaetniki

     * 3.1 Kako odstranim datoteko z imenom, ki se zane z ,-`?
     * 3.2 Kako odstranim datoteko, ki ima v svojem imenu udne znake?
     * 3.3 Kako dobim rekurziven izpis vsebine imenika?
     * 3.4 Kako lahko v svoj pozivnik vkljuim ime trenutnega imenika?
     * 3.5 Kako s skriptom ukazne lupine preberem znake s terminala?
     * 3.6 Kako preimenujem *.foo v *.bar ali spremenim imena datotek v
       male rke?
     * 3.7 Zakaj dobim ob ukazu ,,rsh gostitelj ukaz`` [kakno udno
       sporoilo o napaki]?
     * 3.8 Kako naj {nastavim spremenljivko okolja, spremenim imenik}
       znotraj programa ali skripta ukazne lupine in doseem, da bo to
       upotevala moja trenutna ukazna lupina?
     * 3.9 Kako lahko v csh loeno preusmerim stdout in stderr?
     * 3.10 Kako znotraj .cshrc ugotovim, ali sem prijavna ukazna lupina?
     * 3.11 Kako v lupini naredim ujemalni vzorec, ki se ujema z vsemi
       datotekami, razen z ,,.`` in ,,..``?
     * 3.12 Kako poiem zadnji argument v skriptu Bournove ukazne
       lupine?
     * 3.13 Kaj je narobe, e imam ,.` v svoji poti $PATH?
     * 3.14 Kako lahko iz skripta ukazne lupine zapiskam na terminalu?
     * 3.15 Zakaj ne morem uporabiti programa ,,talk`` za pogovor s
       prijateljem na stroju X?
     * 3.16 Zakaj da koledar napaen izpis?

4. Vmesna vpraanja

     * 4.1 Kako lahko ugotovim as, ko je bila datoteka ustvarjena?
     * 4.2 Kako lahko uporabim rsh, ne da bi rsh poakal konec
       oddaljenega ukaza?
     * 4.3 Kako lahko skrajam datoteko?
     * 4.4 Zakaj simbol ,,{}`` ukaza find ne naredi to, kar elim?
     * 4.5 Kako lahko zaitim simboline povezave?
     * 4.6 Kako lahko ,,obnovim`` pobrisano datoteko?
     * 4.7 Kako lahko proces ugotovi, ali tee v ozadju?
     * 4.8 Zakaj preusmerjanje v zanki ne dela, kot bi moralo? (Bournova
       lupina)
     * 4.9 Kako poenem passwd, ftp, telnet, tip in druge interaktivne
       programe v skriptu ukazne lupine v ozadju?
     * 4.10 Kako lahko v skriptu ali programu ugotovim ID procesa, ki
       pripada programu z doloenim imenom?
     * 4.11 Kako preverim izhodni status oddaljenega ukaza, pognanega z
       rsh?
     * 4.12 Je mogoe programu awk podati tudi spremenljivke ukazne
       lupine?
     * 4.13 Kako se znebim procesov-zombijev, ki vztrajajo?
     * 4.14 Kako dobim vrstice iz cevovoda tako, kot se piejo, namesto
       le v vejih blokih?
     * 4.15 Kako lahko vstavim datum v ime datoteke?
     * 4.16 Zakaj se nekateri skripti zanejo z ,,#!...``?

5. Napredna vpraanja; radi jih vpraujejo ljudje, ki mislijo, da e poznajo
vse odgovore

     * 5.1 Kako berem znake s terminala, ne da bi bilo uporabniku treba
       pritisniti RETURN?
     * 5.2 Kako preverim, e je treba prebrati znak, ne da bi ga zares
       prebral?
     * 5.3 Kako ugotovim ime odprte datoteke?
     * 5.4 Kako lahko tekoi program ugotovi svojo lastno pot?
     * 5.5 Kako uporabim popen() za odprtje procesa za branje in pisanje?
     * 5.6 Kako izvedem v C-ju sleep() za manj kot sekundo?
     * 5.7 Kako pripravim skripte ,setuid` ukazne lupine do delovanja?
     * 5.8 Kako lahko ugotovim, kateri uporabnik ali proces ima odprto
       datoteko ali uporablja doloen datoteni sistem (da ga lahko
       odklopim)?
     * 5.9 Kako izsledim ljudi, ki me tipajo (s finger)?
     * 5.10 Je mogoe ponovno prikljuiti proces na terminal, ko je bil
       ta odklopljen, tj. po zagonu programa v ozadju in odjavi?
     * 5.11 Je mogoe ,,vohuniti`` na terminalu, gledajo izhod, ki se
       prikazuje na drugem terminalu?

6. Vpraanja, povezana z razlinimi ukaznimi lupinami in njihovimi razlikami

     * 6.1 Se lahko ukazne lupine klasificirajo v kategorije?
     * 6.2 Kako ,,vkljuim`` en skript ukazne lupine iz drugega
       lupinskega skripta?
     * 6.3 Ali vse ukazne lupine podpirajo vzdevke (angl. aliases)? Lahko
       uporabimo tudi kaj drugega?
     * 6.4 Kako se prirejajo spremenljivke ukaznih lupin?
     * 6.5 Kako ugotovim, ali poganjam interaktivno ukazno lupino?
     * 6.6 Katere datoteke ,,s piko`` uporabljajo razline ukazne lupine?
     * 6.7 Zanima me ve o razlikah med razlinimi ukaznimi lupinami.

7. Pregled razliic Unixa

     * 7.1 Opozorilo in uvod
     * 7.2 Zelo kratek pogled na zgodovino Unixa
     * 7.3 Glavne vrste Unixa
     * 7.4 Glavni igralci in standardi Unixa
     * 7.5 Ugotovitev vrste vaega Unixa
     * 7.6 Kratki opisi nekaterih znanih (komercialnih/prostih) Unixov
     * 7.7 Unixi, delujoi v realnem asu
     * 7.8 Slovarek Unixa

8. Primerjava sistemov za upravljanje konfiguracij (RCS, SCCS).

     * 8.1 RCS vs. SCCS: Uvod
     * 8.2 RCS vs. SCCS: Kako sta primerljiva vmesnika?
     * 8.3 RCS vs. SCCS: Kaj je v datoteki popravkov?
     * 8.4 RCS vs. SCCS: Katere so kljune besede?
     * 8.5 Kaj je simbolino ime v RCS?
     * 8.6 RCS vs. SCCS: Kaj pa hitrost?
     * 8.7 RCS vs. SCCS: Identifikacija razliic
     * 8.8 RCS vs. SCCS: Kako se obnaata v teavah?
     * 8.9 RCS vs. SCCS: Kako se razumeta z ukazom make(1)?
     * 8.10 RCS vs. SCCS: Pretvorba
     * 8.11 RCS vs. SCCS: Podpora
     * 8.12 RCS vs. SCCS: Primerjava ukazov
     * 8.13 RCS vs. SCCS: Priznanja
     * 8.14 Ali lahko dobim ve podatkov o sistemih za upravljanje
       konfiguracij?
     _________________________________________________________________


1. Administrativni podatki

1.1 O tem spisu

   Pred vami je slovenski prevod spisa Unix FAQ, pogosto zastavljenih
   vpraanj z odgovori v noviarskih skupinah comp.unix.questions in
   comp.unix.shell. Prosim, ne ponavljajte teh vpraanj, ker so bila
   zastavljena e velikokrat, in prosim, ne pljuvajte po ljudeh, ki morda
   niso videli tega obvestila. Hvala!

   eprav so vsa vpraanja legitimna, kae, da se vsako leto znova
   pojavljajo v noviarskih skupinah comp.unix.questions in
   comp.unix.shell, navadno z odgovori, od katerih je le nekaj pravilnih,
   in skupaj z jadikovanjem o tem, kako so venomer postavljena enaka
   vpraanja. Ob tem boste morda eleli prebrati meseni lanek ,,Answers
   to Frequently Asked Questions`` v noviarski skupini
   news.announce.newusers, ki vam bo povedal, kaj pomeni ,,UNIX``.

   Pri pestrosti sistemov Unix na svetu je teko zagotoviti, da bodo ta
   vpraanja delovala na vseh sistemih. Vselej preberite strani vaega
   lokalnega referennega sistemskega prironika, preden poskuate
   storiti karkoli tukaj priporoenega. e imate predloge ali popravke za
   katerikoli tukajnji odgovor, ga, prosim, poljite na
   tmatimar@isgtec.com.

   Slovenski prevod je nastal konec leta 1998, ko so nekateri odgovori e
   zastareli. Prevajalec svetuje, da nasvete uporabljate z zrnom soli.
   Avtor originalnih Unix FAQ nartuje novo izdajo, ki jo bomo poskuali
   prevesti, e boste pokazali zanimanje za tole razliico. Prevajalec
   prosi za kakrnekoli pripombe k prevodu - poljite jih na
   roman.maurer@fmf.uni-lj.si.

1.2 Pravna zaita

   Zbirko originalnih nasvetov je pravno zaitil (c) 1994 Ted Timar,
   razen dela ,,Pregled razliic Unixa``, ki sta ga zaitila (c) 1994,
   Pierre Lewis in Ted Timar. Vse pravice so pridrane. Dovoljenje za
   razirjanje te zbirke imate, e jo brezplano razirjate v elektronski
   obliki, e ste naredili vse razumne poskuse, da bi uporabili njeno
   zadnjo razliico, e so hranjene vse tu navedene zasluge in to
   sporoilo o pravni zaiti. O drugih vpraanjih distribucije se bo
   premislilo. Vsem razumnim zahtevam se bo ugodilo.

   Vsi nasveti so bili priporoeni z dobrimi nameni, vendar za njihovo
   tonost ne jamijo niti pisci prispevkov niti avtor te zbirke niti
   prevajalec. Uporabniki v celoti prevzemajo odgovornost za morebitno
   povzroeno kodo.

   Slovenski prevod te zbirke z dne 26. septembra 1998 je delo Romana
   Maurerja. Za njegovo razirjanje veljajo enaki pogoji kot za izvirno
   zbirko.

1.3 Dostopnost

   Veliko zbirk pogosto zastavljenih vpraanj (kraje PZV; angl. FAQ -
   Frequently Asked Questions), vkljuno s to, je dostopnih z anonimnim
   FTP-jem z arhivarskega mesta
   ftp://rtfm.mit.edu/pub/usenet/news.answers/, ki je zrcaljen tudi na
   slovenskem streniku ftp://ftp.arnes.si/usenet/news.answers/. Ime, pod
   katerim se arhivira PZV, vidite v vrstici ,,Archive-Name:`` na vrhu
   lanka. Original teh PZV je shranjen pod imeni
   ,,unix-faq/faq/part[1-7]``.

   Formatirane razliice originalnega spisa Unix FAQ v formatu Texinfo,
   tekstovnem formatu in formatu za *roff so dostopne z anonimnim FTP-jem
   v imeniku ftp://ftp.wg.omron.co.jp/pub/unix-faq/docs/.

   Slovenska razliica v formatih TXT, SGML, Postscript in DVI je
   dostopna na mestu za anonimni FTP v podimenikih
   ftp://ftp.lugos.si/pub/lugos/doc/FAQ-sl/ (iite datoteke
   Unix-FAQ-sl.*) ali v svetovnem spletu na naslovu
   http://www.lugos.si/delo/slo/HOWTO-sl/Unix-FAQ-sl.html.

1.4 Zahvale

Subject: Who helped you put this list together?
Date: Thu Mar 18 17:16:55 EST 1993

   Ta spis je ena prvih zbirk pogosto zastavljenih vpraanj (PZV; angl.
   Frequently Asked Questions - FAQ). Prvi je bil sestavljen julija
   1989.

   Ted Timar <tmatimar@isgtec.com> je prevzel vzdrevanje tega seznama.
   Skoraj vse delo (in zasluge) za sestavljanje te zbirke gredo Stevu
   Haymanu.

   Veliko zahval dolgujemo tudi ducatom bralcev Useneta. Ti so prispevali
   vpraanja, odgovore, popravke in predloge za ta seznam. Posebna
   zahvala gre Maartenu Litmaathu, Guyu Harrisu in Jonathanu Kamensu, ki
   so spisali posebej obsene prispevke.

   Temo ,,Vpraanja, povezana z razlinimi ukaznimi lupinami in njihovimi
   razlikami`` je preteno zapisal Matthew Wicks <wicks@dcdmjw.fnal.gov>.

   Temo ,,Pregled razliic Unixa`` je preteno zapisal Pierre (P.) Lewis
   <lew@bnr.ca>.

   Kjer je le mogoe, je na vrhu odgovora naveden avtor posameznega
   odgovora na vpraanje in datum zadnjega popravka. al sem s to prakso
   zael ele nedavno, zato je veliko podatkov nepopolnih. Bil sem tudi
   brezbrien do podatkov o avtorjih popravkov odgovorov. Opraviujem se
   vsem, ki ste napisali dragocene prispevke, a niste primerno omenjeni.

   Originalni dokument je dostopen v formatu *roff (paketi makro ukazov
   ms in mm). Andrew Cromarty ga je pretvoril v format Texinfo. Marty
   Leisner <leisner@sdsp.mc.xerox.com> je oistil razliico v formatu
   Texinfo.

   Pisci obsenejih prispevkov tega spisa so lahko omenjeni drugje ali
   pa tudi ne, a so:
     * Steve Hayman <shayman@Objectario.com>
     * Pierre Lewis <lew@bnr.ca>
     * Jonathan Kamens <jik@mit.edu>
     * Tom Christiansen <tchrist@mox.perl.com>
     * Maarten Litmaath <maart@nat.vu.nl>
     * Guy Harris <guy@auspex.com>

   Dne 26. septembra 1998 s popravki 16. februarja 1999 je Roman Maurer
   <roman.maurer@fmf.uni-lj.si> ta spis prevedel v slovenino. Hvala
   Aleu Koirju <kosir@hermes.si> za tevilne popravke prevoda!
     _________________________________________________________________


2. Splona vpraanja

2.1 Kaj pomeni tevilka v oklepajih pri sklicevanju na ,rm(1)` ali ,ctime(3)`?

Subject: When someone refers to 'rn(1)' ...  the number in parentheses mean?
Date: Tue, 13 Dec 1994 16:37:26 -0500

   tevilka je videti kot neke vrste klic funkcije, a to ni. Te tevilke
   pomenijo poglavje ,,Prironika za Unix`` (angl. ,,Unix manual``), kjer
   najdete primerno dokumentacijo. Napiete lahko

man 3 ctime

   in s tem pogledate stran o ,,ctime`` v tretjem poglavju prironika.

   Tradicionalna poglavja prironika so:

   1
          Ukazi na uporabnikem nivoju

   2
          Sistemski klici

   3
          Funkcije v knjinicah

   4
          Naprave in gonilniki naprav

   5
          Datoteni formati

   6
          Igre

   7
          Razline zadeve - paketi makro ukazov itd.

   8
          Ukazi za vzdrevanje in tek sistema

   Nekatere razliice Unixa uporabljajo netevilska imena razdelkov.
   Xenix, na primer, uporablja ,,C`` za ukaze in ,,S`` za funkcije.
   Nekatere noveje razliice Unixa se razlikujejo in razumejo ukaz v
   obliki ,,man -s# naslov`` namesto ,,man # title``.

   Vsako poglavje ima uvod, ki ga lahko preberete z ukazom

man # intro

   kjer je # tevilka poglavja.

   tevilka je vasih potrebna, da lahko loite med ukazom in funkcijo v
   knjinici ali sistemskim klicem z enakim imenom. Va sistem ima na
   primer morda ,,time(1)``, stran referennega prironika o ukazu ,time`
   za merjenje asov izvajanja programov, in tudi ,,time(3)``, stran
   referennega prironika o podprogramu ,time`, s katerim prikaete
   trenutni as. Uporabite lahko razliici ,,man 1 time`` ali ,,man 3
   time`` in s tem doloite, katera stran prironika vas zanima.

   Pogosto boste nali druge razdelke za lokalne programe ali celo
   podrazdelke zgornjih razdelkov - Ultrix ima med drugim razdelke 3m,
   3n, 3x in 3yp.

2.2 Kaj pomeni {kaken nerazumljiv ukaz na Unixu}?

Subject: What does {some strange unix command name} stand for?
Date: Thu Mar 18 17:16:55 EST 1993

   awk
          "Aho Weinberger & Kernighan"

          Jezik in program, ki ga interpretira, se imenujeta po
          zaetnicah priimkov njegovih avtorjev, ki so Al Aho, Peter
          Weinberger in Brian Kernighan.

   grep
          "Global Regular Expression Print"

          Izraz grep izhaja iz ukaza za ed, ki je izpisal vse vrstice, ki
          so ustrezale podanemu iskalnemu vzorcu

g/re/p

          kjer pomeni ,,re`` ,,regularni izraz`` (angl. regular
          expression).

   fgrep
          "Fixed GREP"

          fgrep ie le fiksne vzorce. rka ,f` ni okrajava za ,,fast``
          (slov. ,,hitro``) - pravzaprav je ,,fgrep foobar *.c`` navadno
          poasneji kot ,,egrep foobar *.c`` (Da, to je nekam
          presenetljivo. Poskusite!)

          Fgrep je vseeno uporaben, ko iete v datoteki veje tevilo
          iskalnih vzorcev, kot jih prenese egrep.

   egrep
          "Extended GREP"

          egrep uporablja imenitneje regularne izraze kot grep. Mnogi
          ljudje vselej uporabljajo egrep, saj uporablja bolje algoritme
          kot grep ali fgrep in je navadno najhitreji od njih.

   cat
          "CATenate"

          Obrobna angleka beseda ,,catenate`` pomeni ,,spenjati (z
          verigo)`` ali ,,povezovati v zaporedja``, kar je tono to, kar
          naredi ,,cat`` z eno datoteko ali z ve datotekami. Ne
          zamenjujte ga s C/A/T, (angl. Computer Aided Typesetter, slov.
          raunalniko podprti pisalni stroj).

   gecos
          "General Electric Comprehensive Operating Supervisor"

          Ko je podjetje General Electric prodalo svojo enoto za velike
          sisteme podjetju Honeywell, je ta izpustil ,,E`` iz ,,GECOS``.

          Datoteka z gesli za Unix ima polje ,,pw_gecos``. To polje je
          resnini ostanek zgodnjih asov. Dennis Ritchie je poroal:

     Vasih smo poslali tiskalniki izhod ali paketna opravila na stroj
     GCOS. Polje gcos v datoteki z gesli je bilo mesto, v katerega smo
     stlaili podatke za kartico $IDENT. Ni ravno elegantno.

   nroff
          "New ROFF"

   troff
          "Typesetter new ROFF"

          To sta naslednika programa ,,roff``, ki je bil ponovna izvedba
          programa ,,runoff`` s sistema Multics in s katerim ste
          ,,iztirili`` (angl. ,,run off``) dober izvod vaega dokumenta.

   tee
          T

          Po izrazoslovju vodovodnih intalaterjev - cepilec pipe v
          obliki rke T.

   bss
          "Block Started by Symbol"

          Dennis Ritchie pravi:

     Pravzaprav ta akronim (tako kot smo ga vzeli; morda ima druge
     verjetne etimologije) pomeni ,,Blok se je zael s simbolom`` (angl.
     ,,Block Started by Symbol``). To je bila psevdo-operacija v FAP
     (Fortran Assembly [-hm?] Program), zbirnik za stroje IBM
     704-709-7090-7094. Definiral je svoje oznake in rezerviral prostor
     za dano tevilo besed. Obstajal je e psevdo-operator BES, ,,Block
     Ended by Symbol`` (slov. ,,Blok se je konal s simbolom``), ki je
     poel podobno, a tako, da je bila oznaka definirana z zadnjo
     prirejeno besedo + 1. (Na teh strojih so bile fortranske tabele
     shranjene v obratnem vrstnem redu in so bile 1-zaetek.)

     Uporaba je razumno primerna in je podobna kot pri standardnem
     nalagalniku Unixa, kjer prirejeni pomnilnik ni potrebno vstaviti
     dobesedno v objekt, pa pa je dostopen prek kazalca (angl. ,,the
     space assigned didn't have to be punched literally into the object
     deck but was represented by a count somewhere``).

   biff
          "BIFF"

          Ta ukaz, ki vklopi asinhrono obvestilo o poti, je bil
          pravzaprav poimenovan po psu v Berkeleyu. Eric Cooper z
          univerze Carnegie Mellon takole pripoveduje:

     Potrdim lahko izvor imena biff, e vas zanima. Biff je bilo ime psu
     Heidi Stettner, ko je bila Heidi (in jaz in Bill Joy) tudentka na
     U. C. Berkeley in so razvijali zgodnje verzije BSD. Biff je bil
     popularen med stanovalci Evans Hall in je bil znan po tem, da je
     vselej lajal na potarja. Od tod ime tega ukaza.

   rc (kot v ,,.cshrc`` ali ,,/etc/rc``)
          "RunCom"

          ,,rc`` izhaja iz ,,runcom`` s sistema MIT CTSS priblino okrog
          leta 1965. Brian Kernighan & Dennis Ritchie sta takole
          pripovedovala Vicki Brown:

     Obstajal je pripomoek, ki je izvedel ukaze, shranjene v datoteki;
     imenoval se je ,,runcom``, okrajava za ,,run commands`` (slov.
     poeni ukaze), in takno datoteko smo zaeli klicati ,,neki
     runcom``.

     ,,rc`` v Unixu je ostalina te uporabe.

          ,,rc`` je tudi ime ukazne lupine novega operacijskega sistema
          Plan 9.

   Perl
          "Practical Extraction and Report Language" ali

   Perl
          "Pathologically Eclectic Rubbish Lister"

          Jezik Perl je zelo popularno orodje avtorja Larryja Walla. Je
          prosto dostopno in popolnoma prenosljivo. Uporablja se za
          obdelovanje besedil in delo z datotekami, ter premoa prepad
          med ukazno lupino in programiranjem v jeziku C (ali med
          preprostim ukazom iz ukazne vrstice in puljenjem svojih las).
          Za nadaljne informacije glejte noviarsko skupino Useneta
          comp.lang.perl.misc.

   Knjiga ,,Life with Unix`` Dona Libesa vsebuje mnogo ve taknih
   poslastic.

2.3 Kako deluje most med noviarsko skupino ,,comp.unix.questions`` in
elektronskim seznamom ,,info-unix``?

Subject: How does the gateway between "comp.unix.questions" ... work ?
Date: Thu Mar 18 17:16:55 EST 1993

   Elektronska seznama ,,info-unix`` in ,,unix-wizards`` sta posebni
   potni razliici skupin comp.unix.questions in comp.unix.wizards. Med
   vsebino elektronskih potnih seznamov in noviarskih skupin ne bi
   smelo biti razlik.

   e se elite prijaviti na enega teh seznamov, poljite pismo na
   info-unix-request@brl.mil ali unix-wizards-request@brl.mil. Ne
   priakujte takojnjega odgovora.

   Tukaj so podrobnosti, zahvaljujo vzdrevalcu seznama, Bobu Reschlyju:

  Poiljanje na seznama info-UNIX in UNIX-wizards

   Vse, kar poljete na seznam, se objavi; pisem ne moderiram - BRL
   deluje le kot prepisovalnik. Prispevki naronikov z Interneta naj bodo
   poslani na naslov seznama (info-UNIX ali UNIX- wizards); naslova z
   ,-request` sta le za dopisovanje z vzdrevalcem seznama [mano]. Pisma,
   poslana prek Useneta, naj bodo naslovljene na primerno noviarsko
   skupino ( comp.unix.questions ali comp.unix.wizards).

   Naroniki z Interneta dobivajo pisma dveh vrst: posamezna sporoila in
   povzetke pisem. Pisma, ki prispejo na BRL prek Interneta in BITNET-a
   (ez most BITNET-Internet), se takoj razpoljejo na vse naslove na
   potnem seznamu. Pisma z Useneta se zberejo v povzetke in ti se dnevno
   poljejo na naslove lanov na seznamu.

   Promet z BITNET-a je precej podoben prometu prek Interneta. Glavna
   razlika je, da vzdrujem le en naslov za pisma, naslovljena na vse
   naronike BITNET-a. Ta naslov kae na veji seznam, ki vsebuje
   posamezne naronike BITNET-a. Tako mora v vsaki smeri le po eno pismo
   med BITNET-om in Internetom.

   Naroniki USENET-a vidijo le posamezna pisma. Vsa pisma, odposlana z
   Internetu, se razpoiljajo na na stroj z USENET-om. Potem se uvrstijo
   v primerno noviarsko skupino. al pri sporoilih, ki gredo prek
   mostu, poiljatelj postane ,,news@brl-adm``. To je trenutno neizbeni
   stranski uinek premostitvenega programja.

   Kar se tie publike, USENET ima izjemno veliko bralcev - domnevam, da
   ve tiso gostiteljev in na desetine tisoev bralcev. Glavni seznam,
   ki ga vzdrujemo tu na BRL, poganja okoli 150 vnosov, od katerih jih
   je priblino 10% lokalnih redistribucijskih seznamov. Nimam natannega
   obutka za velikost redistribucije po BITNET-u, a domnevam, da je
   priblino enake velikosti in sestave kot glavni seznam. Promet vsebuje
   v povpreju od 150 Kb do 400 Kb sporoil na teden.

2.4 Katere so uporabne knjige o Unixu ali C-ju?

Subject: What are some useful Unix or C books?
Date: Thu Mar 18 17:16:55 EST 1993

   Mitch Wright (mitch@cirrus.com) vzdruje dober seznam knjig o Unixu in
   C-ju, z opisi in z nekaterimi kratkimi pregledi. Trenutno je na
   njegovem seznamu 167 knjinih naslovov.

   Kopijo tega seznama dobite z anonimnim FTP-ju na naslovu
   ftp://ftp.rahul.net/pub/mitch/YABL/yabl (192.160.13.1). Popravke in
   predloge poiljajte na mitch@cirrus.com.

   Samuel Ko (kko@sfu.ca) vzdruje e en seznam knjig za Unix. Ta seznam
   vsebuje le priporoene knjige in je torej kraji, knjige pa so
   razvrene po kategorijah, kar je morda primerneje, e iete doloen
   tip knjige.

   Kopijo tega seznama dobite na naslovu
   ftp://rtfm.mit.edu/pub/usenet/news.answers/books/unix. Popravke in
   predloge poiljajte na kko@sfu.ca.

   e ne morete uporabiti anonimnega FTP-ja, poljite vrstico ,,help`` na
   ftpmail@decwrl.dec.com za navodila o prenaanju datotek po elektronski
   poti.

2.5 Kaj se je zgodilo s seznamom izgovarjave, ki je bil del tega spisa?

Subject: What happened to the pronunciation list ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   Od nastanka v letu 1989 dalje so originalna angleka PZV vkljuevala
   izrpen seznam izgovarjave, ki ga je vzdreval Maarten Litmaath
   (hvala, Maarten!). Prvi seznam je pripravil Carl Paukstis
   <carlp@frigg.isc-br.com>.

   Seznam se je upokojil, saj njegov naslov ,,Vpraanja o Unixu`` ne
   ustreza. e vedno ga lahko najdete kot del iroko razirjene datoteke
   ,,Jargon`` (vzdruje jo Eric S. Raymond, <eric@snark.thyrsus.com>), ki
   je veliko primerneji forum na temo ,,Kako naj izgovorim /* ?``.

   e elite kopijo seznama, se poveite z 133.210.4.4, in jo poiite v
   imeniku
   ftp://ftp.wg.omron.co.jp/pub/unix-faq/docs/Pronunciation-Guide.
     _________________________________________________________________


3. Relativno osnovna vpraanja, ki jih navadno spraujejo zaetniki

3.1 Kako odstranim datoteko z imenom, ki se zane z ,-`?

Subject: How do I remove a file whose name begins with a "-" ?
Date: Thu Mar 18 17:16:55 EST 1993

   Poiite tak nain imenovanja datoteke, da se ne zane s pomiljajem.
   Najpreprosteji odgovor je primer

rm ./-imedatoteke

   (seveda predvidevamo, da je ,,-imedatoteke`` v tem primeru v trenutnem
   imeniku).

   Ta nain izogibanja dvoumnemu ,-` na zaetku imen deluje tudi pri
   drugih ukazih.

   Veliko ukazov, posebej tistih, ki so bili napisani z uporabo rutine
   ,,getopt(3)`` za razlembo argumentov, sprejme tudi argument ,,--``,
   ki pomeni ,,to je zadnja izbira, vse po tem ni ve izbira``. Vaa
   razliica rm potemtakem morebiti razume tudi

rm -- -imedatoteke

   Nekatere razliice rm, ki ne uporabljajo getopt(), razumejo podobno
   tudi en sam ,,-``, torej lahko poskusite kar z ,,rm - -imedatoteke``.

3.2 Kako odstranim datoteko, ki ima v svojem imenu udne znake?

Subject: How do I remove a file with funny characters in the filename ?
Date: Thu Mar 18 17:16:55 EST 1993

   e je ,,uden znak`` znak ,/`, preskoite na zadnji del odgovora. e
   je uden znak nekaj drugega, na primer presledek ali kontrolni znak
   ali znak s priganim osmim bitom (to so npr. slovenske rke
   ,,蹾ȩ``), nadaljujte z branjem.

   Prvi klasini odgovor je uporaba ukaza na nain

rm -i vzorec*ki*ustreza*le*datoteki*ki*jo*elite

   Ukaz vpraa za vsako datoteko, ki ustreza vzorcu, e jo elite
   odstraniti. Nasvet morda v vai ukazni lupini ne bo deloval zaradi
   znakov s priganim osmim bitom, saj ga ukazna lupina lahko odree.

   Drugi klasini odgovor je

rm -ri .

   ki vas za vsako datoteko v trenutnem imeniku vpraa, ali naj jo
   odstrani.

   V anglekem okolju odgovorite z ,y` pri problematini datoteki in z
   ,n` pri vseh ostalih datotekah. al to ne deluje pri veliko razliicah
   rm. Hkrati se bo ukaz izvedel za vse datoteke na vseh podimenikih
   trenutnega imenika, torej boste morda zaasno hoteli te imenike
   narediti nedostopne z ,,chmod a-x``, da vas ne bodo motili.

   Vselej globoko vdihnite in razmislite, kaj ponete, ter dvakrat
   preverite, kaj ste zapisali v ukazni vrstici, kadar uporabljate
   zastavico ,,-r`` ukaza rm ali znaka * ali ? (angl. wildcard).

   Tretji klasini odgovor je

find . -type f ... -ok rm '{}' \;

   kjer je ,,...`` skupina oznak, ki enolino doloa ime datoteke. Ena od
   monosti je, da za problematino datoteko poiete njeno tevilko
   inode (z uporabo ukaza ,,ls -i .``) in potem uporabite

find . -inum 12345 -ok rm '{}' \;

   ali

find . -inum 12345 -ok mv '{}' novo-ime-datoteke \;

   ,,-ok`` je varnostno preverjanje - program vas bo vpraal za potrditev
   ukaza, preden ga bo izvedel. Spraevanju se lahko izognete z uporabo
   ,,-exec``, e radi ivite nevarno, ali e domnevate, da ime datoteke
   vsebuje zaporedje udnih znakov, ki vam bodo ob izpisu zmeali zaslon.

   Kaj, e ime datoteke vsebuje znak ,/`?

   Te datoteke so res posebni primeri in jih lahko ustvari le hroata
   koda v jedru (tipino jih naredijo implementacije NFS, ki ne poistijo
   neveljavnih znakov iz imen datotek na oddaljenih strojih). Najprej
   poskuajte natanko razumeti, zakaj je ta problem tako izjemen.

   Spomnite se, da so imeniki v Unixu preprosto pari imen datotek in
   tevilk inode. Imenik tipino vsebuje podobno informacijo:

ime datoteke  inode

datoteka1     12345
datoteka2.c   12349
datoteka3     12347

   Teoretino sta ,/` in ,\0` le dva znaka, ki se ne moreta pojaviti v
   imenu datoteke - znak ,/` zato, ker se uporablja za loevanje imenikov
   in datotek, in znak ,\0` zato, ker konuje ime datoteke.

   al nekatere izvedbe omrenega datotenega sistema NFS preerno
   ustvarjajo datoteke z vkljuenimi nagibnicami kot odgovor na zahteve
   oddaljenih strojev. Na primer, to se lahko zgodi, ko se nekdo na Macu
   ali drugem ne-Unixu odloi narediti oddaljeno datoteko NFS na vaem
   Unixu, z datumom v imenu datoteke. Va imenik na Unixu ima potem v
   sebi tole:

ime datoteke  inode

91/02/07      12357

   Takne datoteke ne bo pobrisalo nobeno zgoraj opisano aranje z
   ukazoma find in rm, saj morata tako tadva pripomoka kot tudi vsi
   drugi programi na Unixu razumeti znak ,/` na obiajen nain.

   Vsak obiajen program bo elel narediti unlink("91/02/07"), kar jedro
   razume kot ,,pobrii datoteko 07 v podimeniku 02 imenika 91``, toda to
   ni tisto, kar hoemo - imamo datoteko imenovano ,,91/02/07`` v
   trenutnem imeniku. To je komaj zaznavna, a kljuna razlika.

   Kaj lahko naredite v tem primeru? Najprej se poskusite vrniti na Maca,
   ki je ustvaril ta neveni vnos, in skuajte prepriati Maca in va
   lokalni strenik NFS, da datoteko preimenujeta v nekaj, kar ne vsebuje
   nagibnic.

   e to ne deluje ali morda ni izvedljivo, boste potrebovali pomo
   vaega sistemskega upravitelja, ki bo moral poskusiti kaj od
   naslednjega. Uporabite ,,ls -i``, da boste izvedeli tevilko inode
   nesrene datoteke, potem odklopite datoteni sistem (z umount),
   uporabite ,,clri`` za izbris inodea, in popravite datoteni sistem s
   ,,fsck`` in s stisnjenimi pestmi. Postopek unii podatke o datoteki.
   e jih elite obdrati, lahko poskusite:
     * ustvarite nov imenik v istem starevskem imeniku, kot ga ima
       imenik, ki vsebuje datoteko na slabem glasu,
     * iz starega imenika v novega premaknite vse, kar lahko (se pravi
       vse, razen datoteke s slabim imenom),
     * na imeniku z datoteko s slabim imenom napravite ,,ls -id`` , da
       dobite njegovo tevilko inumber,
     * odklopite datoteni sistem,
     * uporabite ,,clri`` na imeniku, ki vsebuje sporno datoteko,
     * obnovite datoteni sistem s ,,fsck``.

   Potem boste datoteko poiskali takole:
     * namestite datoteni sistem;
     * preimenujte imenik, ki ste ga ustvarili, tako da bo imel enako
       ime, kot stari imenik (saj je stari imenik dokonno pobrisal
       ,,fsck``);
     * premaknite datoteko iz imenika ,,lost+found`` v imenik s
       primernejim imenom.

   Alternativa temu pristopu je popravljanje imenika na zahteven nain z
   brkljanjem po surovem datotenem sistemu (angl. raw file system).
   Uporabite ,,fsdb``, e ga imate.

3.3 Kako dobim rekurziven izpis vsebine imenika?

Subject: How do I get a recursive directory listing?
Date: Thu Mar 18 17:16:55 EST 1993

   Nekaj od tega bo naredilo to, kar elite:

ls -R                   (vse razliice ,ls` nimajo ,-R`)
find . -print           (to mora delovati povsod)
du -a .                 (pokae ime in velikost)

   e iete vzorec z jokerji (angl. wildcard), ki bo ustrezal vsem
   datotekam ,,.c`` v tem imeniku in pod njim, ga ne boste nali, pa pa
   lahko uporabite:

% nek-ukaz `find . -name '*.c' -print`

   ,,find`` je zmogljiv program. Pouite se o njem.

3.4 Kako lahko v svoj pozivnik vkljuim ime trenutnega imenika?

Subject: How do I get the current directory into my prompt?
Date: Thu Mar 18 17:16:55 EST 1993

   Odvisno od tega, katero ukazno lupino uporabljate. V nekaterih ukaznih
   lupinah je to preprosto, v drugih pa teko ali celo nemogoe.

     * C Shell (csh):
       Vstavite tole v svojo datoteko .cshrc - preuredite spremenljivko
       pozivnika po svojem okusu.

alias setprompt 'set prompt="${cwd}% "'
setprompt           # nastavitev uvodnega pozivnika
alias cd 'chdir \!* && setprompt'
       e uporabljate pushd in popd, boste potrebovali tudi:

alias pushd 'pushd \!* && setprompt'
alias popd  'popd  \!* && setprompt'
       Nekatere lupine csh nimajo spremenljivke $cwd - namesto tega lahko
       uporabite `pwd`.
       e elite dobiti v va pozivnik le zadnjo komponento vaega
       trenutnega imenik (,,mail% `` namesto ,,/usr/spool/mail% ``),
       lahko uporabite

alias setprompt 'set prompt="$cwd:t% "'
       Pomen operatorjev && in || v nekaterih starejih lupinah csh je
       zamenjan. Poskusite:

false && echo napaka
       e izpie ,,napaka``, morate zamenjati && in || (in dobiti boljo
       razliico csh.)
     * Bourne Shell (sh):
       e imate novejo razliico Bournove ukazne lupine (SVR2 ali
       novejo), lahko uporabite za izdelavo svojega ukaza funkcijo
       lupine, denimo ,,xcd``:

xcd() { cd $* ; PS1="`pwd` $ "; }
       e imate starejo Bournovo ukazno lupino, je to zapleteno, a
       mogoe. Dodajte v vao datoteko .profile:

LOGIN_SHELL=$$ export LOGIN_SHELL
CMDFILE=/tmp/cd.$$ export CMDFILE
# 16 je SIGURG, izberite signal, ki se navadno ne uporablja
PROMPTSIG=16 export PROMPTSIG
trap '. $CMDFILE' $PROMPTSIG
       in potem postavite ta izvedljivi skript (brez zamikanja!), recimo
       mu ,,xcd`` nekam v vao pot (PATH).

: xcd directory - change directory and set prompt
: by signalling the login shell to read a command file
cat >${CMDFILE?"not set"} <<EOF
cd $1
PS1="\`pwd\`$ "
EOF
kill -${PROMPTSIG?"not set"} ${LOGIN_SHELL?"not set"}
       Zdaj spreminjajte imeniku z ukazom ,,xcd /nek/imenik``.
     * Korn Shell (ksh):
       Vstavite to v vao datoteko .profile:

PS1='$PWD $ '
       e elite le zadnjo komponento imenika, uporabite

PS1='${PWD##*/} $ '
     * T C shell (tcsh)
       Tcsh je popularna izboljana razliica csh z nekaterimi dodatnimi
       vgrajenimi spremenljivkami (in veliko drugih zmonosti):

%~          trenutni imenik, uporablja ~ za $HOME
%/          polna pot trenutnega imenika
%c ali %.   konna komponenta trenutnega imenika
       tako, da lahko preprosto ukaete

set prompt='%~ '
     * BASH (FSF-jeva ukazna lupina ,,Bourne Again SHell``)
       Simbol \w v $PS1 daje polno ime poti trenutnega imenika, z uporabo
       ~ za $HOME; \W daje osnovno ime (angl. basename) trenutnega
       imenika. Torej lahko poleg zgornjih reitev za sh in ksh uporabite
       tudi

PS1='\w $ '
       ali

PS1='\W $ '

3.5 Kako s skriptom ukazne lupine preberem znake s terminala?

Subject: How do I read characters from the terminal in a shell script?
Date: Thu Mar 18 17:16:55 EST 1993

   V sh, uporabite read. Navadno se uporabi podobna zanka:

while read vrstica
do
    echo $vrstica
    ...
done

   V csh uporabite $<, kot tukaj:

while ( 1 )
    set vrstica = "$<"
    if ( "$vrstica" == "" ) break
    ...
end

   al se v csh ne da razloevati med prazno vrstico in koncem datoteke.

   e uporabljate sh in bi radi prebrali en sam znak s terminala, lahko
   poskusite nekaj podobnega:

echo -n "Vstavite znak: "
stty cbreak         # ali  stty raw
beriznak=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
stty -cbreak

echo
echo "Hvala, da ste vtipkali $beriznak ."

3.6 Kako preimenujem *.foo v *.bar ali spremenim imena datotek v male rke?

Subject: How do I rename "*.foo" to "*.bar", or change file names to lowercase?
Date: Thu Mar 18 17:16:55 EST 1993

   Zakaj ne deluje ,,mv *.foo *.bar``? Premislite, kako ukazna lupina
   razvija jokerje (angl. wildcards). Niza ,,*.foo`` in ,*.bar`` se
   razvijeta, preden ukaz mv sploh vidi argumente. Odvisno od vae ukazne
   lupine lahko to spodleti na ve nainov. CSH izpie ,,No match.``, ker
   ne najde ,,*.bar``. SH izvede ,,mv a.foo b.foo c.foo *.bar``, kar bo
   uspelo le, e imate en sam imenik, ki ustreza ,,*.bar``, kar je zelo
   neverjetno in skoraj zagotovo ni tisto, kar ste imeli v mislih.

   Odvisno od vae ukazne lupine lahko to storite z zanko, v kateri
   poenete ,,mv`` na vsaki posamezni datoteki. e ima va sistem
   ,,basename``, lahko uporabite:
     * C Shell:

foreach f ( *.foo )
    set base=`basename $f .foo`
    mv $f $base.bar
end
     * Bourne Shell:

for f in *.foo; do
    base=`basename $f .foo`
    mv $f $base.bar
done

   Nekatere ukazne lupine poznajo posebne mehanizme za zamenjavo
   vrednosti spremenljivk (angl. variable substitution features), tako
   lahko namesto ukaza ,,basename`` uporabite vgrajene mehanizme, kot so:
     * C Shell:

foreach f ( *.foo )
    mv $f $f:r.bar
end
     * Korn Shell:

for f in *.foo; do
    mv $f ${f%foo}bar
done

   e nimate ukaza ,,basename`` ali bi eleli preimenovati foo.* v bar.*,
   lahko uporabite kar ,,sed`` ali podobno orodje, da predelate ime
   datoteke, a v splonem je ideja zanke enaka. S pripomokom ,,sed``
   lahko spremenite imena datotek v ukaze za mv in poljete ukaze za
   izvajanje lupini ,,sh``. Poskusite:

ls -d *.foo | sed -e 's/.*/mv & &/' -e 's/foo$/bar/' | sh

   Obstaja program Vladimirja Lanina, imenovan ,,mmv``, ki opravi
   preimenovanje datotek in je bil aprila 1990 objavljen v
   comp.sources.unix (Volume 21, issues 87 and 88). Omogoa vam uporabo
   na nain

mmv '*.foo' '=1.bar'

   V ukaznih lupinah zanke, podobne zgornjim, pomagajo pri zamenjavi imen
   datotek iz velikih rk v male ali obratno. Velike rke v imenih
   datotek prevedete v male takole:
     * C Shell:

foreach f ( * )
    mv $f `echo $f | tr '[A-Z]' '[a-z]'`
end
     * Bourne Shell:

for f in *; do
    mv $f `echo $f | tr '[A-Z]' '[a-z]'`
done
     * Korn Shell:

typeset -l l
for f in *; do
    l="$f"
    mv $f $l
done

   e elite biti posebno temeljiti in pravilno obravnavati datoteke z
   izrojenimi imeni (ki vkljuujejo presledke ali takoreko karkoli),
   boste morali uporabiti:
     * Bourne Shell:

for f in *; do
    g=`expr "xxx$f" : 'xxx\(.*\)' | tr '[A-Z]' '[a-z]'`
    mv "$f" "$g"
done
       Ukaz ,expr` vedno izpie ime datoteke, tudi, e je to enako ,-n`,
       ali, e vsebuje ubena zaporedja za System V, kakrno je ,\c`.
       Nekatere razliice ukaza ,,tr`` potrebujejo ,[` in ,]`, nekatere
       ju ne. V tem konkretnem primeru ju je povsem nekodljivo
       vkljuiti. Razliice ukaza tr, ki noejo ,,[]`` bodo primerno
       mislile, da bi morale preslikati ,[` v ,[` in ,]` v ,]`.
     * e imate nameen programski jezik ,,perl``, lahko ta skript
       Larryja Walla za preimenovanje datotek uporabite zelo koristno.
       Uporabljate ga lahko za irok spekter sprememb imen datotek.

#!/usr/bin/perl
#
# primeri uporabe skripta rename (avtor lwall):
#       rename 's/\.orig$//' *.orig
#       rename 'y/A-Z/a-z/ unless /^Make/' *
#       rename '$_ .= ".bad"' *.f
#       rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *

$op = shift;
for (@ARGV) {
    $was = $_;
    eval $op;
    die $@ if $@;
    rename($was,$_) unless $was eq $_;
}

3.7 Zakaj dobim ob ukazu ,,rsh gostitelj ukaz`` [kakno udno sporoilo o
napaki]?

Subject: Why do I get [some strange error message] when I "rsh host command" ?
Date: Thu Mar 18 17:16:55 EST 1993

   (Govorimo o programu za oddaljeno ukazno lupino ,,rsh``, ki se ponekod
   imenuje ,,remsh`` ali ,,remote``. Obstaja tudi ukazna lupina z
   omejitvami, imenovana ,,rsh``, kar pa je druga stvar.)

   e va oddaljeni raun uporablja C-jevsko ukazno lupino (csh), bo
   oddaljeni gostitelj pognal csh, da bi izvedel va ,ukaz`, in ukazna
   lupina bo prebrala vao oddaljeno datoteko .cshrc. Morda ta .cshrc
   vsebuje ,,stty``, ,,biff`` ali kaken drug ukaz, ki ni primeren za
   neinteraktivno ukazno lupino. Nepriakovan izhod ali sporoilo o
   napaki pri teh ukazih lahko zapleteta vao lupino rsh na udne naine.

   Tukaj je primer. Denimo, da imate v vai datoteki .cshrc tole:

stty erase ^H
biff y

   Dobili boste udna sporoila, kot je tole:

% rsh nek-stroj date
stty: : Can't assign requested address
Where are you?
Tue Oct  1 09:24:45 EST 1991

   Podobne napake lahko dobite, e izvajate doloena opravila pripomokov
   ,,at`` ali ,,cron``, ki prav tako bereta vao datoteko .cshrc.

   Na sreo je popravek preprost. Zelo verjetno je v vai datoteki
   ,,.cshrc`` na kupe operacij, ki jih preprosto ni vredno izvajati
   drugje kot v interaktivnih ukaznih lupinah (npr. ,,set history=N``).
   Tedaj jih postavite v pogojni blok v vai ,,.cshrc`` z

if ( $?prompt ) then
        operacije...
endif

   Ker v neinteraktivnih ukaznih lupinah spremenljivka ,,prompt`` ni
   nastavljena, bodo sporne operacije izvedene le v interaktivnih ukaznih
   lupinah.

   Morda boste eleli premakniti nekatere ukaze v va prijavni skript
   .login. e se morajo ti ukazi izvesti le ob vai prijavi na sistem
   (iskanje nove pote, neprebranih noviarskih sporoil in tako naprej),
   jih je bolje imeti v datoteki .login.

3.8 Kako naj {nastavim spremenljivko okolja, spremenim imenik} znotraj programa
ali skripta ukazne lupine in doseem, da bo to upotevala moja trenutna ukazna
lupina?

Subject: How do I ... and have that change affect my current shell?
Date: Thu Mar 18 17:16:55 EST 1993

   V splonem tega ne morete storiti, vsaj ne brez posebnih priprav. Ko
   nek proces ustvari svoj podproces, ta podeduje kopijo spremenljivk
   svojega oeta (vkljuno s trenutnim imenikom). Otrok lahko spremeni
   podedovane vrednosti, kolikor hoe, vendar te spremembe ne bodo
   prizadele starevskega okolja, saj otrok spreminja le svojo kopijo
   originalnih podatkov.

   Mone so nekatere posebne priprave. Va otroki proces lahko izpie
   spremenjene spremenljivke, e je oe vnaprej pripravljen prebrati ta
   izhod in ga razumeti tako, da ustrezno nastavi svoje lastne
   spremenljivke.

   Ukazne lupine lahko izvajajo skripte tudi v okolju osnovnega procesa,
   namesto v okolju podprocesa, in tedaj bodo spremembe prizadele tudi
   osnovno ukazno lupino.

   Na primer, e je vaemu skriptu za csh ime ,,mojskript`` in ta
   vsebuje:

cd /zelo/dolga/pot setenv PATH /nekaj:/nekaj-drugega

   ali e imate podoben skript za Bournovo ali Kornovo ukazno lupino

cd /zelo/dolga/pot PATH=/nekaj:/nekaj-drugega export PATH

   in poskuate pognati ,,mojskript`` v vai ukazni lupini, se bo vaa
   ukazna lupina razvejila in pognala lupinski skript kot svoj podproces,
   v katerem bo izvedla ukaz ,,cd``. Ta bo spremenil svoj trenutni
   imenik, in z ukazom ,,setenv`` spremenil svoje okolje, vendar nobeden
   od ukazov ne bo vplival na trenutni imenik ukazne lupine, v katerem
   tipkate (vae prijavne ukazne lupine, denimo).

   e elite prepriati vao prijavno ukazno lupino, da poene skript v
   trenutnem procesu (brez razvejevanja), morate uporabiti ukaz ,,.`` (za
   Bournovo ali Kornovo lupino) ali ukaz ,,source`` (za lupino C). Se
   pravi, v Bournovih ali Kornovih ukaznih lupinah napiete

. mojaskripta

   v lupini C pa

source myscript

   e je vse, kar poskuate storiti, le sprememba imenika ali nastavitev
   spremenljivke okolja, bo verjetno najlaje, da uporabite vzdevek
   (angl. alias) v lupini C ali funkcijo v Bournovi/Kornovi ukazni
   lupini. Glejte razdelek ,,Kako lahko dobim trenutni imenik v moj
   pozivnik?`` za nekaj primerov.

   Veliko bolj podroben odgovor je pripravil Thomas Michanek
   <xtm@telelogic.se>. Dobite ga lahko po FTP-ju z naslova
   ftp://ftp.wg.omron.co.jp/pub/unix-faq/docs/script-vs-env.

3.9 Kako lahko v csh loeno preusmerim stdout in stderr?

Subject: How do I redirect stdout and stderr separately in csh?
From: msb@sq.com (Mark Brader)
Date: Mon, 26 Oct 1992 20:15:00 -0500

   V csh lahko preusmerite stdout z ,,>`` ter hkrati stdout in stderr z
   ,,>&``, a ni neposrednega naina le za preusmeritev stderr. Najbolje,
   kar lahko naredite, je

( ukaz >datoteka_za_stdout ) >&datoteka_za_stderr

   ki poene ,,ukaz`` v ukazni podlupini; stdout se preusmeri znotraj
   podlupine v datoteko ,,datoteka_za_stdout``, stdout in stderr
   podlupine pa se skupaj preusmerita v datoteko ,,datoteka_za_stderr``,
   toda na tej toki je stdout e preusmerjen, tako da v datoteki
   ,,datoteka_za_stderr`` kona pravzaprav le stderr.

   e elite le prepreiti preusmeritev stdout, tedaj to za vas stori sh:

sh -c 'ukaz 2>datoteka_za_stderr'

3.10 Kako znotraj .cshrc ugotovim, ali sem prijavna ukazna lupina?

Subject: How do I tell inside .cshrc if I'm a login shell?
Date: Thu Mar 18 17:16:55 EST 1993

   Ko ljudje govorijo tako, pravzaprav s tem mislijo nekaj od
   naslednjega:
     * Kako lahko ugotovim, ali gre za interaktivno ukazno lupino? ali pa
     * Kako lahko ugotovim, ali gre za najvije nivojsko ukazno lupino?

   Morda lahko ugotovite, ali je vaa ukazna lupina resnino prijavna
   lupina (se pravi, bo prebrala ,,.login`` potem, ko bo opravila z
   ,,.cshrc``) tako, da zapravljate as s ,,ps`` in ,,$$``. Prijavne
   lupine imajo v splonem imena, ki se zanejo s ,-`. e vas v resnici
   zanimata drugi dve vpraanji, je tukaj nain organizacije vae
   datoteke .cshrc, da to izveste.
     _________________________________________________________________

if (! $?CSHLEVEL) then
        #
        # To je "najvijenivojska" ukazna lupina,
        # morda prijavna lupina, morda lupina, pognana z
        # 'rsh stroj nek-ukaz'
        # Tukaj moramo nastaviti pot PATH in vse drugo,
        # kar elimo imeti v vsaki od naih ukaznih lupin.
        #
        setenv      CSHLEVEL        0
        set home = ~username        # za vsak sluaj
        source ~/.env               # nastavimo okolje
else
        #
        # Ta lupina je otrok ene od drugih ukaznih lupin, zato
        # nam ni treba ponovno nastaviti vseh spremenljivk okolja.
        #
        set tmp = $CSHLEVEL
        @ tmp++
        setenv      CSHLEVEL        $tmp
endif

# Izhod iz .cshrc, e ni interaktivna, npr. pod rsh.
if (! $?prompt) exit

# Tukaj smemo nastaviti pozivnik ali vzdevke, ki bi bili
# uporabni le za interaktivne ukazne lupine.

source ~/.aliases
     _________________________________________________________________

3.11 Kako v lupini naredim ujemalni vzorec, ki se ujema z vsemi datotekami,
razen z ,,.`` in ,,..``?

Subject: How do I construct a ... matches all files except "." and ".." ?
Date: Thu Mar 18 17:16:55 EST 1993

   In vi ste mislili, da bo to preprosto ...

   *
          Ustreza vsem datotekam, ki se ne zaenjajo z ,,.``;

   .*
          Ustreza vsem datotekam, ki se zaenjajo z ,,.``, toda to
          vkljuuje posebna vnosa ,,.`` in ,,..``, ki ju pogosto ne
          elite;

   .[!.]*
          (Le noveje ukazne lupine; nekatere lupine uporabljajo ,,^``
          namesto ,,!``; ukazne lupine POSIX-a morajo sprejeti ,,!``, a
          lahko sprejmejo tudi ,,^``; prenosljive aplikacije ne bi smele
          uporabljati necitiranega ,,^`` takoj za ,,[``.)

          Ustreza vsem datotekam, ki se zanejo z ,,.`` in jim sledi
          ne-,,.``; al bo to spregledalo ,,..foo``;

   .??*
          Ustreza datotekam, ki se zanejo z ,,.`` in so dolge vsaj tri
          znake. To se prikupno izogne ,,.`` in ,,..``, a tudi spregleda
          ,,.a``.

   e elite varno ujemanje z vsemi datotekami, razen ,,.`` in ,,..``,
   morate uporabiti 3 vzorce (e nimate imen datotek, kot je ,,.a``,
   lahko izpustite prvega):

.[!.]* .??* *

   Alternativno lahko zaposlite zunanji program ali dva in uporabite
   substitucijo znotraj narekovaja (angl. backquote substitution). To
   (ali ,ls -A` na nekaterih razliicah Unixa) je precej dobro:

`ls -a | sed -e '/^\.$/d' -e '/^\.\.$/d'`

   a tudi to bo zamoilo pri datotekah z znaki za novo vrsto, znaki IFS
   ali jokerjih v njihovih imenih.

   V ksh lahko uporabite:

.!(.|) *

3.12 Kako poiem zadnji argument v skriptu Bournove ukazne lupine?

Subject: How do I find the last argument in a Bourne shell script?
Date: Thu Mar 18 17:16:55 EST 1993

   Odgovor sta prispevala:
     * Martin Weitzel <@mikros.systemware.de:martin@mwtech.uucp>
     * Maarten Litmaath <maart@nat.vu.nl>

   e ste prepriani, da argumentov ni ve kot devet, potem lahko
   uporabite:

eval zadnji=\${$#}

   V ukaznih lupinah, zdruljivih s standardom POSIX, to deluje za vsako
   tevilo argumentov. Vselej deluje tudi:

for zadnji
do
        :
done

   Primer se posploi takole:

for i
do
        predpredzadnji=$predzadnji
        predzadnji=$zadnji
        zadnji=$i
done

   Zdaj pa denimo, da elite odstraniti zadnji argument iz seznama ali
   obrniti seznam argumentov ali za vsak N dostopati neposredno do N-tega
   argumenta. Tukaj navajamo osnovni primer, kako to storiti, in
   uporabimo le vgrajene konstrukte ukazne lupine, ne da bi ustvarjali
   dodatne podprocese:

t0= u0= ostanek='1 2 3 4 5 6 7 8 9' argv=

for h in '' $ostanek
do
        for t in "$t0" $ostanek
        do
                for u in $u0 $ostanek
                do
                        case $# in
                        0)
                                break 3
                        esac
                        eval argv$h$t$u=\$1
                        argv="$argv \"\$argv$h$t$u\""   # (1)
                        shift
                done
                u0=0
        done
        t0=0
done

# zdaj obnovimo argumente
eval set x "$argv"                                      # (2)
shift

   Ta primer deluje za prvih 999 argumentov. Dovolj? Dobro poglejte
   vrstici, oznaeni z (1) in (2) in se prepriajte, da se originalni
   argumenti res obnovijo, ne glede na to, katere udne znake vsebujejo!

   N-ti argument lahko zdaj poiete takole:

eval argN=\$argv$N

   e elite obrniti argumente, morate spremeniti vrstico, oznaeno z
   (1),

argv="\"\$argv$h$t$u\" $argv"

   Kako odstranite zadnji argument, vam prepuamo za nalogo.

   e dovoljujete tudi podprocese, ki morda izvajajo nevgrajene ukaze,
   lahko spremenljivke ,argvN` doloite preprosteje:

N=1

for i
do
        eval argv$N=\$i
        N=`expr $N + 1`
done

   Za obraanje argumentov obstaja e preprosteja metoda, ki niti ne
   ustvarja podprocesov. Ta pristop lahko uporabite tudi, ko elite
   pobrisati npr. zadnji argument, a v tem primeru se ne morete ve
   sklicevati neposredno na N-ti argument, saj so spremenljivke ,argvN`
   nastavljene v obratnem vrstnem redu:

argv=

for i
do
        eval argv$#=\$i
        argv="\"\$argv$#\" $argv"
        shift
done

eval set x "$argv"
shift

3.13 Kaj je narobe, e imam ,.` v svoji poti $PATH?

Subject: What's wrong with having '.' in your $PATH ?
Date: Thu Mar 18 17:16:55 EST 1993

   Malce ozadja: spremenljivka okolja PATH je seznam imenikov, loenih z
   dvopiji. Ko vpiete ukaz brez jasno doloene poti (npr. napiete
   ,,ls`` in ne ,,/bin/ls``), vaa ukazna lupina ie izvedljivo datoteko
   s tem imenom po vseh imenikih, natetih v seznamu PATH, lepo po vrsti,
   in izvede prvi program, ki ga najde.

   Eden od imenikov v seznamu PATH je lahko tudi trenutni imenik ,,.``.
   Kot znak za trenutni imenik v seznamu PATH lahko uporabite tudi prazni
   imenik. Ta dva naina oznaevanja sta ekvivalentna:
     * za uporabnike csh:

setenv PATH :/usr/ucb:/bin:/usr/bin
setenv PATH .:/usr/ucb:/bin:/usr/bin
     * za uporabnike sh ali ksh:

PATH=:/usr/ucb:/bin:/usr/bin export PATH
PATH=.:/usr/ucb:/bin:/usr/bin export PATH

   Posestvovanje ,,.`` nekje v PATH je udobno - za poganjanje programov v
   trenutnem imeniku lahko namesto ,,./a.out`` napiete ,,a.out``. A
   obstaja kavelj.

   Premislite, kaj se zgodi v primeru, da je ,,.`` prvi vnos v seznamu
   PATH. Denimo, da je va trenutni imenik javno dostopen za pisanje, na
   primer ,,/tmp``. e je tam sluajno program, imenovan ,,/tmp/ls``, ki
   ga je tam pustil kak drug uporabnik, ter vi napiete ,,ls`` (namesto,
   da bi, seveda, pognali obiajen program ,,/bin/ls``), bo vaa ukazna
   lupina pognala ,,./ls``, program tistega drugega uporabnika. Odve je
   napisati, da vas lahko poganjanje neznanega programa, kot je ta,
   nadvse preseneti.

   Bolje je postaviti oznako za trenutni imenik ,,.`` na konec PATH:

setenv PATH /usr/ucb:/bin:/usr/bin:.

   e ste zdaj v imeniku /tmp in napiete ,,ls``, bo ukazna lupina
   najprej preiskala /usr/ucb, /bin in /usr/bin za program, imenovan
   ,,ls``, preden bo pogledala v ,,.``, kar daje manj monosti, da bi
   nehote pognali program ,,ls`` drugega uporabnika. Tudi to ni povsem
   varno - e ste neroden strojepisec in nekega dne napiete ,,sl -l``
   namesto ,,ls -l``, tvegate, da boste pognali ,,./sl``, e ta obstaja.
   Kak ,,bister`` programer lahko rauna na pogoste tipkarske napake in
   pua programe s takimi imeni raztrosene po javnih imenikih. Pazite!

   Veliko izkuenih uporabnikov Unixa shaja povsem dobro, ne da bi sploh
   imeli ,,.`` vkljuen v PATH:

setenv PATH /usr/ucb:/bin:/usr/bin

   e naredite to, boste morali za zagon programov vselej pisati
   ,,./program`` namesto program, a poveanje varnosti je verjetno vredno
   tega truda.

3.14 Kako lahko iz skripta ukazne lupine zapiskam na terminalu?

Subject: How do I ring the terminal bell during a shell script?
From: uwe@mpi-sb.mpg.de (Uwe Waldmann)
Date: Fri, 30 Apr 93 16:33:00 +0200

   Odgovor je odvisen od razliice vaega Unixa (ali raje od vrste
   programa ,,echo``, ki je na voljo na vaem stroju).

   BSD-jevski ,,echo`` uporablja izbiro ,,-n`` za prepreitev izpisa
   konnega znaka za konec vrstice (angl. final newline) in ne razume
   osmikega zapisa \nnn. Ukaz se torej glasi

echo -n '^G'

   kjer ^G pomeni dobesedni znak BEL (vstavite ga lahko v Emacsu s
   kombinacijo ,,Ctrl-Q Ctrl-G`` ali v vi z uporabo ,,Ctrl-V Ctrl-G``).

   Na Unixih SysV ukaz ,,echo`` razume zapis \nnn in uporablja \c za
   prepreitev izpisa konnega znaka za konec vrstice, torej je odgovor:

echo '\007\c'

3.15 Zakaj ne morem uporabiti programa ,,talk`` za pogovor s prijateljem na
stroju X?

Subject: Why can't I use "talk" to talk with my friend on machine X?
From: tmatimar@isgtec.com (Ted Timar)
Date: Thu Mar 18 17:16:55 EST 1993

   Unix ima tri razirjene programe ,,talk`` in nobeden od njih se ne zna
   pogovoriti z ostalima. ,,Stari`` talk vkljuuje prva dva tipa. Ta
   razliica (pogosto imenovana otalk) pri pogovoru med stroji ni
   upotevala vrstnega reda bytov. Zaradi tega se razliica otalk za Vax
   ni mogla pogovarjati z razliico otalk za Sun. Te razliice talk-a
   uporabljajo vrata 517.

   Okoli leta 1987 se je veina proizvajalcev (razen Suna, ki je
   potreboval est let ve od svojih tekmecev) dogovorila o standardu za
   novi program talk (pogosto imenovan ntalk), ki ve za omreni vrstni
   red bytov. Ta talk deluje med vsemi stroji, ki ga podpirajo. Ta
   razliica talk-a uporablja vrata 518.

   Dandanes obstaja nekaj programov talk, ki hkrati govorijo ntalk in eno
   od razliic otalk. Najbolj znan med njimi se imenuje ,,ytalk``.

3.16 Zakaj da koledar napaen izpis?

Subject: Why does calendar produce the wrong output?
From: tmatimar@isgtec.com (Ted Timar)
Date: Thu Sep  8 09:45:46 EDT 1994

   Pogosto ljudje ugotovijo, da izhod Unixovega koledarskega programa
   ,,cal`` ne ustreza njihovim priakovanjem.

   Koledar za september 1752 je zelo uden:

   September 1752
 S  M Tu  W Th  F  S
       1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

   To je mesec, v katerem so ZDA (pravzaprav celoten Britanski Imperij)
   zamenjale julijanski koledar z gregorijanskim.

   Drug pogost problem, ki ga imajo ljudje s koledarskim programom, je,
   da mu podajajo argumente kot je ,,cal 9 94``. To izpie koledar za
   september leta 94, ne pa leta 1994.
     _________________________________________________________________


4. Vmesna vpraanja

4.1 Kako lahko ugotovim as, ko je bila datoteka ustvarjena?

Date: Thu Mar 18 17:16:55 EST 1993

   Ne morete ga - nikjer se ne shrani. Datoteke imajo podatke o asu
   zadnje spremembe (pokae ga ,,ls -l``), asu zadnjega dostopa (pokae
   ga ,, ls -lu``) in asu zadnje spremembe inode (pokae ga ,,ls -lc``).
   Zadnji se pogosto imenuje ,,as ustvarjenja`` - celo v nekaterih
   straneh referennega prironika (za man) - a to je narobe; spremeni se
   tudi z operacijami kot so mv, ln, chmod, chown in chgrp.

   Pojasnila so dostopna v poglavju referennega prironika o stat(2).

4.2 Kako lahko uporabim rsh, ne da bi rsh poakal konec oddaljenega ukaza?

Subject: How do I use "rsh" without having the rsh hang around ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   (Glejte odgovor na vpraanje ,,Zakaj dobim ob ukazu rsh gostitelj ukaz
   {kakno udno sporoilo o napaki}?``, o katerem ,,rsh`` govorimo.)

   Oitni odgovori odpovejo:

rsh stroj ukaz &

   ali

rsh stroj 'ukaz &'

   Na primer, poskusite narediti

rsh stroj 'sleep 60 &'

   in videli boste, da rsh ne bo takoj vrnil ukazne vrstice. Poakal bo
   60 sekund, dokler se ne bo oddaljeni ukaz ,,sleep`` izvedel do konca,
   eprav se ukaz na oddaljenem stroju poene v ozadju. Kako torej
   pripravite rsh do tega, da kona z delom takoj, ko zane tei sleep?

   Reitev - e uporabljate na oddaljenem stroju csh:

rsh machine -n 'command >&/dev/null </dev/null &'

   e na oddaljenem stroju uporabljate sh:

rsh machine -n 'command >/dev/null 2>&1 </dev/null &'

   Zakaj? ,,-n`` povee standardni vhod ukaza rsh na /dev/null, torej
   lahko poenete celotni ukaz rsh v ozadju na lokalnem stroju. Torej ima
   ,,-n`` ekvivalenten pomen, kot da bi e enkrat doloili ,,<
   /dev/null``. e ve, preusmeritve vhoda in izhoda na oddaljenem stroju
   (znotraj enojnih narekovajev) zagotavljajo, da rsh misli, da se seja
   lahko prekine (ker ni ve toka podatkov).

   Opomba: Datoteko, na katero ali s katere preusmerjate na oddaljenem
   raunalniku ni nujno /dev/null; katerakoli datoteka bo v redu.

   V veliko primerih razlini deli tega zapletenega ukaza niso potrebni.

4.3 Kako lahko skrajam datoteko?

Subject: How do I truncate a file?
Date: Mon, 27 Mar 1995 18:09:10 -0500

   Funkcija BSD-ja ftruncate() nastavi dolino datoteke. (Toda vse
   razliice se ne obnaajo enako.) Kae, da tudi druge razliice Unixa
   podpirajo neke vrste krajanje.

   Obstajajo tri znana obnaanja funkcije ftruncate v sistemih, ki jo
   podpirajo:
     * BSD 4.2
          + Ultrix, SGI, LynxOS
          + krajanje ne povea datoteke
          + krajanje ne premika datotenega kazalca
     * BSD 4.3
          + SunOS, Solaris, OSF/1, HP/UX, Amiga
          + krajanje lahko povea datoteko
          + krajanje ne premika datotenega kazalca
     * Cray
          + UniCOS 7, UniCOS 8
          + krajanje ne povea datoteke
          + krajanje spremeni datoteni kazalec

   Ostali sistemi pridejo v tirih monostih:
     * F_CHSIZE
          + le SCO
          + nekateri sistemi definirajo izraz F_CHSIZE, a ga ne podpirajo
          + obnaa se kot BSD 4.3
     * F_FREESP
          + le Interative Unix
          + nekateri sistemi (npr. Interative Unix) definirajo izraz
            F_FREESP, a ga ne podpirajo
          + obnaa se kot BSD 4.3
     * chsize()
          + QNX in SCO
          + nekateri sistemi (npr. Interative Unix) imajo funkcijo
            chsize(), a je ne podpirajo
          + obnaa se kot BSD 4.3
     * ni
          + ni znanih sistemov
          + tukaj bodo sistemi, ki sploh ne podpirajo truncate

   Moderatorjevo sporoilo: Spodnje funkcije sem posnel nekaj let nazaj.
   Ne morem ve ugotoviti prvotnega pisca. S. Spencer Sun
   <spencer@ncd.com> je tudi prispeval verzijo za F_FREESP.

   Sledijo funkcije za neavtohtono funkcijo ftruncate.
     _________________________________________________________________

/* Emulacije ftruncate(), ki delujejo na nekaterih Systemih V.
   Ta datoteka je v javni lasti. */

#include
#include

#ifdef F_CHSIZE

int
ftruncate (fd, length)
     int fd;
     off_t length;
{
  return fcntl (fd, F_CHSIZE, length);
}
#else
#ifdef F_FREESP
/* Naslednjo funkcijo je napisal
   kucharsk@Solbourne.com (William Kucharski) */

#include
#include
#include

int
ftruncate (fd, length)
     int fd;
     off_t length;
{
  struct flock fl;
  struct stat filebuf;

  if (fstat (fd, &filebuf) < 0)
    return -1;

  if (filebuf.st_size < length)
    {
      /* Extend file length. */
      if (lseek (fd, (length - 1), SEEK_SET) < 0)
        return -1;

      /* Write a "0" byte. */
      if (write (fd, "", 1) != 1)
        return -1;
    }
  else
    {
      /* Truncate length. */
      fl.l_whence = 0;
      fl.l_len = 0;
      fl.l_start = length;
      fl.l_type = F_WRLCK;      /* Zapii kljuavnico na prostor datoteke. */

      /* To se zanaa na NEDOKUMENTIRAN argument F_FREESP funkcije
         fcntl, ki skraja datoteko tako, da se kona na poloaju,
         ki ga doloa fl.l_start.
         Se manja udesa nikoli ne bodo konala? */
      if (fcntl (fd, F_FREESP, &fl) < 0)
        return -1;
    }

  return 0;
}
#else
int
ftruncate (fd, length)
     int fd;
     off_t length;
{
  return chsize (fd, length);
}
#endif
#endif
     _________________________________________________________________

4.4 Zakaj simbol ,,{}`` ukaza find ne naredi to, kar elim?

Subject: Why doesn't find's "{}" symbol do what I want?
Date: Thu Mar 18 17:16:55 EST 1993

   Ukaz find ima izbiro -exec, ki izvede podani ukaz na vseh izbranih
   datotekah. Ukaz find zamenja vse nize ,,{}``, ki jih vidi v ukazni
   vrstici, z imenom datoteke, ki jo trenutno obdeluje.

   Tako lahko lepega dne poskusiti uporabiti find, da bi pognali ukaz na
   vsaki datoteki, imenik po imenik. Poskusite lahko tole:

find /pot -type d -exec ukaz {}/\* \;

   upajo, da bo find izvajal ukaze takole:

ukaz imenik1/*
ukaz imenik2/*
...

   al find razvije simbol ,,{}`` le, ko nastopa sam. Vse drugo, kot na
   primer ,,{}/*`` bo find pustil pri miru, torej bo namesto elenega
   dejanja izvedel

ukaz {}/*
ukaz {}/*
...

   enkrat za vsak imenik. To je lahko hro, lahko je odlika, a shajati
   moramo s takim vedenjem.

   Kako se mu izognemo? En nain je s trivialnim kratkim skriptom v
   ukazni lupini, denimo ,,./naredi``, ki vsebuje le

ukaz "$1"/*

   Potem lahko uporabljate

find /pot -type d -exec ./naredi {} \;

   Ali, e se elite izogniti skriptu ,,./naredi``, lahko uporabite

find /pot -type d -exec sh -c 'ukaz $0/*' {} \;

   (To deluje, ker se znotraj ,ukaza` ,,sh -c 'ukaz' A B C ...``, $0
   razvije v A, $1 v B, in tako naprej.)

   Ali pa uporabite trik sestavljanja ukaza s pripomokom sed:

find /pot -type d -print | sed 's:.*:ukaz &/*:' | sh

   e na vsak nain elite zmanjati tevilo klicev ukaza ,,ukaz``, lahko
   pogledate, e ima va sistem ukaz xargs. Ukaz xargs prebere argumente
   po vrsticah s standardnega vhoda in jih zbere, kolikor le lahko, v eno
   samo ukazno vrstico. Uporabite lahko torej

find /pot -print | xargs ukaz

   kar bo pognalo enkrat ali vekrat

ukaz datoteka1 datoteka2 datoteka3 imenik1/datoteka1 imenik1/datoteka2

   al to ni popolnoma robustna ali varna reitev. Xargs priakuje, da se
   vhodne vrstice konajo z znakom za novo vrsto (angl. newline), zato se
   bo zmedel ob datotekah, poimenovanih s udnimi znaki, kakrni so znaki
   za novo vrsto.

4.5 Kako lahko zaitim simboline povezave?

Subject: How do I set the permissions on a symbolic link?
Date: Thu Mar 18 17:16:55 EST 1993

   Zaite (angl. permissions, dovolilnice tipa -rw-r--r-) pri
   simbolinih povezavah pravzaprav ne pomenijo niesar. Edina
   dovoljenja, ki tejejo, so zaite datotek, na katere kaejo povezave.

4.6 Kako lahko ,,obnovim`` pobrisano datoteko?

Subject: How do I "undelete" a file?
Date: Thu Mar 18 17:16:55 EST 1993

   Neko boste po pomoti napisali nekaj kot ,,rm * .foo`` in ugotovili,
   da ste pravkar pobrisali ,,*`` namesto ,,*.foo``. Mislite si, da je to
   obred minljivosti.

   Seveda bi moral vsak spodoben upravitelj sistema redno delati
   varnostne kopije. Preverite pri svojem upravitelju, e je na voljo
   nedavna varnostna kopija vae datoteke. e te ni, berite naprej.

   Pri vseh okoliinah ko enkrat pobriete datoteko z ukazom ,,rm``, te
   ni ve. Ko na datoteki uporabite ukaz ,,rm``, sistem popolnoma pozabi,
   kateri bloki, razsejani po disku, so bili del vae datoteke. e huje -
   bloki pravkar pobrisane datoteke bodo prvi uporabljeni in prepisani,
   ko bo sistem potreboval ve diskovnega prostora. Vendar nikoli ne
   recite nikoli. Teoretino je mogoe vrniti delke podatkov, e takoj
   po ukazu rm zaustavite sistem (angl. shut down). A tedaj raje imejte
   pri roki zelo arovniki tip osebe, ki ima na voljo dolge ure ali
   dneve, da vam obnovi pobrisano.

   Ko po pomoti pobriete datoteko z rm, bo prvi nasvet, da naredite
   vzdevek v ukazni lupini ali pa proceduro, ki bo spremenila ukaz ,,rm``
   tako, da boste datoteko namesto pobrisali, raje prestavili v ko za
   smeti. Tako lahko datoteke obnovite, e napravite napako, a morate
   obasno prazniti ko za smeti. Dve opombi: prvi, splono mnenje je,
   da je to slaba ideja. Na novo lastnost ukaza se boste vselej zanaali
   in ko se boste znali na obiajnem sistemu, kjer ukaz ,,rm`` zares
   izvede ,,rm``, boste prili v teave. Drugi, verjetno boste
   ugotovili, da je ob vsej zmenjavi z diskovnim prostorom in asom,
   porabljenim za vzdrevanje koa za smeti, vseeno laje malo bolj
   paziti pri uporabi ukaza ,,rm``. Za zaetnike zadoa, da si v vaem
   prironiku ogledate izbiro ,,-i`` ukaza ,,rm``.

   e ste e vedno pogumni, potem je tukaj moen preprost odgovor.
   Naredite si ukaz ,,can``, ki bo premikal datoteke v imenik-smetnjak
   trashcan. V csh(1) lahko postavite naslednje ukaze v datoteko
   ,,.login`` v vaem domaem imeniku:

alias can       'mv \!* ~/.trashcan'       # vrzi datoteko/e v ko
alias mtcan     'rm -f ~/.trashcan/*'      # nepovratno izprazni ko
if ( ! -d ~/.trashcan ) mkdir ~/.trashcan  # zagotovi obstoj koa

   Morda boste tudi eleli postaviti:

rm -f ~/.trashcan/*

   v datoteko ,,.logout`` v vaem domaem imeniku, da boste samodejno
   izpraznili ko vselej, ko se odjavite. (Razliici za ukazni lupini sh
   in ksh sta prepueni bralcu kot vaja.)

   Pri projektu Athena na MIT-u je nastal obseen paket za
   brisanje/vrnitev/izbris/ienje, ki lahko slui kot popolno
   nadomestilo za rm, vendar dopua obnovitev datotek. Ta paket je bil
   objavljen v comp.sources.misc (volume 17, issue 023-026)

4.7 Kako lahko proces ugotovi, ali tee v ozadju?

Subject: How can a process detect if it's running in the background?
Date: Thu Mar 18 17:16:55 EST 1993

   Najprej razistimo: elite vedeti, ali teete v ozadju ali elite
   vedeti, ali teete interaktivno? e se odloate, ali boste izpisovali
   pozivnik in podobno, je to verjetno bolji kriterij. Poglejte, e je
   standardni vhod terminal:

sh:  if [ -t 0 ]; then ... fi
C:  if(isatty(0)) { ... }

   V splonem ne morete preveriti, ali teete v ozadju. Osnovni problem
   je, da imajo razline ukazne lupine in razline razliice Unixa
   razline predstave o tem, kaj pomenita ,,ospredje`` in ,,ozadje`` - in
   na najbolj pogostem tipu sistema z dobro razienima pojmoma se lahko
   programi poljubno premikajo med ospredjem in ozadjem!

   Sistemi Unix brez nadzora opravil tipino postavijo proces v ozadje
   tako, da ignorirajo SIGINT in SIGQUIT ter preusmerijo standardni vhod
   na ,,/dev/null``; to naredi ukazna lupina.

   Ukazne lupine, ki podpirajo nadzor opravil (angl. job control), na
   sistemih Unix, ki podpirajo nadzor opravil, postavijo proces v ozadje
   tako, da mu priredijo identifikacijsko tevilko ID razlino od skupine
   procesov, ki pripadajo terminalu. V ospredje ga premaknejo tako, da
   popravijo skupinsko procesno tevilko terminala (angl. terminal's
   process group ID) s procesno tevilko. Ukazne lupine, ki ne podpirajo
   nadzora opravil, na sistemih Unix, ki podpirajo nadzor opravil,
   tipino naredijo isto kot ukazne lupine na sistemih, ki ne podpirajo
   nadzora opravil.

4.8 Zakaj preusmerjanje v zanki ne dela, kot bi moralo? (Bournova lupina)

Subject: Why doesn't redirecting a loop work as intended?  (Bourne shell)
Date: Thu Mar 18 17:16:55 EST 1993

   Oglejte si naslednji primer:

foo=bar

while read line
do
        # naredi nekaj z $line
        foo=bletch
done < /etc/passwd

echo "foo je zdaj: $foo"

   Kljub prireditvi ,,foo=bletch`` bo to izpisalo ,,foo je zdaj: bar`` v
   mnogih izvedbah Bournove ukazne lupine. Zakaj? Zaradi naslednje,
   pogosto nedokumentirane lastnosti zgodovinskih Bournovih ukaznih
   lupin: preusmerjanje kontrolne strukture (kot je zanka ali stavek
   ,,if``) naredi ukazno podlupino, v kateri se struktura izvede;
   spremenljivke, nastavljene v podlupini (kot priredba ,,foo=bletch``),
   seveda ne vplivajo na trenutno lupino.

   Odbor za standardizacijo ukaznih lupin in vmesnika orodij POSIX 1003.2
   prepoveduje zgornje neutemeljeno ravnanje, se pravi, na sistemu,
   usklajenemu s P1003.2, v Bournovih ukaznih lupinah zgornji primer
   izpie ,,foo je zdaj: bletch``.

   V zgodovinskih (in s P1003.2 usklajenih) izvedbah uporabite naslednji
   trik, da se izognete teavam s preusmerjanjem:

foo=bar

# datoteni deskriptor 9 naj postane duplikat datotenega deskriptorja 0 (stdin
);
# potem povei stdin s /etc/passwd; originalni stdin smo si zdaj
# ,zapomnili` v datotenem deskriptorju 9; glej dup(2) in sh(1)
exec 9<&0 < /etc/passwd

while read line
do
        # naredi nekaj z $line
        foo=bletch
done

# naj bo stdin duplikat datotenega deskriptorja 9, se pravi,
# spet ga poveemo z originalnim stdin; zatem zapremo deskriptor 9
exec 0<&9 9<&-

echo "foo je zdaj: $foo"

   To bi moralo vselej izpisati ,,foo je zdaj; bletch``. Prav, vzemite
   naslednji primer:

foo=bar

echo bletch | read foo

echo "foo je zdaj: $foo"

   To bo izpisalo ,,foo je zdaj: bar`` v veliko izvedbah in ,,foo je
   zdaj: bletch`` v nekaterih drugih. Zakaj? V splonem se vsak del
   cevovoda izvede v drugi ukazni podlupini; v nekaterih izvedbah pa je
   zadnji ukaz v cevovodu izjema: e je to vgrajeni ukaz, kakren je
   ,,read``, ga bo izvedla trenutna lupina, sicer pa bo izveden v
   podlupini.

   POSIX 1003.2 dovoljuje oba naina, zaradi esar se prenosljivi skripti
   ne morejo zanaati na nobenega od njiju.

4.9 Kako poenem passwd, ftp, telnet, tip in druge interaktivne programe v
skriptu ukazne lupine v ozadju?

Subject: How do I run ... interactive programs from a shell script ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   Ti programi priakujejo terminalski vmesnik. Ukazne lupine jim ga
   posebej ne priskrbijo. Torej, ti programi ne morejo biti
   avtomatizirani v skriptih ukaznih lupin.

   Program ,,expect`` poskrbi za programabilen terminalski vmesnik za
   avtomatsko interakcijo s takimi programi. Naslednji skript za expect
   je primer neinteraktivne razliice ukaza passwd(1).

# uporabniko ime je dano kot 1. argument, geslo kot 2.
set geslo [index $argv 2]
spawn passwd [index $argv 1]
expect "*password:"
send "$geslo\r"
expect "*password:"
send "$geslo\r"
expect eof

   Program expect lahko delno avtomatizira interakcijo, kar je posebej
   uporabno za telnet, rlogin, razhroevalnike in druge programe, ki
   nimajo vgrajenega ukaznega jezika. Distribucija priskrbi tudi poskusni
   skript za nenehen zagon igre rogue, dokler se ne pojavi dobra zaetna
   postavitev. Potem se nadzor vrne uporabniku, ki lahko uiva v igri.

   Na sreo so bili napisani nekateri programi za obdelavo povezave na
   terminalu pseudo-tty, tako da lahko poganjate te vrste programov v
   skriptu.

   Program expect dobite tako, da poljete ,,send
   pub/expect/expect.shar.Z`` na naslov library@cme.nist.gov ali
   uporabite anonimni FTP za prenos imenovane datoteke s strenika
   ftp.cme.nist.gov.

   e ena monost reitve je z uporabo programa pty 4.0, ki deluje kot
   program pod sejo psevdo-tty, in ga dobite na comp.sources.unix, volume
   25. Postopek, ki to naredi prek pty z uporabo poimenovanih cevi, je
   videti takole:

#!/bin/sh
/etc/mknod out.$$ p; exec 2>&1
( exec 4<out.$$; rm -f out.$$
<&4 waitfor 'password:'
    echo "$2"
<&4 waitfor 'password:'
    echo "$2"
<&4 cat >/dev/null
) | ( pty passwd "$1" >out.$$ )

   Tukaj je ,,waitfor`` preprost C-jevski program, ki bere s standardnega
   vhoda znak po znak, dokler ti znaki niso enaki njegovemu argumentu.

   Preprosteja reitev z uporabo pty (ki ima to napako, da se ne
   sinhronizira pravilno s programom passwd) je

#!/bin/sh
( sleep 5; echo "$2"; sleep 5; echo "$2") | pty passwd "$1"

4.10 Kako lahko v skriptu ali programu ugotovim ID procesa, ki pripada programu
z doloenim imenom?

Subject: How do I find the process ID of a program with a particular name ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   V skriptu ukazne lupine:

   Doslej e ni pripomoka, ki bi bil posebej nartovan za preslikovanje
   med imeni programov in procesnimi ID-ji. e ve, takne preslikave so
   pogosto nezanesljive, saj lahko obstaja ve procesov z enakim imenom
   in ker je mono, da proces med tekom spreminja svoje ime. Toda pogosto
   zadoa, da uporabimo naslednji cevovod, ki izpie seznam procesov (v
   vai lasti) z doloenim imenom:

ps ux | awk '/ime/ && !/awk/ {print $2}'

   Pri tem zamenjajte ,,ime`` z imenom procesa, ki ga iete.

   Sploni postopek prestree izhod ukaza ps in z orodji awk ali grep in
   podobnimi poie vrstice z doloenim nizom znakov ter izpie polje PID
   v teh vrsticah. Opazili boste, da zgornji ukaz ,,!/awk/`` iz izpisa
   izloi soasni proces awk.

   Morda boste morali v odvisnosti od vrste Unixa, ki ga uporabljate,
   spremeniti argumente za ps.

   V kodi programa v C-ju:

   Prav tako kot ni nobenega pripomoka, posebej nartovanega za
   preslikavo med imeni programov in procesnimi ID-ji, tudi ni
   (prenosljive) C-jevske knjinice funkcij za to opravilo.

   Nekateri proizvajalci sicer priskrbijo funkcije za branje pomnilnika
   jedra; na primer, Sun vkljuuje funkcije ,,kvm_`` in Data General
   funkcije ,,dg_``. Mono je, da jih sme uporabljati vsak uporabnik, a
   morebiti so dostopne le super-uporabniku (ali uporabniku v skupini
   ,,kmem``), e je na vaem sistemu omejeno branje pomnilnika jedra.
   Nadalje so te funkcije pogosto nedokumentirane ali vsaj slabo
   dokumentirane in se lahko spreminjajo od izdaje do izdaje.

   Nekateri proizvajalci naredijo datoteni sistem ,,/proc``, ki se kae
   kot imenik s kupom datotek v njem. Datoteke so poimenovane s tevili,
   ki ustrezajo ID procesov. Te datoteke lahko odpirate in berete ter
   tako dobite podatke o procesu. Kot reeno pa je dostop do tega imenika
   morebiti omejen in vmesnik se lahko spreminja od sistema do sistema.

   e ne morete uporabiti posebnih proizvajalevih knjininih funkcij in
   e nimate sistema /proc ter bi radi vse postorili v C-ju, boste morali
   sami brskati po pomnilniku jedra. Za dober primer, kako se to pone na
   veih sistemih, poglejte izvorno kodo ,,ofiles``, dostopno v arhivih
   noviarske skupine comp.sources.unix. (Paket, imenovan ,,kstuff``, ki
   pomaga pri brskanju po jedru, je bil poslan na alt.sources v maju 1991
   in je tudi dostopen po anonimnem FTP-ju kot {329{6,7,8,9},330{0,1}} v
   imeniku usenet/alt.sources/articles/ na wuarchive.wustl.edu.

4.11 Kako preverim izhodni status oddaljenega ukaza, pognanega z rsh?

Subject: How do I check the exit status of a remote command executed via "rsh"?
Date: Thu Mar 18 17:16:55 EST 1993

   Tole ne deluje:

rsh nek-stroj nek-zoprn-ukaz || echo "Ukazu je spodletelo"

   Izhodno stanje ,,rsh`` je 0 (uspeh), e se sam program rsh kona
   uspeno, kar verjetno ni to, kar elite.

   e elite preveriti izhodni status oddaljenega programa, lahko
   uporabite skript ,,ersh`` Maartena Litmaatha, ki je bil poslan na
   alt.sources v oktobru 1994. Skript ersh je lupinski skript, ki poklie
   rsh, uredi, da oddaljen stroj na koncu izpie status zadnjega
   izvedenega ukaza, in kona v tem izhodnem stanju.

4.12 Je mogoe programu awk podati tudi spremenljivke ukazne lupine?

Subject: Is it possible to pass shell variable settings into an awk program?
Date: Thu Mar 18 17:16:55 EST 1993

   Za to obstajata dva razlina naina. S prvim preprosto razvijemo
   spremenljivke povsod, kjer je to potrebno v programu. Na primer,
   seznam vseh terminalov tty, ki jih uporabljate, dobite takole:

who | awk '/^'"$USER"'/ { print $2 }'

   Enojni narekovaji se uporabljajo za oznaevanje programa v awk-u, saj
   se v njem pogosto uporablja znak ,$`, ki je lahko interpretiran v
   ukazni lupini, e zaprete program v dvojne narekovaje, ne pa tudi, e
   ga zaprete v enojne. V tem primeru hoemo, da ukazna lupina
   interpretura ,$` v ,,$USER``, zato zapremo enojne narekovaje in potem
   vstavimo ,,$USER`` v dvojne. Pozorni bodite na to, da ni nikjer
   nobenih presledkov, torej bo ukazna lupina vse skupaj videla kot en
   sam argument. Opazili boste tudi, da dvojni narekovaji v tem
   konkretnem primeru verjetno niso potrebni, lahko bi torej naredili
   tudi

who | awk '/^'$USER'/ { print $2 }'

   a jih moramo vseeno vkljuiti, saj bi lahko lupinska spremenljivka
   $USER vsebovala posebne znake, kot so presledku.

   Drugi nain za podajanje spremenljivih nastavitev programu awk je
   uporaba pogosto nedokumentirane lastnosti awk-a, ki dovoljuje, da se
   spremenljivke podajajo v ukazni vrstici kot ,,lana imena datotek``.
   Na primer:

who | awk '$1 == uporabnik { print $2 }' uporabnik="$USER" -

   Spremenljivke se uporabijo, ko se zasledijo v ukazni vrstici, torej,
   na primer, lahko s to tehniko naroite programu awk, kako naj se
   obnaa za razline datoteke. Na primer:

awk '{ program, ki je odvisen od s }' s=1 datoteka1 s=0 datoteka2

   Opazite, da nekatere verzije programa awk povzroijo, da se pred
   izvedbo bloka BEGIN zasledijo spremenljivke pred vsemi pravimi imeni
   datotek, toda nekatere ne, zato se na to ne gre zanaati.

   Opazite tudi, da awk ob navedbi spremenljivk namesto pravih datotek
   sam od sebe ne bo bral s stdin, zato morate dodati argument ,,-`` na
   konec vaega ukaza, kot je to v predprejnjem primeru.

   Tretja monost je uporaba noveje verzije programa awk (nawk), ki
   dopua neposreden dostop do spremenljivk okolja. Na primer:

nawk 'END { print "Vaa pot je " ENVIRON["PATH"] }' /dev/null

4.13 Kako se znebim procesov-zombijev, ki vztrajajo?

Subject: How do I get rid of zombie processes that persevere?
From: Jonathan I. Kamens
From: casper@fwi.uva.nl (Casper Dik)
Date: Thu, 09 Sep 93 16:39:58 +0200

   al je nemogoe posploiti, kako naj se zakljui podproces, saj se na
   razlinih vrstah Unixa mehanizmi medsebojno razlikujejo.

   Predvsem morate narediti wait() za podproces na vseh vrstah Unixa. Ne
   poznam Unixa, ki bi avtomatino pospravil za podprocesom, ki se je
   konal, e mu tega niste posebej naroili.

   Drugi, e na nekaterih, iz SysV izpeljanih, sistemih naredite
   ,,signal(SIGCHLD, SIG_IGN)`` (no, pravzaprav je lahko SIGCLD namesto
   SIGCHLD, toda veina novejih sistemov SysV ima ,,#define SIGCHLD
   SIGCLD`` v datotekah z glavami), se otroki procesi samodejno
   poistijo, brez nadaljnega truda na vai strani. Najpreprosteje to
   preverite na svojem stroju, tako da poskusite, ali deluje, eprav se
   ni priporoljivo zanaati na to, e poskuate pisati prenosljivo kodo.
   al POSIX tega ne predpisuje. Nastavitev SIGCHLD na SIG_IGN je v
   POSIX-u nedefinirana, torej tega ne morete uporabiti v svojem
   programu, e naj bo skladen s standardom POSIX.

   Kaken je potemtakem nain, skladen s POSIX? Kot reeno, morate
   namestiti upravljalnik signalov (angl. signal handler) in poakati z
   wait. V POSIX-u so upravljalniki signalov nameeni s funkcijo
   sigaction. Ker vas ne zanimajo ,,zaustavljeni`` podprocesi, pa pa
   prekinjeni, dodajte zastavicam sa_flags vrednost SA_NOCLDSTOP. akanje
   brez blokiranja se izvede z waitpid(). Prvi argument funkciji waitpid
   naj bo -1 (akaj na katerikoli PID), tretji naj bo WNOHANG. To je
   danes najbolj prenosljiv nain in bo verjetno v prihodnosti postal e
   bolj prenosljiv.

   e va sistem ne podpira standard POSIX, obstaja vrsta reitev.
   Najpreprosteje je uporabiti signal(SIGCHLD, SIG_IGN), e to deluje. e
   samodejnega ienja ne morete dosei s SIG_IGN, morate napisati
   upravljalnik signalov, da bo to storil. Zaradi naslednjih
   nekonsistentnosti ga sploh ga ni preprosto napisati tako, da bi
   deloval na vseh vrstah Unixa:

   Na nekaterih vrstah Unixa se upravljalnik signalov SIGCHLD poklie, e
   se kona eden ali ve podprocesov. e va upravljalnik signalov le
   enkrat poklie wait(), to pomeni, da ne bo poistil za vsemi
   podprocesi. Preprian sem, da ima na sreo programer na teh Unixih, na
   katerih to dri, vselej na voljo klica wait3() ali waitpid(), ki z
   izbiro WNOHANG preverita, ali morata poistiti e kaj podprocesov. Va
   upravljalnik signalov na sistemih, ki poznajo funkciji
   wait3()/waitpid(), toliko asa klie eno od teh funkcij z izbiro
   WNOHANG, dokler ni ve nobenih otrok za poienje. Bolja izbira je
   waitpid(), ker je vkljuena v POSIX.

   Na sistemih, izpeljanih iz SysV, se signali SIGCHLD regenerirajo, e
   po izhodu upravljalnika signala SIGCHLD e vedno ostane kaken otroki
   proces za poistiti. Torej je na veini sistemov SysV ob klicu
   upravljalnika signalov varno predpostaviti, da morate poistiti le en
   signal, in priakovati, da se bo upravljalnik poklical ponovno, e je
   po izhodu iz njega ostalo e kaj nepoienih signalov.

   Na starejih sistemih ni nobenega naina, da bi prepreili
   upravljalnikom signalov, da se ob klicu samodejno nastavijo na
   SIG_DFL. Na takih sistemih morate kot zadnjo stvar upravljalnika
   signalov postaviti ,,signal(SIGCHILD, catcher_func)`` (kjer je
   ,,catcher_func`` ime upravljalnike funkcije), da se resetirajo.

   Na sreo noveje izvedbe dovoljujejo upravljalnikom signalov, da se
   namestijo, ne da bi bili resetirani na SIG_DFL, ko se poene
   upravljalnika funkcija. Temu problemu se na sistemih, ki nimajo
   wait3()/waitpid(), a imajo SIGCLD, izognete tako, da morate resetirati
   upravljalnik signalov s klicem signal(), ko ste izvedli v
   upravljalniku vsaj en wait(), vsaki, ko se klie. Zaradi zgodovinskih
   zdruljivostnih razlogov bo System V obdral staro pomenoslovje
   (resetiral upravljalnik ob klicu) funkcije signal(). Upravljalniki
   signalov, ki se prilepijo, se lahko namestijo s sigaction() ali
   sigset().

   Povzetek vsega tega je, da morate funkcijo waitpid() (POSIX) ali
   wait3() na sistemih, ki jo imajo, tudi uporabljati in, da mora tei
   va upravljalnik signalov v zanki, na sistemih, ki pa teh funkcij
   nimajo, morate imeti ob vsaki zahtevi po upravljalniku signalov po en
   klic wait().

   e ena stvar - e ne elite iti skozi vse te teave, obstaja
   prenosljiv nain, da se izognete temu problemu, eprav je malce manj
   uinkovit. Va starevski proces naj se razveji (s fork) in potem aka
   na mestu, da se kona otroki proces. Otroki proces se potem spet
   razveji, in vam da otroka in vnuka. Otrok se takoj prekine (in torej
   star, ki ga aka, izve za njegov konec in nadaljuje z delom), vnuk pa
   pone, kar bi moral prvotno narediti otrok. Ker je njegov star
   konan, ga nasledi proces init, ki bo opravil vse potrebno akanje. Ta
   metoda je neuinkovita, ker potrebuje dodatno razvejanje, a je
   popolnoma prenosljiva.

4.14 Kako dobim vrstice iz cevovoda tako, kot se piejo, namesto le v vejih
blokih?

Subject: How do I get lines from a pipe ... instead of only in larger blocks?
From: Jonathan I. Kamens
Date: Sun, 16 Feb 92 20:59:28 -0500

   Knjinica stdio trenutno dela vmesno pomnenje (angl. buffering)
   razlino, odvisno od tega, ali misli, da tee na tty ali ne. e misli,
   da je na tty, dela vmesno pomnenje po posameznih vrsticah; sicer
   uporablja veji vmesni pomnilnik kot je ena vrstica.

   e imate izvorno kodo odjemnika, za katerega bi radi onemogoili
   vmesno pomnenje, lahko za to uporabite setbuf() ali setvbuf().

   e ne, je najbolji nain, da prepriate program, da tee na tty tako,
   da ga poenete pod pty, se pravi, da uporabite program ,,pty``,
   omenjen v vpraanju ,,Kako poenem passwd, ftp, telnet, tip in druge
   interaktivne programe v skriptu ukazne lupine v ozadju?``.

4.15 Kako lahko vstavim datum v ime datoteke?

Subject: How do I get the date into a filename?
From: melodie neal <melodie@comtech.ct.oz.au>
Date: Fri, 7 Oct 1994 09:27:33 -0400

   To ni teko, a je na prvi pogled malce kriptino. Zanimo najprej s
   samim ukazom date: date lahko vzame niz s formatom izpisa in ga
   upoteva. Niz za formatiranje mora biti objet z narekovaji, da
   prepreimo ukazni lupini poskus njegove interpretacije, preden ga dobi
   sam ukaz date. Poskusite tole:

date '+%d%m%y'

   Morali bi dobiti nekaj kot 130994. e elite imeti vmes loila,
   preprosto postavite znake, ki bi jih radi uporabljali, v niz za
   formatiranje (brez nagibnic ,/`):

date '+%d.%m.%y'

   Obstaja veliko simbolov, ki jih lahko uporabite v nizu za
   formatiranje: o njih izveste v strani referennega prironika (man
   date).

   Zdaj pa e to spravimo v ime datoteke. Denimo, da bi radi ustvarili
   datoteke imenovane report.130994 (ali katerikoli datum e je danes):

FILENAME=report.`date '+%d%m%y'`

   Opazite, da tukaj uporabljamo dva nabora narekovajev: notranji nabor
   prepreuje formatirnemu nizu prezgodnjo interpretacijo; zunanji nabor
   pove ukazni lupini naj izvede objeti ukaz, in zamenja rezultat v izraz
   (zamenjava ukazov, angl. command substitution).

4.16 Zakaj se nekateri skripti zanejo z ,,#!...``?

Subject: Why do some scripts start with #! ... ?
From: chip@@chinacat.unicom.com (Chip Rosenthal)
Date: Tue, 14 Jul 1992 21:31:54 GMT

   Chip Rosenthal je v preteklosti v noviarski skupini comp.unix.xenix
   odgovoril na zelo podobno vpraanje.

   Mislim, da ljudi bega, da obstajata dva razlina mehanizma, ki se oba
   zaneta z znakom ,#`. Oba reujeta isti problem na zelo omejenem
   naboru primerov - a nista ni manj razlina.

   Nekaj ozadja. Ko se jedro sistema UNIX odloi pognati program (eden
   sistemskih klicev druine exec()), najprej pogleda prvih 16 bitov
   datoteke. Teh 16 bitov se imenuje magina tevilka. Prvi, magina
   tevilka prepreuje jedru, da bi naredilo kaj neumnega, kot na primer
   poskualo izvesti datoteko z bazami podatkov o vaih strankah. e
   jedro ne prepozna magine tevilke, se pritoi z napako ENOEXEC.
   Program poene le, e je magina tevilka prepoznavna.

   Drugi, sasoma so se uvajali razlini formati izvedljivih datotek in
   magina tevilka ni le povedala jedru ali naj izvede datoteko, pa pa
   tudi kako naj jo izvede. Na primer, e prevedete program na sistemu
   SCO XENIX/386 in nesete binarno datoteko na sistem SysV/386, bo jedro
   prepoznalo magino tevilko in reklo ,,Aha! To je binarna datoteka
   tipa x.out!`` in se nastavilo tako, da bo uporabljalo klice,
   zdruljive s sistemom XENIX.

   Pomnite, da jedro lahko poganja le binarne izvedljive slike
   pomnilnika. Kako torej, se vpraujete, teejo skripti? Konec koncev,
   lahko napiem v pozivniku ukazne lupine ,,moj.skript`` in ne dobim
   napake ENOEXEC. Odgovor: skripti se ne izvajajo v jedru, pa pa v
   ukazni lupini. Koda v ukazni lupini lahko izgleda podobno:
     _________________________________________________________________

/* poskusi pognati program */
execl(program, basename(program), (char *)0);

/* klic exec je spodletel - morda gre za skript ukazne lupine? */
if (errno == ENOEXEC)
     execl ("/bin/sh", "sh", "-c", program, (char *)0);

/* Oh, ne, g. Bill!! */
perror(program);
return -1;
     _________________________________________________________________

   (Ta primer je mono poenostavljen. Vpletenih je veliko ve zadev, a to
   ponazarja bistvo, ki ga poskuam opisati.)

   e je klic execl() uspeen in se program zaene, se koda za execl()
   nikoli ne poene. V zgornjem primeru uspeen execl() programa
   ,program` pomeni, da se spodnje vrstice primera ne izvedejo. Namesto
   tega sistem izvaja binarno datoteko ,program`.

   e, po drugi strani, prvi klic execl() spodleti, ta hipotetina ukazna
   lupina pogleda, zakaj ji je spodletelo. e klic execl() ni uspel, ker
   ,program` ni bil prepoznan kot binarna izvedljiva datoteka, ga ukazna
   lupina poskua naloiti kot skript ukazne lupine.

   Ljudje iz Berkeleya so imeli edno idejo, kako raziriti nain, na
   katerega jedro zaganja programe. Popravili so jedro, da prepozna
   magino tevilko ,#!` (magine tevilke so velike 16 bitov in dva
   8-bitna znaka tvorita 16 bitov, prav?). Ko je jedro prepoznalo magino
   tevilko ,#!`, je prebralo tudi ostanek vrstice in ga obravnavalo kot
   ukaz, ki ga naj poene na vsebini datoteke. S tem popravkom lahko zdaj
   ponete podobne stvari:

#! /bin/sh

#! /bin/csh

#! /bin/awk -F:

   Ta popravek je obstajal le v svetu Berkeleya, in je preel na jedra
   USG kot del sistema System V Release 4. Pred V.4 jedro ni imelo
   monosti niesar drugega, kot nalaganje in zaganjanje binarnih
   izvedljivih slik pomnilnika, razen v primerih proizvajaleve dodane
   vrednosti.

   Vrnimo se e nekaj let v preteklost, v as, ko je ve in ve ljudi, ki
   so poganjali Unixe na jedrih USG, govorilo ,,/bin/sh je zani kot
   interaktivni uporabniki vmesnik! Hoem csh!``. Nekateri proizvajalci
   so dodali csh v njihove distribucije, eprav csh ni bil del
   distribucije USG UNIX.

   To pa je predstavljalo problem. Denimo, da spremenite svojo prijavno
   ukazno lupino na /bin/csh. Denimo, nadalje, da ste bebec in vztrajate
   na programiranju skriptov csh. Vsekakor bi radi bili sposobni napisati
   ,moj.skript` in ga s tem pognati, eprav je to skript za csh. Namesto,
   da bi ga pognali skozi /bin/sh, elite, da se skript poene takole:

execl ("/bin/csh", "csh", "-c", "moj.skript", (char *)0);

   Kaj pa vsi tisti obstojei skripti -- nekateri od njih so deli
   sistemske distribucije? e se poenejo skozi csh, se bodo stvari
   kvarile. Potrebujete torej nain, da poenete nekatere skripte skozi
   csh, in nekatere druge skozi sh.

   Vpeljana reitev je bila, da se popravi csh tako, da pogleda prvi znak
   skripta, ki ga elite pognati. e je ta ,#`, bo csh zagnal skript
   skozi /bin/csh, sicer bo pognal skript skozi /bin/sh. Primer zgornje
   kode bi zdaj izgledal takole:
     _________________________________________________________________

/* poskusi pognati program */
execl(program, basename(program), (char *)0);

/* klic exec je spodletel - morda gre za skript ukazne lupine? */
if (errno == ENOEXEC && (fp = fopen(program, "r")) != NULL) {
i = getc(fp);
(void) fclose(fp);
if (i == '#')
    execl ("/bin/csh", "csh", "-c", program, (char *)0);
else
    execl ("/bin/sh", "sh", "-c", program, (char *)0);
}

/* Oh, ne, g. Bill!! */
perror(program);
return -1;
     _________________________________________________________________

   Dve pomembni stvari, Prvi, to je popravek lupine ,csh`. V jedru se ni
   ni spremenilo in drugim ukaznim lupinam ni bilo ni dodano. e
   poskuate pognati skript s klicem execl(), boste e vedno dobili
   napako ENOEXEC, pa naj se skript zane z znakom ,#` ali pa ne. e
   poskuate pognati skript, ki se zane z znakom ,#` v em drugem kot
   csh (na primer v /bin/sh), ga bo obravnavala lupina sh, ne csh.

   Drugi, arovnija je v tem, da se bodisi skript zane z ,#`, ali pa se
   ne zane z ,#`. Stvari kot so ,:` in ,: /bin/sh` na zaetku skriptov
   dela arobne preprosto dejstvo, da niso ,#`. Torej je vse to
   identino, e je na zaetku skripta:

:

: /bin/sh

                <--- prazna vrstica

: /usr/games/rogue

echo "Hm ... spraujem se, pod katero ukazno lupino teem???"

   V vseh teh primerih bodo vse ukazne lupine poskuale izvesti skript z
   /bin/sh.

   Podobno, tudi vse naslednje je identino, e je na zaetku skripta:

#

# /bin/csh

#! /bin/csh

#! /bin/sh

# Hm ... spraujem se, pod katero ukazno lupino teem???

   Vse te vrstice se zanejo z znakom ,#`. To pomeni, da se bo skript
   pognal le, e ga boste poskuali pognati iz csh, sicer se bo pognal z
   /bin/sh.

   (Opomba: e poganjate ksh, zamenjajte v zgornjem besedilu ,,sh`` s
   ,,ksh``. Kornova ukazna lupina je teoretino zdruljiva z Bournovo,
   torej poskua sama pognati te skripte. Vae izkunje so lahko drugane
   z nekaterimi drugimi dostopnimi ukaznimi lupinami, kot so zsh, bash,
   itd.)

   Oitno postane popravek za ,#` nepotreben, e imate v jedru podporo za
   ,#!`. Pravzaprav je lahko nevaren, saj ustvarja zmedo pri ugotovitvi,
   kaj naj bi se zgodilo v primeru ,,#! /bin/sh``.

   Uporaba ,#!` bolj in bolj prevladuje. System V Release 4 pobira
   tevilne lastnosti z Berkeleya, vkljuno s to. Nekateri proizvajalci
   sistemov System V Release 3.2 nadgrajujejo na nekatere bolj vidne
   dobrote V.4 in vam poskuajo prepriati, da je to dovolj in, da ne
   potrebujete stvari, kot so pravi, delujoi tokovi ali dinamino
   nastavljivi parametri jedra.

   XENIX ne podpira ,#!`. Ukazna lupina /bin/csh na Xenixu nima popravka
   za ,#`. Podpora za ,#!` v Xenixu bi bila fina, a sam ne bi zadreval
   diha med akanjem nanjo.
     _________________________________________________________________


5. Napredna vpraanja; radi jih vpraujejo ljudje, ki mislijo, da e poznajo
vse odgovore

5.1 Kako berem znake s terminala, ne da bi bilo uporabniku treba pritisniti
RETURN?

Subject: How do I read characters ... without requiring the user to hit RETURN?
Date: Thu Mar 18 17:16:55 EST 1993

   Preverite nain cbreak v BSD ali nain ~ICANON v SysV.

   e se sami ne elite spoprijeti s terminalskimi parametri (z uporabo
   sistemskega klica ioctl(2)), lahko prepustite delo programu stty - a
   to je poasno in neuinkovito, in vasih boste morali spremeniti kodo,
   da bo delala pravilno:
     _________________________________________________________________

#include <stdio.h>
main()
{
    int c;

    printf("Pritisnite katerikoli znak za nadaljevanje\n");
    /*
     * funkcija ioctl() bi bila tukaj bolja;
     * le leni programerji delajo takole:
     */
    system("/bin/stty cbreak");        /* ali "stty raw" */
    c = getchar();
    system("/bin/stty -cbreak");
    printf("Hvala, ker ste vnesli %c.\n", c);

    exit(0);
}
     _________________________________________________________________

   Nekaj ljudi mi je poslalo razline bolj pravilne reitve tega
   problema. al mi je, da jih ne morem vkljuiti, saj zares presegajo
   namen tega seznama.

   Preveriti boste eleli tudi dokumentacijo prenosljive knjinice
   zaslonskih funkcij, imenovane ,,curses``. e vas zanima V/I enega
   samega znaka, vas pogosto zanima tudi neka vrsta kontrole prikaza na
   zaslonu, in knjinica curses priskrbi razline prenosljive rutine za
   obe funkciji.

5.2 Kako preverim, e je treba prebrati znak, ne da bi ga zares prebral?

Subject: How do I check to see if there are characters to be read ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   V nekaterih razliicah Unixa je mogoe preveriti, ali je v danem
   datotenem deskriptorju kaj neprebranih znakov. V BSD-ju lahko
   uporabite select(2). Uporabite lahko tudi FIONREAD ioctl, ki vrne
   tevilo znakov, ki akajo na prebranje, a to deluje le pri terminalih,
   cevovodih in vtiih. V System V Release 3 lahko uporabite poll(2), a
   to deluje le na tokovih. V Xenixu - in torej na Unixu SysV r3.2 in
   poznejih - sistemski klic rdchk() poroa o tem ali se bo klic read()
   na danem datotenem deskriptorju blokiral.

   Ni naina, da bi preverili, ali so znaki dostopni za branje s kazalca
   FILE. (Lahko gledate po notranjih podatkovnih strukturah stdio, da bi
   videli, e je vmesni pomnilnik vhoda neprazen, a to ne bo delovalo,
   saj ne veste, kaj se bo zgodilo naslednji, ko boste hoteli napolniti
   vmesni pomnilnik.)

   Vasih ljudje vpraujejo to vpraanje z namenom, da bi napisali

if (znaki dostopni iz fd)
        read(fd, buf, sizeof buf);

   in dobili uinek neblokovnega branja z read. To ni najbolji nain za
   izvedbo tega, saj je mono, da bodo znaki dostopni, ko preverite
   dostopnost, a ne bodo ve dostopni, ko pokliete read. Namesto tega
   prigite zastavico O_NDELAY (ki se pod BSD imenuje tudi FNDELAY) z
   izbiro F_SETFL funkcije fcntl(2). Stareji sistemi (Version 7, 4.1
   BSD) nimajo O_NDELAY; na teh sistemih lahko najblije neblokovnemu
   branju pridete z uporabo alarm(2), da branju potee as.

5.3 Kako ugotovim ime odprte datoteke?

Subject: How do I find the name of an open file?
Date: Thu Mar 18 17:16:55 EST 1993

   V splonem je to preteko. Datoteni deskriptor je lahko obeen na
   cevovod ali pty, in v tem primeru nima imena. Lahko je obeen na
   datoteko, ki je bila odstranjena. Lahko ima ve imen, zaradi pravih
   ali simbolinih povezav.

   e morate to res storiti, in prepriajte se, da ste o tem razmislili
   na dolgo in iroko in se odloili, da nimate druge izbire, lahko
   uporabite find z izbiro -inum in morda e -xdev, ali uporabite ncheck,
   ali e enkrat oponaajte funkcionalnost enega od teh orodij v vaem
   programu. Zavedajte se, da preiskovanje 600 megabytnega datotenega
   sistema za datoteko, ki je morda sploh ni, traja nekaj asa.

5.4 Kako lahko tekoi program ugotovi svojo lastno pot?

Subject: How can an executing program determine its own pathname?
Date: Thu Mar 18 17:16:55 EST 1993

   Va program lahko pogleda argv[0]; e se zaenja z ,,/``, je to
   verjetno ime absolutne poti do vaega programa, sicer lahko va
   program pogleda v vsak imenik, imenovan v okoljski spremenljivki PATH
   in poskua najti prvi imenik, ki vsebuje izvedljivo datoteko, katere
   ime se ujema s programovim argv[0] (ki je po dogovoru ime programa, ki
   se izvaja). e zdruite ta imenik in vrednost argv[0], imate verjetno
   pravo ime.

   Ne morete pa biti prepriani, saj je povsem legalno, da en program
   izvede drugega z exec() s katerokoli vrednostjo argv[0], ki si jo
   zaeli. Da exec izvaja nove programe z imenom izvedljive datoteke v
   argv[0], je le dogovor.

   Na primer, povsem hipotetini primer:


#include <stdio.h>
main()
{
    execl("/usr/games/rogue", "vi Disertacija", (char *)NULL);
}

   Izvedeni program misli, da je njegovo ime (njegova vrednost argv[0])
   ,,vi Disertacija``. (Tudi nekateri drugi programi lahko mislijo, da je
   ime programa, ki ga trenutno poganjate ,,vi Disertacija``, a seveda je
   to le hipotetini primer, zato tega ne poskuajte sami :-)

5.5 Kako uporabim popen() za odprtje procesa za branje in pisanje?

Subject: How do I use popen() to open a process for reading AND writing?
Date: Thu Mar 18 17:16:55 EST 1993

   Problem, ko poskuate preusmeriti vhod in izhod poljubnemu suenjskemu
   procesu je, da lahko nastane mrtva zanka, e oba procesa hkrati akata
   na e-ne-generiran vhod. Zanki se lahko izognemo tako, da obe strani
   upotevata strog protokol brez mrtvih zank, toda, ker to zahteva
   sodelovanje med procesi, je neprimerno za knjinino funkcijo, podobno
   popen().

   Distribucija ,,expect`` vkljuuje knjinico funkcij, ki jih lahko
   C-jevski programer klie neposredno. Ena izmed funkcij dela isto stvar
   kot popen za hkratno branje in pisanje. Uporablja ptys namesto cevi,
   in nima problemov z zaciklanjem. Prenosljiva je na BSD in SV. Glejte
   vpraanje ,,Kako poenem passwd, ftp, telnet, tip in druge
   interaktivne programe v skriptu ukazne lupine v ozadju?`` za ve
   podatkov o distribuciji expect.

5.6 Kako izvedem v C-ju sleep() za manj kot sekundo?

Subject: How do I sleep() in a C program for less than one second?
Date: Thu Mar 18 17:16:55 EST 1993

   Najprej se zavedajte, da je vse, kar lahko doloite minimalna koliina
   zakasnitve; dejanska zakasnitev bo odvisna od upravnikih zadev, kot
   je obremenitev sistema, in je lahko poljubno dolga, e nimate sree.

   Ne obstaja funkcija standardne knjinice, na katero bi se lahko
   zanesli v vseh okolji za ,,dremanje`` (angl. napping, obiajen izraz
   za kratke spance). Nekatera okolja priskrbijo funkcijo ,,usleep(n)``,
   ki zadri izvajanje za n mikrosekund. e vae okolje ne podpira
   usleep(), je tukaj nekaj njenih implementacij za okolja BSD in System
   V.

   Naslednja koda Douga Gwyna je prirejena z emulacijske podpore Systema
   V za 4BSD in izrablja sistemski klic select() na 4BSD-ju. Doug jo je
   prvotno imenoval ,,nap()``; vi jo boste verjetno eleli klicati
   ,,usleep()``:
     _________________________________________________________________

/*
    usleep - podporna rutina za emulacijo sistemskih klicev 4.2BSD
    zadnja sprememba originalne verzije:  29. oktober 1984     D A Gwyn
*/

extern int        select();

int
usleep( usec )                          /* vrne 0, e je ok, sicer -1 */
    long                usec;           /* premor v mikrosekundah */
    {
    static struct                       /* `timeval' */
            {
            long        tv_sec;         /* sekunde */
            long        tv_usec;        /* mikrosekunde */
            }   delay;          /* premor _select() */

    delay.tv_sec = usec / 1000000L;
    delay.tv_usec = usec % 1000000L;

    return select( 0, (long *)0, (long *)0, (long *)0, &delay );
    }
     _________________________________________________________________

   Na Unixih System V bi lahko to storili takole:
     _________________________________________________________________

/*
podsekundni premori za System V - ali karkoli, kar ima poll()
Don Libes, 4/1/1991

BSD-jeva analogija te funkcije je definirana v mikrosekundah, medtem,
kot je poll() definiran v milisekundah.  Zaradi zdruljivosti, ta
funkcija priskrbi natannost "po dolgem teku" tako, da oklesti prave
zahteve na milisekundo natanno in akumulira mikrosekunde med
posameznimi klici z idejo, da jo verjetno kliete v tesni zanki, in se
bo po dolgem teku napaka izniila.

e je ne kliete v tesni zanki, potem skoraj gotovo ne potrebujete
mikrosekundne natannosti in v tem primeru vam ni mar za mikrosekunde.
e vam bi bilo mar, tako ali tako ne bi uporabljali Unixa, saj lahko
nakljuno prebavljanje sistema (npr. razporejanje) zmelje asomerilno
kodo.

Vrne 0 ob uspenem premoru, -1 ob neuspenem.

*/

#include <poll.h>

int
usleep(usec)
unsigned int usec;                /* mikrosekunde */
{
    static subtotal = 0;        /* mikrosekunde */
    int msec;                   /* milisekunde */

    /* 'foo' je tukaj le zato, ker so imele nekatere verzije 5.3
     * hroa, pri katerem se prvi argument poll() preverja za
     * obstoj pravilnega pomnilnikega naslova, eprav je drugi
     * argument enak 0.
     */
    struct pollfd foo;

    subtotal += usec;
    /* e je premor < 1 ms, ne naredi niesar, a si zapomni */
    if (subtotal < 1000) return(0);
    msec = subtotal/1000;
    subtotal = subtotal%1000;
    return poll(&foo,(unsigned long)0,msec);
}
     _________________________________________________________________

   e ena monost za dremanje na System V in verjetno tudi drugih ne-BSD
   Unixih je paket s5nap Jona Zeeffa, objavljen v comp.sources.misc,
   volume 4. Ne potrebuje namestitve gonilnika naprave, a deluje brez
   napak, ko se namesti, (Njegova loljivost je omejena z vrednostjo HZ v
   jedru, saj uporablja rutino delay() jedra.)

   Mnogo novejih Unixov ima funkcijo nanosleep.

5.7 Kako pripravim skripte ,setuid` ukazne lupine do delovanja?

Subject: How can I get setuid shell scripts to work?
Date: Thu Mar 18 17:16:55 EST 1993

   [ Ta odgovor je dolg, a to je zapleteno in pogosto zastavljeno
   vpraanje. Hvala Maartenu Litmaathu za ta odgovor in za spodaj
   omenjeni program ,,indir``. ]
    1. Najprej predpostavimo, da ste na razliici Unixa (npr. 4.3BSD ali
       SunOS), ki pozna tako imenovane ,,izvedljive skripte ukaznih
       lupin``. Taken skript se mora zaeti s podobno vrstico:

#!/bin/sh
       Skript se imenuje ,,izvedljivi``, ker se tako kot resnina
       (binarna) izvedljiva datoteka zane s tako imenovano ,,magino
       tevilko``, ki doloa tip izvedljive datoteke. Glejte tudi
       razdelek ,,Zakaj se nekateri skripti zanejo z ,,#!...``?``. V
       naem primeru je ta tevilka enaka ,,#!`` in OS vzame ostanek prve
       vrstice kot interpreter za skript, ki mu morda sledi 1 uvodna
       izbira kot je:

#!/bin/sed -f
       Denimo, da se ta skript imenuje ,foo` in se nahaja v imeniku /bin.
       e potem napiete:

foo arg1 arg2 arg3
       bo OS preuredil zadeve tako, kot bi napisali:

/bin/sed -f /bin/foo arg1 arg2 arg3
       Vendar je tukaj neka razlika: e je prigan bit setuid za ,foo`,
       bo spotovan v prvi obliki ukaza; e zares vpiete drugo obliko,
       bo OS spotoval bite z dovoljenji programa /bin/sed, ki seveda ni
       setuid.
    2. Prav, toda kaj, e se moj skript ukazne lupine ne zane s takno
       vrstico ,#!`, ali, e moj OS o tem ni ne ve?
       No, e ga ukazna lupina (ali kdorkoli drug) poskua izvesti, bo OS
       vrnil indikacijo napake, saj se datoteka ne zane z veljavno
       magino tevilko. Ukazna lupina bo po sprejetju te indikacije
       predpostavila, da gre za skript ukazne lupine in mu dala e eno
       prilonost:

/bin/sh lupinski_skript argumenti
       A zdaj smo e videli, da se v tem primeru bit setuid datoteke
       ,lupinski_skript` ne bo spotoval!
    3. Prav, kaj pa varnostna tveganja pri lupinskih skriptih setuid?
       Dobro, denimo, da se skript imenuje ,/etc/skript_setuid` in se
       zaenja z vrstico:

#!/bin/sh
       Zdaj pa poglejmo kaj se zgodi, e izvedemo naslednje ukaze:

$ cd /tmp
$ ln /etc/skript_setuid -i
$ PATH=.
$ -i
       Vemo, da bo zadnji ukaz preurejen v:

/bin/sh -i
       Toda ta ukaz nam bo dal interaktivno ukazno lupino, ki bo z bitom
       setuid tekla, kot da bi jo pognal lastnik skripta!
       Na sreo lahko to varnostno luknjo zlahka zapremo, e napiemo v
       prvo vrstico:

#!/bin/sh -
       Znak ,-` oznauje konec seznama izbir: naslednji argument ,-i` bo
       vzet kot ime datoteke, iz katere naj se berejo ukazi, kot bi tudi
       moral biti!
    4. Vendar pa obstajajo veliko resneji problemi:

$ cd /tmp
$ ln /etc/skript_setuid temp
$ nice -20 temp &
$ mv moj_skript temp
       Tretji ukaz bo preurejen v:

nice -20 /bin/sh - temp
       Ker se ta ukaz izvaja poasi, bo morda lahko etrti ukaz zamenjal
       originalno datoteko ,temp` s trojanskim konjem ,moj_skript` preden
       ukazna lupina sploh odpre ,temp`! Obstajajo 4 naini za krpanje te
       varnostne luknje:
         1. naj OS zaene skript setuid na drugaen, varen nain - System
            V R4 in 4.4BSD uporabljata gonilnik /dev/fd, s katerim podata
            interpreterju datoteni deskriptor skripta;
         2. naj bo skript interpretiran posredno, skozi vmesnik, ki se
            prepria, da je vse v redu, preden poene pravi interpreter -
            e uporabljate program ,indir` iz arhiva comp.sources.unix
            bodo skripti setuid izgledali takole:

#!/bin/indir -u
#?/bin/sh /etc/skript_setuid
         3. napravite ,,binarni ovoj``: pravo izvedljivo datoteko, ki je
            setuid in katere edina naloga je pognati interpreter z imenom
            skripta kot argumentom;
         4. napravite sploen ,,strenik za skripte setuid``, ki poskua
            najti zahtevano ,opravilo` v bazi podatkov veljavnih skriptov
            in ob uspehu poene pravi interpreter s pravimi argumenti.
    5. Zdaj, ko smo se prepriali, da se interpretira pravilna datoteka,
       ali so prisotna e kakna tveganja?
       Seveda! Za skripte ukazne lupine ne smete pozabiti eksplicitno
       nastavitev spremenljivke PATH na varno pot. Lahko ugotovite zakaj?
       Tukaj je e spremenljivka IFS, ki lahko povzroa teave, e ni
       pravilno nastavljena. Tudi druge okoljske spremenljivke lahko
       ogrozijo varnost sistema, npr. SHELL ... Nadalje se morate
       prepriati, da ukazi v skriptih ne dovoljujejo interaktivnih
       ubenih zaporedij ukazne lupine! Potem je tukaj umask, ki je lahko
       nastavljen na kaj udnega ...
       Et cetera. Zavedati se morate, da skript setuid ,,podeduje`` vse
       hroe in varnostna tveganja ukazov, ki jih klie!

   Po vsem tem dobimo vtis, da so lupinski skripti setuid precej tvegan
   posel! Morda bo za vas bolje programirati v C-ju!

5.8 Kako lahko ugotovim, kateri uporabnik ali proces ima odprto datoteko ali
uporablja doloen datoteni sistem (da ga lahko odklopim)?


Subject: How can I find out which user or process has a file open ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   Uporabite fuser (system V), fstat (BSD), ofiles (v javni lasti) ali
   pff (v javni lasti). Ti programi vam bodo povedali razline stvari o
   procesih, ki uporabljajo doloene datoteke.

   V arhivih comp.sources.unix, volume 18, najdete prenos fstat z 4.3 BSD
   na Dynix, SunOS in Ultrix.

   pff je del paketa kstuff in deluje na kar nekaj sistemih. Navodila za
   nabavo kstuff najdete v vpraanju ,,Kako lahko v skriptu ali programu
   ugotovim ID procesa programa z doloenim imenom?``.

   Obveen sem bil, da obstaja tudi program, imenovan lsof, a ne vem,
   kje se ga dobi.

   Michael Fink <Michael.Fink@uibk.ac.at> dodaja:

   e ne morete odmestiti datotenega sistema (z umount), za katerega
   zgornja orodja ne poroajo o odprtih datotekah, se prepriajte, da
   datoteni sistem, ki ga poskuate odmeati ne vsebuje aktivnih tok
   nameanja (uporabite df(1)).

5.9 Kako izsledim ljudi, ki me tipajo (s finger)?

Subject: How do I keep track of people who are fingering me?
From: Jonathan I. Kamens
From: malenovi@plains.NoDak.edu (Nikola Malenovi)
Date: Thu, 29 Sep 1994 07:28:37 -0400

   V splonem ne morete ugotoviti userid nekoga, ki vas tipa z
   oddaljenega stroja. Morda lahko ugotovite stroj, s katerega prihajajo
   oddaljene zahteve. Ena od monosti, e jo va sistem podpira, in, e
   je tipalnemu streniku (angl. finger daemon) prav, jo, da naredite
   vao datoteko .plan za ,,imenovano cev`` (angl. named pipe) namesto
   obiajno datoteko. (Za to uporabite ,mknod`.)

   Potem lahko poenete program, ki bo odprl vao datoteko .plan za
   pisanje; odpiranje bo blokirano dokler nek drugi proces (namre
   fingerd) ne odpre .plan za branje. Zdaj lahko skozi to pipo poljete,
   kar pa elite, kar vam omogoa, da prikaete razlino informacijo
   .plan vsaki, ko vas nekdo potipa. Eden od programov za to je paket
   ,,planner``, objavljen v volume 41 arhivov comp.sources.misc.

   Seveda to sploh ne bo delovalo, e va sistem ne podpira imenovanih
   cevi ali, e va lokalni fingerd vztraja, da imate navadne datoteke
   .plan.

   Va program lahko tudi izkoristi prilonost in pogleda v izhod
   programa ,,netstat``, ter s tem ugotovi, odkod prihaja zahteva za
   finger, toda to vam ne bo izdalo identitete oddaljenega uporabnika.

   e elite dobiti oddaljeni userid, mora oddaljena stran poganjati
   identifikacijski strenik, kot je RFC 931. Trenutno obstajajo tri
   implementacije RFC 931 za popularne stroje BSD, in nekaj aplikacij
   (kot ftpd z wuarchive), ki podpirajo ta strenik. Za ve informacij se
   prikljuite elektronskemu spisku rfc931-users z obiajno zahtevo
   ,,subscribe`` na rfc931-users-request@kramden.acf.nyu.edu.

   Glede tega odgovora obstajajo tri opozorila. Prvo je, da mnogi sistemi
   NFS napano prepoznajo imenovano cev. To pomeni, da bo poskus branja
   cevi na drugem stroju lahko blokiral, dokler ne potee predviden as,
   ali videl cev kot datoteko doline 0, in je ne bo nikoli izpisal.

   Drugi problem je, da na veliko sistemih strenik fingerd preveri, ali
   datoteka .plan vsebuje podatke (in je bralna), preden jo poskua
   brati. V tem primeru bodo oddaljeni klici finger popolnoma zgreili
   vao datoteko .plan.

   Tretji problem je, da imajo sistemi, ki podpirajo imenovane cevi, na
   voljo v danem asu le fiksno (konno) tevilo le-teh - preverite
   nastavitveno datoteko jedra in izbiro FIFOCNT. e tevilo cevi na
   sistemu prekorai vrednost FIFOCNT, sistem preprei izdelavo novih
   cevi, dokler nekdo ne sprosti virov. Razlog za to je, da je vmesni
   pomnilnik odmerjen v pomnilniku, ki se ne preklaplja (angl. buffers
   are allocated in a non-paged memory).

5.10 Je mogoe ponovno prikljuiti proces na terminal, ko je bil ta odklopljen,
tj. po zagonu programa v ozadju in odjavi?

Subject: Is it possible to reconnect a process to a terminal ... ?
Date: Thu Mar 18 17:16:55 EST 1993

   Veina razliic Unixa ne podpira ,,odklopa`` in ,,priklopa`` procesov
   (angl. detaching/attaching processes), kot ju podpirajo operacijski
   sistemi kot sta VMS in Multics. Vendar obstajajo prosto dostopni
   paketi, s katerimi lahko poenete procese na taken nain, da se lahko
   pozneje spet pritrdijo na terminal.

     * Prvi tak paket je ,,screen``, ki je opisan v arhivih
       comp.sources.unix kot ,,Screen, multiple windows on a CRT`` (slov.
       ,,Zaslon, ve oken na CRT`` - glejte paket screen-3.2 v
       comp.sources.misc, volume 28). Ta paket bo tekel vsaj na sistemih
       BSD, System V r3.2 in SCO UNIX.
     * Drugi je ,,pty``, ki je v arhivih comp.sources.unix opisan kot
       ,,Run a program under a pty session`` (slov. ,,Poenite program v
       seji pty`` - glejte pty v volume 23). Nartovan je le za uporabo v
       sistemih, podobnih BSD.
     * Tretji je ,,dislocate``, ki je skript, priloen distribuciji
       expect. Za razliko od prejnjih dveh bi moral ta tei na vseh
       razliicah Unixa. Podrobnosti o tem, kako dobite expect najdete v
       vpraanju ,,Kako poenem passwd, ftp, telnet, tip in druge
       interaktivne programe v skriptu ukazne lupine v ozadju?``.

   Nobeden od teh paketov ne deluje retroaktivno, se pravi, da morate
   pognati proces pod pripomokom screen ali pty, e ga elite odklopiti
   in priklopiti.

5.11 Je mogoe ,,vohuniti`` na terminalu, gledajo izhod, ki se prikazuje na
drugem terminalu?

Subject: Is it possible to "spy" on a terminal ... ?
Date: Wed, 28 Dec 1994 18:35:00 -0500

   Za to obstaja ve razlinih poti, eprav nobena od njih ni popolna:
     * Pripomoek kibitz dovoljuje dvema (ali ve) lovekoma, da sta v
       stiku prek ukazne lupine (ali poljubnega programa). Uporaba
       vkljuuje:
          + opazovanje ali pomo pri terminalski seji druge osebe;
          + beleenje pogovora z monostjo pomika nazaj, shranjevanje
            pogovora, in celo spreminjanje med tekom;
          + motveno igranje iger, urejanje dokumentov ali druga
            opravila, pri katerih ima vsaka oseba doloene kvalitete in
            doloene pomanjkljivosti, ki se komplementirajo.
       kibitz pride kot del distribucije expect. Glejte ,,Kako poenem
       passwd, ftp, telnet, tip in druge interaktivne programe v skriptu
       ukazne lupine v ozadju?``.
       Za uporabo pripomoka kibitz potrebujete dovoljenje osebe, ki jo
       elite vohuniti. Vohunjenje brez privolitve zahteva manj prijetne
       pristope:
     * Napiete lahko program, ki brska po strukturah jedra in opazuje
       izhodni vmesni pomnilnik spornega terminala, ter pri tem izpisuje
       znake, kot se izpisujejo na izhod. To oitno ni nekaj, kar naj bi
       poskual kdorkoli, ki nima izkuenj pri delu okoli jedra
       operacijskega sistema Unix. e ve, katerokoli metodo boste e
       uporabili, bo verjetno zelo neprenosljiva.
     * e elite to poeti ves as na doloenem pritrjenem terminalu
       (npr. e elite, da bodo lahko operaterji preverili zaslonski
       terminal stroja z drugih strojev), lahko dejansko poveete monitor
       s terminalskim kablom. Na primer, vtaknite izhod monitorja v
       serijska vrata drugega stroja, in na teh vratih poenite program,
       ki bo nekam shranil svoj vhod in ga potem prenesel na druga vrata,
       tista, ki gredo zares na fizini terminal. e to ponete, se
       morate prepriati, da se ves izhod terminala poilja nazaj po
       ici, e povezujete le ice raunalnik->terminal, to ni problem.
       To ni nekaj, kar bi lahko poel nekdo, ki ni doma z napeljavo
       terminalskih ic in podobno.
     * Zadnja razliica paketa screen vkljuuje veuporabniki nain.
       Nekaj podatkov o paketu screen najdete v vpraanju ,,Je mogoe
       ponovno prikljuiti proces na terminal, ko je bil ta odklopljen,
       tj. po zagonu programa v ozadju in odjavi?``.
     * e ima sistem, ki ga uporabljate, tokove (SunOS, SVR4), vam kot
       nasvet priporoamo program, objavljen v volume 28 arhiva skupine
       comp.sources.misc. In ni ga treba najprej zagnati (vnaprej morate
       nastaviti va sistem, da samodejno potisne modul advise na tok
       vsaki, ko se odpre tty ali pty).
     _________________________________________________________________


6. Vpraanja, povezana z razlinimi ukaznimi lupinami in njihovimi razlikami

6.1 Se lahko ukazne lupine klasificirajo v kategorije?

Subject: Can shells be classified into categories?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500

   V splonem obstajata dva glavna razreda ukaznih lupin. Prvi razred
   sestavljajo lupine, izpeljane iz Bournove ukazne lupine, in vkljuuje
   sh, ksh, bash in zsh. Drugi razred sestavljajo ukazne lupine,
   izpeljane iz C-jevske in vkljuuje csh in tcsh. Kot dodatek je tukaj
   e rc, za katero veina ljudi meni, da je ,,razred zase``, eprav
   nekateri lahko ugovarjajo, da rc spada v razred Bournovih ukaznih
   lupin.

   Z zgornjo klasifikacijo in nekaj previdnosti je mogoe napisati
   skripte, ki bodo delovali v vseh ukaznih lupinah Bournove lupinske
   kategorije, in napisati druge skripte, ki bodo delovali v vseh ukaznih
   lupinah C-jevske lupinske kategorije.

6.2 Kako ,,vkljuim`` en skript ukazne lupine iz drugega lupinskega skripta?

Subject: How do I "include" one shell script from within another shell script?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500

   Vse ukazne lupine Bournove kategorije (vkljuno z rc) uporabljajo ukaz
   ,,.``. Vse ukazne lupine C-jevske kategorije uporabljajo ,,source``.

6.3 Ali vse ukazne lupine podpirajo vzdevke (angl. aliases)? Lahko uporabimo
tudi kaj drugega?

Subject: Do all shells have aliases?  Is there something else that can be used?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500

   Vse pomembneje ukazne lupine, razen sh, podpirajo vzdevke, a vse ne
   delajo z njimi na enak nain. Na primer, nekateri ne sprejemajo
   argumentov.

   eprav niso strogo ekvivalentne, imajo funkcije ukaznih lupin (ki
   obstajajo v veini ukaznih lupin Bournove kategorije) skoraj isto
   funkcionalnost, kot vzdevki. Funkcije v ukaznih lupinah lahko ponejo
   stvari, ki jih vzdevki ne morejo. Funkcije ne obstajajo v Bournovih
   ukaznih lupinah, izpeljanih iz Unixa Version 7, ki vkljuuje System
   III in BSD 4.2. BSD 4.3 in System V imata ukazne lupine s podporo
   funkcij.

   Uporabite unalias za odstranitev vzdevkov (nastalih z alias) in unset
   za odstranitev funkcij.

6.4 Kako se prirejajo spremenljivke ukaznih lupin?

Subject: How are shell variables assigned?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500

   Ukazne lupine C-jevske kategorije uporabljajo

set spremenljivka=vrednost

   za spremenljivke, lokalne ukazni lupini, in

setenv spremenljivka vrednost

   za okoljske spremenljivke. Spremenljivk se v teh ukaznih lupinah
   znebite z uporabo ukazov unset in unsetenv.

   Ukazne lupine Bournove kategorije uporabljajo

spremenljivka=vrednost

   in morda potrebujejo tudi

export IME_SPREMENLJIVKE

   da postavijo spremenljivko v okolje. Spremenljivk se znebite z unset.

6.5 Kako ugotovim, ali poganjam interaktivno ukazno lupino?

Subject: How can I tell if I am running an interactive shell?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
From: dws@ssec.wisc.edu (DaviD W. Sanderson)
Date: Fri, 23 Oct 92 11:59:19 -0600

   V ukaznih lupinah C-jevske kategorije, poglejte spremenljivko $prompt.

   V Bournovi kategoriji ukaznih lupin lahko pogledate spremenljivko
   $PS1, vendar je bolj pogledati spremenljivko $-. e $- vsebuje ,-i`,
   je ukazna lupina interaktivna. Preverite takole:

case $- in
*i*)    # izvedi stvari za interaktivno ukazno lupino
        ;;
*)      # izvedi stvari za neinteraktivno ukazno lupino
        ;;
esac

6.6 Katere datoteke ,,s piko`` uporabljajo razline ukazne lupine?

Subject: What "dot" files do the various shells use?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
From: tmb@idiap.ch (Thomas M. Breuel)
Date: Wed, 28 Oct 92 03:30:36 +0100

   eprav ta seznam morda ni popoln, ponuja veino informacij.

   csh
          Nekatere razliice imajo sistemski datoteki .cshrc in .login.
          Vsaka razliica jih postavlja na razlina mesta.

          Ob nastopu (v tem vrstnem redu):

          + .cshrc - vedno; razen ob uporabi izbire -f.
          + .login - prijavne ukazne lupine.

          Ob prekinitvi:

          + .logout - prijavne ukazne lupine.

          Ostalo:

          + .history - shranjuje zgodovino (temelji na $savehist).

   tcsh
          Ob nastopu (v tem vrstnem redu):

          + /etc/csh.cshrc - vedno.
          + /etc/csh.login - prijavne ukazne lupine.
          + .tcshrc - vedno.
          + .cshrc - e manjka .tcshrc.
          + .login - prijavne ukazne lupine.

          Ob prekinitvi:

          + .logout - prijavne ukazne lupine.

          Ostalo:

          + .history - shranjuje zgodovino (temelji na $savehist).
          + .cshdirs - shranjuje sklad imenikov.

   sh
          Ob nastopu (v tem vrstnem redu):

          + /etc/profile - prijavne ukazne lupine.
          + .profile - prijavne ukazne lupine.

          Ob prekinitvi:

          + katerikoli ukaz (ali skript), doloen z ukazom:

trap "ukaz" 0

   ksh
          Ob nastopu (v tem vrstnem redu):

          + /etc/profile - prijavne ukazne lupine.
          + .profile - prijavne ukazne lupine; razen ob uporabi izbire
            -p.
          + $ENV - vedno, e je nastavljena; razen ob uporabi izbire -p.
          + /etc/suid_profile - ob uporabi izbire -p.

          Ob prekinitvi:

          + katerikoli ukaz (ali skript), doloen z ukazom:

trap "ukaz" 0

   bash
          Ob nastopu (v tem vrstnem redu):

          + /etc/profile - prijavne ukazne lupine.
          + .bash_profile - prijavne ukazne lupine.
          + .profile - prijavne ukazne lupine, e ni datoteke
            .bash_profile.
          + .bashrc - interaktivne neprijavne ukazne lupine.
          + $ENV - vedno, e je nastavljena.

          Ob prekinitvi:

          + .bash_logout - prijavne ukazne lupine.

          Drugo:

          + .inputrc - inicializacija branja vrstic.

   zsh
          Ob nastopu (v tem vrstnem redu):

          + .zshenv - vedno, razen ob doloitvi izbire -f.
          + .zprofile - prijavne ukazne lupine.
          + .zshrc - interaktivne ukazne lupine, razen ob doloitvi
            izbire -f.
          + .zlogin - prijavne ukazne lupine.

          Ob prekinitvi:

          + .zlogout - prijavne ukazne lupine.

   rc
          Ob nastopu:

          + .rcrc - prijavne ukazne lupine.

6.7 Zanima me ve o razlikah med razlinimi ukaznimi lupinami.

Subject: I would like to know more about the differences ... ?
From: wicks@dcdmjw.fnal.gov (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500

   Zelo podrobna primerjava ukaznih lupin sh, csh, tcsh, ksh, bash, zsh,
   in rc je v datoteki dostopna po anonimnem FTP-ju z ve naslovov:
     * ftp://ftp.uwp.edu/pub/vi/docs/shell-100.BetaA.Z
     * ftp://utsun.s.u-tokyo.ac.jp/misc/vi-archive/docs/shell-100.BetaA.Z

   Ta datoteka primerja zastavice, programsko skladnjo, vhodno/izhodne
   preusmeritve in parametre/okoljske spremenljivke ukaznih lupin. Ne
   ukvarja pa se s tem, katere datoteke ,,s piko`` se uporabljajo in
   dedovanjem okoljskih spremenljivk in funkcij.
     _________________________________________________________________


7. Pregled razliic Unixa

7.1 Opozorilo in uvod

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Tue Aug 15 15:14:00 EDT 1995
X-Version: 2.9

   Opozorilo bralcem: Rad bi osveil ta PZV s spletnimi kazalci na
   razline Unixe, ki jih omenjam. Ne oklevajte s poiljanjem, slej ko
   prej bom konal osveitev tega dela. E-pota: lew@bnr.ca.

   Nadaljnje besedilo je ponujeno brez zagotovitve tonosti ali
   popolnosti. Storil sem, kar sem lahko storil v asu, ki ga imam na
   voljo, pogosto z nasprotujoimi si informacijami, in delo e vedno
   napreduje. Upam, da bom nadaljeval z izboljevanjem tega povzetka.
   Komentarji in popravki so dobrodoli: lew@bnr.ca.

   Najprej kratka definicija. Z imenom ,,Unix`` mislimo operacijski
   sistem, tipino napisan v C-ju, s hierarhino urejenim datotenim
   sistemom, integracijo V/I za datoteke in naprave, katerega vmesnik
   sistemskih klicev vkljuuje storitve kot sta fork(), pipe(), in
   katerega uporabniki vmesnik vkljuuje orodja kot so cc, troff, grep,
   awk, in izbiro ukazne koljke. Opazite, da je ,,UNIX`` registrirana
   blagovna znamka podjetja USL (AT&T), zdaj v lasti konzorcija X/Open, a
   bo tukaj uporabljana v svojem generinem pomenu.

   Veina Unixov je izpeljanih bolj ali manj neposredno iz izvorne kode,
   napisane v AT&T (zdaj Novell, verjetno je v veini e vedno kaken
   ostanek prvotne kode prve razliice v C-ju), a obstajajo tudi kloni
   (se pravi, z Unixom zdruljivi sistemi brez kode AT&T).

   Kot dodatek, obstajajo okolja, podobna Unixu (npr. VOS), ki poivajo
   na drugih operacijskih sistemih (OS), in OS, ki jih je navdihnil Unix
   (da, tudi DOS!). Teh tukaj ne obravnavamo. Le malo piemo o Unixih, ki
   delujejo v realnem asu (angl. real-time Unices), eprav nartujemo
   ve.

   Unix pride v izredno razlinih okusih. To je v veliki meri posledica
   dostopnosti izvorne kode in preprostosti prenosa in spremembe Unixa.
   Tipino, izdelovalec Unixa zane z eno osnovnih vrst (glejte spodaj),
   vzame ideje/kodo od druge veje vrste, doda in spremeni veliko stvari,
   itd. Rezultat je e ena nova vrsta Unixa. Dandanes je na voljo
   dobesedno na stotine Unixov, najblija stvar standardnemu Unixu je (po
   definiciji) System V.

   Ta odgovor je bil napisan predvsem iz podatkov na Mrei in e-poti.
   Nekaj posebnih virov je omenjenih v ustreznih razdelkih.

   Priznanja (poleg virov): pat@bnr.ca, guy@auspex.com,
   pen@lysator.liu.se, mikes@ingres.com, mjd@saul.cis.upenn.edu,
   root%candle.uucp@ls.com, ee@atbull.bull.co.at,
   Aaron_Dailey@stortek.com, ralph@dci.pinetree.org,
   sbdah@mcshh.hanse.de, macmach@andrew.cmu.edu, jwa@alw.nih.gov
   [4.4BSD], roeber@axpvms.cern.ch, bob@pta.pyramid.com.au,
   bad@flatlin.ka.sub.org, m5@vail.tivoli.com, dan@fch.wimsey.bc.ca,
   jlbrand@uswnvg.com, jpazer@usl.com, ym@satelnet.org,
   merritt@gendev.slc.paramax.com, quinlan@yggdrasil.com,
   steve@rudolph.ssd.csd.harris.com, bud@heinous.isca.uiowa.edu,
   pcu@umich.edu, Dan_Menchaca@quickmail.apple.com,
   D.Lamptey@sheffield.ac.uk, derekn@vw.ece.cmu.edu,
   gordon@PowerOpen.org, romain@pyramid.com, rzm@dain.oso.chalmers.se,
   chen@adi.com, tbm@tci002.uibk.ac.at, sllewis@nando.net,
   edwin@modcomp.demon.co.uk, veliko ljudem, ki sem jih e pozabil
   nateti, in vsem drugim ljudem, katerih sporoila berem. Najlepa
   hvala!

7.2 Zelo kratek pogled na zgodovino Unixa

   Zgodovina Unixa se zane davnega leta 1969 na slavnem
   ,,malo-uporabljanem raunalniku PDP-7 v kotu`` na katerem so Ken
   Thompson, Dennis Ritchie (rka ,R` v ,,K&R``) in drugi zaeli delo na
   tem, kar je potem postalo Unix. Ime ,,Unix`` je bilo miljeno kot
   besedna igra imena obstojeega operacijskega sistema ,,Multics`` (in
   se je najprej pisalo ,,Unics`` - iz angl. UNiplexed Information and
   Computing System).

   Prvih 10 let je bil razvoj Unixa pravzaprav omejen na Bell Labs. Te
   prve razliice so bile oznaene kot ,,Version n`` ali ,,Nth Edition``
   (prironikov), in so delovale na raunalnikih DEC PDP-11 (16 bitov) in
   poznejih VAX-ih (32 bitov). Pomembneje razliice vkljuujejo:

     * V1 (1971): Prva razliica Unixa, v zbirniku na PDP-11/20.
       Vkljuevala je datoteni sistem, fork(), roff, ed. Uporabljana je
       bila kot urejevalnik besedila za pripravo patentov. Klic pipe() se
       je pojavil prvi v V2!
     * V4 (1973): Prepisan v C, kar je verjetno najpomembneji dogodek v
       zgodovini tega OS: pomeni, da se Unix lahko prenaa na novo
       strojno opremo v nekaj mesecih, spremembe pa so preproste.
       Programski jezik C je bil prvotno nartovan za operacijski sistem
       Unix, in torej obstaja mona sinergija med C-jem in Unixom.
     * V6 (1975): Prva razliica Unixa, iroko dostopna zunaj ustanove
       Bell Labs (posebej na univerzah). To je bil tudi zaetek
       raznolikosti in popularnosti Unixa. 1.xBSD (PDP-11) je bil
       izpeljan iz te razliice. J. Lions je objavil svoj ,,Komentar o
       operacijskem sistemu Unix``, ki temelji na V6.
     * V7 (1979): Za veliko ljudi je to ,,zadnji pravi Unix``, ali
       ,,izboljanje glede na vse prejnje in prihodnje Unixe`` [Bourne].
       Vkljueval je popoln K&R C, uucp, Bournovo ukazno lupino. V7 je
       bil prenesen na VAX kot 32V. Jedro V7 je bilo veliko borih 40
       Kbytov!
       Tukaj so (za referenco) sistemski klici V7: _exit, access, acct,
       alarm, brk, chdir, chmod, chown, chroot, close, creat, dup, dup2,
       exec*, exit, fork, fstat, ftime, getegid, geteuid, getgid, getpid,
       getuid, gtty, indir, ioctl, kill, link, lock, lseek, mknod, mount,
       mpxcall, nice, open, pause, phys, pipe, pkoff, pkon, profil,
       ptrace, read, sbrk, setgid, setuid, signal, stat, stime, stty,
       sync, tell, time, times, umask, umount, unlink, utime, wait,
       write.

   Omenjene razliice Vn je razvila skupina Computer Research Group (CRG)
   ustanove Bell Labs. Druga skupina, Unix System Group (USG), je
   odgovorna za podporo. Tretja skupina pri Bell Labs je bila tudi
   vpletena v razvijanje Unixa, Programmer's WorkBench (PWB), kateri se
   moramo zahvaliti, na primer, za sccs, poimenske cevi (angl. named
   pipes) in druge pomembne zamisli. Obe skupini sta se leta 1983
   zdruili v Unix System Development Lab.

   Druga razliica Unixa je bila CB Unix (Columbus Unix) s kolumbijske
   veje Bell Labs, odgovorne za sisteme za podporo operacij. Njihov
   glavni prispevek je del SV IPC.

   Delo na Unixu v Bell Labs se je v osemdesetih nadaljevalo. Serije V je
   naprej razvijala skupina CRG (Stroustrup omenja V10 v drugi izdaji
   njegove knjige o C++), a sicer ne sliimo veliko o tem. Podjetje, zdaj
   odgovorno za Unix (System V) se imenuje Unix System Laboratories (USL)
   in je bilo v veinski lasti koncerna AT&T do zaetka leta 1993, ko ga
   je kupil Novell. Konec leta 1993 je Novell odstopil pravice do uporabe
   blagovne znamke ,,UNIX`` mednarodnemu zdruenju X/Open.

   A z Unixom se je veliko dogajalo zunaj AT&T, posebej na univerzi
   Berkeley (s koder prihaja druga veja vrsta Unixa). Proizvajalci
   (predvsem delovnih postaj) so prav tako prispevali veliko (npr. NFS
   podjetja Sun).

   Knjiga ,,Life with Unix`` Dona Libesa in Sandy Ressler je fascinantno
   branje za vsakogar, ki ga zanima Unix, in pokriva veliko zgodovine,
   posredovanj, itd. Dobren del tega razdelka je povzetega po tej
   knjigi.

7.3 Glavne vrste Unixa

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Mon Jan  9 16:59:14 EST 1995
X-Version: 2.7

   Naslednje je bolj ali manj pogled zgodnjih 90-ih.

   Do nedavnega sta obstajali dve glavni vrsti Unixa: System V (pet)
   podjetja AT&T, in Berkeley Software Distribution (BSD). SVR4 je
   pravzaprav meanica obeh teh vrst. Konec 1991 je bil pri Open Software
   Foundation izdan OSF/1 (kot neposreden tekmec Systemu V) in lahko
   (prihodnost bo povedala) spremeni to sliko.

   V nadaljevanju sledi pregled glavnih izdaj in lastnosti sistemov
   System V, BSD in OSF/1.

   System V podjetja AT&T. Tipino na strojni opremi Intela. Najbolj
   prenaani Unix, tipino z raziritvami BSD (csh, nadzor opravil,
   termcap, curses, vi, simboline povezave). Evolucijo Systema V zdaj
   nadzoruje Unix International (UI). lanstvo UI vkljuuje AT&T, Sun,
   ... Noviarski skupini: comp.unix.sysv286 in comp.unix.sysv386. Glavne
   izdaje:
     * System III (1982): prvi komercialni Unix podjetja AT&T
          + vrste FIFO (imenovane cevi) (pozneje?)
     * System V (1983):
          + paket IPC (shm, msg, sem)
     * SVR2 (1984):
          + funkcije ukazne lupine (sh)
          + SVID (definicija vmesnika System V, angl. System V Interface
            Definition)
     * SVR3 (1986) za platforme ?:
          + tokovi (STREAMS, navdih pri V8), poll(), TLI (omreno
            programje)
          + RFS
          + deljene programske knjinice
          + SVID 2
          + prenos pomnilnikih strani na zahtevo (angl. demand paging),
            e strojna oprema to podpira
     * SVR3.2:
          + zdruitev s Xenixom (Intel 80386)
          + omreenost
     * SVR4 (1988), glavni tok implementacij Unixa, meanica sistemov
       System V, BSD, in SunOS.
          + S SVR3: sistemska administracija, terminal I/F, tiskalnik (z
            BSD-ja?), RFS, STREAMS, uucp
          + Z BSD-ja: FFS, TCP/IP, vtii (angl. sockets), select(), csh
          + S SunOS: NFS, grafini vmesnik OpenLook, X11/NeWS, podsistem
            navideznega pomnilnika z datotekami, ki ustrezajo pomnilniku,
            deljene knjinice (!= od SVR3?)
          + ksh
          + ANSI C
          + internacionalizacija (8-bitno ist)
          + ABI (Application Binary Interface - rutine namesto trapov (?
            angl. routines instead of traps))
          + POSIX, X/Open, SVID3
     * SVR4.1
          + asinhron V/I (s SunOS?)
     * SVR4.2 (temelji na SVR4.1ES)
          + datoteni sistem Veritas, ACL-ji
          + dinamino nalaganje modulov jedra
     * Prihodnost:
          + SVR4 MP (veprocesorski)
          + uporaba mikrojedra Chorus

   Berkeley Software Distribution (BSD, distribucija programja z
   Berkeleya). Tipina na VAX-ih, RISC-ih, ve delovnih postajah. Zdaj
   bolj dinamine, raziskovalne razliice kot System V. BSD Unix je
   odgovoren za veino priljubljenosti Unixa. Veina izboljav Unixa se
   je zaela tukaj. Skupina, odgovorna na UCB (University of California,
   Berkeley) je Computer System Research Group (CSRG). Ukinili so jo leta
   1992. Noviarska skupina: comp.unix.bsd. Glavne izdaje:

     * 2.xBSD (1978) za PDP-11, e vedno pomemben? (2.11BSD je bil izdan
       1992!).
          + csh
     * 3BSD (1978):
          + navidezni pomnilnik
     * 4.?BSD:
          + termcap, curses
          + vi
     * 4.0BSD (1980).
     * 4.1BSD (?): osnova za pozneje razliice AT&T CRG
          + nadzor opravil
          + samodejna nastavitev jedra
          + vfork()
     * 4.2BSD (1983):
          + TCP/IP, vtii, ethernet
          + datoteni sistem UFS: dolga imena datotek, simboline
            povezave
          + novi zanesljivi signali (v SVR3 zdaj zanesljivi signali 4.1)
          + select()
     * 4.3BSD (1986) za VAX, ?:
          + TCP/IP, vtii, ethernet
          + datoteni sistem UFS: dolga imena datotek, simboline
            povezave
          + novi zanesljivi signali (v SVR3 zdaj zanesljivi signali 4.1)
          + select()
     * 4.3 Tahoe (1988): 4.3BSD z izvorno kodo, podpora za Tahoe
       (32-bitni supermini)
          + Fat FFS
          + novi algoritmi za TCP
     * 4.3 Reno (1990) za VAX, Tahoe, HP 9000/300:
          + veina standarda POSIX 1003.1
          + novi algoritmi za TCP
          + omreni datoteni sistem NFS (od Suna)
          + pomnilniki datoteni sistem MFS
          + OSI: TP4, CLNP, ISODE-ov FTAM, VT in X.500; SLIP
          + Kerberos
     * Trakova Net1 (?) in Net2 (junij 1991): del BSD, za katerega ni
       potrebna pravna zaita razirjanja USL
     * 4.4BSD (alpha, junij 1992) za HP 9000/300, Sparc, 386, DEC, drugi;
       niti VAX, niti Tahoe; dve razliici, lahka (vsebina  Net2 plus,
       popravki in nove arhitekture) in oteeno (vse, potrebuje licenco
       USL):
          + nov navidezni pomnilniki sistem (VMS), ki temelji na Mach
            2.5
          + vmesnik navideznega datotenega sistema, logino strukturiran
            datoteni sistem, velikost lokalnega datotenega sistema do
            2^63, NFS (prosto razirljiv, deluje s Suni, ez UDP ali TCP)
          + podpora omrejem ISO/OSI (izpeljanim iz ISODE):
            TP4/CLNP/802.3 in TP0/CONS/X.25, seje in zgornje v
            uporabnikem prostoru (angl. session and above in user
            space); FTAM, VT, X.500.
          + veina POSIX.1 (posebej nov terminalski gonilnik a la SV),
            veliko od POSIX.2, izboljan nadzor opravil; glave ANSI C
          + Kerberos integriran z veino sistema (vkljuno z NFS)
          + izboljave TCP/IP (vkljuno s predvidevanjem glave (angl.
            header prediction), SLIP)
          + pomembne spremembe jedra (nov dogovor o sistemskih klicih,
            ...)
          + druge izboljave: vrste FIFO, zaklepanje datoteke v doloenem
            obmoju bytov (angl. byte-range file locking)

   Ustanova Open Software Foundation (OSF) je konec leta 1991 izdala svoj
   Unix imenovan OSF/1. e vedno potrebuje licenco SVR2.
   Zdruljiv/podrejen SVID 2 (in prihajajoi 3), POSIX, X/Open, itd.
   lani OSF vkljuujejo Apollo, Dec, HP, IBM, ...

     * OSF/1 (1991):
          + poiva na jedru Mach 2.5
          + simetrino multiprocesiranje, paralelizirano jedro, niti
          + logini diski, zrcaljenje diska (angl. disk mirroring), UFS
            (domoroden), S5 FS, NFS
          + izboljana varnost (B1 z nekaterimi lastnostmi B2, B3; ali
            C2), 4.3BSD admin
          + STREAMS, TLI/XTI, vtii (angl. sockets)
          + deljene knjinice, dinamini nalagalnik (vkljuno z jedrom)
          + grafini vmesnik Motif
     * izdaja 1.3 (junij 1994)
          + OSF/1 MK (mikro-jedro) temelji na Mach 3.0
          + zadoa trenutnemu osnutku specifikacije Specification 1170
            (miljeno za standardizacijo v procesu Fast Track konzorcija
            X/Open)
          + Data Capture I/F, Common Data Link I/F,
          + podpora ISO 10646 (Unicode) in 64-bitna podpora

   Ta seznam vejih vrst bi moral verjetno vkljuevati tudi Xenix
   (Microsoft), ki je bil osnova za mnoge prenose. Izpeljan je bil iz V7,
   S III in konno System V, na zunaj jim je podoben, a znatno spremenjen
   navznoter (zmogljivosti so uglaene za mikroraunalnike).

   Dve zelo dobri knjigi opisujeta notranjo sestavo dveh glavnih vrst. Ti
   knjigi sta:
     * System V: ,,Design of the Unix Operating System``, M. J. Bach.
     * BSD: ,,Design and Implementation of the 4.3BSD Unix Operating
       System``, Leffler, McKusick, Karels, Quaterman

   Za dober uvod v OSF/1 (ne tako tehnien kot prejnji dve knjigi),
   glejte: ,,Guide to OSF/1, A Technical Synopsis``, izdano pri zalobi
   O'Reilly. Na SunOS, ,,Virtual Memory Architecture in SunOS`` in
   ,,Shared Libraries in SunOS`` v spisih ,,USENIX Proceedings``, poletje
   1989.

   Dober nabor lankov o prihodnosti Unixa je ,,Unix Variants`` v izdaji
   revije Unix Review, april 1992. Drugi dobri viri informacij
   vkljuujejo datoteko bsd-faq in mnoge noviarske skupine, omenjene v
   besedilu.

7.4 Glavni igralci in standardi Unixa

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Mon Jan 21 16:59:14 EST 1995
X-Version: 2.8

   Najpomembneji igralci na odru Unixa so trenutno (zgodnje leto 1995,
   popravki so zelo dobrodoli, to so novi byti):
     * Novell, ki je kupil USL (zgodaj 1993) in ima zdaj izvorno kodo.
     * X/Open, ki ima trne pravice do uporabe blagovne znamke ,,UNIX``.
     * OSF, kot razvijalec OSF/1 in Motif, in kot organizacija, ki vodi
       projekt CODE (OSF-jev nov delovni model). Organizacija OSF je bila
       reorganizirana leta 1994 (in Sun se je prikljuil), odnosi z
       X/Open so bili formalizirani.
     * IEEE s standardi POSIX, LAN.
     * PowerOpen (IBM, Apple, Motorola, Bull, drugi), ki promovira
       PowerPC. Ne zameajte ga z grafinim okoljem z istim imenom.

   Naslednje kratko opisuje najpomembneje standarde, ki se nanaajo na
   Unix.

     * IEEE:
          + standardi 802.x (LAN) (LLC, ethernet, token ring, token bus)
          + POSIX (ISO 9945?): Portable Operating System I/F - prenosljiv
            vmesnik operacijskega sistema (Unix, VMS in OS/2!) (samo ? ti
            so bili do sedaj konani)
               o 1003.1: knjinine procedure (veinoma sistemski klici)
                 - priblino V7 razen za signale in terminalski vmesnik
                 (1990)
               o 1003.2: ukazna lupina in pripomoki
               o 1003.3: testne metode in ustreznost
               o 1003.4: realni as: binarni semaforji, zaklepanje
                 pomnilnika procesa, v pomnilnik preslikane datoteke,
                 deljen pomnilnik, razporejanje prioritet, signali v
                 realnem asu, ure in asomerilci, podajanje sporoil
                 IPC, sinhroniziran V/I, asinhron V/I, datoteke v realnem
                 asu
               o 1003.5: povezave jezika Ada
               o 1003.6: varnost
               o 1003.7: sistemsko upravljanje (vkljuuje tiskanje)
               o 1003.8: transparenten dostop do datotek
               o 1003.9: povezave jezika FORTRAN
               o 1003.10: super-raunalnitvo
               o 1003.12: vmesniki, neodvisni od protokola
               o 1003.13: profili v realnem asu (angl. real-time
                 profiles)
               o 1003.15: vmesniki za super-raunalniki batch (?)
               o 1003.16: povezave jezika C (?)
               o 1003.17: storitve z imeniki
               o 1003.18: standardiziran profil po POSIX (?)
               o 1003.19: povezave jezika FORTRAN 90
     * X/Open (konzorcij proizvajalcev, ustanovljen 1984):
          + X/Open Portability Guides (XPGn) - vodniki po zdruljivosti z
            X/Open:
               o XPG2 (1987), moan vpliv SV
                    # Vol 1: ukazi in pripomoki
                    # Vol 2: sistemski klici in knjinice
                    # Vol 3: terminalski vmesnik (curses, termio), IPC
                      (SV), internacionalizacija
                    # Vol 4: programski jeziki (C, COBOL!)
                    # Vol 5: upravljanje s podatki (ISAM, SQL)
               o XPG3 (1989) dodaja: X11 API (sistemski klici za X11)
               o XPG4 (1992) dodaja: XTI? 22 komponent
          + zaporedja vmesnikov XOM:
               o XOM (X/Open Object Management) sploni mehanizmi
                 vmesnikov za naslednje
               o XDS (X/Open Directory Service)
               o XMH (X/Open Mail ??)
               o XMP (X/Open Management Protocols) - ne Bullov CM API?
          + X/Open ima zdaj pravice za uporabo blagovne znamke ,,UNIX``
            (pozno 1993);
          + ,,Spec 1170`` - ta specifikacija v pripravi opisuje skupen
            API (programski vmesnik aplikacij), ki mu bodo morali
            zadostiti proizvajalci, ki elijo uporabljati ime ,,UNIX``
            (ko bodo na voljo zbirke testov). Zdruitev SVID, OSF-jev AES
            in druge rei.
     * AT&T - (je to e relevantno leta 1994? Kdo je zdaj odgovoren za
       SVID, TLI, APLI?)
          + System V Interface Definition (SVID) - definicija vmesnika
            Systema V
               o SVID1 (1985, SVR2)
                    # Vol 1: sistemski klici in knjinice (podobno
                      XPG2.1)
               o SVID2 (1986, SVR3)
                    # Vol 1: sistemski klici in knjinice (osnova,
                      raziritve jedra)
                    # Vol 2: ukazi in pripomoki (osnovni, napredni,
                      upravniki, razvoj programja), terminalski vmesnik
                    # Vol 3: terminalski vmesnik (spet), STREAMS in TLI,
                      RFS
               o SVID3 (19??, SVR4) dodaja
                    # Vol 4: ?? &c
          + vmesniki API (programski vmesnik za aplikacije)
               o Transport Library Interface (TLI)
               o ACSE/Presentation Library Interface (APLI)
     * COSE (COmmon Open Software Environment - skupno okolje odprtega
       programja) [IBM, HP, SunSoft in drugi]: cilj je zbliati razline
       platforme Unixa. Iniciative v naslednjih podrojih:
          + namizna okolja
          + aplikacijski vmesnik API (kot Spec 1180 - en sam programski
            vmesnik) - verjetneje najpomembneji doseek na tej toki;
            odstrani razlike med SCO, AIX, Solaris, HP-UX, UnixWare.
          + porazdeljene raunske storitve (OSF-jev DCE in SunSoftov ONC)
          + objektne tehnologije (OMG-jeva CORBA)
          + grafika
          + vepredstavnost
          + upravljanje sistemov
     * PowerOpen Environment (POE, okolje PowerOpen), ki ga promovira
       zdruenje PowerOpen (POA). Standard za Unixu podobne OS, ki teejo
       na ipu PowerPC. Definira:
          + API (programski vmesnik za aplikacije, izpeljan iz AIX,
            ustreza POSIX, XPG4, Motif, &c) in
          + ABI (binarni aplikacijski vmesnik), razloljiv faktor med
            drugimi standardi kot so POSIX, XPG4, &c.. Katerikoli sistem,
            ki bo ustrezal POE, bo lahko poganjal katerokoli programje za
            POE.
       Kljune odlike:
          + zasnova na arhitekturi PowerPC
          + neodvisnost od strojnega vodila
          + implementacije sistema se lahko raztezajo od prenosnikov do
            super-raunalnikov
          + potrebuje veuporabniki, veopravilni operacijski sistem
          + omrena podpora
          + raziritve X windows, Motif
          + ustreznost preizkuena in potrjena od neodvisne stranke (POA)
       AIX 4.1.1 bo ustrezal PowerOpen. MacOS ne ustreza in tudi ne bo.
       (Zgornje je prirejeno iz powerpc-faq noviarske skupine
       comp.sys.powerpc.)

   IBM je vpleten v projekt COSE in v projekt POE. Kako neki bosta tadva
   sodelovala?

7.5 Ugotovitev vrste vaega Unixa

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Mon May 30 15:44:28 EDT 1994
X-Version: 2.6

   Ta razdelek nateva vrsto stvari, ki jih lahko pogledate v poskusu, da
   bi ugotovili osnovno vrsto vaega Unixa. Glede na precejnjo izmenjavo
   kode in idej med razlinimi vrstami in mnogih sprememb, ki so jih
   naredili proizvajalci, je vsaka izjava oblike ,,Ta Unix je tipa
   SVR2!`` v najboljem primeru statistina (razen nekaterih prenosov
   SVRn). Veliko Unixov ponuja tudi veino iz obeh svetov (pomeano, kot
   SunOS, ali striktno razloeno, kot Apollo?). Zato ta razdelek verjetno
   ni preve uporaben ...

   Pomaga vam lahko tudi seznam lastnosti iz prejnjih razdelkov. Na
   primer, e ima sistem poll(2), ne pa tudi select(2), je zelo verjetno,
   da izhaja iz SVR3. Namig vam lahko da tudi ime OS, kot tudi prijavno
   sporoilo (npr. SGI-jevo ,,IRIX SVR3.3.2``) ali izhod ukaza ,,uname
   -a``. Dostopni ukazi vam lahko tudi dajo namig, a to je verjetno manj
   zanesljivo kot lastnosti jedra. Na primer, tip terminalske
   inicializacije (inittab ali ttys) je bolj zanesljiv indikator, kot
   tiskalniki podsistem.

Lastnost            Tipino v SVRx          Tipino v xBSD

ime jedra           /unix                   /vmunix

terminalska
inicializacija      /etc/inittab            /etc/ttys (le getty do 4.3)

zagonska
inicializacija      imeniki /etc/rc.d       datoteke /etc/rc.*

mountani datoteni
sistem              /etc/mnttab             /etc/mtab

obiajna ukazna
lupina              sh, ksh                 csh, #! hack

domorodni dat.
sistem              S5 (blk: 512-2K)        UFS (blk: 4K-8K)
                    imena dat. <= 14 bytov  imena datotek < 255 bytov

skupine             potrebuje newgrp(1)     avtomatsko lanstvo
                    SVR4: ve skupin

tiskalniki
podsistem           lp, lpstat, cancel      lpr, lpq, lprm (lpd daemon) ??

nadzor terminala    termio, terminfo,       termios (sgtty pred 4.3reno)
                    SVR4: termios (POSIX)   termcap

nadzor opravil      >= SVR4                 da

ukaz ps             ps -ef                  ps -aux

vekratni wait      poll                    select

string fcns         memset, memcpy          bzero, bcopy

mapiranje
procesov            /proc  (SVR4)

   Ko se pomikamo v pozna 90-ta leta, je to verjetno vedno manj in manj
   relevantno.

7.6 Kratki opisi nekaterih znanih (komercialnih/prostih) Unixov

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Tue Aug 15 15:14:00 EDT 1995
X-Version: 2.9

   (Sploh nisem zadovoljen s tem razdelkom, al nimam niti asa, niti
   dokumentacije, da bi ga zelo izboljal. Vseboval naj bi le Unixe,
   znane iremu obinstvu. Majhni in neameriki Unixi so dobrodoli,
   npr. Eurix. Nujno preformatiranje.)

   Ta razdelek nateva (po abecedi) nekaj bolj znanih Unixov skupaj s
   kratkim opisom njihove narave. al je zastarel skoraj po definiciji
   ...

   AIX: IBM-ov Unix, temelji na SVR2 (pozneji na SVR3.2?) z raznimi
   stopnjami raziritev BSD za razlino strojno opremo. Lasten sistemski
   upravljalnik (SMIT). Podpira CP 850 in Latin-1. Precej razlien od
   veine Unixov in tudi med sabo. Noviarska skupina: comp.unix.aix.
     * 1.x (za 386 PS/2)
     * 2.x (za PC RT)
     * 3.x (za RS/6000), paging kernel, logical volume manager, i18n;
     * 3.2 dodaja TLI/STREAMS. Bazira na SV z veliko izboljavami.
     * 4.1 je zadnji (vkljuuje podporo za PowerPC?)
     * AIX/ESA, tee na raunalnikih mainframe S/370 in S/390, temelji na
       OSF/1. AIX bi moral biti osnova za OSF/1, a so namesto njega
       izbrali Mach. Upam, da ta podrazdelek konvergira. :-)

   AOS (IBM): Prenos 4.3BSD na IBM PC RT (za izobraevalne ustanove). Ne
   zameajte ga z DG-ovim OS istega imena.

   Arix: SV

   A3000UX (Commodore): Unix (?) SVR4 za raunalnike Amiga s procesorjem
   Motorola 68030.

   A/UX (Apple): SV z raziritvami z Berkeleya, NFS, Mac GUI. System 6
   (pozneje System 7) tee kot gost A/UX (obratno kot MachTen).
   Noviarska skupina: comp.unix.aux.
     * 2.0: SVR2 z 4.2BSD, aplikacije za Mac System 6.
     * 3.0 (1992): SVR2.2 z 4.3BSD in raziritvami SVR3/4; X11R4, MacX,
       TCP/IP, NFS, NIS, RPC/XDR, razline ukazne lupine, UFS ali S5FS.
       aplikacije za System 7.
     * 4.0 bo OSF/1. Toda sliim, da se je Apple odloil pustiti A/UX
       (zdaj bo skupaj z IBM uporabljal AIX za PPC).

   3B1 (680x0): Osnovan na SV, naredil Convergent za AT&T. Noviarska
   skupina: comp.sys.3b1.

   BNR/2: pomeni BSD Net/2 Release? Vkljuuje NetBSD/1, FreeBSD.

   BOS za Bullov DPX/2 (680x0)
     * V1 (1990): SVR3 z raziritvami BSD (FFS, select, vtii),
       simetrino MP, X11R3
     * V2 (1991): dodaja nadzor opravil, zrcaljenje diska, varnost C2,
       raziritve DCE
     * Obstaja tudi BOS/X, in z AIX zdruljiv Unix za delovne postaje
       Bull PPC. Ni znano, v kaknem sorodu je z zgornjima dvema.

   386BSD: Jolitzov prenos programja Net/2. POSIX, 32-biten, e vedno v
   stanju alpha (zdaj razliica 0.1).

   BSD/386 (80386): od BSDI, z izvorno kodo (naraslo programje Net2)
   Noviarska skupina: comp.unix.bsd.

   Chorus/MiXV: Unix SVR3.2 (SVR4) okoli zasnove Chorus, ABI/BCS.

   Coherent (Mark Williams Company): Za 80286. klon Unixa, zdruljiv z
   V7, nekaj SVR2 (IPC). V4.0 je 32-bitna. Noviarska skupina:
   comp.os.coherent. Mark Williams je ukinil podjetje v zgodnjem 1995.

   Consensys: SVR4.2

   CTIX: osnova SV, od podjetja Convergent

   D-NIX: SV

   DC/OSx (Pyramid): SVR4. Noviarska skupina: comp.sys.pyramid.

   DELL UNIX [DELL Computer Corp.]: SVR4

   DomainIX: glejte DomainOS spodaj.

   DomainOS (Apollo, zdaj HP): lasten OS; vrhnja plast je BSD4.3 in SVR3
   (proces lahko uporabi enega, nobenega ali oba). Razvoj je zdaj
   ustavljen, nekatere lastnosti so zdaj v OSF/1 (in NT). Zdaj na SR10.4.
   Ime za SR9.* je bilo DomainIX. Noviarska skupina: comp.sys.apollo.

   DVIX (NT-jev DVS): SVR2

   DYNIX (Sequent): na osnovi 4.2BSD

   DYNIX/PTX: na osnovi SVR3

   EP/IX (Control Data Corp.): za MIPS 2000/3000/6000/4000; osnova je
   RISC/OS 4 in 5, zadoa POSIX-ABI. Naini SVR3, SVR4 in BSD.

   Esix (80386): isti SVR4, X11, OpenLook (NeWS), Xview

   Eurix (80?86): SVR3.2 (Nemija)

   FreeBSD: 386bsd 0.1 s popravki in veliko osveenimi pripomoki.

   FTX: Stratus fault-tolerant OS (stroj 68K ali i860-i960)

   Generics UNIX (80386): SVR4.03 (Nemija)

   GNU Hurd (?): ,,vaporware`` Free Software Foundation (FSF): Emulator
   Unixa na jedru Mach 3.0. Veliko GNU-jevih orodij je zelo popularnih
   (Emacs) in uporabljanih v prostih Unixih.

   HELIOS (Perihelion Software): za transputer INMOS in veliko drugih
   platform.

   HP-UX (HP): stareji iz S III (SVRx), zdaj SVR2 (4.2BSD?) s pripomoki
   SV (imajo probleme z odloanjem).
     * 6.5: SVR2
     * 7.0: SVR3.2, symlinks
     * 7.5
     * 8.0: osnova BSD? za HP-9000 CISC (300/400) in RISC (800/700),
       delitev knjinic
     * 9.0: vkljuuje DCE

   Interactive SVR3.2 (80x86): isti SVR3. Interactive je kupil Sun; bo
   njihov sistem preivel Solaris?

   Idris: prvi klon Unixa, naredil ga je Whitesmith. Majhen Unix? Za
   transputerje INMOS in druge?

   IRIX (SGI): Razliica 4: SVR3.2, precej BSD. Razliica 5.x (trenutna
   je 5.2) temelji na SVR4. Noviarska skupina: comp.sys.sgi.

   Linux (386/486/586): Unix pod GNU Public License (vendar ne od FSF).
   Dostopen z izvorno kodo. Zadoa POSIX z raziritvami SysV in BSD.
   Prenaa se na Alpha/AXP in PowerPC (prenosi na Amige in Atarije s
   procesorji 680x0 e obstajajo; prenos se dela tudi na MIPS/4000).
   Noviarske skupine: comp.os.linux.{ admin, announce, development,
   help, misc}.

   MacBSD, ?: deluje na Mac II (neposredno na strojno opremo).

   MachTen, Tenon Intersystems: tee kot gost pod MacOS; okolje 4.3BSD s
   TCP, NFS. Pomanjana razliica: MachTen Personal.

   MacMach (Mac II): 4.3BSD na mikrojedru Mach 3.0, X11, Motif, programje
   GNU, izvorna koda, poskusni System 7 kot opravilo Mach. Popoln z vso
   izvorno kodo (potrebuje licenco Unix).

   Mach386: od Mt Xinu. Temelji na Mach 2.5, z raziritvami 4.3BSD-Tahoe.
   Tudi 2.6 MSD (Mach Source Distribution).

   Microport (80x86): isti SVR4, X11, OpenLook GUI

   Minix (80x86, Atari, Amiga, Mac): klon Unixa, zdruljiv z V7. Prodaja
   se z izvorno kodo. Se POSIXizira. Za PC-je in gotovo za veliko drugih
   (npr. transputer INMOS). Noviarska skupina: comp.os.minix.

   MipsOS: SV-jevski (RISC/OS, zdaj opuen, je bil BSD-jevski)

   more/BSD (VAX, HP 9000/300): Mt Xinu-ov Unix, temelji na 4.3BSD-Tahoe.

   NCR UNIX: SVR4 (4.2?)

   Net/2 tape (Berkeley, 1991): BSD Unix, posebej zdruljiv z 4.3BSD,
   vkljuuje le kodo, prosto kode AT&T, nobene nizkonivojske kode. Glejte
   386BSD in BSD/386 zgoraj.

   NetBSD 0.8: je pravzaprav 386bsd v novi obleki. Prenesen na
   raunalnike [34]86, MIPS, Amiga, Sun, Mac. Kakno je razmerje z Net/2?
     * 1.0 je prila ven v 1994

   NEXTSTEP (Intel Pentium in 86486, Hewlett-Packard PA-RISC, NeXT
   68040): BSD4.3 na jedru Mach, lastni grafini vmesnik.
     * 1.x, 2.0, 2.1, 2.2, 3.0, 3.1 (stare)
     * 3.2 (trenutna razliica, Intel Pentium in 86486, Hewlett-Packard
       PA-RISC, NeXT 68040)
     * 3.3 (prihaja; na voljo razliica za SPARC)
     * 4.0 (bo napovedana, vkljuevala bo razliico za Sun SPARC in bo
       upotevala OpenStep)
     * NEXTSTEP za PowerPC ali DEC Alpha e ni napovedan (ali ga
       nartujejo?)

   NEWS-OS (Sony)
     * 3.2

   OSF/1 (DEC): DEC-ov prenos OSF/1. Mislim, da je to zdaj (april 1993)
   dostopno na DEC-ovi zadnji 64-bitni Alphi AXP.

   OSx (Pyramid): Dvojni prenos SysV.3 in BSD4.3. Noviarska skupina:
   comp.sys.pyramid.

   PC-IX (IBM 8086): SV

   Plan 9 (AT&T): napovedan 1992, popoln ponoven napis, ni jasno, kako
   blizu Unixa je. Kljune toke: distribuiran, zelo majhen, razlini
   stroji (Sun, Mips, Next, SGI, generic hobbit, 680x0, PC-ji), C (ne
   C++, kot pravijo govorice), nov prevajalnik, okenski sistem ,,8 1/2``
   (tudi zelo majhen), 16-bitni Unicode, CPE/datoteni strenik na zelo
   hitrih omrejih.

   SCO Xenix (80x86): Razliice za XT (nerobustne!), 286, 386 (s
   preklapljanjem pomnilnika na zahtevo (angl. demand paging)). Danes je
   veino kode iz Systema V. Stabilen izdelek.

   SCO Unix (80x86): SVR3.2 (prenehal jemati kodo USL na tej toki).

   Sinix [Siemens]: osnova System V.

   Solaris (Sparc, x86):
     * 1.0: pravzaprav isti kot SunOS 4.1.1, z OpenWindows 2.0 in
       pripomoki DeskSet.
     * 1.0.1: SunOS 4.1.2 z multiprocesiranjem (jedro ni venitno); ni za
       386
     * 2.0: (sprva napovedovan kot SunOS 5.0 v 1988) poiva na SVR4 (s
       simetrinim MP?), vkljueval bo podporo za 386; z OpenWindows 3.0
       (X11R4) in OpenLook, DeskSet, ONC, NIS. Oba formata binarnih
       datotek: a.out (BSD) in elf (SVR4). Podpora za Kerberos.
       Prevajalniki odvezani!
     * Solaris zadoa OpenStep (ne-NeXT, toda z NEXTSTEP API) z zadnjo
       razliico (1994?).
     * Sun bo poslal svojo implementacijo OpenStep s projektom DOE za
       Solaris. Prve razliice bodo za Sunove stroje SPARC, toda pozneje
       se bo pojavila razliica za Solaris 2.4 za x86 in PowerPC.

   UHC (80x86): isti SVR4, X11, Motif

   Ultrix (DEC): temelji na 4.2BSD z veliko 4.3. Noviarska skupina:
   comp.unix.ultrix.
     * 4.4 je zadnja

   UNICOS (Cray): osnova System V. Noviarska skupina: comp.unix.cray.
     * 5.x, 6,x, 7.0

   UnixWare Release 4.2 [Univel]: SVR4.2; ez NetWare. Univel ne obstaja
   ve.

   UTEK (Tektronix)
     * 4.0

   VOLVIX (Archipel S.A.): OS na osnovi Unix, zgrajen okoli mikro-jedra
   temeljeega na komunikaciji, distribuciji in realnem asu. Sistemski
   klici SVR3.2, BSD4.4 datoteni/omreni sistemski klici (VFS, FFS).
   Tudi NFS in X11. Pravi VOLVIX je za transputerje.

   Xenix (80x86): Prvi Unix na Intelovi strojni opremi, temelji na SVR2
   (prej na S III in celo V7). Noviarska skupina: comp.unix.xenix.

7.7 Unixi, delujoi v realnem asu

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Tue Aug 15 15:14:00 EDT 1995
X-Version: 2.9

   Pozor! Ta razdelek hudo potrebuje dodatno delo. Je poln napak in je
   nepopoln. Upam, da ga bom imel as pogledati to zimo (bilo je ,,to
   jesen``). Dvomim, da so vsi spodnji res Unixi - prispevki so
   dobrodoli. Seznam tudi vkljuuje pogosteje Unixe z lastnostmi
   realnega asa, in nekatere ne-Unixake sisteme z Unixu podobnim API.
   Mislim, da zadnji ne spadajo zares sem, a ko sem e zbral nekaj
   podatkov jih noem zavrei. Glejte tudi noviarsko skupino
   comp.realtime.

   AIX: AIX/6000 ima podporo realnemu asu.

   Concurrent OS (Concurrent): pravi Unix, ki ga je Concurrent znatno
   spremenil.

   CX/UX: pravi UNIX, ki ga je znatno spremenil Harris, da bi ponujal
   zmonosti realnega asa. Zadoa konni razliici POSIX.4.

   EP/LX (Control Data): prenos sistema LynxOS na R3000. Prej se je
   imenoval TC/IX.

   LynxOS (Lynx Real-Time Systems, Inc): zdruljiv z Berkeley in SV,
   popoln ponoven napis (v lasti podjetja), prednik SVR5. Ni UNIX, a
   podpira veino vmesnikov Unixa (SV in BSD). Upoteva POSIX. Popolnoma
   predkupen (angl. preemptive), fiksne prioritete.

   MiX: implementacija SVR4 z mikrojedrom, izdelal Chorus.

   Motorola SVR4 ima zmonosti realnega asa.

   QNX (Quantum Software): realno asovni OS, zdruljiv z Unixom.

   REAL/IX: temelji na Systemu V 3.2 z odlikami RT features (povsem
   predkupno jedro, razporejevalnik fiksnih prioritet, asomerilec RT,
   &c.). Za sisteme, grajene na 68xxx in 88xxx. Ustreza POSIX (1003.1 -
   1988) in v obliki za 88k ustreza tudi 88open BCS. Dostopen tudi za
   x86/Pentium.

   RTMX O/S [RTMX Incorporated]: elementi NET2, 4.4BSD-Lite in lastne
   kode. Vkljuuje tudi orodja FSF. Raziritve realnega asa (POSIX).

   RTU (Concurrent), za katle z 68K

   Solaris 2 ima realno asovne zmonosti?

   Stellix (Stardent); je Unix, ali je tudi realno asovni?

   Venix/386: Interactive SVR3.2 z realno asovnimi raziritvami.

   VMEexec (Motorola): ni Unix, a deli nekatere vmesnike z Unixom.

   VxWorks (Wind River Systems): Malo skupnega z Unixom, le nekateri
   vmesniki (a ne datoteni sistem). Noviarska skupina: comp.os.vxworks.

   (o naslednjih ne vem niesar)

   Convex RTS

   REAL/IX (AEG)

   Sorix (Siemens)

   System V/86 (Motorola)

   TC/IX (CCD)

   Velocity (Ready Systems)

7.8 Slovarek Unixa

From: "Pierre (P.) Lewis" <lew@bnr.ca>
Date: Tue Aug 15 15:14:00 EDT 1995
X-Version: 2.9

   Ta razdelek ponuja kratke definicije razlinih konceptov in komponent
   sistemov Unix (ali: povezanih s sistemi Unix).

   Chorus: mikrojedro s prenosom sporoil (angl. message-passing
   microkernel), lahko predstavlja osnovo za prihodnje izdaje SV. Na
   Chorusu e teejo SVR4 (binarno zdruljivi).

   CORBA (Common Object Request Broker Architecture).

   COSE (Common Open Software Environment) [Sun, HP, IBM]: skupni videz
   in obutek (Motif - Sun bo pustil OpenLook odmreti), skupni API.
   Reakcija proti Windows NT. Glejte zgornji razdelek ,,Glavni igralci in
   standardi Unixa``.

   DCE (Distributed Computing Environment, od OSF): Vkljuuje RPC (NCS
   Apolla), imenike storitve (lokalne na DNS, globalne na X.500),
   asovne, varnostne in nitne storitve, DFS (distribuirani datoteni
   sistem), neodvisen od OS.

   DME (Distributed Management Environment, od OSF): prihodnost.

   DO (Distributed Objects [Enterprise]): ???.

   FFS (Fast File System): od Berkeley, 1983. Ekvivalent (toen?) UFS v
   SunOS. Ima pojme kot so skupine cilindrov, fragmenti.

   FSF (Free Software Foundation)

   Mach: sodobna jedra z univerze CMU (Carnegie Mellon University), na
   katerih temelji veliko Unixov in drugih OS (npr. OSF/1, MacMach, ...):
     * 2.5: monolitno jedro z 4.2BSD
     * 3.0: mikrojedro s strenikom BSD Unix v uporabnikem prostoru (in
       drugi OS, npr. MS-DOS)

   Noviarska skupina: comp.os.mach.

   MFS (Memory File System): pomnilniki datoteni sistem

   NeWS (Network extensible Window System), podjetja Sun?: temelji na
   PostScriptu, omreen, zbirke orodij (in tudi odjemnikov) naloenih v
   strenik. Del OpenWindows.

   NFS (Network File System): Sun je prispeval v BSD, strenik brez stanj
   (angl. stateless server)

   ONC (Open Network Computing): Sun(?), vkljuuje RPC, imenski strenik
   (NIS, znan tudi kot YP), NFS, ... (najdemo ga v veliko Unixih in
   drugih OS).

   OpenStep [NeXT, Sun]: ???

   PowerOpen: standard in organizacija za promocijo PowerPC. Vkljuuje
   IBM, Apple in Motorolo; drugi? Glejte zgornji razdelek ,,Glavni
   igralci in standardi Unixa``.

   PowerPC (PPC): procesorski ip RISC [IBM, Motorola].

   RFS (Remote File System): SV, strenik s stanji (angl. stateful
   server), nezdruljiv z NFS

   RPC (Remote Procedure Call): visoko-nivojski mehanizem IPC
   (med-procesna komunikacija). Dve vrsti.
     * ONC: ez TCP ali UDP (pozneje OSI), uporablja XDR za ifriranje
       podatkov.
     * DCE: ima drugaen mehanizem RPC (temelji na NCS Apolla)

   S5 FS: domorodni datoteni sistem Systema V, bloki od 512 bytov do 2
   Kb.

   sockets (vtii): BSD-jev vmesniki mehanizem za omreja (primerjajte s
   TLI).

   STREAMS: mehanizem podajanja sporoil, najprej v SVR3, ki poskrbi za
   zelo dober vmesnik za razvoj protokolov.

   TFS (Translucent File System): Sun, COW, uporabljen na datotekah.

   TLI (Transport Library Interface): vmesnik SV do transportnih storitev
   (TCP, OSI). UI je tudi definiral APLI (ACSE/Presentation Library
   Interface)

   UFS (?): domorodni sistem BSD, kot ga vidi SunOS, bloki od 4 Kb do 8
   Kb, skupine cilindrov, fragmenti.

   XTI (X/Open Transport Interface): TLI z izboljavami

   X11: okenski sistem z MIT-a, orientiran na pike
     _________________________________________________________________

   Naprej Nazaj Vsebina

   #previous contents

   Naprej Nazaj Vsebina
     _________________________________________________________________

8. Primerjava sistemov za upravljanje konfiguracij (RCS, SCCS).

8.1 RCS vs. SCCS: Uvod

Subject: RCS vs SCCS:  Introduction
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   V nedavni anketi je bila veina glasov v prid RCS, nekaj v prid SCCS,
   in nekaj predlaganih alternativ, kot je CVS.

   Funkcionalno sta RCS in SCCS praktino ekvivalentna. RCS ima nekaj ve
   odlik, saj se e naprej osveuje.

   Vedite tudi, da se je RCS uil na napakah SCCS ...

8.2 RCS vs. SCCS: Kako sta primerljiva vmesnika?

Subject: RCS vs SCCS:  How do the interfaces compare?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   RCS ima za nove uporabnike preprosteji vmesnik. Obstaja manj ukazov,
   je bolj intuitiven in konsistenten, in ponuja ve uporabnih
   argumentov.

   V SCCS morajo biti veje posebej ustvarjene. V RCS se preverjajo kot
   katerikoli druga razliica.

8.3 RCS vs. SCCS: Kaj je v datoteki popravkov?

Subject: RCS vs SCCS:  What's in a Revision File?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   RCS shranjuje zgodovino v datotekah s podaljkom ,,,v``. SCCS
   shranjuje zgodovino v datotekah s predpono ,,s.``.

   RCS v trenutnem imeniku in podimeniku za RCS samodejno poie datoteke
   za RCS, lahko pa doloite tudi kakno drugo datoteko za RCS.
   Uporabniki vmesnik sccs programa SCCS vedno uporablja imenik za SCCS.
   e ne uporabljate uporabnikega vmesnika sccs, morate doloiti polno
   ime datoteke za SCCS.

   RCS shranjuje svoje popravke tako, da vzdruje kopijo zadnje razliice
   in razlike besedila do prejnjih razliic. SCCS uporablja koncept
   ,,zdruevanja razlik``.

   Vsa aktivnost RCS se dogaja v eni sami datoteki za RCS. SCCS vzdruje
   ve datotek. To je lahko neredno in begajoe.

   Rono urejanje datotek za RCS ali za SCCS je slaba zamisel, saj so
   napake tako lahke za storiti in tako usodne za zgodovino datoteke. V
   obeh primerih je lahko urejati podatke o popravkih, vendar ne elite
   popravljati resninega besedila razliice v RCS. e urejate datoteko
   za SCCS, boste morali preraunati kontrolno vsoto s programom admin.

8.4 RCS vs. SCCS: Katere so kljune besede?

Subject: RCS vs SCCS:  What are the keywords?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   RCS in SCCS uporabljata razline kljune besede, ki se v besedilu
   razvijejo. Pri SCCS se, ob izvleenju datoteke za branje, kljuna
   beseda ,,%I%`` nadomesti s tevilko popravka.

   Kljune besede RCS so laje za zapomnitev, toda razvijanje kljunih
   besed se laje nastavi v SCCS.

   V SCCS se kljune besede razvijejo pri izvleenju le za branje. e se
   razliica z razvitimi kljunimi besedami prepie v datoteko, ki bi
   morala biti razlikovana (angl. deltaed), so kljune besede izgubljene
   in podatki o razliicah datoteke ne bodo osveevani. Po drugi strani,
   RCS ob razvitju obdri kljune besede, torej se temu izogne.

8.5 Kaj je simbolino ime v RCS?

Subject: What's an RCS symbolic name?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   RCS vam dovoljuje obravnavati mnoico datotek kot druino datotek,
   medtem, ko je SCCS miljen prvotno za hranjenje zgodovine popravkov
   datotek.

   RCS to omogoa z uporabo simbolinih imen: vse izvorne datoteke, ki so
   povezane z aplikacijsko razliico, lahko oznaite z uporabo

rcs -n

   in jih pozneje zlahka izvleete kot zdrueno enoto. V SCCS bi morali
   za to napisati skript, ki bi vpisoval in bral vsa imena datotek in
   razliic v in iz datoteke.

8.6 RCS vs. SCCS: Kaj pa hitrost?

Subject: RCS vs SCCS:  How do they compare for performance?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   Ker sistem RCS shranjuje celotno zadnjo razliico, je precej hitreji
   pri izvleenju zadnje razliice. Od RCS 5.6 naprej je tudi hitreji od
   SCCS pri izvleenju starejih razliic.

8.7 RCS vs. SCCS: Identifikacija razliic

Subject: RCS vs SCCS:  Version Identification.
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   SCCS zna ugotoviti, kdaj se je v sistem dodala doloena vrstica kode.

8.8 RCS vs. SCCS: Kako se obnaata v teavah?

Subject: RCS vs SCCS:  How do they handle problems?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   e vam manjkajo orodja za SCCS ali RCS, ali, e je datoteka popravkov
   v RCS ali SCCS pokvarjena in orodja noejo delati z njo, lahko e
   vedno obnovite zadnjo razliico v sistemu RCS. To za SCCS ni res.

8.9 RCS vs. SCCS: Kako se razumeta z ukazom make(1)?

Subject: RCS vs SCCS:  How do they interact with make(1)?
Date: Wed, 30 Dec 1992 10:41:51 -0700
From: Blair P. Houghton <bhoughto@sedona.intel.com>

   Dejstvo, da SCCS uporablja predpone za imena datotek (s.datoteka.c)
   pomeni, da jih make(1) ne more obravnavati na obiajen nain, in
   morate uporabiti posebna pravila (z uporabo znakov ,~`), da ga
   pripravite k sodelovanju s SCCS; kljub temu make(1) na nekaterih
   platformah Unixa ne bo uporabil privzetih pravil za datoteke, ki jih
   upravlja SCCS.

   Zapis s podaljkom (datoteka.c,v), ki ga uporablja RCS, pomeni, da
   lahko v vseh izvedbah programa make uporabljate obiajna podaljkovna
   pravila, tudi, e izvedba ni nartovana posebej za obvladovanje
   datotek RCS.

8.10 RCS vs. SCCS: Pretvorba

Subject: RCS vs SCCS:  Conversion.
Date: Tue, 10 Jan 1995 21:01:41 -0500
From: Ed Ravin <elr@wp.prodigy.com>

   Za pretvorbo iz SCCS v RCS je na voljo nepodprti skript za ukazno
   lupino csh. Najdete ga lahko na naslovu
   ftp://ftp.std.com/src/gnu/cvs-1.3/contrib/sccs2rcs.

   Za pretvorbo iz RCS v SCCS morate napisati svoj skript ali program.

8.11 RCS vs. SCCS: Podpora

Subject: RCS vs SCCS:  Support
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   SCCS podpira podjetje AT&T. RCS podpira ustanova Free Software
   Foundation. Torej RCS tee na veliko ve platformah, vkljuno z
   osebnimi raunalniki.

   Veina programov make prepozna SCCS-jevo predpono ,,s.``, medtem, ko
   je GNU-jev make eden redkih, ki obravnavajo RCS-jev podaljek ,,,v``.

   Nekateri programi tar imajo izbiro -F, ki ignorira imenike za RCS, za
   SCCS, ali oboje.

8.12 RCS vs. SCCS: Primerjava ukazov

Subject: RCS vs SCCS:  Command Comparison
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

SCCS                        RCS                   Razlaga
====                        ===                   =======

sccs admin -i -ndat dat     ci dat                Prvi vpie datoteko
                                                  ,dat` in ustvari
                                                  datoteko sprememb.

sccs get dat                co dat                Izvlee datoteko
                                                  ,dat` za branje.

sccs edit dat               co -l dat             Izvlee ,dat` za
                                                  spremembo.

sccs delta dat              ci dat                Izvlee predhodno
                                                  zaklenjeno datoteko.

what dat                    ident dat             Izpie informacijo
                                                  o kljuni besedi.

sccs prs dat                rlog dat              Izpie zgodovino
                                                  datoteke.

sccs sccsdiff -rx -ry dat   rcsdiff -rx -ry dat   Primerja dva popravka.

sccs diffs dat              rcsdiff dat           Primerja trenutno
                                                  razliico z zadnjim
                                                  popravkom.

sccs edit -ix-y dat         rcsmerge -rx-y dat    Zdrui spremembe med
                                                  dvema razliicama
                                                  v datoteko.

???                         rcs -l dat            Zaklene zadnji
                                                  popravek.

???                         rcs -u dat            Odklene zadnji
                                                  popravek.  Morda
                                                  stre kljuavnico
                                                  drugega uporabnika,
                                                  a mu polje
                                                  sporoilo z razlago.

8.13 RCS vs. SCCS: Priznanja

Subject: RCS vs SCCS:  Acknowledgements
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <wohler@newt.com>

   elim se zahvaliti naslednjim ljudem, ki so prispevali te lanke. Na
   ta spisek elim dodati tudi vae ime - prosim, poljite pripombe ali
   dodatne vire Billu Wohlerju <wohler@newt.com>.
     * Karl Vogel <vogel@c-17igp.wpafb.af.mil>
     * Mark Runyan <runyan@hpcuhc.cup.hp.com>
     * Paul Eggert <eggert@twinsun.com>
     * Greg Henderson <henders@infonode.ingr.com>
     * Dave Goldberg <dsg@mbunix.mitre.org>
     * Rob Kurver <rob@pact.nl>
     * Raymond Chen <rjc@math.princeton.edu>
     * Dwight <dwight@s1.gov>

8.14 Ali lahko dobim ve podatkov o sistemih za upravljanje konfiguracij?

Subject: Can I get more information on configuration management systems?
Date: Thu Oct 15 10:27:47 EDT 1992
From: Ted Timar <tmatimar@isgtec.com>

   Bill Wohler, ki je zbral vse podatke v tem delu teh PZV, je zbral e
   dosti ve podatkov. Dobite jih na naslovu
   ftp://ftp.wg.omron.co.jp/pub/unix-faq/docs/rev-ctl-sys.
     _________________________________________________________________
