Tigu lahkamas, ehk ekskursioon UNIXi maailma

Autor: Anto Veldre, 1995

Linkimine

Ehk Must Maagia

Kindlasti olete tähele pannud, et mistahes fail teie kõvakettal kipub ikka olema seal, kus teda ei vajata. Loomulik asi, et töötamiseks teete endale tagavarakoopia sobivamasse kataloogi. Vahel veel mitugi. Kettaruum aga muudkui kulub ja kulub...

UNIX sisaldab endas suurepärast failide linkimise võimalust. Te ei pea enam failist füüsilist koopiat valmistama, piisab väikesest vihjest kataloogis. Ühel failil võib olla palju linke, näiteks 25 või enam. Huvitav on see, et kui ükskõik millist neist tavalisena näivatest failidest muuta, siis muutuvad sünkroonselt ka ülejäänud 24.

Kui teil aga tekib tahtmine oma infost üldse lahti saada, siis tuleb järjest kustutada kõik 25 viidet sellele failile.Sealjuures pole enam võimalik kindlaks teha, milline neist oli esimene ja "õige". Kettale on fail ikka jäädvustatud ühes ja ainsas eksemplaris, ainult et tänu linkimisele paistab ta olevat paljudes kataloogides korraga.

Kataloogilistingut uurides tähistab linkide arvu faili omaniku nime ees seisev arv. Kui tekib mingeid kahtlusi, siis saab listingut nõuda sellisel kujul, mis sisaldab ka inode'i numbri (ls -li). Kui kahe faili ees seisab sama inode'i number, siis pole kahtlust, et on rakendatud linkimiskäsku.

Linkimiskäsku esineb kahe nime all -- üsna haruldane link ning palju sagedasem ln.

Mõned programmimeistrid on linkimisest lausa teaduse teinud. Tõime kusagilt Internetist kohale GNU pakkija gzip algtekstid (muide, GNU - Gnu is Not Unix, kuid gzip pakib kuni 2 korda tõhusamalt kui UNIXi muud pakkimisprogrammid). Kompileerimisel aga ei tekkinud kusagilt lahtipakkijat nimega gunzip, vaid see tuli tekitada käsuga link gzip gunzip.

Tundub küllalt müstilisena see, et üks ja sama programm saab täita kahte eri funktsiooni, olenevalt nimest, mida ta parasjagu kannab. Abi saab C-keele õpiku sellest kohast, mis väidab, et igale C funktsioonile edastatakse nullinda parameetrina tema enda nimi.

Tegelikult on ju nii kinni- kui lahtipakkimisalgoritmis suur osa ühiseid koodilõike ning linkimine annab tõhusa ruumikokkuhoiu.

Ülalöeldu puudutas linkimise lihtsamat varianti nimega hard link. Hard lingi puhul peab viidatav fail alati kohal olema ning ka samas failisüsteemis paiknema. Soft link (ehk symbolic link) on veidi vabam viide. Kindlasti olete näinud mõnda DOS'i mängu ( Retal näiteks), mis nõuab installeerimiseks C-ketta peakataloogi. Kui UNIX'i all säärane asi peaks juhtuma, kirjutatakse

ln -s /mingi/hoopis/teine/kataloog /nõutav.nimi

ning probleem ongi lahendatud. Ka kõige nõudlikum programm jääb säärase pettusega rahule. Soft linkidel on see omapära, et saab viidata ka teises failisüsteemis paiknevale failile ja kataloogile ning seejuures ei pea viidatav fail ilmtingimata eksisteerima.

Siiski ei maksaks teha ristlinke ega ka linkida kataloogi iseendaga, missugune tegevus mõned lihtsameelsed utiliidid kinni jooksutab.

