Pogosto zastavljena vpra�anja o Unixu
Ted Timar <
[email protected]>
v2.9, 11. junij 1996
_________________________________________________________________
Povzetek
Pred vami je slovenski prevod spisa Unix FAQ, pogosto zastavljenih
vpra�anj z odgovori v novi�arskih skupinah comp.unix.questions in
comp.unix.shell. Prosim, ne ponavljajte teh vpra�anj, 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 za��ita
* 1.3 Dostopnost
* 1.4 Zahvale
2. Splo�na vpra�anja
* 2.1 Kaj pomeni �tevilka v oklepajih pri sklicevanju na ,rm(1)` ali
,ctime(3)`?
* 2.2 Kaj pomeni {kak�en nerazumljiv ukaz na Unixu}?
* 2.3 Kako deluje most med novi�arsko 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 vpra�anja, ki jih navadno spra�ujejo za�etniki
* 3.1 Kako odstranim datoteko z imenom, ki se za�ne 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 vklju�im 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`` [kak�no �udno
sporo�ilo o napaki]?
* 3.8 Kako naj {nastavim spremenljivko okolja, spremenim imenik}
znotraj programa ali skripta ukazne lupine in dose�em, da bo to
upo�tevala moja trenutna ukazna lupina?
* 3.9 Kako lahko v csh lo�eno 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 poi��em 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 napa�en izpis?
4. Vmesna vpra�anja
* 4.1 Kako lahko ugotovim �as, ko je bila datoteka ustvarjena?
* 4.2 Kako lahko uporabim rsh, ne da bi rsh po�akal konec
oddaljenega ukaza?
* 4.3 Kako lahko skraj�am datoteko?
* 4.4 Zakaj simbol ,,{}`` ukaza find ne naredi to, kar �elim?
* 4.5 Kako lahko za��itim simboli�ne povezave?
* 4.6 Kako lahko ,,obnovim`` pobrisano datoteko?
* 4.7 Kako lahko proces ugotovi, ali te�e v ozadju?
* 4.8 Zakaj preusmerjanje v zanki ne dela, kot bi moralo? (Bournova
lupina)
* 4.9 Kako po�enem 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 dolo�enim imenom?
* 4.11 Kako preverim izhodni status oddaljenega ukaza, pognanega z
rsh?
* 4.12 Je mogo�e 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 pi�ejo, namesto
le v ve�jih blokih?
* 4.15 Kako lahko vstavim datum v ime datoteke?
* 4.16 Zakaj se nekateri skripti za�nejo z ,,#!...``?
5. Napredna vpra�anja; radi jih vpra�ujejo 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 teko�i 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 dolo�en datote�ni sistem (da ga lahko
odklopim)?
* 5.9 Kako izsledim ljudi, ki me tipajo (s finger)?
* 5.10 Je mogo�e ponovno priklju�iti proces na terminal, ko je bil
ta odklopljen, tj. po zagonu programa v ozadju in odjavi?
* 5.11 Je mogo�e ,,vohuniti`` na terminalu, gledajo� izhod, ki se
prikazuje na drugem terminalu?
6. Vpra�anja, povezana z razli�nimi ukaznimi lupinami in njihovimi razlikami
* 6.1 Se lahko ukazne lupine klasificirajo v kategorije?
* 6.2 Kako ,,vklju�im`` 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 razli�ne ukazne lupine?
* 6.7 Zanima me ve� o razlikah med razli�nimi ukaznimi lupinami.
7. Pregled razli�ic 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 va�ega Unixa
* 7.6 Kratki opisi nekaterih znanih (komercialnih/prostih) Unixov
* 7.7 Unixi, delujo�i v realnem �asu
* 7.8 Slovar�ek 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 klju�ne besede?
* 8.5 Kaj je simboli�no ime v RCS?
* 8.6 RCS vs. SCCS: Kaj pa hitrost?
* 8.7 RCS vs. SCCS: Identifikacija razli�ic
* 8.8 RCS vs. SCCS: Kako se obna�ata v te�avah?
* 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
vpra�anj z odgovori v novi�arskih skupinah comp.unix.questions in
comp.unix.shell. Prosim, ne ponavljajte teh vpra�anj, ker so bila
zastavljena �e velikokrat, in prosim, ne pljuvajte po ljudeh, ki morda
niso videli tega obvestila. Hvala!
�eprav so vsa vpra�anja legitimna, ka�e, da se vsako leto znova
pojavljajo v novi�arskih 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
vpra�anja. Ob tem boste morda �eleli prebrati mese�ni �lanek ,,Answers
to Frequently Asked Questions`` v novi�arski skupini
news.announce.newusers, ki vam bo povedal, kaj pomeni ,,UNIX``.
Pri pestrosti sistemov Unix na svetu je te�ko zagotoviti, da bodo ta
vpra�anja delovala na vseh sistemih. Vselej preberite strani va�ega
lokalnega referen�nega sistemskega priro�nika, preden posku�ate
storiti karkoli tukaj priporo�enega. �e imate predloge ali popravke za
katerikoli tukaj�nji odgovor, ga, prosim, po�ljite na
[email protected].
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 na�rtuje novo izdajo, ki jo bomo posku�ali
prevesti, �e boste pokazali zanimanje za tole razli�ico. Prevajalec
prosi za kakr�nekoli pripombe k prevodu - po�ljite jih na
[email protected].
1.2 Pravna za��ita
Zbirko originalnih nasvetov je pravno za��itil (c) 1994 Ted Timar,
razen dela ,,Pregled razli�ic Unixa``, ki sta ga za��itila (c) 1994,
Pierre Lewis in Ted Timar. Vse pravice so pridr�ane. Dovoljenje za
raz�irjanje te zbirke imate, �e jo brezpla�no raz�irjate v elektronski
obliki, �e ste naredili vse razumne poskuse, da bi uporabili njeno
zadnjo razli�ico, �e so hranjene vse tu navedene zasluge in to
sporo�ilo o pravni za��iti. O drugih vpra�anjih distribucije se bo
premislilo. Vsem razumnim zahtevam se bo ugodilo.
Vsi nasveti so bili priporo�eni z dobrimi nameni, vendar za njihovo
to�nost ne jam�ijo niti pisci prispevkov niti avtor te zbirke niti
prevajalec. Uporabniki v celoti prevzemajo odgovornost za morebitno
povzro�eno �kodo.
Slovenski prevod te zbirke z dne 26. septembra 1998 je delo Romana
Maurerja. Za njegovo raz�irjanje veljajo enaki pogoji kot za izvirno
zbirko.
1.3 Dostopnost
Veliko zbirk pogosto zastavljenih vpra�anj (kraj�e PZV; angl. FAQ -
Frequently Asked Questions), vklju�no 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 stre�niku
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 razli�ice 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 razli�ica 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/ (i��ite 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 vpra�anj (PZV; angl.
Frequently Asked Questions - FAQ). Prvi� je bil sestavljen julija
1989.
Ted Timar <
[email protected]> je prevzel vzdr�evanje tega seznama.
Skoraj vse delo (in zasluge) za sestavljanje te zbirke gredo Stevu
Haymanu.
Veliko zahval dolgujemo tudi ducatom bralcev Useneta. Ti so prispevali
vpra�anja, odgovore, popravke in predloge za ta seznam. Posebna
zahvala gre Maartenu Litmaathu, Guyu Harrisu in Jonathanu Kamensu, ki
so spisali posebej obse�ne prispevke.
Temo ,,Vpra�anja, povezana z razli�nimi ukaznimi lupinami in njihovimi
razlikami`` je prete�no zapisal Matthew Wicks <
[email protected]>.
Temo ,,Pregled razli�ic Unixa`` je prete�no zapisal Pierre (P.) Lewis
<
[email protected]>.
Kjer je le mogo�e, je na vrhu odgovora naveden avtor posameznega
odgovora na vpra�anje in datum zadnjega popravka. �al sem s to prakso
za�el �ele nedavno, zato je veliko podatkov nepopolnih. Bil sem tudi
brezbri�en do podatkov o avtorjih popravkov odgovorov. Opravi�ujem 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 <
[email protected]> je o�istil razli�ico v formatu
Texinfo.
Pisci obse�nej�ih prispevkov tega spisa so lahko omenjeni drugje ali
pa tudi ne, a so:
* Steve Hayman <
[email protected]>
* Pierre Lewis <
[email protected]>
* Jonathan Kamens <
[email protected]>
* Tom Christiansen <
[email protected]>
* Maarten Litmaath <
[email protected]>
* Guy Harris <
[email protected]>
Dne 26. septembra 1998 s popravki 16. februarja 1999 je Roman Maurer
<
[email protected]> ta spis prevedel v sloven��ino. Hvala
Ale�u Ko�irju <
[email protected]> za �tevilne popravke prevoda!
_________________________________________________________________
2. Splo�na vpra�anja
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 ,,Priro�nika za Unix`` (angl. ,,Unix manual``), kjer
najdete primerno dokumentacijo. Napi�ete lahko
man 3 ctime
in s tem pogledate stran o ,,ctime`` v tretjem poglavju priro�nika.
Tradicionalna poglavja priro�nika so:
1
Ukazi na uporabni�kem nivoju
2
Sistemski klici
3
Funkcije v knji�nicah
4
Naprave in gonilniki naprav
5
Datote�ni formati
6
Igre
7
Razli�ne zadeve - paketi makro ukazov itd.
8
Ukazi za vzdr�evanje in tek sistema
Nekatere razli�ice Unixa uporabljajo ne�tevilska imena razdelkov.
Xenix, na primer, uporablja ,,C`` za ukaze in ,,S`` za funkcije.
Nekatere novej�e razli�ice 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 v�asih potrebna, da lahko lo�ite med ukazom in funkcijo v
knji�nici ali sistemskim klicem z enakim imenom. Va� sistem ima na
primer morda ,,time(1)``, stran referen�nega priro�nika o ukazu ,time`
za merjenje �asov izvajanja programov, in tudi ,,time(3)``, stran
referen�nega priro�nika o podprogramu ,time`, s katerim prika�ete
trenutni �as. Uporabite lahko razli�ici ,,man 1 time`` ali ,,man 3
time`` in s tem dolo�ite, katera stran priro�nika vas zanima.
Pogosto boste na�li druge razdelke za lokalne programe ali celo
podrazdelke zgornjih razdelkov - Ultrix ima med drugim razdelke 3m,
3n, 3x in 3yp.
2.2 Kaj pomeni {kak�en 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
za�etnicah 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 i��e le fiksne vzorce. �rka ,f` ni okraj�ava za ,,fast``
(slov. ,,hitro``) - pravzaprav je ,,fgrep foobar *.c`` navadno
po�asnej�i kot ,,egrep foobar *.c`` (Da, to je nekam
presenetljivo. Poskusite!)
Fgrep je vseeno uporaben, ko i��ete v datoteki ve�je �tevilo
iskalnih vzorcev, kot jih prenese egrep.
egrep
"Extended GREP"
egrep uporablja imenitnej�e regularne izraze kot grep. Mnogi
ljudje vselej uporabljajo egrep, saj uporablja bolj�e algoritme
kot grep ali fgrep in je navadno najhitrej�i od njih.
cat
"CATenate"
Obrobna angle�ka beseda ,,catenate`` pomeni ,,spenjati (z
verigo)`` ali ,,povezovati v zaporedja``, kar je to�no to, kar
naredi ,,cat`` z eno datoteko ali z ve� datotekami. Ne
zamenjujte ga s C/A/T, (angl. Computer Aided Typesetter, slov.
ra�unalni�ko 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
resni�ni ostanek zgodnjih �asov. Dennis Ritchie je poro�al:
V�asih smo poslali tiskalni�ki izhod ali paketna opravila na stroj
GCOS. Polje gcos v datoteki z gesli je bilo mesto, v katerega smo
stla�ili 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 va�ega dokumenta.
tee
T
Po izrazoslovju vodovodnih in�talaterjev - 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 za�el 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 kon�al s simbolom``), ki je
po�el 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-za�etek.)
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 po�ti, 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 po�tarja. Od tod ime tega ukaza.
rc (kot v ,,.cshrc`` ali ,,/etc/rc``)
"RunCom"
,,rc`` izhaja iz ,,runcom`` s sistema MIT CTSS pribli�no okrog
leta 1965. Brian Kernighan & Dennis Ritchie sta takole
pripovedovala Vicki Brown:
Obstajal je pripomo�ek, ki je izvedel ukaze, shranjene v datoteki;
imenoval se je ,,runcom``, okraj�ava za ,,run commands`` (slov.
po�eni ukaze), in tak�no datoteko smo za�eli 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 premo��a prepad
med ukazno lupino in programiranjem v jeziku C (ali med
preprostim ukazom iz ukazne vrstice in puljenjem svojih las).
Za nadaljne informacije glejte novi�arsko skupino Useneta
comp.lang.perl.misc.
Knjiga ,,Life with Unix`` Dona Libesa vsebuje mnogo ve� tak�nih
poslastic.
2.3 Kako deluje most med novi�arsko 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
po�tni razli�ici skupin comp.unix.questions in comp.unix.wizards. Med
vsebino elektronskih po�tnih seznamov in novi�arskih skupin ne bi
smelo biti razlik.
�e se �elite prijaviti na enega teh seznamov, po�ljite pismo na
[email protected] ali
[email protected]. Ne
pri�akujte takoj�njega odgovora.
Tukaj so podrobnosti, zahvaljujo� vzdr�evalcu seznama, Bobu Reschlyju:
Po�iljanje na seznama info-UNIX in UNIX-wizards
Vse, kar po�ljete na seznam, se objavi; pisem ne moderiram - BRL
deluje le kot prepisovalnik. Prispevki naro�nikov z Interneta naj bodo
poslani na naslov seznama (info-UNIX ali UNIX- wizards); naslova z
,-request` sta le za dopisovanje z vzdr�evalcem seznama [mano]. Pisma,
poslana prek Useneta, naj bodo naslovljene na primerno novi�arsko
skupino ( comp.unix.questions ali comp.unix.wizards).
Naro�niki z Interneta dobivajo pisma dveh vrst: posamezna sporo�ila in
povzetke pisem. Pisma, ki prispejo na BRL prek Interneta in BITNET-a
(�ez most BITNET-Internet), se takoj razpo�ljejo na vse naslove na
po�tnem seznamu. Pisma z Useneta se zberejo v povzetke in ti se dnevno
po�ljejo na naslove �lanov na seznamu.
Promet z BITNET-a je precej podoben prometu prek Interneta. Glavna
razlika je, da vzdr�ujem le en naslov za pisma, naslovljena na vse
naro�nike BITNET-a. Ta naslov ka�e na ve�ji seznam, ki vsebuje
posamezne naro�nike BITNET-a. Tako mora v vsaki smeri le po eno pismo
med BITNET-om in Internetom.
Naro�niki USENET-a vidijo le posamezna pisma. Vsa pisma, odposlana z
Internetu, se razpo�iljajo na na� stroj z USENET-om. Potem se uvrstijo
v primerno novi�arsko skupino. �al pri sporo�ilih, ki gredo prek
mostu, po�iljatelj postane ,,news@brl-adm``. To je trenutno neizbe�ni
stranski u�inek premostitvenega programja.
Kar se ti�e publike, USENET ima izjemno veliko bralcev - domnevam, da
ve� tiso� gostiteljev in na desetine tiso�ev bralcev. Glavni seznam,
ki ga vzdr�ujemo tu na BRL, poganja okoli 150 vnosov, od katerih jih
je pribli�no 10% lokalnih redistribucijskih seznamov. Nimam natan�nega
ob�utka za velikost redistribucije po BITNET-u, a domnevam, da je
pribli�no enake velikosti in sestave kot glavni seznam. Promet vsebuje
v povpre�ju od 150 Kb do 400 Kb sporo�il 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 (
[email protected]) vzdr�uje dober seznam knjig o Unixu in
C-ju, z opisi in z nekaterimi kratkimi pregledi. Trenutno je na
njegovem seznamu 167 knji�nih 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 po�iljajte na
[email protected].
Samuel Ko (
[email protected]) vzdr�uje �e en seznam knjig za Unix. Ta seznam
vsebuje le priporo�ene knjige in je torej kraj�i, knjige pa so
razvr��ene po kategorijah, kar je morda primernej�e, �e i��ete dolo�en
tip knjige.
Kopijo tega seznama dobite na naslovu
ftp://rtfm.mit.edu/pub/usenet/news.answers/books/unix. Popravke in
predloge po�iljajte na
[email protected].
�e ne morete uporabiti anonimnega FTP-ja, po�ljite vrstico ,,help`` na
[email protected] za navodila o prena�anju datotek po elektronski
po�ti.
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 angle�ka PZV vklju�evala
iz�rpen seznam izgovarjave, ki ga je vzdr�eval Maarten Litmaath
(hvala, Maarten!). Prvi seznam je pripravil Carl Paukstis
<
[email protected]>.
Seznam se je upokojil, saj njegov naslov ,,Vpra�anja o Unixu`` ne
ustreza. �e vedno ga lahko najdete kot del �iroko raz�irjene datoteke
,,Jargon`` (vzdr�uje jo Eric S. Raymond, <
[email protected]>), ki
je veliko primernej�i forum na temo ,,Kako naj izgovorim /* ?``.
�e �elite kopijo seznama, se pove�ite z 133.210.4.4, in jo poi��ite v
imeniku
ftp://ftp.wg.omron.co.jp/pub/unix-faq/docs/Pronunciation-Guide.
_________________________________________________________________
3. Relativno osnovna vpra�anja, ki jih navadno spra�ujejo za�etniki
3.1 Kako odstranim datoteko z imenom, ki se za�ne z ,-`?
Subject: How do I remove a file whose name begins with a "-" ?
Date: Thu Mar 18 17:16:55 EST 1993
Poi��ite tak na�in imenovanja datoteke, da se ne za�ne s pomi�ljajem.
Najpreprostej�i odgovor je primer
rm ./-imedatoteke
(seveda predvidevamo, da je ,,-imedatoteke`` v tem primeru v trenutnem
imeniku).
Ta na�in izogibanja dvoumnemu ,-` na za�etku imen deluje tudi pri
drugih ukazih.
Veliko ukazov, posebej tistih, ki so bili napisani z uporabo rutine
,,getopt(3)`` za raz�lembo argumentov, sprejme tudi argument ,,--``,
ki pomeni ,,to je zadnja izbira, vse po tem ni ve� izbira``. Va�a
razli�ica rm potemtakem morebiti razume tudi
rm -- -imedatoteke
Nekatere razli�ice 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 ,/`, presko�ite na zadnji del odgovora. �e
je �uden znak nekaj drugega, na primer presledek ali kontrolni znak
ali znak s pri�ganim osmim bitom (to so npr. slovenske �rke
,,蹾ȩ�``), nadaljujte z branjem.
Prvi klasi�ni odgovor je uporaba ukaza na na�in
rm -i vzorec*ki*ustreza*le*datoteki*ki*jo*�elite
Ukaz vpra�a za vsako datoteko, ki ustreza vzorcu, �e jo �elite
odstraniti. Nasvet morda v va�i ukazni lupini ne bo deloval zaradi
znakov s pri�ganim osmim bitom, saj ga ukazna lupina lahko odre�e.
Drugi klasi�ni odgovor je
rm -ri .
ki vas za vsako datoteko v trenutnem imeniku vpra�a, ali naj jo
odstrani.
V angle�kem okolju odgovorite z ,y` pri problemati�ni datoteki in z
,n` pri vseh ostalih datotekah. �al to ne deluje pri veliko razli�icah
rm. Hkrati se bo ukaz izvedel za vse datoteke na vseh podimenikih
trenutnega imenika, torej boste morda za�asno hoteli te imenike
narediti nedostopne z ,,chmod a-x``, da vas ne bodo motili.
Vselej globoko vdihnite in razmislite, kaj po�nete, ter dvakrat
preverite, kaj ste zapisali v ukazni vrstici, kadar uporabljate
zastavico ,,-r`` ukaza rm ali znaka * ali ? (angl. wildcard).
Tretji klasi�ni odgovor je
find . -type f ... -ok rm '{}' \;
kjer je ,,...`` skupina oznak, ki enoli�no dolo�a ime datoteke. Ena od
mo�nosti je, da za problemati�no datoteko poi��ete 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 vpra�al za potrditev
ukaza, preden ga bo izvedel. Spra�evanju 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 zme�ali zaslon.
Kaj, �e ime datoteke vsebuje znak ,/`?
Te datoteke so res posebni primeri in jih lahko ustvari le hro��ata
koda v jedru (tipi�no jih naredijo implementacije NFS, ki ne po�istijo
neveljavnih znakov iz imen datotek na oddaljenih strojih). Najprej
posku�ajte natanko razumeti, zakaj je ta problem tako izjemen.
Spomnite se, da so imeniki v Unixu preprosto pari imen datotek in
�tevilk inode. Imenik tipi�no vsebuje podobno informacijo:
ime datoteke inode
datoteka1 12345
datoteka2.c 12349
datoteka3 12347
Teoreti�no sta ,/` in ,\0` le dva znaka, ki se ne moreta pojaviti v
imenu datoteke - znak ,/` zato, ker se uporablja za lo�evanje imenikov
in datotek, in znak ,\0` zato, ker kon�uje ime datoteke.
�al nekatere izvedbe omre�nega datote�nega sistema NFS pre�erno
ustvarjajo datoteke z vklju�enimi nagibnicami kot odgovor na zahteve
oddaljenih strojev. Na primer, to se lahko zgodi, ko se nekdo na Macu
ali drugem ne-Unixu odlo�i narediti oddaljeno datoteko NFS na va�em
Unixu, z datumom v imenu datoteke. Va� imenik na Unixu ima potem v
sebi tole:
ime datoteke inode
91/02/07 12357
Tak�ne datoteke ne bo pobrisalo nobeno zgoraj opisano �aranje z
ukazoma find in rm, saj morata tako tadva pripomo�ka kot tudi vsi
drugi programi na Unixu razumeti znak ,/` na obi�ajen na�in.
Vsak obi�ajen program bo �elel narediti unlink("91/02/07"), kar jedro
razume kot ,,pobri�i datoteko 07 v podimeniku 02 imenika 91``, toda to
ni tisto, kar ho�emo - imamo datoteko imenovano ,,91/02/07`` v
trenutnem imeniku. To je komaj zaznavna, a klju�na razlika.
Kaj lahko naredite v tem primeru? Najprej se poskusite vrniti na Maca,
ki je ustvaril ta nev�e�ni vnos, in sku�ajte prepri�ati Maca in va�
lokalni stre�nik NFS, da datoteko preimenujeta v nekaj, kar ne vsebuje
nagibnic.
�e to ne deluje ali morda ni izvedljivo, boste potrebovali pomo�
va�ega sistemskega upravitelja, ki bo moral poskusiti kaj od
naslednjega. Uporabite ,,ls -i``, da boste izvedeli �tevilko inode
nesre�ne datoteke, potem odklopite datote�ni sistem (z umount),
uporabite ,,clri`` za izbris inodea, in popravite datote�ni sistem s
,,fsck`` in s stisnjenimi pestmi. Postopek uni�i podatke o datoteki.
�e jih �elite obdr�ati, lahko poskusite:
* ustvarite nov imenik v istem star�evskem 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 datote�ni sistem,
* uporabite ,,clri`` na imeniku, ki vsebuje sporno datoteko,
* obnovite datote�ni sistem s ,,fsck``.
Potem boste datoteko poiskali takole:
* namestite datote�ni sistem;
* preimenujte imenik, ki ste ga ustvarili, tako da bo imel enako
ime, kot stari imenik (saj je stari imenik dokon�no pobrisal
,,fsck``);
* premaknite datoteko iz imenika ,,lost+found`` v imenik s
primernej�im imenom.
Alternativa temu pristopu je popravljanje imenika na zahteven na�in z
brkljanjem po surovem datote�nem 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 razli�ice ,ls` nimajo ,-R`)
find . -print (to mora delovati povsod)
du -a . (poka�e ime in velikost)
�e i��ete vzorec z jokerji (angl. wildcard), ki bo ustrezal vsem
datotekam ,,.c`` v tem imeniku in pod njim, ga ne boste na�li, pa� pa
lahko uporabite:
% nek-ukaz `find . -name '*.c' -print`
,,find`` je zmogljiv program. Pou�ite se o njem.
3.4 Kako lahko v svoj pozivnik vklju�im 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 te�ko ali celo nemogo�e.
* 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 va�ega
trenutnega imenik (,,mail% `` namesto ,,/usr/spool/mail% ``),
lahko uporabite
alias setprompt 'set prompt="$cwd:t% "'
Pomen operatorjev && in || v nekaterih starej�ih lupinah csh je
zamenjan. Poskusite:
false && echo napaka
�e izpi�e ,,napaka``, morate zamenjati && in || (in dobiti bolj�o
razli�ico csh.)
* Bourne Shell (sh):
�e imate novej�o razli�ico Bournove ukazne lupine (SVR2 ali
novej�o), lahko uporabite za izdelavo svojega ukaza funkcijo
lupine, denimo ,,xcd``:
xcd() { cd $* ; PS1="`pwd` $ "; }
�e imate starej�o Bournovo ukazno lupino, je to zapleteno, a
mogo�e. Dodajte v va�o 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 va�o 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 va�o datoteko .profile:
PS1='$PWD $ '
�e �elite le zadnjo komponento imenika, uporabite
PS1='${PWD##*/} $ '
* T C shell (tcsh)
Tcsh je popularna izbolj�ana razli�ica csh z nekaterimi dodatnimi
vgrajenimi spremenljivkami (in veliko drugih zmo�nosti):
%~ trenutni imenik, uporablja ~ za $HOME
%/ polna pot trenutnega imenika
%c ali %. kon�na komponenta trenutnega imenika
tako, da lahko preprosto uka�ete
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 re�itev 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 razlo�evati 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 va�e ukazne
lupine lahko to spodleti na ve� na�inov. CSH izpi�e ,,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 va�e ukazne lupine lahko to storite z zanko, v kateri
po�enete ,,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 splo�nem je ideja zanke enaka. S pripomo�kom ,,sed``
lahko spremenite imena datotek v ukaze za mv in po�ljete 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). Omogo�a vam uporabo
na na�in
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 vklju�ujejo 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 izpi�e ime datoteke, tudi, �e je to enako ,-n`,
ali, �e vsebuje ube�na zaporedja za System V, kakr�no je ,\c`.
Nekatere razli�ice ukaza ,,tr`` potrebujejo ,[` in ,]`, nekatere
ju ne. V tem konkretnem primeru ju je povsem ne�kodljivo
vklju�iti. Razli�ice ukaza tr, ki no�ejo ,,[]`` bodo primerno
mislile, da bi morale preslikati ,[` v ,[` in ,]` v ,]`.
* �e imate name��en 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`` [kak�no �udno sporo�ilo 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 ra�un uporablja C-jevsko ukazno lupino (csh), bo
oddaljeni gostitelj pognal csh, da bi izvedel va� ,ukaz`, in ukazna
lupina bo prebrala va�o oddaljeno datoteko .cshrc. Morda ta .cshrc
vsebuje ,,stty``, ,,biff`` ali kak�en drug ukaz, ki ni primeren za
neinteraktivno ukazno lupino. Nepri�akovan izhod ali sporo�ilo o
napaki pri teh ukazih lahko zapleteta va�o lupino rsh na �udne na�ine.
Tukaj je primer. Denimo, da imate v va�i datoteki .cshrc tole:
stty erase ^H
biff y
Dobili boste �udna sporo�ila, 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 dolo�ena opravila pripomo�kov
,,at`` ali ,,cron``, ki prav tako bereta va�o datoteko .cshrc.
Na sre�o je popravek preprost. Zelo verjetno je v va�i 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 va�i ,,.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 va�i prijavi na sistem
(iskanje nove po�te, neprebranih novi�arskih sporo�il 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 dose�em, da bo to upo�tevala 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 splo�nem tega ne morete storiti, vsaj ne brez posebnih priprav. Ko
nek proces ustvari svoj podproces, ta podeduje kopijo spremenljivk
svojega o�eta (vklju�no s trenutnim imenikom). Otrok lahko spremeni
podedovane vrednosti, kolikor ho�e, vendar te spremembe ne bodo
prizadele star�evskega okolja, saj otrok spreminja le svojo kopijo
originalnih podatkov.
Mo�ne so nekatere posebne priprave. Va� otro�ki proces lahko izpi�e
spremenjene spremenljivke, �e je o�e 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 va�emu 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 posku�ate pognati ,,mojskript`` v va�i ukazni lupini, se bo va�a
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 (va�e prijavne ukazne lupine, denimo).
�e �elite prepri�ati va�o prijavno ukazno lupino, da po�ene 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 napi�ete
mojaskripta
v lupini C pa
source myscript
�e je vse, kar posku�ate storiti, le sprememba imenika ali nastavitev
spremenljivke okolja, bo verjetno najla�je, 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
<
[email protected]>. 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 lo�eno preusmerim stdout in stderr?
Subject: How do I redirect stdout and stderr separately in csh?
From:
[email protected] (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 na�ina le za preusmeritev stderr. Najbolj�e,
kar lahko naredite, je
( ukaz >datoteka_za_stdout ) >&datoteka_za_stderr
ki po�ene ,,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 to�ki je stdout �e preusmerjen, tako da v datoteki
,,datoteka_za_stderr`` kon�a pravzaprav le stderr.
�e �elite le prepre�iti 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 najvi�je nivojsko ukazno lupino?
Morda lahko ugotovite, ali je va�a ukazna lupina resni�no prijavna
lupina (se pravi, bo prebrala ,,.login`` potem, ko bo opravila z
,,.cshrc``) tako, da zapravljate �as s ,,ps`` in ,,$$``. Prijavne
lupine imajo v splo�nem imena, ki se za�nejo s ,-`. �e vas v resnici
zanimata drugi dve vpra�anji, je tukaj na�in organizacije va�e
datoteke .cshrc, da to izveste.
_________________________________________________________________
if (! $?CSHLEVEL) then
#
# To je "najvi�jenivojska" 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 na�ih ukaznih lupin.
#
setenv CSHLEVEL 0
set home = ~username # za vsak slu�aj
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 za�enjajo z ,,.``;
.*
Ustreza vsem datotekam, ki se za�enjajo z ,,.``, toda to
vklju�uje posebna vnosa ,,.`` in ,,..``, ki ju pogosto ne
�elite;
.[!.]*
(Le novej�e 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 za�nejo z ,,.`` in jim sledi
ne-,,.``; �al bo to spregledalo ,,..foo``;
.??*
Ustreza datotekam, ki se za�nejo 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 razli�icah Unixa) je precej dobro:
`ls -a | sed -e '/^\.$/d' -e '/^\.\.$/d'`
a tudi to bo zamo�ilo pri datotekah z znaki za novo vrsto, znaki IFS
ali jokerjih v njihovih imenih.
V ksh lahko uporabite:
!(.|) *
3.12 Kako poi��em 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:
[email protected]>
* Maarten Litmaath <
[email protected]>
�e ste prepri�ani, da argumentov ni ve� kot devet, potem lahko
uporabite:
eval zadnji=\${$#}
V ukaznih lupinah, zdru�ljivih s standardom POSIX, to deluje za vsako
�tevilo argumentov. Vselej deluje tudi:
for zadnji
do
:
done
Primer se posplo�i 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, ozna�eni z (1) in (2) in se prepri�ajte, da se originalni
argumenti res obnovijo, ne glede na to, katere �udne znake vsebujejo!
N-ti argument lahko zdaj poi��ete takole:
eval argN=\$argv$N
�e �elite obrniti argumente, morate spremeniti vrstico, ozna�eno z
(1),
argv="\"\$argv$h$t$u\" $argv"
Kako odstranite zadnji argument, vam prepu��amo za nalogo.
�e dovoljujete tudi podprocese, ki morda izvajajo nevgrajene ukaze,
lahko spremenljivke ,argvN` dolo�ite preprosteje:
N=1
for i
do
eval argv$N=\$i
N=`expr $N + 1`
done
Za obra�anje argumentov obstaja �e preprostej�a 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, lo�enih z
dvopi�ji. Ko vpi�ete ukaz brez jasno dolo�ene poti (npr. napi�ete
,,ls`` in ne ,,/bin/ls``), va�a ukazna lupina i��e izvedljivo datoteko
s tem imenom po vseh imenikih, na�tetih 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 na�ina ozna�evanja 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`` napi�ete ,,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 slu�ajno program, imenovan ,,/tmp/ls``, ki
ga je tam pustil kak drug uporabnik, ter vi napi�ete ,,ls`` (namesto,
da bi, seveda, pognali obi�ajen program ,,/bin/ls``), bo va�a 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 napi�ete ,,ls``, bo ukazna lupina
najprej preiskala /usr/ucb, /bin in /usr/bin za program, imenovan
,,ls``, preden bo pogledala v ,,.``, kar daje manj mo�nosti, da bi
nehote pognali program ,,ls`` drugega uporabnika. Tudi to ni povsem
varno - �e ste neroden strojepisec in nekega dne napi�ete ,,sl -l``
namesto ,,ls -l``, tvegate, da boste pognali ,,./sl``, �e ta obstaja.
Kak ,,bister`` programer lahko ra�una na pogoste tipkarske napake in
pu��a programe s takimi imeni raztrosene po javnih imenikih. Pazite!
Veliko izku�enih uporabnikov Unixa shaja povsem dobro, ne da bi sploh
imeli ,,.`` vklju�en v PATH:
setenv PATH /usr/ucb:/bin:/usr/bin
�e naredite to, boste morali za zagon programov vselej pisati
,,./program`` namesto program, a pove�anje 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:
[email protected] (Uwe Waldmann)
Date: Fri, 30 Apr 93 16:33:00 +0200
Odgovor je odvisen od razli�ice va�ega Unixa (ali raje od vrste
programa ,,echo``, ki je na voljo na va�em stroju).
BSD-jevski ,,echo`` uporablja izbiro ,,-n`` za prepre�itev izpisa
kon�nega znaka za konec vrstice (angl. final newline) in ne razume
osmi�kega 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
prepre�itev izpisa kon�nega 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:
[email protected] (Ted Timar)
Date: Thu Mar 18 17:16:55 EST 1993
Unix ima tri raz�irjene programe ,,talk`` in nobeden od njih se ne zna
pogovoriti z ostalima. ,,Stari`` talk vklju�uje prva dva tipa. Ta
razli�ica (pogosto imenovana otalk) pri pogovoru med stroji ni
upo�tevala vrstnega reda bytov. Zaradi tega se razli�ica otalk za Vax
ni mogla pogovarjati z razli�ico otalk za Sun. Te razli�ice talk-a
uporabljajo vrata 517.
Okoli leta 1987 se je ve�ina 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 omre�ni vrstni
red bytov. Ta talk deluje med vsemi stroji, ki ga podpirajo. Ta
razli�ica talk-a uporablja vrata 518.
Dandanes obstaja nekaj programov talk, ki hkrati govorijo ntalk in eno
od razli�ic otalk. Najbolj znan med njimi se imenuje ,,ytalk``.
3.16 Zakaj da koledar napa�en izpis?
Subject: Why does calendar produce the wrong output?
From:
[email protected] (Ted Timar)
Date: Thu Sep 8 09:45:46 EDT 1994
Pogosto ljudje ugotovijo, da izhod Unixovega koledarskega programa
,,cal`` ne ustreza njihovim pri�akovanjem.
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 izpi�e koledar za
september leta 94, ne pa leta 1994.
_________________________________________________________________
4. Vmesna vpra�anja
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 (poka�e ga ,,ls -l``), �asu zadnjega dostopa (poka�e
ga ,, ls -lu``) in �asu zadnje spremembe inode (poka�e ga ,,ls -lc``).
Zadnji se pogosto imenuje ,,�as ustvarjenja`` - celo v nekaterih
straneh referen�nega priro�nika (za man) - a to je narobe; spremeni se
tudi z operacijami kot so mv, ln, chmod, chown in chgrp.
Pojasnila so dostopna v poglavju referen�nega priro�nika o stat(2).
4.2 Kako lahko uporabim rsh, ne da bi rsh po�akal 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 vpra�anje ,,Zakaj dobim ob ukazu rsh gostitelj ukaz
{kak�no �udno sporo�ilo o napaki}?``, o katerem ,,rsh`` govorimo.)
O�itni 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. Po�akal bo
60 sekund, dokler se ne bo oddaljeni ukaz ,,sleep`` izvedel do konca,
�eprav se ukaz na oddaljenem stroju po�ene v ozadju. Kako torej
pripravite rsh do tega, da kon�a z delom takoj, ko za�ne te�i sleep?
Re�itev - �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`` pove�e standardni vhod ukaza rsh na /dev/null, torej
lahko po�enete celotni ukaz rsh v ozadju na lokalnem stroju. Torej ima
,,-n`` ekvivalenten pomen, kot da bi �e enkrat dolo�ili ,,<
/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
ra�unalniku ni nujno /dev/null; katerakoli datoteka bo v redu.
V veliko primerih razli�ni deli tega zapletenega ukaza niso potrebni.
4.3 Kako lahko skraj�am datoteko?
Subject: How do I truncate a file?
Date: Mon, 27 Mar 1995 18:09:10 -0500
Funkcija BSD-ja ftruncate() nastavi dol�ino datoteke. (Toda vse
razli�ice se ne obna�ajo enako.) Ka�e, da tudi druge razli�ice Unixa
podpirajo neke vrste kraj�anje.
Obstajajo tri znana obna�anja funkcije ftruncate v sistemih, ki jo
podpirajo:
* BSD 4.2
+ Ultrix, SGI, LynxOS
+ kraj�anje ne pove�a datoteke
+ kraj�anje ne premika datote�nega kazalca
* BSD 4.3
+ SunOS, Solaris, OSF/1, HP/UX, Amiga
+ kraj�anje lahko pove�a datoteko
+ kraj�anje ne premika datote�nega kazalca
* Cray
+ UniCOS 7, UniCOS 8
+ kraj�anje ne pove�a datoteke
+ kraj�anje spremeni datote�ni kazalec
Ostali sistemi pridejo v �tirih mo�nostih:
* F_CHSIZE
+ le SCO
+ nekateri sistemi definirajo izraz F_CHSIZE, a ga ne podpirajo
+ obna�a se kot BSD 4.3
* F_FREESP
+ le Interative Unix
+ nekateri sistemi (npr. Interative Unix) definirajo izraz
F_FREESP, a ga ne podpirajo
+ obna�a se kot BSD 4.3
* chsize()
+ QNX in SCO
+ nekateri sistemi (npr. Interative Unix) imajo funkcijo
chsize(), a je ne podpirajo
+ obna�a se kot BSD 4.3
* ni�
+ ni znanih sistemov
+ tukaj bodo sistemi, ki sploh ne podpirajo truncate
Moderatorjevo sporo�ilo: Spodnje funkcije sem posnel nekaj let nazaj.
Ne morem ve� ugotoviti prvotnega pisca. S. Spencer Sun
<
[email protected]> 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
[email protected] (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; /* Zapi�i klju�avnico na prostor datoteke. */
/* To se zana�a na NEDOKUMENTIRAN argument F_FREESP funkcije
fcntl, ki skraj�a datoteko tako, da se kon�a na polo�aju,
ki ga dolo�a fl.l_start.
Se manj�a �udesa nikoli ne bodo kon�ala? */
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 na�in 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 pripomo�kom sed:
find /pot -type d -print | sed 's:.*:ukaz &/*:' | sh
�e na vsak na�in �elite zmanj�ati �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 ve�krat
ukaz datoteka1 datoteka2 datoteka3 imenik1/datoteka1 imenik1/datoteka2
�al to ni popolnoma robustna ali varna re�itev. Xargs pri�akuje, da se
vhodne vrstice kon�ajo z znakom za novo vrsto (angl. newline), zato se
bo zmedel ob datotekah, poimenovanih s �udnimi znaki, kakr�ni so znaki
za novo vrsto.
4.5 Kako lahko za��itim simboli�ne povezave?
Subject: How do I set the permissions on a symbolic link?
Date: Thu Mar 18 17:16:55 EST 1993
Za��ite (angl. permissions, dovolilnice tipa -rw-r--r-) pri
simboli�nih povezavah pravzaprav ne pomenijo ni�esar. Edina
dovoljenja, ki �tejejo, so za��ite datotek, na katere ka�ejo 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 va�e datoteke. �e te ni, berite naprej.
Pri vseh okoli��inah ko enkrat pobri�ete datoteko z ukazom ,,rm``, te
ni ve�. Ko na datoteki uporabite ukaz ,,rm``, sistem popolnoma pozabi,
kateri bloki, razsejani po disku, so bili del va�e datoteke. �e huje -
bloki pravkar pobrisane datoteke bodo prvi uporabljeni in prepisani,
ko bo sistem potreboval ve� diskovnega prostora. Vendar nikoli ne
recite nikoli. Teoreti�no je mogo�e vrniti del�ke podatkov, �e takoj
po ukazu rm zaustavite sistem (angl. shut down). A tedaj raje imejte
pri roki zelo �arovni�ki tip osebe, ki ima na voljo dolge ure ali
dneve, da vam obnovi pobrisano.
Ko po pomoti pobri�ete 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
ob�asno prazniti ko� za smeti. Dve opombi: prvi�, splo�no mnenje je,
da je to slaba ideja. Na novo lastnost ukaza se boste vselej zana�ali
in ko se boste zna�li na obi�ajnem sistemu, kjer ukaz ,,rm`` zares
izvede ,,rm``, boste pri�li v te�ave. Drugi�, verjetno boste
ugotovili, da je ob vsej zme�njavi z diskovnim prostorom in �asom,
porabljenim za vzdr�evanje ko�a za smeti, vseeno la�je malo bolj
paziti pri uporabi ukaza ,,rm``. Za za�etnike zado��a, da si v va�em
priro�niku ogledate izbiro ,,-i`` ukaza ,,rm``.
�e ste �e vedno pogumni, potem je tukaj mo�en 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 va�em doma�em 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 ko�a
Morda boste tudi �eleli postaviti:
rm -f ~/.trashcan/*
v datoteko ,,.logout`` v va�em doma�em imeniku, da boste samodejno
izpraznili ko� vselej, ko se odjavite. (Razli�ici za ukazni lupini sh
in ksh sta prepu��eni bralcu kot vaja.)
Pri projektu Athena na MIT-u je nastal obse�en paket za
brisanje/vrnitev/izbris/�i��enje, ki lahko slu�i kot popolno
nadomestilo za rm, vendar dopu��a obnovitev datotek. Ta paket je bil
objavljen v comp.sources.misc (volume 17, issue 023-026)
4.7 Kako lahko proces ugotovi, ali te�e 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 raz�istimo: �elite vedeti, ali te�ete v ozadju ali �elite
vedeti, ali te�ete interaktivno? �e se odlo�ate, ali boste izpisovali
pozivnik in podobno, je to verjetno bolj�i kriterij. Poglejte, �e je
standardni vhod terminal:
sh: if [ -t 0 ]; then ... fi
C: if(isatty(0)) { ... }
V splo�nem ne morete preveriti, ali te�ete v ozadju. Osnovni problem
je, da imajo razli�ne ukazne lupine in razli�ne razli�ice Unixa
razli�ne predstave o tem, kaj pomenita ,,ospredje`` in ,,ozadje`` - in
na najbolj pogostem tipu sistema z dobro raz�i��enima pojmoma se lahko
programi poljubno premikajo med ospredjem in ozadjem!
Sistemi Unix brez nadzora opravil tipi�no 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 razli�no 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,
tipi�no 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
izpi�e ,,foo je zdaj: bletch``.
V zgodovinskih (in s P1003.2 usklajenih) izvedbah uporabite naslednji
trik, da se izognete te�avam s preusmerjanjem:
foo=bar
# datote�ni deskriptor 9 naj postane duplikat datote�nega deskriptorja 0 (stdin
);
# potem pove�i stdin s /etc/passwd; originalni stdin smo si zdaj
# ,zapomnili` v datote�nem 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 datote�nega deskriptorja 9, se pravi,
# spet ga pove�emo 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 splo�nem se vsak del
cevovoda izvede v drugi ukazni podlupini; v nekaterih izvedbah pa je
zadnji ukaz v cevovodu izjema: �e je to vgrajeni ukaz, kakr�en je
,,read``, ga bo izvedla trenutna lupina, sicer pa bo izveden v
podlupini.
POSIX 1003.2 dovoljuje oba na�ina, zaradi �esar se prenosljivi skripti
ne morejo zana�ati na nobenega od njiju.
4.9 Kako po�enem 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 pri�akujejo 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 razli�ice ukaza passwd(1).
# uporabni�ko 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, razhro��evalnike in druge programe, ki
nimajo vgrajenega ukaznega jezika. Distribucija priskrbi tudi poskusni
skript za nenehen zagon igre rogue, dokler se ne pojavi dobra za�etna
postavitev. Potem se nadzor vrne uporabniku, ki lahko u�iva v igri.
Na sre�o 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 po�ljete ,,send
pub/expect/expect.shar.Z`` na naslov
[email protected] ali
uporabite anonimni FTP za prenos imenovane datoteke s stre�nika
ftp.cme.nist.gov.
�e ena mo�nost re�itve 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.
Preprostej�a re�itev 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 dolo�enim 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 pripomo�ka, ki bi bil posebej na�rtovan za preslikovanje
med imeni programov in procesnimi ID-ji. �e ve�, tak�ne preslikave so
pogosto nezanesljive, saj lahko obstaja ve� procesov z enakim imenom
in ker je mo�no, da proces med tekom spreminja svoje ime. Toda pogosto
zado��a, da uporabimo naslednji cevovod, ki izpi�e seznam procesov (v
va�i lasti) z dolo�enim imenom:
ps ux | awk '/ime/ && !/awk/ {print $2}'
Pri tem zamenjajte ,,ime`` z imenom procesa, ki ga i��ete.
Splo�ni postopek prestre�e izhod ukaza ps in z orodji awk ali grep in
podobnimi poi��e vrstice z dolo�enim nizom znakov ter izpi�e polje PID
v teh vrsticah. Opazili boste, da zgornji ukaz ,,!/awk/`` iz izpisa
izlo�i so�asni 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 pripomo�ka, posebej na�rtovanega za
preslikavo med imeni programov in procesnimi ID-ji, tudi ni
(prenosljive) C-jevske knji�nice funkcij za to opravilo.
Nekateri proizvajalci sicer priskrbijo funkcije za branje pomnilnika
jedra; na primer, Sun vklju�uje funkcije ,,kvm_`` in Data General
funkcije ,,dg_``. Mo�no je, da jih sme uporabljati vsak uporabnik, a
morebiti so dostopne le super-uporabniku (ali uporabniku v skupini
,,kmem``), �e je na va�em 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 datote�ni sistem ,,/proc``, ki se ka�e
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 re�eno pa je dostop do tega imenika
morebiti omejen in vmesnik se lahko spreminja od sistema do sistema.
�e ne morete uporabiti posebnih proizvajal�evih knji�ni�nih 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 po�ne na
ve�ih sistemih, poglejte izvorno kodo ,,ofiles``, dostopno v arhivih
novi�arske 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 kon�a
uspe�no, 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 pokli�e
rsh, uredi, da oddaljen stroj na koncu izpi�e status zadnjega
izvedenega ukaza, in kon�a v tem izhodnem stanju.
4.12 Je mogo�e 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 razli�na na�ina. 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 ozna�evanje 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 ho�emo, 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 vklju�iti, saj bi lahko lupinska spremenljivka
$USER vsebovala posebne znake, kot so presledku.
Drugi na�in za podajanje spremenljivih nastavitev programu awk je
uporaba pogosto nedokumentirane lastnosti awk-a, ki dovoljuje, da se
spremenljivke podajajo v ukazni vrstici kot ,,la�na 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 naro�ite programu awk, kako naj se
obna�a za razli�ne datoteke. Na primer:
awk '{ program, ki je odvisen od s }' s=1 datoteka1 s=0 datoteka2
Opazite, da nekatere verzije programa awk povzro�ijo, da se pred
izvedbo bloka BEGIN zasledijo spremenljivke pred vsemi pravimi imeni
datotek, toda nekatere ne, zato se na to ne gre zana�ati.
Opazite tudi, da awk ob navedbi spremenljivk namesto pravih datotek
sam od sebe ne bo bral s stdin, zato morate dodati argument ,,-`` na
konec va�ega ukaza, kot je to v predprej�njem primeru.
Tretja mo�nost je uporaba novej�e verzije programa awk (nawk), ki
dopu��a neposreden dostop do spremenljivk okolja. Na primer:
nawk 'END { print "Va�a 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:
[email protected] (Casper Dik)
Date: Thu, 09 Sep 93 16:39:58 +0200
�al je nemogo�e posplo�iti, kako naj se zaklju�i podproces, saj se na
razli�nih vrstah Unixa mehanizmi medsebojno razlikujejo.
Predvsem morate narediti wait() za podproces na vseh vrstah Unixa. Ne
poznam Unixa, ki bi avtomati�no pospravil za podprocesom, ki se je
kon�al, �e mu tega niste posebej naro�ili.
Drugi�, �e na nekaterih, iz SysV izpeljanih, sistemih naredite
,,signal(SIGCHLD, SIG_IGN)`` (no, pravzaprav je lahko SIGCLD namesto
SIGCHLD, toda ve�ina novej�ih sistemov SysV ima ,,#define SIGCHLD
SIGCLD`` v datotekah z glavami), se otro�ki procesi samodejno
po�istijo, brez nadaljnega truda na va�i strani. Najpreprosteje to
preverite na svojem stroju, tako da poskusite, ali deluje, �eprav se
ni priporo�ljivo zana�ati na to, �e posku�ate 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.
Kak�en je potemtakem na�in, skladen s POSIX? Kot re�eno, morate
namestiti upravljalnik signalov (angl. signal handler) in po�akati z
wait. V POSIX-u so upravljalniki signalov name��eni 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 na�in in bo verjetno v prihodnosti postal �e
bolj prenosljiv.
�e va� sistem ne podpira standard POSIX, obstaja vrsta re�itev.
Najpreprosteje je uporabiti signal(SIGCHLD, SIG_IGN), �e to deluje. �e
samodejnega �i��enja ne morete dose�i 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 pokli�e, �e
se kon�a eden ali ve� podprocesov. �e va� upravljalnik signalov le
enkrat pokli�e wait(), to pomeni, da ne bo po�istil za vsemi
podprocesi. Prepri�an sem, da ima na sre�o programer na teh Unixih, na
katerih to dr�i, vselej na voljo klica wait3() ali waitpid(), ki z
izbiro WNOHANG preverita, ali morata po�istiti �e kaj podprocesov. Va�
upravljalnik signalov na sistemih, ki poznajo funkciji
wait3()/waitpid(), toliko �asa kli�e eno od teh funkcij z izbiro
WNOHANG, dokler ni ve� nobenih otrok za po�i��enje. Bolj�a izbira je
waitpid(), ker je vklju�ena v POSIX.
Na sistemih, izpeljanih iz SysV, se signali SIGCHLD regenerirajo, �e
po izhodu upravljalnika signala SIGCHLD �e vedno ostane kak�en otro�ki
proces za po�istiti. Torej je na ve�ini sistemov SysV ob klicu
upravljalnika signalov varno predpostaviti, da morate po�istiti le en
signal, in pri�akovati, da se bo upravljalnik poklical ponovno, �e je
po izhodu iz njega ostalo �e kaj nepo�i��enih signalov.
Na starej�ih sistemih ni nobenega na�ina, da bi prepre�ili
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 upravljalni�ke funkcije), da se resetirajo.
Na sre�o novej�e izvedbe dovoljujejo upravljalnikom signalov, da se
namestijo, ne da bi bili resetirani na SIG_DFL, ko se po�ene
upravljalni�ka 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 kli�e. Zaradi zgodovinskih
zdru�ljivostnih razlogov bo System V obdr�al 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 te�i
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 te�ave, obstaja
prenosljiv na�in, da se izognete temu problemu, �eprav je malce manj
u�inkovit. Va� star�evski proces naj se razveji (s fork) in potem �aka
na mestu, da se kon�a otro�ki proces. Otro�ki 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
po�ne, kar bi moral prvotno narediti otrok. Ker je njegov star�
kon�an, ga nasledi proces init, ki bo opravil vse potrebno �akanje. Ta
metoda je neu�inkovita, ker potrebuje dodatno razvejanje, a je
popolnoma prenosljiva.
4.14 Kako dobim vrstice iz cevovoda tako, kot se pi�ejo, namesto le v ve�jih
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
Knji�nica stdio trenutno dela vmesno pomnenje (angl. buffering)
razli�no, odvisno od tega, ali misli, da te�e na tty ali ne. �e misli,
da je na tty, dela vmesno pomnenje po posameznih vrsticah; sicer
uporablja ve�ji vmesni pomnilnik kot je ena vrstica.
�e imate izvorno kodo odjemnika, za katerega bi radi onemogo�ili
vmesno pomnenje, lahko za to uporabite setbuf() ali setvbuf().
�e ne, je najbolj�i na�in, da prepri�ate program, da te�e na tty tako,
da ga po�enete pod pty, se pravi, da uporabite program ,,pty``,
omenjen v vpra�anju ,,Kako po�enem 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 <
[email protected]>
Date: Fri, 7 Oct 1994 09:27:33 -0400
To ni te�ko, a je na prvi pogled malce kripti�no. Za�nimo najprej s
samim ukazom date: date lahko vzame niz s formatom izpisa in ga
upo�teva. Niz za formatiranje mora biti objet z narekovaji, da
prepre�imo 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 lo�ila,
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 referen�nega priro�nika (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
prepre�uje 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 za�nejo 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 novi�arski skupini comp.unix.xenix
odgovoril na zelo podobno vpra�anje.
Mislim, da ljudi bega, da obstajata dva razli�na mehanizma, ki se oba
za�neta z znakom ,#`. Oba re�ujeta isti problem na zelo omejenem
naboru primerov - a nista ni� manj razli�na.
Nekaj ozadja. Ko se jedro sistema UNIX odlo�i pognati program (eden
sistemskih klicev dru�ine exec()), najprej pogleda prvih 16 bitov
datoteke. Teh 16 bitov se imenuje magi�na �tevilka. Prvi�, magi�na
�tevilka prepre�uje jedru, da bi naredilo kaj neumnega, kot na primer
posku�alo izvesti datoteko z bazami podatkov o va�ih strankah. �e
jedro ne prepozna magi�ne �tevilke, se prito�i z napako ENOEXEC.
Program po�ene le, �e je magi�na �tevilka prepoznavna.
Drugi�, s�asoma so se uvajali razli�ni formati izvedljivih datotek in
magi�na �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 magi�no �tevilko in reklo ,,Aha! To je binarna datoteka
tipa x.out!`` in se nastavilo tako, da bo uporabljalo klice,
zdru�ljive s sistemom XENIX.
Pomnite, da jedro lahko poganja le binarne izvedljive slike
pomnilnika. Kako torej, se vpra�ujete, te�ejo skripti? Konec koncev,
lahko napi�em 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 mo�no poenostavljen. Vpletenih je veliko ve� zadev, a to
ponazarja bistvo, ki ga posku�am opisati.)
�e je klic execl() uspe�en in se program za�ene, se koda za execl()
nikoli ne po�ene. V zgornjem primeru uspe�en 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 hipoteti�na ukazna
lupina pogleda, zakaj ji je spodletelo. �e klic execl() ni uspel, ker
,program` ni bil prepoznan kot binarna izvedljiva datoteka, ga ukazna
lupina posku�a nalo�iti kot skript ukazne lupine.
Ljudje iz Berkeleya so imeli �edno idejo, kako raz�iriti na�in, na
katerega jedro zaganja programe. Popravili so jedro, da prepozna
magi�no �tevilko ,#!` (magi�ne �tevilke so velike 16 bitov in dva
8-bitna znaka tvorita 16 bitov, prav?). Ko je jedro prepoznalo magi�no
�tevilko ,#!`, je prebralo tudi ostanek vrstice in ga obravnavalo kot
ukaz, ki ga naj po�ene na vsebini datoteke. S tem popravkom lahko zdaj
po�nete podobne stvari:
#! /bin/sh
#! /bin/csh
#! /bin/awk -F:
Ta popravek je obstajal le v svetu Berkeleya, in je pre�el na jedra
USG kot del sistema System V Release 4. Pred V.4 jedro ni imelo
mo�nosti ni�esar drugega, kot nalaganje in zaganjanje binarnih
izvedljivih slik pomnilnika, razen v primerih proizvajal�eve 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 uporabni�ki vmesnik! Ho�em 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 po�ene takole:
execl ("/bin/csh", "csh", "-c", "moj.skript", (char *)0);
Kaj pa vsi tisti obstoje�i skripti -- nekateri od njih so deli
sistemske distribucije? �e se po�enejo skozi csh, se bodo stvari
kvarile. Potrebujete torej na�in, da po�enete nekatere skripte skozi
csh, in nekatere druge skozi sh.
Vpeljana re�itev 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
posku�ate pognati skript s klicem execl(), boste �e vedno dobili
napako ENOEXEC, pa naj se skript za�ne z znakom ,#` ali pa ne. �e
posku�ate pognati skript, ki se za�ne 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 za�ne z ,#`, ali pa se
ne za�ne z ,#`. Stvari kot so ,:` in ,: /bin/sh` na za�etku skriptov
dela �arobne preprosto dejstvo, da niso ,#`. Torej je vse to
identi�no, �e je na za�etku skripta:
:
: /bin/sh
<--- prazna vrstica
: /usr/games/rogue
echo "Hm ... spra�ujem se, pod katero ukazno lupino te�em???"
V vseh teh primerih bodo vse ukazne lupine posku�ale izvesti skript z
/bin/sh.
Podobno, tudi vse naslednje je identi�no, �e je na za�etku skripta:
#
# /bin/csh
#! /bin/csh
#! /bin/sh
# Hm ... spra�ujem se, pod katero ukazno lupino te�em???
Vse te vrstice se za�nejo z znakom ,#`. To pomeni, da se bo skript
pognal le, �e ga boste posku�ali 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 teoreti�no zdru�ljiva z Bournovo,
torej posku�a sama pognati te skripte. Va�e izku�nje so lahko druga�ne
z nekaterimi drugimi dostopnimi ukaznimi lupinami, kot so zsh, bash,
itd.)
O�itno 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, vklju�no s to. Nekateri proizvajalci
sistemov System V Release 3.2 nadgrajujejo na nekatere bolj vidne
dobrote V.4 in vam posku�ajo prepri�ati, da je to dovolj in, da ne
potrebujete stvari, kot so pravi, delujo�i tokovi ali dinami�no
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 zadr�eval
diha med �akanjem nanjo.
_________________________________________________________________
5. Napredna vpra�anja; radi jih vpra�ujejo 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 na�in cbreak v BSD ali na�in ~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 po�asno in neu�inkovito, in v�asih 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 bolj�a;
* 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 razli�ne bolj pravilne re�itve tega
problema. �al mi je, da jih ne morem vklju�iti, saj zares presegajo
namen tega seznama.
Preveriti boste �eleli tudi dokumentacijo prenosljive knji�nice
zaslonskih funkcij, imenovane ,,curses``. �e vas zanima V/I enega
samega znaka, vas pogosto zanima tudi neka vrsta kontrole prikaza na
zaslonu, in knji�nica curses priskrbi razli�ne 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 razli�icah Unixa je mogo�e preveriti, ali je v danem
datote�nem 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 vti�ih. 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
poznej�ih - sistemski klic rdchk() poro�a o tem ali se bo klic read()
na danem datote�nem deskriptorju blokiral.
Ni na�ina, 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.)
V�asih ljudje vpra�ujejo to vpra�anje z namenom, da bi napisali
if (znaki dostopni iz fd)
read(fd, buf, sizeof buf);
in dobili u�inek neblokovnega branja z read. To ni najbolj�i na�in za
izvedbo tega, saj je mo�no, da bodo znaki dostopni, ko preverite
dostopnost, a ne bodo ve� dostopni, ko pokli�ete read. Namesto tega
pri�gite zastavico O_NDELAY (ki se pod BSD imenuje tudi FNDELAY) z
izbiro F_SETFL funkcije fcntl(2). Starej�i sistemi (Version 7, 4.1
BSD) nimajo O_NDELAY; na teh sistemih lahko najbli�je neblokovnemu
branju pridete z uporabo alarm(2), da branju pote�e �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 splo�nem je to prete�ko. Datote�ni deskriptor je lahko obe�en na
cevovod ali pty, in v tem primeru nima imena. Lahko je obe�en na
datoteko, ki je bila odstranjena. Lahko ima ve� imen, zaradi pravih
ali simboli�nih povezav.
�e morate to res storiti, in prepri�ajte se, da ste o tem razmislili
na dolgo in �iroko in se odlo�ili, da nimate druge izbire, lahko
uporabite find z izbiro -inum in morda �e -xdev, ali uporabite ncheck,
ali �e enkrat opona�ajte funkcionalnost enega od teh orodij v va�em
programu. Zavedajte se, da preiskovanje 600 megabytnega datote�nega
sistema za datoteko, ki je morda sploh ni, traja nekaj �asa.
5.4 Kako lahko teko�i 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 za�enja z ,,/``, je to
verjetno ime absolutne poti do va�ega programa, sicer lahko va�
program pogleda v vsak imenik, imenovan v okoljski spremenljivki PATH
in posku�a 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 zdru�ite ta imenik in vrednost argv[0], imate verjetno
pravo ime.
Ne morete pa biti prepri�ani, saj je povsem legalno, da en program
izvede drugega z exec() s katerokoli vrednostjo argv[0], ki si jo
za�eli. Da exec izvaja nove programe z imenom izvedljive datoteke v
argv[0], je le dogovor.
Na primer, povsem hipoteti�ni 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 hipoteti�ni primer, zato tega ne posku�ajte 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 posku�ate preusmeriti vhod in izhod poljubnemu su�enjskemu
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
upo�tevata strog protokol brez mrtvih zank, toda, ker to zahteva
sodelovanje med procesi, je neprimerno za knji�ni�no funkcijo, podobno
popen().
Distribucija ,,expect`` vklju�uje knji�nico funkcij, ki jih lahko
C-jevski programer kli�e 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
vpra�anje ,,Kako po�enem 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 dolo�ite minimalna koli�ina
zakasnitve; dejanska zakasnitev bo odvisna od upravni�kih zadev, kot
je obremenitev sistema, in je lahko poljubno dolga, �e nimate sre�e.
Ne obstaja funkcija standardne knji�nice, na katero bi se lahko
zanesli v vseh okolji za ,,dremanje`` (angl. napping, obi�ajen izraz
za kratke spance). Nekatera okolja priskrbijo funkcijo ,,usleep(n)``,
ki zadr�i izvajanje za n mikrosekund. �e va�e 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 zdru�ljivosti, ta
funkcija priskrbi natan�nost "po dolgem teku" tako, da oklesti prave
zahteve na milisekundo natan�no in akumulira mikrosekunde med
posameznimi klici z idejo, da jo verjetno kli�ete v tesni zanki, in se
bo po dolgem teku napaka izni�ila.
�e je ne kli�ete v tesni zanki, potem skoraj gotovo ne potrebujete
mikrosekundne natan�nosti in v tem primeru vam ni mar za mikrosekunde.
�e vam bi bilo mar, tako ali tako ne bi uporabljali Unixa, saj lahko
naklju�no prebavljanje sistema (npr. razporejanje) zmelje �asomerilno
kodo.
Vrne 0 ob uspe�nem premoru, -1 ob neuspe�nem.
*/
#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
* hro��a, pri katerem se prvi argument poll() preverja za
* obstoj pravilnega pomnilni�kega naslova, �eprav je drugi
* argument enak 0.
*/
struct pollfd foo;
subtotal += usec;
/* �e je premor < 1 ms, ne naredi ni�esar, a si zapomni */
if (subtotal < 1000) return(0);
msec = subtotal/1000;
subtotal = subtotal%1000;
return poll(&foo,(unsigned long)0,msec);
}
_________________________________________________________________
�e ena mo�nost 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 lo�ljivost je omejena z vrednostjo HZ v
jedru, saj uporablja rutino delay() jedra.)
Mnogo novej�ih 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
vpra�anje. Hvala Maartenu Litmaathu za ta odgovor in za spodaj
omenjeni program ,,indir``. ]
1. Najprej predpostavimo, da ste na razli�ici Unixa (npr. 4.3BSD ali
SunOS), ki pozna tako imenovane ,,izvedljive skripte ukaznih
lupin``. Tak�en skript se mora za�eti s podobno vrstico:
#!/bin/sh
Skript se imenuje ,,izvedljivi``, ker se tako kot resni�na
(binarna) izvedljiva datoteka za�ne s tako imenovano ,,magi�no
�tevilko``, ki dolo�a tip izvedljive datoteke. Glejte tudi
razdelek ,,Zakaj se nekateri skripti za�nejo z ,,#!...``?``. V
na�em 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 napi�ete:
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 pri�gan bit setuid za ,foo`,
bo spo�tovan v prvi obliki ukaza; �e zares vpi�ete drugo obliko,
bo OS spo�toval bite z dovoljenji programa /bin/sed, ki seveda ni
setuid.
2. Prav, toda kaj, �e se moj skript ukazne lupine ne za�ne s tak�no
vrstico ,#!`, ali, �e moj OS o tem ni� ne ve?
No, �e ga ukazna lupina (ali kdorkoli drug) posku�a izvesti, bo OS
vrnil indikacijo napake, saj se datoteka ne za�ne z veljavno
magi�no �tevilko. Ukazna lupina bo po sprejetju te indikacije
predpostavila, da gre za skript ukazne lupine in mu dala �e eno
prilo�nost:
/bin/sh lupinski_skript argumenti
A zdaj smo �e videli, da se v tem primeru bit setuid datoteke
,lupinski_skript` ne bo spo�toval!
3. Prav, kaj pa varnostna tveganja pri lupinskih skriptih setuid?
Dobro, denimo, da se skript imenuje ,/etc/skript_setuid` in se
za�enja 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 sre�o lahko to varnostno luknjo zlahka zapremo, �e napi�emo v
prvo vrstico:
#!/bin/sh -
Znak ,-` ozna�uje 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 resnej�i 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 po�asi, bo morda lahko �etrti ukaz zamenjal
originalno datoteko ,temp` s trojanskim konjem ,moj_skript` preden
ukazna lupina sploh odpre ,temp`! Obstajajo 4 na�ini za krpanje te
varnostne luknje:
1. naj OS za�ene skript setuid na druga�en, varen na�in - System
V R4 in 4.4BSD uporabljata gonilnik /dev/fd, s katerim podata
interpreterju datote�ni deskriptor skripta;
2. naj bo skript interpretiran posredno, skozi vmesnik, ki se
prepri�a, da je vse v redu, preden po�ene 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 splo�en ,,stre�nik za skripte setuid``, ki posku�a
najti zahtevano ,opravilo` v bazi podatkov veljavnih skriptov
in ob uspehu po�ene pravi interpreter s pravimi argumenti.
5. Zdaj, ko smo se prepri�ali, da se interpretira pravilna datoteka,
ali so prisotna �e kak�na 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 povzro�a te�ave, �e ni
pravilno nastavljena. Tudi druge okoljske spremenljivke lahko
ogrozijo varnost sistema, npr. SHELL ... Nadalje se morate
prepri�ati, da ukazi v skriptih ne dovoljujejo interaktivnih
ube�nih zaporedij ukazne lupine! Potem je tukaj umask, ki je lahko
nastavljen na kaj �udnega ...
Et cetera. Zavedati se morate, da skript setuid ,,podeduje`` vse
hro��e in varnostna tveganja ukazov, ki jih kli�e!
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 dolo�en datote�ni 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 razli�ne stvari o
procesih, ki uporabljajo dolo�ene 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 vpra�anju ,,Kako lahko v skriptu ali programu
ugotovim ID procesa programa z dolo�enim imenom?``.
Obve��en sem bil, da obstaja tudi program, imenovan lsof, a ne vem,
kje se ga dobi.
Michael Fink <
[email protected]> dodaja:
�e ne morete odmestiti datote�nega sistema (z umount), za katerega
zgornja orodja ne poro�ajo o odprtih datotekah, se prepri�ajte, da
datote�ni sistem, ki ga posku�ate odme��ati ne vsebuje aktivnih to�k
name��anja (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:
[email protected] (Nikola Malenovi�)
Date: Thu, 29 Sep 1994 07:28:37 -0400
V splo�nem ne morete ugotoviti userid nekoga, ki vas tipa z
oddaljenega stroja. Morda lahko ugotovite stroj, s katerega prihajajo
oddaljene zahteve. Ena od mo�nosti, �e jo va� sistem podpira, in, �e
je tipalnemu stre�niku (angl. finger daemon) prav, jo, da naredite
va�o datoteko .plan za ,,imenovano cev`` (angl. named pipe) namesto
obi�ajno datoteko. (Za to uporabite ,mknod`.)
Potem lahko po�enete program, ki bo odprl va�o datoteko .plan za
pisanje; odpiranje bo blokirano dokler nek drugi proces (namre�
fingerd) ne odpre .plan za branje. Zdaj lahko skozi to pipo po�ljete,
kar pa� �elite, kar vam omogo�a, da prika�ete razli�no 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 prilo�nost 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 stre�nik, kot je RFC 931. Trenutno obstajajo tri
implementacije RFC 931 za popularne stroje BSD, in nekaj aplikacij
(kot ftpd z wuarchive), ki podpirajo ta stre�nik. Za ve� informacij se
priklju�ite elektronskemu spisku rfc931-users z obi�ajno zahtevo
,,subscribe`` na
[email protected].
Glede tega odgovora obstajajo tri opozorila. Prvo je, da mnogi sistemi
NFS napa�no prepoznajo imenovano cev. To pomeni, da bo poskus branja
cevi na drugem stroju lahko blokiral, dokler ne pote�e predviden �as,
ali videl cev kot datoteko dol�ine 0, in je ne bo nikoli izpisal.
Drugi problem je, da na veliko sistemih stre�nik fingerd preveri, ali
datoteka .plan vsebuje podatke (in je bralna), preden jo posku�a
brati. V tem primeru bodo oddaljeni klici finger popolnoma zgre�ili
va�o datoteko .plan.
Tretji problem je, da imajo sistemi, ki podpirajo imenovane cevi, na
voljo v danem �asu le fiksno (kon�no) �tevilo le-teh - preverite
nastavitveno datoteko jedra in izbiro FIFOCNT. �e �tevilo cevi na
sistemu prekora�i vrednost FIFOCNT, sistem prepre�i 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 mogo�e ponovno priklju�iti 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
Ve�ina razli�ic 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 po�enete procese na tak�en na�in, 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. ,,Po�enite program v
seji pty`` - glejte pty v volume 23). Na�rtovan je le za uporabo v
sistemih, podobnih BSD.
* Tretji je ,,dislocate``, ki je skript, prilo�en distribuciji
expect. Za razliko od prej�njih dveh bi moral ta te�i na vseh
razli�icah Unixa. Podrobnosti o tem, kako dobite expect najdete v
vpra�anju ,,Kako po�enem 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 pripomo�kom screen ali pty, �e ga �elite odklopiti
in priklopiti.
5.11 Je mogo�e ,,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� razli�nih poti, �eprav nobena od njih ni popolna:
* Pripomo�ek kibitz dovoljuje dvema (ali ve�) �lovekoma, da sta v
stiku prek ukazne lupine (ali poljubnega programa). Uporaba
vklju�uje:
+ opazovanje ali pomo� pri terminalski seji druge osebe;
+ bele�enje pogovora z mo�nostjo pomika nazaj, shranjevanje
pogovora, in celo spreminjanje med tekom;
+ mo�tveno igranje iger, urejanje dokumentov ali druga
opravila, pri katerih ima vsaka oseba dolo�ene kvalitete in
dolo�ene pomanjkljivosti, ki se komplementirajo.
kibitz pride kot del distribucije expect. Glejte ,,Kako po�enem
passwd, ftp, telnet, tip in druge interaktivne programe v skriptu
ukazne lupine v ozadju?``.
Za uporabo pripomo�ka kibitz potrebujete dovoljenje osebe, ki jo
�elite vohuniti. Vohunjenje brez privolitve zahteva manj prijetne
pristope:
* Napi�ete 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 o�itno ni nekaj, kar naj bi
posku�al kdorkoli, ki nima izku�enj pri delu okoli jedra
operacijskega sistema Unix. �e ve�, katerokoli metodo boste �e
uporabili, bo verjetno zelo neprenosljiva.
* �e �elite to po�eti ves �as na dolo�enem pritrjenem terminalu
(npr. �e �elite, da bodo lahko operaterji preverili zaslonski
terminal stroja z drugih strojev), lahko dejansko pove�ete monitor
s terminalskim kablom. Na primer, vtaknite izhod monitorja v
serijska vrata drugega stroja, in na teh vratih po�enite program,
ki bo nekam shranil svoj vhod in ga potem prenesel na druga vrata,
tista, ki gredo zares na fizi�ni terminal. �e to po�nete, se
morate prepri�ati, da se ves izhod terminala po�ilja nazaj po
�ici, �e povezujete le �ice ra�unalnik->terminal, to ni problem.
To ni nekaj, kar bi lahko po�el nekdo, ki ni doma� z napeljavo
terminalskih �ic in podobno.
* Zadnja razli�ica paketa screen vklju�uje ve�uporabni�ki na�in.
Nekaj podatkov o paketu screen najdete v vpra�anju ,,Je mogo�e
ponovno priklju�iti 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 priporo�amo 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. Vpra�anja, povezana z razli�nimi ukaznimi lupinami in njihovimi razlikami
6.1 Se lahko ukazne lupine klasificirajo v kategorije?
Subject: Can shells be classified into categories?
From:
[email protected] (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500
V splo�nem obstajata dva glavna razreda ukaznih lupin. Prvi razred
sestavljajo lupine, izpeljane iz Bournove ukazne lupine, in vklju�uje
sh, ksh, bash in zsh. Drugi razred sestavljajo ukazne lupine,
izpeljane iz C-jevske in vklju�uje csh in tcsh. Kot dodatek je tukaj
�e rc, za katero ve�ina 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 mogo�e 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 ,,vklju�im`` en skript ukazne lupine iz drugega lupinskega skripta?
Subject: How do I "include" one shell script from within another shell script?
From:
[email protected] (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500
Vse ukazne lupine Bournove kategorije (vklju�no 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:
[email protected] (Matthew Wicks)
Date: Wed, 7 Oct 92 14:28:18 -0500
Vse pomembnej�e ukazne lupine, razen sh, podpirajo vzdevke, a vse ne
delajo z njimi na enak na�in. Na primer, nekateri ne sprejemajo
argumentov.
�eprav niso strogo ekvivalentne, imajo funkcije ukaznih lupin (ki
obstajajo v ve�ini ukaznih lupin Bournove kategorije) skoraj isto
funkcionalnost, kot vzdevki. Funkcije v ukaznih lupinah lahko po�nejo
stvari, ki jih vzdevki ne morejo. Funkcije ne obstajajo v Bournovih
ukaznih lupinah, izpeljanih iz Unixa Version 7, ki vklju�uje 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:
[email protected] (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:
[email protected] (Matthew Wicks)
From:
[email protected] (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 razli�ne ukazne lupine?
Subject: What "dot" files do the various shells use?
From:
[email protected] (Matthew Wicks)
From:
[email protected] (Thomas M. Breuel)
Date: Wed, 28 Oct 92 03:30:36 +0100
�eprav ta seznam morda ni popoln, ponuja ve�ino informacij.
csh
Nekatere razli�ice imajo sistemski datoteki .cshrc in .login.
Vsaka razli�ica jih postavlja na razli�na 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), dolo�en 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), dolo�en 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 dolo�itvi izbire -f.
+ .zprofile - prijavne ukazne lupine.
+ .zshrc - interaktivne ukazne lupine, razen ob dolo�itvi
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 razli�nimi ukaznimi lupinami.
Subject: I would like to know more about the differences ... ?
From:
[email protected] (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 razli�ic Unixa
7.1 Opozorilo in uvod
From: "Pierre (P.) Lewis" <
[email protected]>
Date: Tue Aug 15 15:14:00 EDT 1995
X-Version: 2.9
Opozorilo bralcem: Rad bi osve�il ta PZV s spletnimi kazalci na
razli�ne Unixe, ki jih omenjam. Ne oklevajte s po�iljanjem, slej ko
prej bom kon�al osve�itev tega dela. E-po�ta:
[email protected].
Nadaljnje besedilo je ponujeno brez zagotovitve to�nosti ali
popolnosti. Storil sem, kar sem lahko storil v �asu, ki ga imam na
voljo, pogosto z nasprotujo�imi si informacijami, in delo �e vedno
napreduje. Upam, da bom nadaljeval z izbolj�evanjem tega povzetka.
Komentarji in popravki so dobrodo�li:
[email protected].
Najprej kratka definicija. Z imenom ,,Unix`` mislimo operacijski
sistem, tipi�no napisan v C-ju, s hierarhi�no urejenim datote�nim
sistemom, integracijo V/I za datoteke in naprave, katerega vmesnik
sistemskih klicev vklju�uje storitve kot sta fork(), pipe(), in
katerega uporabni�ki vmesnik vklju�uje 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 generi�nem pomenu.
Ve�ina Unixov je izpeljanih bolj ali manj neposredno iz izvorne kode,
napisane v AT&T (zdaj Novell, verjetno je v ve�ini �e vedno kak�en
ostanek prvotne kode prve razli�ice v C-ju), a obstajajo tudi kloni
(se pravi, z Unixom zdru�ljivi sistemi brez kode AT&T).
Kot dodatek, obstajajo okolja, podobna Unixu (npr. VOS), ki po�ivajo
na drugih operacijskih sistemih (OS), in OS, ki jih je navdihnil Unix
(da, tudi DOS!). Teh tukaj ne obravnavamo. Le malo pi�emo o Unixih, ki
delujejo v realnem �asu (angl. real-time Unices), �eprav na�rtujemo
ve�.
Unix pride v izredno razli�nih okusih. To je v veliki meri posledica
dostopnosti izvorne kode in preprostosti prenosa in spremembe Unixa.
Tipi�no, izdelovalec Unixa za�ne z eno osnovnih vrst (glejte spodaj),
vzame ideje/kodo od druge ve�je vrste, doda in spremeni veliko stvari,
itd. Rezultat je �e ena nova vrsta Unixa. Dandanes je na voljo
dobesedno na stotine Unixov, najbli�ja stvar standardnemu Unixu je (po
definiciji) System V.
Ta odgovor je bil napisan predvsem iz podatkov na Mre�i in e-po�ti.
Nekaj posebnih virov je omenjenih v ustreznih razdelkih.
Priznanja (poleg virov):
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
root%
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected]
[4.4BSD],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected], veliko ljudem, ki sem jih �e pozabil
na�teti, in vsem drugim ljudem, katerih sporo�ila berem. Najlep�a
hvala!
7.2 Zelo kratek pogled na zgodovino Unixa
Zgodovina Unixa se za�ne davnega leta 1969 na slavnem
,,malo-uporabljanem ra�unalniku PDP-7 v kotu`` na katerem so Ken
Thompson, Dennis Ritchie (�rka ,R` v ,,K&R``) in drugi za�eli delo na
tem, kar je potem postalo Unix. Ime ,,Unix`` je bilo mi�ljeno kot
besedna igra imena obstoje�ega 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 razli�ice so bile ozna�ene kot ,,Version n`` ali ,,Nth Edition``
(priro�nikov), in so delovale na ra�unalnikih DEC PDP-11 (16 bitov) in
poznej�ih VAX-ih (32 bitov). Pomembnej�e razli�ice vklju�ujejo:
* V1 (1971): Prva razli�ica Unixa, v zbirniku na PDP-11/20.
Vklju�evala je datote�ni 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 najpomembnej�i dogodek v
zgodovini tega OS: pomeni, da se Unix lahko prena�a na novo
strojno opremo v nekaj mesecih, spremembe pa so preproste.
Programski jezik C je bil prvotno na�rtovan za operacijski sistem
Unix, in torej obstaja mo�na sinergija med C-jem in Unixom.
* V6 (1975): Prva razli�ica Unixa, �iroko dostopna zunaj ustanove
Bell Labs (posebej na univerzah). To je bil tudi za�etek
raznolikosti in popularnosti Unixa. 1.xBSD (PDP-11) je bil
izpeljan iz te razli�ice. 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
,,izbolj�anje glede na vse prej�nje in prihodnje Unixe`` [Bourne].
Vklju�eval 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 razli�ice 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
zdru�ili v Unix System Development Lab.
Druga razli�ica 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 sli�imo veliko o tem. Podjetje, zdaj
odgovorno za Unix (System V) se imenuje Unix System Laboratories (USL)
in je bilo v ve�inski lasti koncerna AT&T do za�etka leta 1993, ko ga
je kupil Novell. Konec leta 1993 je Novell odstopil pravice do uporabe
blagovne znamke ,,UNIX`` mednarodnemu zdru�enju X/Open.
A z Unixom se je veliko dogajalo zunaj AT&T, posebej na univerzi
Berkeley (s koder prihaja druga ve�ja 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. Dobr�en del tega razdelka je povzetega po tej
knjigi.
7.3 Glavne vrste Unixa
From: "Pierre (P.) Lewis" <
[email protected]>
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 me�anica 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. Tipi�no na strojni opremi Intela. Najbolj
prena�ani Unix, tipi�no z raz�iritvami BSD (csh, nadzor opravil,
termcap, curses, vi, simboli�ne povezave). Evolucijo Systema V zdaj
nadzoruje Unix International (UI). �lanstvo UI vklju�uje AT&T, Sun,
... Novi�arski 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 (omre�no
programje)
+ RFS
+ deljene programske knji�nice
+ SVID 2
+ prenos pomnilni�kih strani na zahtevo (angl. demand paging),
�e strojna oprema to podpira
* SVR3.2:
+ zdru�itev s Xenixom (Intel 80386)
+ omre�enost
* SVR4 (1988), glavni tok implementacij Unixa, me�anica 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, vti�i (angl. sockets), select(), csh
+ S SunOS: NFS, grafi�ni vmesnik OpenLook, X11/NeWS, podsistem
navideznega pomnilnika z datotekami, ki ustrezajo pomnilniku,
deljene knji�nice (!= 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)
+ datote�ni sistem Veritas, ACL-ji
+ dinami�no nalaganje modulov jedra
* Prihodnost:
+ SVR4 MP (ve�procesorski)
+ uporaba mikrojedra Chorus
Berkeley Software Distribution (BSD, distribucija programja z
Berkeleya). Tipi�na na VAX-ih, RISC-ih, ve� delovnih postajah. Zdaj
bolj dinami�ne, raziskovalne razli�ice kot System V. BSD Unix je
odgovoren za ve�ino priljubljenosti Unixa. Ve�ina izbolj�av Unixa se
je za�ela tukaj. Skupina, odgovorna na UCB (University of California,
Berkeley) je Computer System Research Group (CSRG). Ukinili so jo leta
1992. Novi�arska 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 poznej�e razli�ice AT&T CRG
+ nadzor opravil
+ samodejna nastavitev jedra
+ vfork()
* 4.2BSD (1983):
+ TCP/IP, vti�i, ethernet
+ datote�ni sistem UFS: dolga imena datotek, simboli�ne
povezave
+ novi zanesljivi signali (v SVR3 zdaj zanesljivi signali 4.1)
+ select()
* 4.3BSD (1986) za VAX, ?:
+ TCP/IP, vti�i, ethernet
+ datote�ni sistem UFS: dolga imena datotek, simboli�ne
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:
+ ve�ina standarda POSIX 1003.1
+ novi algoritmi za TCP
+ omre�ni datote�ni sistem NFS (od Suna)
+ pomnilni�ki datote�ni 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 za��ita raz�irjanja USL
* 4.4BSD (alpha, junij 1992) za HP 9000/300, Sparc, 386, DEC, drugi;
niti VAX, niti Tahoe; dve razli�ici, lahka (vsebina Net2 plus,
popravki in nove arhitekture) in ote�eno (vse, potrebuje licenco
USL):
+ nov navidezni pomnilni�ki sistem (VMS), ki temelji na Mach
2.5
+ vmesnik navideznega datote�nega sistema, logi�no strukturiran
datote�ni sistem, velikost lokalnega datote�nega sistema do
2^63, NFS (prosto raz�irljiv, deluje s Suni, �ez UDP ali TCP)
+ podpora omre�jem ISO/OSI (izpeljanim iz ISODE):
TP4/CLNP/802.3 in TP0/CONS/X.25, seje in zgornje v
uporabni�kem prostoru (angl. session and above in user
space); FTAM, VT, X.500.
+ ve�ina POSIX.1 (posebej nov terminalski gonilnik a la SV),
veliko od POSIX.2, izbolj�an nadzor opravil; glave ANSI C
+ Kerberos integriran z ve�ino sistema (vklju�no z NFS)
+ izbolj�ave TCP/IP (vklju�no s predvidevanjem glave (angl.
header prediction), SLIP)
+ pomembne spremembe jedra (nov dogovor o sistemskih klicih,
...)
+ druge izbolj�ave: vrste FIFO, zaklepanje datoteke v dolo�enem
obmo�ju 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.
Zdru�ljiv/podrejen SVID 2 (in prihajajo�i 3), POSIX, X/Open, itd.
�lani OSF vklju�ujejo Apollo, Dec, HP, IBM, ...
* OSF/1 (1991):
+ po�iva na jedru Mach 2.5
+ simetri�no multiprocesiranje, paralelizirano jedro, niti
+ logi�ni diski, zrcaljenje diska (angl. disk mirroring), UFS
(domoroden), S5 FS, NFS
+ izbolj�ana varnost (B1 z nekaterimi lastnostmi B2, B3; ali
C2), 4.3BSD admin
+ STREAMS, TLI/XTI, vti�i (angl. sockets)
+ deljene knji�nice, dinami�ni nalagalnik (vklju�no z jedrom)
+ grafi�ni vmesnik Motif
* izdaja 1.3 (junij 1994)
+ OSF/1 MK (mikro-jedro) temelji na Mach 3.0
+ zado��a trenutnemu osnutku specifikacije Specification 1170
(mi�ljeno 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 ve�jih vrst bi moral verjetno vklju�evati tudi Xenix
(Microsoft), ki je bil osnova za mnoge prenose. Izpeljan je bil iz V7,
S III in kon�no System V, na zunaj jim je podoben, a znatno spremenjen
navznoter (zmogljivosti so ugla�ene za mikrora�unalnike).
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 tehni�en kot prej�nji dve knjigi),
glejte: ,,Guide to OSF/1, A Technical Synopsis``, izdano pri zalo�bi
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
vklju�ujejo datoteko bsd-faq in mnoge novi�arske skupine, omenjene v
besedilu.
7.4 Glavni igralci in standardi Unixa
From: "Pierre (P.) Lewis" <
[email protected]>
Date: Mon Jan 21 16:59:14 EST 1995
X-Version: 2.8
Najpomembnej�i igralci na odru Unixa so trenutno (zgodnje leto 1995,
popravki so zelo dobrodo�li, to so novi byti):
* Novell, ki je kupil USL (zgodaj 1993) in ima zdaj izvorno kodo.
* X/Open, ki ima tr�ne 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 priklju�il), odnosi z
X/Open so bili formalizirani.
* IEEE s standardi POSIX, LAN.
* PowerOpen (IBM, Apple, Motorola, Bull, drugi), ki promovira
PowerPC. Ne zame�ajte ga z grafi�nim okoljem z istim imenom.
Naslednje kratko opisuje najpomembnej�e standarde, ki se nana�ajo 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 kon�ani)
o 1003.1: knji�ni�ne procedure (ve�inoma sistemski klici)
- pribli�no V7 razen za signale in terminalski vmesnik
(1990)
o 1003.2: ukazna lupina in pripomo�ki
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 sporo�il
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 (vklju�uje tiskanje)
o 1003.8: transparenten dostop do datotek
o 1003.9: povezave jezika FORTRAN
o 1003.10: super-ra�unalni�tvo
o 1003.12: vmesniki, neodvisni od protokola
o 1003.13: profili v realnem �asu (angl. real-time
profiles)
o 1003.15: vmesniki za super-ra�unalni�ki 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 zdru�ljivosti z
X/Open:
o XPG2 (1987), mo�an vpliv SV
# Vol 1: ukazi in pripomo�ki
# Vol 2: sistemski klici in knji�nice
# 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) splo�ni 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). Zdru�itev SVID, OSF-jev AES
in druge re�i.
* 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 knji�nice (podobno
XPG2.1)
o SVID2 (1986, SVR3)
# Vol 1: sistemski klici in knji�nice (osnova,
raz�iritve jedra)
# Vol 2: ukazi in pripomo�ki (osnovni, napredni,
upravni�ki, 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 zbli�ati razli�ne
platforme Unixa. Iniciative v naslednjih podro�jih:
+ namizna okolja
+ aplikacijski vmesnik API (kot Spec 1180 - en sam programski
vmesnik) - verjetneje najpomembnej�i dose�ek na tej to�ki;
odstrani razlike med SCO, AIX, Solaris, HP-UX, UnixWare.
+ porazdeljene ra�unske storitve (OSF-jev DCE in SunSoftov ONC)
+ objektne tehnologije (OMG-jeva CORBA)
+ grafika
+ ve�predstavnost
+ upravljanje sistemov
* PowerOpen Environment (POE, okolje PowerOpen), ki ga promovira
zdru�enje PowerOpen (POA). Standard za Unixu podobne OS, ki te�ejo
na �ipu PowerPC. Definira:
+ API (programski vmesnik za aplikacije, izpeljan iz AIX,
ustreza POSIX, XPG4, Motif, &c) in
+ ABI (binarni aplikacijski vmesnik), razlo�ljiv faktor med
drugimi standardi kot so POSIX, XPG4, &c.. Katerikoli sistem,
ki bo ustrezal POE, bo lahko poganjal katerokoli programje za
POE.
Klju�ne odlike:
+ zasnova na arhitekturi PowerPC
+ neodvisnost od strojnega vodila
+ implementacije sistema se lahko raztezajo od prenosnikov do
super-ra�unalnikov
+ potrebuje ve�uporabni�ki, ve�opravilni operacijski sistem
+ omre�na podpora
+ raz�iritve X windows, Motif
+ ustreznost preizku�ena 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 novi�arske skupine
comp.sys.powerpc.)
IBM je vpleten v projekt COSE in v projekt POE. Kako neki bosta tadva
sodelovala?
7.5 Ugotovitev vrste va�ega Unixa
From: "Pierre (P.) Lewis" <
[email protected]>
Date: Mon May 30 15:44:28 EDT 1994
X-Version: 2.6
Ta razdelek na�teva vrsto stvari, ki jih lahko pogledate v poskusu, da
bi ugotovili osnovno vrsto va�ega Unixa. Glede na precej�njo izmenjavo
kode in idej med razli�nimi vrstami in mnogih sprememb, ki so jih
naredili proizvajalci, je vsaka izjava oblike ,,Ta Unix je tipa
SVR2!`` v najbolj�em primeru statisti�na (razen nekaterih prenosov
SVRn). Veliko Unixov ponuja tudi ve�ino iz obeh svetov (pome�ano, kot
SunOS, ali striktno razlo�eno, kot Apollo?). Zato ta razdelek verjetno
ni preve� uporaben ...
Pomaga vam lahko tudi seznam lastnosti iz prej�njih 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
sporo�ilo (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
tiskalni�ki podsistem.
Lastnost Tipi�no v SVRx Tipi�no 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 datote�ni
sistem /etc/mnttab /etc/mtab
obi�ajna 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
tiskalni�ki
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
ve�kratni 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" <
[email protected]>
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 izbolj�al. Vseboval naj bi le Unixe,
znane �ir�emu ob�instvu. Majhni in neameri�ki Unixi so dobrodo�li,
npr. Eurix. Nujno preformatiranje.)
Ta razdelek na�teva (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 (poznej�i na SVR3.2?) z raznimi
stopnjami raz�iritev BSD za razli�no strojno opremo. Lasten sistemski
upravljalnik (SMIT). Podpira CP 850 in Latin-1. Precej razli�en od
ve�ine Unixov in tudi med sabo. Novi�arska 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 izbolj�avami.
* 4.1 je zadnji (vklju�uje podporo za PowerPC?)
* AIX/ESA, te�e na ra�unalnikih 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 izobra�evalne ustanove). Ne
zame�ajte ga z DG-ovim OS istega imena.
Arix: SV
A3000UX (Commodore): Unix (?) SVR4 za ra�unalnike Amiga s procesorjem
Motorola 68030.
A/UX (Apple): SV z raz�iritvami z Berkeleya, NFS, Mac GUI. System 6
(pozneje System 7) te�e kot gost A/UX (obratno kot MachTen).
Novi�arska skupina: comp.unix.aux.
* 2.0: SVR2 z 4.2BSD, aplikacije za Mac System 6.
* 3.0 (1992): SVR2.2 z 4.3BSD in raz�iritvami SVR3/4; X11R4, MacX,
TCP/IP, NFS, NIS, RPC/XDR, razli�ne ukazne lupine, UFS ali S5FS.
aplikacije za System 7.
* 4.0 bo OSF/1. Toda sli�im, da se je Apple odlo�il pustiti A/UX
(zdaj bo skupaj z IBM uporabljal AIX za PPC).
3B1 (680x0): Osnovan na SV, naredil Convergent za AT&T. Novi�arska
skupina: comp.sys.3b1.
BNR/2: pomeni BSD Net/2 Release? Vklju�uje NetBSD/1, FreeBSD.
BOS za Bullov DPX/2 (680x0)
* V1 (1990): SVR3 z raz�iritvami BSD (FFS, select, vti�i),
simetri�no MP, X11R3
* V2 (1991): dodaja nadzor opravil, zrcaljenje diska, varnost C2,
raz�iritve DCE
* Obstaja tudi BOS/X, in z AIX zdru�ljiv Unix za delovne postaje
Bull PPC. Ni znano, v kak�nem sorodu je z zgornjima dvema.
386BSD: Jolitzov prenos programja Net/2. POSIX, 32-biten, �e vedno v
stanju alpha (zdaj razli�ica 0.1).
BSD/386 (80386): od BSDI, z izvorno kodo (naraslo programje Net2)
Novi�arska skupina: comp.unix.bsd.
Chorus/MiXV: Unix SVR3.2 (SVR4) okoli zasnove Chorus, ABI/BCS.
Coherent (Mark Williams Company): Za 80286. klon Unixa, zdru�ljiv z
V7, nekaj SVR2 (IPC). V4.0 je 32-bitna. Novi�arska 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. Novi�arska 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. Novi�arska 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, zado��a POSIX-ABI. Na�ini SVR3, SVR4 in BSD.
Esix (80386): �isti SVR4, X11, OpenLook (NeWS), Xview
Eurix (80?86): SVR3.2 (Nem�ija)
FreeBSD: 386bsd 0.1 s popravki in veliko osve�enimi pripomo�ki.
FTX: Stratus fault-tolerant OS (stroj 68K ali i860-i960)
Generics UNIX (80386): SVR4.03 (Nem�ija)
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): starej�i iz S III (SVRx), zdaj SVR2 (4.2BSD?) s pripomo�ki
SV (imajo probleme z odlo�anjem).
* 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 knji�nic
* 9.0: vklju�uje DCE
Interactive SVR3.2 (80x86): �isti SVR3. Interactive je kupil Sun; bo
njihov sistem pre�ivel Solaris?
Idris: prvi klon Unixa, naredil ga je Whitesmith. Majhen Unix? Za
transputerje INMOS in druge?
IRIX (SGI): Razli�ica 4: SVR3.2, precej BSD. Razli�ica 5.x (trenutna
je 5.2) temelji na SVR4. Novi�arska skupina: comp.sys.sgi.
Linux (386/486/586): Unix pod GNU Public License (vendar ne od FSF).
Dostopen z izvorno kodo. Zado��a POSIX z raz�iritvami SysV in BSD.
Prena�a se na Alpha/AXP in PowerPC (prenosi na Amige in Atarije s
procesorji 680x0 �e obstajajo; prenos se dela tudi na MIPS/4000).
Novi�arske skupine: comp.os.linux.{ admin, announce, development,
help, misc}.
MacBSD, ?: deluje na Mac II (neposredno na strojno opremo).
MachTen, Tenon Intersystems: te�e kot gost pod MacOS; okolje 4.3BSD s
TCP, NFS. Pomanj�ana razli�ica: 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 raz�iritvami 4.3BSD-Tahoe.
Tudi 2.6 MSD (Mach Source Distribution).
Microport (80x86): �isti SVR4, X11, OpenLook GUI
Minix (80x86, Atari, Amiga, Mac): klon Unixa, zdru�ljiv z V7. Prodaja
se z izvorno kodo. Se POSIXizira. Za PC-je in gotovo za veliko drugih
(npr. transputer INMOS). Novi�arska skupina: comp.os.minix.
MipsOS: SV-jevski (RISC/OS, zdaj opu��en, 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 zdru�ljiv z 4.3BSD,
vklju�uje 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
ra�unalnike [34]86, MIPS, Amiga, Sun, Mac. Kak�no je razmerje z Net/2?
* 1.0 je pri�la ven v 1994
NEXTSTEP (Intel Pentium in 86486, Hewlett-Packard PA-RISC, NeXT
68040): BSD4.3 na jedru Mach, lastni grafi�ni vmesnik.
* 1.x, 2.0, 2.1, 2.2, 3.0, 3.1 (stare)
* 3.2 (trenutna razli�ica, Intel Pentium in 86486, Hewlett-Packard
PA-RISC, NeXT 68040)
* 3.3 (prihaja; na voljo razli�ica za SPARC)
* 4.0 (bo napovedana, vklju�evala bo razli�ico za Sun SPARC in bo
upo�tevala OpenStep)
* NEXTSTEP za PowerPC ali DEC Alpha �e ni napovedan (ali ga
na�rtujejo?)
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. Novi�arska skupina:
comp.sys.pyramid.
PC-IX (IBM 8086): SV
Plan 9 (AT&T): napovedan 1992, popoln ponoven napis, ni jasno, kako
blizu Unixa je. Klju�ne to�ke: distribuiran, zelo majhen, razli�ni
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/datote�ni stre�nik na zelo
hitrih omre�jih.
SCO Xenix (80x86): Razli�ice za XT (nerobustne!), 286, 386 (s
preklapljanjem pomnilnika na zahtevo (angl. demand paging)). Danes je
ve�ino kode iz Systema V. Stabilen izdelek.
SCO Unix (80x86): SVR3.2 (prenehal jemati kodo USL na tej to�ki).
Sinix [Siemens]: osnova System V.
Solaris (Sparc, x86):
* 1.0: pravzaprav isti kot SunOS 4.1.1, z OpenWindows 2.0 in
pripomo�ki DeskSet.
* 1.0.1: SunOS 4.1.2 z multiprocesiranjem (jedro ni ve�nitno); ni za
386
* 2.0: (sprva napovedovan kot SunOS 5.0 v 1988) po�iva na SVR4 (s
simetri�nim MP?), vklju�eval 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 zado��a OpenStep (ne-NeXT, toda z NEXTSTEP API) z zadnjo
razli�ico (1994?).
* Sun bo poslal svojo implementacijo OpenStep s projektom DOE za
Solaris. Prve razli�ice bodo za Sunove stroje SPARC, toda pozneje
se bo pojavila razli�ica za Solaris 2.4 za x86 in PowerPC.
UHC (80x86): �isti SVR4, X11, Motif
Ultrix (DEC): temelji na 4.2BSD z veliko 4.3. Novi�arska skupina:
comp.unix.ultrix.
* 4.4 je zadnja
UNICOS (Cray): osnova System V. Novi�arska 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
temelje�ega na komunikaciji, distribuciji in realnem �asu. Sistemski
klici SVR3.2, BSD4.4 datote�ni/omre�ni 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). Novi�arska skupina: comp.unix.xenix.
7.7 Unixi, delujo�i v realnem �asu
From: "Pierre (P.) Lewis" <
[email protected]>
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
dobrodo�li. Seznam tudi vklju�uje pogostej�e Unixe z lastnostmi
realnega �asa, in nekatere ne-Unixa�ke sisteme z Unixu podobnim API.
Mislim, da zadnji ne spadajo zares sem, a ko sem �e zbral nekaj
podatkov jih no�em zavre�i. Glejte tudi novi�arsko 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
zmo�nosti realnega �asa. Zado��a kon�ni razli�ici POSIX.4.
EP/LX (Control Data): prenos sistema LynxOS na R3000. Prej se je
imenoval TC/IX.
LynxOS (Lynx Real-Time Systems, Inc): zdru�ljiv z Berkeley in SV,
popoln ponoven napis (v lasti podjetja), prednik SVR5. Ni UNIX, a
podpira ve�ino vmesnikov Unixa (SV in BSD). Upo�teva POSIX. Popolnoma
predkupen (angl. preemptive), fiksne prioritete.
MiX: implementacija SVR4 z mikrojedrom, izdelal Chorus.
Motorola SVR4 ima zmo�nosti realnega �asa.
QNX (Quantum Software): realno �asovni OS, zdru�ljiv 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. Vklju�uje tudi orodja FSF. Raz�iritve realnega �asa (POSIX).
RTU (Concurrent), za �katle z 68K
Solaris 2 ima realno �asovne zmo�nosti?
Stellix (Stardent); je Unix, ali je tudi realno �asovni?
Venix/386: Interactive SVR3.2 z realno �asovnimi raz�iritvami.
VMEexec (Motorola): ni Unix, a deli nekatere vmesnike z Unixom.
VxWorks (Wind River Systems): Malo skupnega z Unixom, le nekateri
vmesniki (a ne datote�ni sistem). Novi�arska skupina: comp.os.vxworks.
(o naslednjih ne vem ni�esar)
Convex RTS
REAL/IX (AEG)
Sorix (Siemens)
System V/86 (Motorola)
TC/IX (CCD)
Velocity (Ready Systems)
7.8 Slovar�ek Unixa
From: "Pierre (P.) Lewis" <
[email protected]>
Date: Tue Aug 15 15:14:00 EDT 1995
X-Version: 2.9
Ta razdelek ponuja kratke definicije razli�nih konceptov in komponent
sistemov Unix (ali: povezanih s sistemi Unix).
Chorus: mikrojedro s prenosom sporo�il (angl. message-passing
microkernel), lahko predstavlja osnovo za prihodnje izdaje SV. Na
Chorusu �e te�ejo SVR4 (binarno zdru�ljivi).
CORBA (Common Object Request Broker Architecture).
COSE (Common Open Software Environment) [Sun, HP, IBM]: skupni videz
in ob�utek (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): Vklju�uje RPC (NCS
Apolla), imeni�ke storitve (lokalne na DNS, globalne na X.500),
�asovne, varnostne in nitne storitve, DFS (distribuirani datote�ni
sistem), neodvisen od OS.
DME (Distributed Management Environment, od OSF): prihodnost.
DO (Distributed Objects [Enterprise]): ???.
FFS (Fast File System): od Berkeley, 1983. Ekvivalent (to�en?) 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 stre�nikom BSD Unix v uporabni�kem prostoru (in
drugi OS, npr. MS-DOS)
Novi�arska skupina: comp.os.mach.
MFS (Memory File System): pomnilni�ki datote�ni sistem
NeWS (Network extensible Window System), podjetja Sun?: temelji na
PostScriptu, omre�en, zbirke orodij (in tudi odjemnikov) nalo�enih v
stre�nik. Del OpenWindows.
NFS (Network File System): Sun je prispeval v BSD, stre�nik brez stanj
(angl. stateless server)
ONC (Open Network Computing): Sun(?), vklju�uje RPC, imenski stre�nik
(NIS, znan tudi kot YP), NFS, ... (najdemo ga v veliko Unixih in
drugih OS).
OpenStep [NeXT, Sun]: ???
PowerOpen: standard in organizacija za promocijo PowerPC. Vklju�uje
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, stre�nik s stanji (angl. stateful
server), nezdru�ljiv 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 druga�en mehanizem RPC (temelji na NCS Apolla)
S5 FS: domorodni datote�ni sistem Systema V, bloki od 512 bytov do 2
Kb.
sockets (vti�i): BSD-jev vmesni�ki mehanizem za omre�ja (primerjajte s
TLI).
STREAMS: mehanizem podajanja sporo�il, 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 izbolj�avami
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 <
[email protected]>
V nedavni anketi je bila ve�ina glasov v prid RCS, nekaj v prid SCCS,
in nekaj predlaganih alternativ, kot je CVS.
Funkcionalno sta RCS in SCCS prakti�no ekvivalentna. RCS ima nekaj ve�
odlik, saj se �e naprej osve�uje.
Vedite tudi, da se je RCS u�il 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 <
[email protected]>
RCS ima za nove uporabnike preprostej�i 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 razli�ica.
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 <
[email protected]>
RCS shranjuje zgodovino v datotekah s podalj�kom ,,,v``. SCCS
shranjuje zgodovino v datotekah s predpono ,,s.``.
RCS v trenutnem imeniku in podimeniku za RCS samodejno poi��e datoteke
za RCS, lahko pa dolo�ite tudi kak�no drugo datoteko za RCS.
Uporabni�ki vmesnik sccs programa SCCS vedno uporablja imenik za SCCS.
�e ne uporabljate uporabni�kega vmesnika sccs, morate dolo�iti polno
ime datoteke za SCCS.
RCS shranjuje svoje popravke tako, da vzdr�uje kopijo zadnje razli�ice
in razlike besedila do prej�njih razli�ic. SCCS uporablja koncept
,,zdru�evanja razlik``.
Vsa aktivnost RCS se dogaja v eni sami datoteki za RCS. SCCS vzdr�uje
ve� datotek. To je lahko neredno in begajo�e.
Ro�no 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 resni�nega besedila razli�ice v RCS. �e urejate datoteko
za SCCS, boste morali prera�unati kontrolno vsoto s programom admin.
8.4 RCS vs. SCCS: Katere so klju�ne besede?
Subject: RCS vs SCCS: What are the keywords?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <
[email protected]>
RCS in SCCS uporabljata razli�ne klju�ne besede, ki se v besedilu
razvijejo. Pri SCCS se, ob izvle�enju datoteke za branje, klju�na
beseda ,,%I%`` nadomesti s �tevilko popravka.
Klju�ne besede RCS so la�je za zapomnitev, toda razvijanje klju�nih
besed se la�je nastavi v SCCS.
V SCCS se klju�ne besede razvijejo pri izvle�enju le za branje. �e se
razli�ica z razvitimi klju�nimi besedami prepi�e v datoteko, ki bi
morala biti razlikovana (angl. deltaed), so klju�ne besede izgubljene
in podatki o razli�icah datoteke ne bodo osve�evani. Po drugi strani,
RCS ob razvitju obdr�i klju�ne besede, torej se temu izogne.
8.5 Kaj je simboli�no ime v RCS?
Subject: What's an RCS symbolic name?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <
[email protected]>
RCS vam dovoljuje obravnavati mno�ico datotek kot dru�ino datotek,
medtem, ko je SCCS mi�ljen prvotno za hranjenje zgodovine popravkov
datotek.
RCS to omogo�a z uporabo simboli�nih imen: vse izvorne datoteke, ki so
povezane z aplikacijsko razli�ico, lahko ozna�ite z uporabo
rcs -n
in jih pozneje zlahka izvle�ete kot zdru�eno enoto. V SCCS bi morali
za to napisati skript, ki bi vpisoval in bral vsa imena datotek in
razli�ic 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 <
[email protected]>
Ker sistem RCS shranjuje celotno zadnjo razli�ico, je precej hitrej�i
pri izvle�enju zadnje razli�ice. Od RCS 5.6 naprej je tudi hitrej�i od
SCCS pri izvle�enju starej�ih razli�ic.
8.7 RCS vs. SCCS: Identifikacija razli�ic
Subject: RCS vs SCCS: Version Identification.
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <
[email protected]>
SCCS zna ugotoviti, kdaj se je v sistem dodala dolo�ena vrstica kode.
8.8 RCS vs. SCCS: Kako se obna�ata v te�avah?
Subject: RCS vs SCCS: How do they handle problems?
Date: Sat, 10 Oct 92 19:34:39 +0200
From: Bill Wohler <
[email protected]>
�e vam manjkajo orodja za SCCS ali RCS, ali, �e je datoteka popravkov
v RCS ali SCCS pokvarjena in orodja no�ejo delati z njo, lahko �e
vedno obnovite zadnjo razli�ico 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 <
[email protected]>
Dejstvo, da SCCS uporablja predpone za imena datotek (s.datoteka.c)
pomeni, da jih make(1) ne more obravnavati na obi�ajen na�in, 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 podalj�kom (datoteka.c,v), ki ga uporablja RCS, pomeni, da
lahko v vseh izvedbah programa make uporabljate obi�ajna podalj�kovna
pravila, tudi, �e izvedba ni na�rtovana 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 <
[email protected]>
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 <
[email protected]>
SCCS podpira podjetje AT&T. RCS podpira ustanova Free Software
Foundation. Torej RCS te�e na veliko ve� platformah, vklju�no z
osebnimi ra�unalniki.
Ve�ina programov make prepozna SCCS-jevo predpono ,,s.``, medtem, ko
je GNU-jev make eden redkih, ki obravnavajo RCS-jev podalj�ek ,,,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 <
[email protected]>
SCCS RCS Razlaga
==== === =======
sccs admin -i -ndat dat ci dat Prvi� vpi�e datoteko
,dat` in ustvari
datoteko sprememb.
sccs get dat co dat Izvle�e datoteko
,dat` za branje.
sccs edit dat co -l dat Izvle�e ,dat` za
spremembo.
sccs delta dat ci dat Izvle�e predhodno
zaklenjeno datoteko.
what dat ident dat Izpi�e informacijo
o klju�ni besedi.
sccs prs dat rlog dat Izpi�e zgodovino
datoteke.
sccs sccsdiff -rx -ry dat rcsdiff -rx -ry dat Primerja dva popravka.
sccs diffs dat rcsdiff dat Primerja trenutno
razli�ico z zadnjim
popravkom.
sccs edit -ix-y dat rcsmerge -rx-y dat Zdru�i spremembe med
dvema razli�icama
v datoteko.
??? rcs -l dat Zaklene zadnji
popravek.
??? rcs -u dat Odklene zadnji
popravek. Morda
stre klju�avnico
drugega uporabnika,
a mu po�lje
sporo�ilo 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 <
[email protected]>
�elim se zahvaliti naslednjim ljudem, ki so prispevali te �lanke. Na
ta spisek �elim dodati tudi va�e ime - prosim, po�ljite pripombe ali
dodatne vire Billu Wohlerju <
[email protected]>.
* Karl Vogel <
[email protected]>
* Mark Runyan <
[email protected]>
* Paul Eggert <
[email protected]>
* Greg Henderson <
[email protected]>
* Dave Goldberg <
[email protected]>
* Rob Kurver <
[email protected]>
* Raymond Chen <
[email protected]>
* Dwight <
[email protected]>
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 <
[email protected]>
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.
_________________________________________________________________