T. I. N. T. F. M.

(This IsN't The F*cking Manual)

UNIX
a la Hamster

Igen, kedves nézőink, mai műsorunkban a számítástechnikai világ UNIX néven ismeretes csodájáról lesz szó! Kérjük, ha csak tehetik, vegyék videóra minden egyes adásunkat, így utólag, ha helyre lenne szükségünk, lesz mit letörölni...

Főcímzene: Echoes (Pink Floyd)

Történelemóra

A számítástechnika rohamos fejlődése a hatvanas évek vége fele szükségessé tette egy egységes nagygépes operációs rendszer létrehozását. Kifejlesztéséhez találták ki az ecuadori Kokochita Tech munkatársai a MogyorOS nyelvet. Az adatábrázolás megértéséhez képzeljünk el egy 13 * 29-es mátrixot, melynek csomópontjain elhelyeztek 13 * 29 darab mogyoróstálkát. Azok a tálkák, amikben csak mogyoró van, a 0 állapotot jelképezik, amelyekben a mogyoró mellett van mazsola is az 1-est. A rendszeroperátor ilyen technológiával volt képes felprogramozni a gépet. A nyelv hátránya volt, hogy egy kisebb adatbázis létrehozása évekbe és több tucat gyomormosásba került, így más megoldás után kellett nézni. Próbálkoztak mogyoró és mazsola helyett fröccsel és tiszta borral is, de továbbra sem volt elég hatékony. Miután a fentebb említett kísérletek nem vezettek eredményre, a kiábrándult számítástechnikusok visszatértek a batch alapú mainframe-es rendszerek használatához, és a lyukkártyás Fortran II programozáshoz.

Közben (1965) az Amerika Egyesült Államokban a General Electric, a Masschusetts Institute of Technology és a Bell Laboratories egy Multics (Multiplexed Information and Computing Service) nevű nagygépes operációs rendszer létrehozásán fáradozott. Fáradoztak, ez a helyes szó, eredményre mindenesetre nem jutottak: a késznek mondott változat negyedannyit tudott, mint amennyit célul kitűztek. A Bell
Labsnak ez olyannyira nem tetszett, hogy a projekten dolgozó embereit visszahívta (a General Electric majd később (1970-től) a Honeywell folytatta a fejlesztési munkát, a köztudatban élő képpel ellentétben a mai napig vannak működő Multics-os rendszerek néhány amerikai cégnél és egyetemeken).

A visszahívott Bell-munkatársak között volt Kenneth Thompson és Dennis Ritchie, akik nagyon megszerették a készülő rendszer szolgáltatásait, megszerzett tapasztalataikat pedig hasznosítani szerették volna. Munkahelyükön, a Murray Hill-en körülnézve figyelmesek lettek egy félreeső helyen eldugott Digital PDP-7-re.


1. kép:   Digital Equipment Corporation PDP-7
Képzeljük el ezt a masinát, amint éppen félreesik!
(Forrás: DEC Electronic Photo Library)

A masina két telexírógép-terminállal rendelkezett, egy grafikus display-el és egy fix-fejes lemezmeghajtóval. A képernyőt kihasználva  Thompson eredetileg egy Multics-ra készült űrhajós játékot kezdett el újraírni rajta, méghozzá úgy, hogy eldobott minden szoftvert, ami a géphez volt, nulláról indulva. Amikor rájöttek, hogy jobban szeretnek a frissen írt debug-környezettel foglalkozni, mint a játékkal, elhatározták, hogy írnak egy oprendszert. Nosza hát, Thompson összedobott valamit, amit a labor munkatársainak ötleteivel bővítgettek. Rengeteg dolgot megcsináltak, amiről még lesz szó később, a számítógépet viszont kinőtték. 1969 végén elkezdtek  egy nagyobb gépért lobbizni, kezdetben sikertelenül. aztán mégis rájuk mosolygott a szerencse:1970 májusában a cég benevezett egy PDP-11/20 vételébe. Ez a típus éppen akkor jött ki, a lehető legcsupaszabb modell volt: 16 bites memóriakezelés, semmi memóriavédelem, sőt, az első hónapokban még merevlemez se volt hozzá! Nem is használták túl sok mindenre: a PDP7-esen egy cross-compilerrel fordítottak rá egy UNIX-kernelt, azt papírszalagról bebootolták, a gép pedig az elkövetkező időkben sakkfeladványok megoldásán "gondolkodott" a gépterem sarkában.

Amikor a diszkek megérkeztek, gyorsan elkészült a UNIX-11 (1971 januárja és márciusa között). Hogy képet kapjunk ennek méretéről, elmondom, hogy a gép 24 Kszó (=48 Kbyte) memóriával rendelkezett, ebből a rendszer elfoglalt 16-ot, a felhasználónak maradt 8; a
diszk pedig 512Kbyte-os volt (1Kbyte-os blokkokkal). A két fejlesztő jogosan volt büszke magára, azonban volt egy kis "bibi" a
dologban: a PDP-11 nem kifejezetten a UNIX kedvéért lett megvéve, Thompson és Ritchie egy szövegszerkesztő-rendszer kifejlesztését
ígérte a Bell szabadalmakkal foglalkozó részlegének a gép használati jogáért cserébe. Gyorsan megcsinálták a roff névre hallgató programocskát, mely nagyszerűen bevált, olyannyira, hogy továbbfejlesztése mind a mai napig használatos a UNIX-okon. Mindezek ellenére a PDP-11/20 nem volt alkalmas kényelmes és biztonságos multiuser/multitask (ezek a szavak azt jelentik, hogy egyszerre több felhasználó próbálkozik a rendszer használatnak álcázott megborításával) megvalósítására. Először a KS11 névre hallgató opcióval próbálkoztak, mely memóriavédelmet biztosított, aztán beépítettek egy kibővített aritmetikai egységet is, hogy a gép teljesítményét növeljék.


2. kép: Digital Equipment Corporation PDP-11/20 (és PDP-11/45, de az nem igazán látszik)
A kép 1972 környékén készülhetett, a UNIX két atyja előtt két telexírógépet láthatunk, melyek a UI (user interface) szerepét töltötték be
(Forrás: Bell Labs, Lucent Technologies, Dennis M. Ritchie weboldala)

Mindez persze csak addig felelt meg, amíg meg nem érkezett az új PDP-11/45, mely már képes volt 128Kszó memória védett
kezelésére is, valamint gyorsabb is volt. De közben persze történt más is...

A C története, avagy Bábel tornya visszavág...

Ezidőtájt fejlesztették ki a C nyelvet a Nagyon Szűkszavú Programozók Szervezeténél azok a számítástechnikusok, akik nem szerették
kimondani az addigi nyelvek "hosszú" neveit: pascal, basic, fortran, algol, logo... Illetve ez nem is teljesen így történt, és nagyon sok köze
van az előbbi történethez: ugyanott, ugyanazok az emberek csinálták.

A UNIX kezdetben assembly-ben íródott, aztán valaki írt a TMG nevű nyelvhez egy fordítót, Ken Thompson viszont inkább Fortrant szeretett volna használni, ezért elkezdett egy Fortran fordítót írni TMG-ben. Mikor rájött, hogy annyira azért mégsem akarja, a BCPL névre keresztelt nyelv alapjain elindulva létrehozta a B nyelvet. Ez tetszett neki, ezért előbb írt egy PDP-11 B crosscompilert a PDP-7-en (B-ben), kicsit később pedig a PDP-7 B fordítót is átírta B-re (TMG-ből ugyebár). Mire idáig eljutott (1971-re), annyira belezavarodott az egészbe, hogy a következő nyelv kitalálását, és a fordító megírását már Ritchie-re hagyta. Ez a következő nyelv volt a C. 1973-ra a PDP-11 UNIX kernel is teljesen át lett írva C-re, lehetővé téve azt, hogy az operációs rendszert olyan más számítógépekre is
átírják (portolják), amelyre valaki már írt egy C fordítót.

A jedi össze-visszatér

A harmadik UNIX-verzió volt az, amely a PDP-11 sorozat több számítógépén is futott már (11/45, 11/40, 11/34, 11/60, 11/70). Nagy
újdonság volt a multiprogramozás megjelenése, és a fejlesztői környezet is olyannyira barátságos lett, hogy egyre több fordító (fortran, algol, c) készült hozzá, ennek köszönhetően viszont egyre több helyen kezdték használni az addig főleg csak Bell-berkekben terjedő oprendszert.

A negyedik rendszer (milyen jó kis filmcím lenne ebből...) rendkívül fontosnak bizonyult: a UNIX ezen verzióját portolták az Interdata
8/32-es számítógépre, kilépve a PDP-11-es architektúrán kívülre. Ez a UNIX terjedésének szempontjából ügyes húzás volt, egyfajta bíztatás a többi UNIX-felhasználónak, hogy ők is próbálkozzanak hasonlóval. Ekkortájt ugyanis az AT&T (a Bell Labs tulajdonosa) ingyenesen az oktatási intézmények rendelkezésére bocsájtotta az operációs rendszer forráskódját: a bátrak belenyúlhattak, átírhatták, kísérletezhettek vele, akár át is írhatták valamilyen másik gépre (például a Digital új VAX számítógépére, ami hamar meg is történt)...

1978-ban az AT&T elkezdte pénzért árulni a UNIX forráskódját, a kereskedelmi UNIX-ok alapja az ekkor kiadott hetes verzió (7th Edition) lett, innentől kezdve ugyanis a toávbbfejlesztők is pénzt kértek a saját változataikért. A kaliforniai Berkeley Egyetem egy évvel később saját UNIX-variáns kialakítása melett döntött, amikor az AT&T kereskedelmi termékké minősítette az eredeti UNIX-ot. A gyerek neve BSD (Berkeley Software Distribution) Unix lett, egyébként az Internet-protokollok kifejlesztése is ezen a platformon történt. A BSD fejlesztői más megoldásokat alkalmaztak saját rendszerüknél, mint az AT&T-sek, ezért a UNIX-mozgalom két nagy táborra szakadt, és az egyes számítástechnikai cégek UNIX-ai és egyik vagy másik irányzat képviselői lettel: az Ultrix (DEC), a SunOS (Sun), a Unicos (Cray) például BSD alapúak, míg az AIX (IBM), IRIX (Silicon Graphics), vagy a HP-UX (Hewlett-Packard) az AT&T UNIX verziói. A nyolcvanas évek első felében (1983) jelent meg két nagy hatású verzió, az AT&T System V. névre keresztelt UNIX-a, és a Berkeley 4.2BSD-je, mindkettő egyfajta szabványt teremtett az operációs rendszerek világában.

Innentől kezdve a dolgok kicsit összezavarodtak: a Sun összefogott az AT&T-vel, az eredmény a System V Release 4 (1990) volt, amit
sokszor SVR4-nek szoktak rövidíteni, ez gyorsan egyfajta szabvánnyá vált. Sok másik hardvergyártó (DEC, HP, IBM) ekkor veszélyben érezte UNIX-os üzletágát, ezért OSF (Open Software Foundation) név alatt szövetségre léptek, egy évvel később pedig kiadták az OSF/1-et, amit érdekes módon csak a DEC használt fel (Alpha AXP számítógépek). Ekkortájt indult meg BSD alapokon egy ingyenes UNIX fejlesztése (FreeBSD), valamint Linus Benedict Torvalds is ekkortájt fogott bele a Linux létrehozásába. Az ingyenes BSD irányzat később személyes és filozófiai problémák miatt több ágra vált (az új ág az OpenBSD), a NetBSD pedig más hardverplatformok (DEC MIPS, DEC VAX, DEC Alpha, HP-RISC, Amiga, stb) meghódítását tűzte ki célul. A közös nevező a BSD kódkönyvtár használata. (Ugyanez visszafele is igaz, a Berkeley a különböző ingyenes irányzatok által készített kód felhasználásával BSDI néven árul egy kereskedelmi (pénzes) UNIX-ot.)

Nem kell elkeseredni, semmi baj, ha nem látjuk át, hogy ki kinek a micsodája, mert nem ez a lényeg: a UNIX nem egy operációs rendszer
(bár a "UNIX" név bejegyzett védjegy, jelenleg (az X/Open és a Novell) után az SCO tulajdonában van), hanem egy életérzés, technológiai felfogás. Az említett verziókon felül léteznek még ipari szabványok az operációs rendszerek beskatulyázásához, például a UNIX95 minősítés, vagy a POSIX, ezek mind azért lettek létrehozva, hogy a UNIX-ok kompatibilisek legyenek egymással; az már tipikus probléma, hogy minden UNIX-os azt szeretné, ha az ő UNIX-a lenne az alap a kompatibilitáshoz... Ebben az írásban a UNIX egy operációsrendszer-típust jelöl, melynek felhasználói felülete többé-kevésbbé konzisztens (Ezen persze el lehet vitatkozni, lásd "hogy hívják ezen a héten a nyomtatás parancsot?"-szindróma. A "többé-kevésbbé" azt jelenti, hogy egy-egy parancsnak más-más opciói lehetnek az egyes UNIX verziókban, vagy hogy egy adott file-t máshol lehet megtalálni.) Talán idővel eltűnnek ezek a különbségek is, a jelek legalábbis erre utalnak: a gyártók a Microsoft Windows NT-től való félelmükben lassan kezdik megtalálni a közös hangnemet...
 

Szóval akkor inkább ugorgyunk, és már ott is vagyunk egy UNIX-os, gép elôtt (vagy mögött, bár az nehézkesebb). Ha mégsem, akkor gyakoroljunk DOSban, és gondolkozzunk el, hogy miért nem megy semmi se. Illetve hogy miért vannak hasonlóságok. Illetve hogy mennyi a sebessége egy töketlen buherátornak.

Ismerkedés (a találkozástól az első csókig)

A UNIX-al való ismerkedés valószínűleg célravezetőbb módja az, ha leülünk egy UNIX-os gép terminálja elé. Ehhez manapság már nincsen szükségünk egy csillagászati árú speciális hardverre, mert a PC-n (is) rendelkezésre áll több nagyszerű UNIX-jellegű operációs rendszer, melyek megpróbálnak számítógépet faragni PC-nkből. A Linux néha egész meggyőző tud lenni, a FreeBSD pedig elég hűen emulálja a tizenöt évvel ezelőtti idők hangulatát. Extremistáknak persze tudom ajánlani, hogy a további fejezetek feladatainak kipróbálásával DOS, VMS DCL vagy mondjuk CP/M alatt próbálkozzanak, de utána azért gondolkozzanak el azon, hogy miért nem sikerült bármit is elérniük...

A UNIX mint olyan (mint milyen?)

Már említettem, hogy a UNIX multitask rendszer, azaz párhuzamosan több (több tucat, több száz, több mint kéne) folyamat csordogál benne. Bármit csinálunk, az egy task. Ahol beírjuk, hogy mit akarunk csinálni, az is csak task. Jobb helyeken ez utóbbit parancsértelmező buroknak hívják, amit a műveltebb sznobok csakis command shell néven emlegetnek.

Shell van egypúpú, van kétpúpú, sőt van több: általában a Bourne-shellt ( sh ) és a C-shell t ( csh ) különböztetjük meg, ezek szintaktikájukban, logikájukban, valamint nevükben különböznek. Pénzes UNIX-okban leggyakrabban az sh-alapú ksh-val (Korn shell, a kifejlesztője után; lehetne akár kommersz shell is...) fogunk találkozni, ingyenes klónok alatt pedig valószínűleg a bash-al (Bourne again
shell), esetleg a zsh-val. Fontos tudni, hogy a shell is csak egy program a sok közül (mivel csak egy task), így az elvi lehetőségünk mindig megvan ahhoz, hogy átugorjunk egy másikba (azért csak elvi, mert lehet, hogy a rendszergazda letiltotta ezt a lehetőséget, netán csak egyfajta shell van telepítve a rendszerben).

A task és a shell fogalmán kívül kulcsszó a UNIX-nál a file. Na jó, akkor fájl... júniksz bácsinál ugyanis nagyjából minden fájlként
kezelhető, a terminálok, a merevlemez, a memória, minden. Persze "hagyományos" (DOS-os értelmezésben is annak számító) fájlokból is
többfajta van: fájl lehet egyedülálló fájl is, ahogy azt megszoktuk, vagy directory, amikor más fájl(ok) adatait tartalmazza (meg még továbbiak, de erről majd később).

Alapvetően három fájltípust különböztet(het)ünk meg:

A fájlok, könyvtárak szerkezete, elrendezése ismerős lehet: hierarchikus (imádom, amikor ilyen szavakat használok!!!), fa jellegű könyvtárstruktúra. Mint az MS-DOS-ban. Vagy másutt. Kell-e magyarázni?

Na jó, a gyengébbek (elsősorban a magam) kedvéért:

                             /
                        (root dir)
                       /          \
                      /            \
                   home/             bin/
                 /     \            /   \
                /       \         ...   ...
          hamster/    masvalaki/
          /    \        /  \
       News/  Mail/  ez/  amaz/
Namármost, ebből az ábrából a legkezdőbb kezdőnek is le kellett vonnia a tanulságot, ti. hogy nem tudok ASCII-ban rajzolni... Meg még azt is, hogy ezt a rendszert ismernie kell, kivéve talán, ha ZX-81-ről, VM-ről, MVS-ről, OS-ről, stb-ről szállt át UNIX-ra...

Na jó, az érdekesebb tördelés kedvéért jöjjön új fejezet...

Előre