Viimase moeröögatusena mainiksin nn hüperlinke, mis pole küll pelgalt UNIXi pärisosa, kuid nad moodustavad loogilise jätku eelnenule. Mida teha siis, kui fail, mida te soovite linkida, asub hoopis teises masinas (ja võimalik, et isegi teisel mandril)? Kui te soovite oma dokumendis viidata kellegi teise autori elektroonselt kättesaadavale tekstile, siis teatud programmid lubavad kasutada hüperlinke. Üks Harju keskmine hüperlink näeks välja selline: http://www.eenet.ee/index.html . See tähendab, et kui masin tekstis selle kohani jõuab, tiritakse arvutivõrku pidi masinast www.eenet.ee kohale fail nimega index.html (html - HyperText Macro Language). Loomulikult eeldab hüperlinkide kasutamine juba hoopis uut tüüpi tehnoloogiat (Interneti otseühendust ja hüperlinkide keelt mõistvaid programme).

Failisüsteem

DOSi puhul saab ühele kõvakettale luua mitu partitsiooni (veel üks kohmakas eestikeelne vaste, originaalis partition). Esialgu arvati, et kõvaketast on mõtet jaotada kuni neljaks osaks (primary partitions), siis aga asi arenes ning tekkis mõiste extended partition . UNIXi puhul vastaks igasugustele partitsioonidele paremini hoopis failisüsteemi mõiste, tundubki, et mikrode ajalugu on need kaks mõistet lootustult sassi ajanud. Lihtsama UNIXi kõvakettal on niisiis vaid kaks objekti -- root file system ning swap partition. Esimene sisaldab kõiki süsteemi üleslaskmiseks elulisi programme, teine on kasutusel virtuaalse mälupikendusena. Veidi keerulisemates süsteemides lisandub nendele eraldi failisüsteem süsteemi kasutajatele (user file system, mis traditsiooniliselt paigutatakse kataloogi /u või /wrk . Eraldatud failisüsteemide mõte on selles, et kui voolukatkestuse või administraatori vea tõttu mõni neist kannatada saab, siis on võimalik ülejäänud failisüsteemidega ikka edasi töötada. Pole ülearune lisada, et PC masina puhul on võimalik samale kõvakettale luua ka DOSi failisüsteem (partition :-) ). Spetsiaalsete käskudega saab sealseid faile kasutada ning enamasti isegi masinat DOSi alt bootida, kui tõesti enam ilma hakkama ei saa.

UNIX-süsteemi bootprotsess on palju paindlikum, kui DOSil. Boot-prompti taha on võimalik kirjutada, milline failisüsteem võtta root'iks, kui suurt mäluosa kasutada ning palju muud. Kui UNIX edukalt üles läheb, vaadatakse, milliseid failisüsteeme on vaja täiendavalt kättesaadavaks teha, kontrollitakse nende korrasolekut ning mounditakse root-failisüsteemi külge. UNIXi seisukohast on peaaegu ükskõik, millisel füüsilisel kujul mingi failisüsteem on esindatud, kas paikneb see ühel paljudest kõvaketastest, floppil, CD-ROMil või hoopis teisel pool maakera asuvas Internetiga ühendatud masinas.

Mount it!

Nüüd aga mountimisest. See termin on pärit vanade vahetatavate kõvaketaste ajajärgust. Mitte alati pole vindimahtu sadades megades mõõdetud. Veel 15 aastat tagasi läks iga suurema masina juurde vaja paari näitsikut, kes lugesid paberlindilt teateid stiilis "Pista sisse kõvaketas nr. 37" ning tegid, mida kästud. Kui siis nõutud kettaplokk õnnelikult vastavasse auku oli tõstetud ja mootori tuurid üles võetud, võiski masinale teatada, millise virtuaalse kettaosaga on tegemist. Kui näiteks sellel füüsilisel kettaplokil leidusid programmid, mille koht oli kataloogis /usr/bin, siis "maunditi" kõvaketas kataloogi /usr/bin külge, seevastu andmed võidi "mauntida" kusagile /clients/data kanti. Selge ka, et korraga mahtus kettaauku istuma ikka vaid üksainuke kettaplokk. Seepärast, kui /usr/bin oli kasutuses, siis /clients/data kataloogilisting sai sel ajal näidata vaid totaalset tühjust ja vastupidi.

Ajad läksid edasi, vindid muutusid 1000 korda väiksemaks, mount'imine kui käsk ja termin aga jäi. UNIXi puhul pole mingeid raskusi paigutada teine kõvaketas või mõni selle failisüsteemidest esimese alamkataloogi nii, et jääb mulje katkematust vindiruumist. Nagu just mainitud, saab kõvakettale külge mountida ka flopi, CD-ROM'i või muud kraami. Kasutajale tundub, nagu tegutseks ta ikka oma ainsal ja armsal kõvakettal. Raamatupidaja võib oma strateegilisi andmeid lausa flopil hoida, vajadusel siis flopit mõnesse sobivasse alamkataloogi mountides. Töö lõppedes võetakse ketas koju kaasa ning mingeid turvaprobleeme ei saa tekkida.

Tõelisel häkkeril pole nüüd raske aru saada, et ka kõvaketast saab flopi külge monteerida, kui selleks vajadus peaks tekkima. Ning loomulikult on võimalik oma vindi külge "kinnitada" võõra masina kataloog, kui teil mõlemal ikka Interneti ots toas ning too soovitav kataloog ka krabamiseks lahti. Taolist asja nimetetakse NFS (Network File System), käsusüntaks aga käib umbes sedasi:

mount -t nfs kadri.ut.ee:/export/ftp/pub /home/mina/FTP

Sellest hetkest alates tekib minu isiklikku kataloogi nimega FTP kõik seesama, mis sisaldub Tartus "kadri"-nimelise masina vastavas kataloogis. Loomulikult on failide kohalolek vaid virtuaalne ning nende kättesaamise kiirus sõltub suuresti ka kasutatava Interneti ühenduse jämedusest.

Lõpetuseks veel sedapalju, et oleks ilus alati anda peale töö lõppemist käsk umount. Vastasel korral riskite te oma failisüsteemi tervisega.

Deemonid ja tumedad jõud

UNIXist rääkides võib sageli kuulda väljendeid "UNIX teeb", "UNIX saadab, võtab, paneb, loob, kustutab, avab, sulgeb" jne. Umbes nagu oleks tegu elusa olendiga, kellel on oma nimi (UNIX-masinal ongi), keha, vaim ja isiklik hingeelu. UNIXi sisemust uurides ei leia te hingeelust jälgegi, küll aga avastate viis kuni viisteist deemonit, kes igaüks oma kitsas liinis asju ajab.

Kõige arusaadavam on kindlasti printerideemoni lpd olemasolu. Isegi M$ Windows'i all on võimalik korraga trükkida ja muud tööd teha. UNIXi lpd (mõnes süsteemis lpsched) on sedavõrd võimekam, et kord printerisse suunatud kirjatükk Teie edasist tegutsemist ei sega. Kui teil on masina küljes mitu printerit, siis saate nende vahel koormust jagada. Kõige huvitavam on ehk see, et trükkimiskäsk ei aegu. Teie printerideemon suhtub mõistvalt igasugustesse riistariketesse, isegi kui vool kaob ja teie masin alles paari päeva pärast taas töökorda saab, jätkab lpd samast kohast, kuhu ta pooleli jäi.

Teine tähtis deemon on cron, mis vastutab automaatsete operatsioonide eest. Cron ei tunnista sekundeid. Üks kord iga täisminuti jooksul ärkab cron üles ning vaatab, kas spetsiaalsetes ajatabelites (/usr/spool/cron/crontabs/*) leidub mõni käsk, mille kellaaeg klapib deemoni ärkamisajaga. Kui nii, siis läheb see käsk täitmisele. Crontab on eriti mugav keeruliste süsteemihaldamise käskude töölelaskmiseks ajal, mil see masina kasutajaid ei sega. Tavaliselt tehakse öösiti kokkuvõtted masina koormatusest ööpäeva lõikes, toimetatakse lindile backup, eemaldatakse /tmp kataloogist vanad failid jne. Põhimõtteliselt võib igal kasutajal olla oma isiklik crontab.

Sellega pole deemonite loetelu kaugeltki ammendunud. Küll eri nimede all (enamasti sendmail), kuid kindlasti igas UNIX-masinas elab postideemon. Selle ülesanne on näiteks iga 10 minuti järel kontrollida, kas kusagile pole takerdunud saatmata posti. Postideemon teeb järjekordse katse seismajäänud kirju minema saata, kui see aga ei õnnestu (ühendus katkenud vms), siis heidab järgmiseks 10-ks minutiks magama. Ühtlasi teeb postideemon sissekandeid vastavatesse failidesse, nii on alati võimalik kindlaks teha, miks post ei liigu või kes kuipalju kirju on saanud.

Tavaliselt on UNIXis käimas 1-2 deemonit, mis (või hoopis kes :-) ) kõik vähegi olulised sündmused vastavatesse failidesse üles tähendavad (näiteks syslogd) ja logger (klogd). Kui masinas juhtubki midagi imelikku, siis on selle põhjusi alati võimalik hiljem uurida, lugedes faili /usr/adm/messages ja teisi samalaadseid. Tüüpilisi teated: ketas täis, avariiboot kell 00:15.

Eraldi deemonite seltskond on seotud Internetiga. Kui Teie arvuti on ühendatud ülemaailmsesse võrku, siis peab ta mõistma rahvusvahelist keelt. Pealikuks on deemon nimega inetd, kes(mis) korraldab sideseansse kui selliseid ning annab siis juhtimise üle mõnele deemonile, mille teenust parasjagu nõutakse:

Ka lasub deemonitel püha kohustus hoida ohjes tumedaid jõude, kes UNIX-masina kallal oma jõudu proovivad. Võite kindlad olla, et iga soovimatu tegevuse jaoks leidub vähemalt üks deemon, kes tumedale jõule risti ette astub ning süsteemiadministraatorile ettekande koostab :-) .

Infoallikatest

Paljudel võib tekkida küsimus - kust hankida täiendavaid teadmisi UNIXi kohta? Ühest vastust sellele pole: kõik oleneb teie keeleoskusest, rahakoti paksusest ning ligipääsust töötavale süsteemile, mille kallal saab kätt harjutada. Päris korralikud UNIX-võrgud on olemas Tartu Ülikoolis, Tallinna Tehnikaülikoolis ning ka Pedagoogikaülikoolis. Kõigis neis kohtades toimib ka Interneti ühendus, mis teeb teile kättesaadavaks väga paljudes masinates leiduva info.

UNIX on jõudnud ka paljudesse tõsise tööga tegelevatesse asutustesse, alustades Eesti Pangast ning lõpetades Tallinna veepuhastusjaamaga. Seega on tõenäosus omaenda töö- või õppimiskohas UNIXi otsa komistada küllalt suur.

Suureks abiks võivad olla ka raamatud. Seni kõige põhjalikumaid eestikeelseid juhtnööre leiate EMI loengukonspektide sarjast, Loengumapist nr.1-28, autoriks T.Kadarpit ja ilmumisaastaks 1994. Ingliskeelsetest raamatutest tasub eelistada O'Reilly kirjastuse raamatuid sarjast Nutshell, mille hind pole kahjuks küll enamikele eestimaalastele taskukohane. Väga kasulik oleks sirvida raamatuid "UNIX. The Book" tema loojate Ritchie ja Kernighani sulest (olemas ka venekeelses tõlkes) ning "Introducing UNIX, System V", autoriteks Morgan ja McGilton.

Kõigist neist raamatutest on ka allakirjutanu aastate vältel malli võtnud. UNIXi käskude lühispikri leiate ajakirja "A&A" 1993. aasta juunikuu numbrist, täielikuma variandi loodetavasti ka järgmisest .EXEst.

Siiski tuleb kõige tõhusamaks ja kiiremaks abivahendiks tunnistada Internet. Spetsiaalselt algajate jaoks levitatakse vastuseid korduvalt küsitud küsimustele (KKK, inglise keeles FAQ - frequently asked questions). Kõrvuti kõigi teiste teemadega on vastused olemas ka UNIXi asjus tekkinud probleemidele, igakuiselt uuendatava versiooni leiate archie, veronica'i ja teiste võrguotsimisvahendite abil. Kindlasti on kasulik lugeda ka UNIXiteemalisi uudisgruppe Internetis.

Järgmine osa, Eelmine osa, Kõikse esimesem osa