Általános Informatikai Tanszék
Hirdetmények (1) Jelenlevők: műsz. informatikusok A tantárgy célja: Számítógép alapfogalmak Internetes alapfogalmak Unix alapfogalmak Követelményrendszer: 1 ZH, 1 kötelező feladat Értékelés: aláírás vizsga jegy
Hirdetmények (2) Jegyzet: Ami az előadáson elhangzik Interneten: Elérhetőség: Tel: (46)565-111/17-56 Tel: (30)9383-669 E-mail: wagner@iit.uni-miskolc.hu http://www.iit.uni-miskolc.hu Itt az oktatók, Dr. Vadász Dénes, jegyzetek, publikációk, majd a hasonló című jegyzet
Számítógéptörténet, Neumann elv Számítógéptörténet (ld. jegyzet!) Pascal, Babbage, Ada Byron, Hollerith, Zuse, Neumann A Neumann elv (Most röviden, később részletezzük) A gép fő részei, követelmények Tárolt program elvű Program szerint, emberi beavatkozás nélkül is, automatikus működik
Számítógép: hardver architektúra A legáltalánosabb HW architektúra Memória CPU sín Perifériák Hogy működik a számítógép Instrukciók, címzések Perifériakezelés Az architektúra kifejezés kettős értelme specifikáció egységek és kapcsolódásuk
Hogyan működik a számítógép A memória: adatokat [bit, bájt, szó, blokk, rekord (mezőkkel), fájl stb.] és gépi instrukciókat tartalmazó, címezhető cellák. A gépi instrukciók: program (kód), e szerint működik. Az állapot (state), adott pillanatban a memória-cellák pillanatnyi állapota, a perifériák pillanatnyi állapota.
Állapottér Vegyük észre: ez egy sokdimenziós, nagy állapottér. Egy instrukció végrehajtása: i.instr> állapot i állapot i-1 A program futása: állapotátmentek láncolata. A többdimenziós állapottér kulcsjellemzője: a programszámláló regiszter (PC/IP/PSW)
Az állapotátmenetek láncolata Az állapotátmenet-láncolat kulcsjellemzője: a programvezérlés menete (flow of control), a programszámláló regiszter egymás utáni értékei. Az imperatív programozási nyelvekkel: a vezérlés menetét manipuláljuk. Az imperatív programozási nyelveknek: jól megfelelnek a Neumann elvű gépek. A hiba és eseménykezelés jellegzetesen megoldott: a programvezérlés menete ugorjon a kezelőre (handler).
Más elvű gép: adatfolyam gép (Dataflow Machine) Idea: szeparált processzorok minden operációra (operáció lehet: aritmetikai, logikai, függvényhívás stb.) Az operációk (proceszorok) várnak, míg operandusuk értéke előáll, utána adják eredményüket. A processzorok (operációk) függetlenek. A legkorábbi lehetséges pillanatban adják az eredményüket. Az operációk végrehajtásának sorrendje az adatfolyamból adódik.
Példa: adott a és b, kiszámítandó átlaguk és négyzeteik átlaga Egy virtuális Neumann gép (szekvenciális végrehajtás) A flow of control sum := a + b 1 x av := sum/2 2 x IP a b sum av asq bsq sumsq avsq asq := a * a 3 x bsq := b * b 4 x sumsq := asq + bsq 5 x avsq := sumsq/2 6 x Az állapotvektor a 3. absztrakt instrukció végrehajtása után
Gyakran használt fogalmak Virtualitás, virtuális (látszólagos) Valami, ami valóságosan nem létezik, de mégis úgy használhatjuk, mintha létezne Pl. virtuális meghajtó, emulált terminál, virtuális gép stb. Transzparencia, transzparens (átlátszó) Valami, ami ott van, de nem látjuk, nem vesszük észre Pl. az előbbi virtuális diszkmeghajót a hálózaton át egy fájlszerver biztosítja, akkor a hálózat transzparens, nem kell vele törődni.
Példa: adott a és b, kiszámítandó átlaguk és négyzeteik átlaga Neumann gép (szekvenciális végrehajtás) IP 800 804 808 80C 810 814 a b sum x av x asq x bsq x sumsq x avsq x 800 ADD a,b,sum 804 DIV sum,2,av 808 MUL a,a,asq 80C MUL b,b,bsq 810 ADD asq,bsq,sumsq 814 DIV sumsq,2,avsq
Példa: adott a és b, kiszámítandó átlaguk és négyzeteik átlaga Adatfolyam gép a b Hibakezelés: explicit hibaértékekkel 2 * av asq sum / 2 + * bsq + sumsq / avsq A nyilak: neves, vagy névnélküli értékek. A körök: az operációkhoz rendelt processzorok.
Példa: adott a és b, kiszámítandó átlaguk és négyzeteik átlaga Adatfolyam gép Van 6 processzor a 6 operációhoz, nincsenek változók (név, érték, típus, cím), névvel ellátott értékek vannak (a,b,asq,bsq,sum stb). A neves értékek nem definálhatók át! Redefinició esetén nem tudnák a processzorok, melyik értékre várjanak! A neves értékeknek típusa és explicit hibaértéke van! Ui. egy processzor mindenképp kell eredményezzen értéket, legföljebb hibás eredményt! Kaphat hibás inputot is.
Neumann elvű gép A gép fő részei, követelmények: ALU, vezérlő egység, memória, perifériák, 2-es számrendszer, elektronikus. Tárolt program elv: A tárban az adatok és a program is. Következményei: jók és rosszak. Automatikus működés: program szerint, állapotok, állapotátmenetek, a vezérlés menete, PC/IP szerepe.
Számítógép: hardver és szoftver A legáltalánosabb SW architektúra Direkt futtatás, monitor, operációs rendszer Az OS fogalma Kiterjesztett gép Erőforrás menedzser A rétegezettség (layered architecture) architektúra Alkalmazás Operációs rendszer Hardver Egy réteg elrejti az alatta fekvő rétegek részleteit. Elegendő csak az alattad lévő réteg felületét (interface) ismerni Felhasználói felület
Operációs rendszer osztályozás Cél szerint: általános, cél HW nagyság szerint: PC, kis, nagy, szuper Processzorok, processzek, felhasználók száma szerint Időosztás szerint: szekvenciális, time sharing: kooperativ, beavatkozó Memóriamenedzselés szerint: valós, virtuális Fájlrendszer implementáció szerint
A felhasználó látásmódja A HW-ből a terminált látja Képernyő Billentyűzet Mutató eszköz A lényegesebb látnivalók absztrakt dolgok Felhasználói felület Processzek: futó programok Eszközök, fájlok szimbolikus neveiken Felhasználók: neveik, számlaszámaik, e-mail címeik, tulajdonossági és hozzáférési kategóriák Csomópontok: számítógépek, rendszerek
Manapság két féle A felhasználói felület (User Intreface) Parancsértelmező (burok, shell) Grafikus interfész Ismert felhasználói felületek: command.com, Windows, sh, DCL, X-es desktop-ok stb. Interaktív és kötegelt használat Vannak parancsnyelvi (commands language) elemek, válasznyelvi (respond language) elemek, ezeket kell ismerni (látni).
A processzek Processz: párhuzamos szerkezeteket nem tartalmazó program, futás közben Program versus processz A processz kontextus:... azonosítási információk: pid, állapot-információk stb. A felhasználói interfész is processz(ek) Miért kell a processzekkel foglalkozni? Lelőni, szinkronozálni, kommunikálni Mit látunk a processzekből? Azonosítójukat, ikonjukat vagy ablakukat És ezeknek is van felhasználói felületük...
Eszközök Szimbolikus nevekkel a perifériák A szimbolikus neveket a parancsokban használhatjuk Van munka- (default) eszköz (Unixban? Ott nem szükséges hivatkozni rá!) Parancs a munka-eszköz cseréjére A blokkorientált eszközökre képezhetünk fájlrendszert Karakterorientált eszközök is kezelhetők
Fájlok Fájl: valamilyen szempontból összetartozó adatelemek, névvel ellátva, struktúrált eszközön Névkonvenciók és restrikciók lehetnek A nevekre hivatkozhatunk a parancsokban Az adatelem: bájt, szó, mező, rekord Tartalmuk szerint: szöveg, dokumentum, bináris adat (kép, hang, tárgyprogram, futtatható program stb.)
A jegyzék (directory) Eddigi elképzelésünk: létezik egy fájl-halmaz (file pool), benne fájlok, neveikkel. Rendezni kellene! Pl. gyűjteni, együttkezelni fájlok csoportjait. Jegyzék: egy fájl, ami bejegyzéseket tartalmaz más fájlokról. Van neve, konvenciókkal. Könyvtár? Akkor mi a library? Korszerű OS-ekben minden fájl - egy kivételével - be van jegyezve egy jegyzékbe Ez szülő - gyermek relációt ad
Szülő jegyzék dir szülő A szülő reláció: egy-az-egy gyermek subdir gyermek subdir dir szülő A gyermek relációk: egy-a-több gyermek file Szülő jegyzék (parent directory): egy jegyzék szülője. Van szimbolikus neve: ez OS burok függő. A relatív ösvény kijelölését segíti ez a név.
Gyökér jegyzék, fájl-rendszer A szülő - gyermek reláció kiterjesztése hierarchikus faszerkezetet ad Gyökér jegyzék (root directory): az eszköz kitüntetett jegyzéke. Nincs bejegyezve jegyzékbe. Kitüntetett helyen van a tartalma. Kiindulópontja a hierarchikus faszerkezetnek. Szimbolikus neve: OS függő Fájl-rendszer: blokk-orientált eszközre képzett hierarchikus struktúra, melyben a fájlok azonosíthatók, attribútumaik, blokkjaik elérhetők, az eszköz blokkfoglaltsága menedzselt.
Jegyzékek, ösvény Ösvény (path): szülő-gyermek relációban lévő jegyzéknevek listája (listavég lehet fájlnév is), mely valamelyik jegyzékből kiindulva jegyzéket, fájlt azonosít A listaelválasztó: OS burok függő Indulhat gyökér jegyzékből (abszolút), munkajegyzékből (relatív). Munkajegyzék (default, working dir.): az OS által feljegyzett, ezzel kitüntetett. Relatív ösvény kiindulópontja: gyors keresés benne,nem szükséges explicite hivatkozni rá. Van szimbolikus neve, ez OS burok függő.
Fájlrendszer Blokkorientált eszközön hierarchikus struktúra root Munkajegyzék subd1 f1 subd2 subd3 f2 f1 f2
Grafikus felületeken mit látunk? Eszközöket: ikonok... Fájlokat: ikonok, tartalmuktól függően. Akciók velük: kijelölés, kiválasztás, vonszolás, attribútum lekérdezés stb. (Kettős kattintás: lehet, hogy az asszociált alkalmazás indul ) Jegyzékek: mappa (folder) ikonok. Ösvények: rajzos faszerkezeten az ágak. Processzek: ablakok, ikonok... Gazdagépek: ikon v. legördülő listaelem. Néha visszalépünk a parancsnyelvi felületre... Felhasználók: ikonok v. nevek... Láthatunk még: menüket, tálcákat stb....
Felhasználók Vannak más felhasználók is (sőt: csoportok) Kommunikációhoz ismerjük azonosítóikat nevüket, e-mail címüket, honlap címüket stb. Vannak tulajdonossági kategóriák is xy tulajdonosa ennek és ennek... ez a csoport csoport-tulajdonosa ennek... Semmilyen tulajdonossági viszony sincs... Hozzáférési kategóriák is (rwdx)
Hálózatok: számítógéprendszerek Hálózatosztályok: GAN, WAN, MAN, LAN, VLAN A hálózatosodás mozgatórugói Erőforrás megosztás Számítógépes kommunikáció. Ma már szinte nagyobb hajtóerő. Csomópontok (node) kapcsolók, gazdagépek (host). Adattovábbító media
Csomópontok: gazdagépek Gazdagépek: azonosított rendszerek. Szolgáltatásokat biztosítanak. Legalapvetőbb: felhasználói interfésszel dolgozom rajtuk: (közeli/távoli géphasználat!). A használatba vételhez két dolog kell Kapcsolat (connection) kell létesítés ülés (session) létesítés. Néha ezek degeneráltak, eliminálódnak.
A kapcsolat létesítése Legfontosabb információ ehhez a host azonosítója (címe, neve) és a szolgáltatás azonosítója (portcím, szolgáltatás protokoll). A szolgáltatás azonosító sokszor bedrótozott a kapcsolatkezdeményező processzbe, nem kell megadni. Célja: létesüljön vonal (kapcsolat), hogy ezen az ülés létrehozásával lehetővé tegyük a szolgáltatás igénybevételét. (A gazdagépen induljon vonalkezelő processz, ami a vonalat biztosítja.
Géphasználati kapcsolatlétesítéshez Kell terminál: vagy valódi, vagy emulált. (Létező ülés alól a kliens oldalon pl. indíthatunk terminál-emulációt, abból kezdeményezhetünk kapcsolatot). Degenerált kapcsolatlétesítés: leülünk egy gép elé
Távoli géphasználat Valódi v. emulált terminálról kapcsolatlétesítés (telnet, ssh) és viszonylétesítés (login) után használjuk a UI-t. Lehet grafikus is. User User Terminal OS shell (UI) User File System
Távoli géphasználati kapcsolatlétesítés parancsai ülésből MS-DOS ülésből TCP/IP protokollal > tn [-t vt100] host_id [port] > rloginvt host_id [username] > ssh host_id Unix burokból, DCL-ből (TCP/IP) > telnet host_id > ssh host_id
Kapcsolat bontása Kapcsolaton létesített ülés bontása bontja a kapcsolatot is. Ha létesült kapcsolat, de nem létesült ülés: Használjuk a kapcsolattartó menekülési (escape) szekvenciáját! Hosszú idejű forgalomnélküli kapcsolatot bontják a rendszerek, de nem örülnek a rendszergazdák. Degenerált kapcsolatnál egyszerűbb a helyzet: kikapcsoljuk a gépet, felállunk.
Ülés (session) létesítése Célja: azonosított, ellenőrzött módon használjuk a rendszert (géphasználatra burkot, GUI-t, speciális célra valamilyen SW rendszer processzeit). Legfontosabb információ: számlaszám (bejelentkezési név) a jelszavával (uic, password). Vannak nyilvános, jelszó nélküli számlaszámok (anonymus, user, guest) Egyfelhasználós (PC) rendszereknél ez is lehet degenerált.
Ülés-létesítés, -bontás parancsai Létesített kapcsolaton megjelenik: A rendszert leíró általános üzenet (informál), a login prompt (erre válaszolunk), a passwd prompt (erre is válaszolunk). Ellenőrzés a jogosultságra, ha sikertelen, néhányszor javíthatunk. Ha sikeres: megjelenik a motd, indul a felhasználói felület-processz. Ülésünkben a burok/gui fut. Dolgozhatunk. Ülés bontás : > logout EOF
Ne feledjük... Vannak a távoli géphasználat célú kapcsolat-ülés létesítésen kívül más kapcsolatok is! Pl. ftp: kapcsolat, ülés Web böngésző: kapcsolat, ülés (Általánosítunk!) kliensek, szerverek
A kliensek Erős kliens UI: CDE, Windows, WEB böngésző Office (dokumentumszerkesztés, táblázatkezelés, előadásszervezés, munkszervezés, stb.) A Lotus Notes Specialitások (CAD, szimuláció, stb.) Az OS-ek NT, W2000, XP,.NET Linux AIX, Irix, Solaris, HP Unix stb. Mit igényel a szervertől? Fájl és nyomtatószolgáltatást, user menedzsmentet, munkaszervezés szolgáltatást, installációs támogatást AB szolgáltatást
Csak OS (és UI) fut rajta Lehet diskless Mit igényel a szervertől? A gyenge kliens Mint az erős, továbbá Minden alkalmazás az alkalmazás-szerveren fut Szerveren elegendő CPU teljesítmény szerveren elegendő memória (pl. NT: 20 Mbyte/kliens) megosztó szoftver (pl. NT: Terminal Server) Volt már ilyen? Előnye Igen, az X11 X-szervere (Xterminál) Csak a szerveren kell karbantartani, fejleszteni Nem avulnak el a kliensek
A szerverek Fájl és nyomtató szerver Sun NFS NT fájlmegosztás, map-elés Samba Központi felhasználói menedzselés NIS (a Unix világban természetes) NT, W2000 domain-felhasználói menedzselés Központi alkalmazások Munkaszervezés Levelező rendszer AB rendszerek
A szerverek Speciális alkalmazások A szerverről indíthatók, de erős kliensen futnak A szerveren futnak, a gyenge kliens csak UI-t ad Milyen OS-ek jönnek szóba? IBM AIX SGI Irix Sun Solaris, Sun OS HP HP-Uix NT, W2000 A szerverek méretezése
Összefoglalás Neumann elvű gép - adatfolyam gép Mivel foglalkozik a felhasználó UI/GUI Eszközök és fájlok, fájlrendszer Processzek (futó programok) Felhasználók, tulajdonlások és hozzáférések Csomópontok és szolgáltatások Géphasználathoz kapcsolat és ülés létesítés/bontás Kliensek és szerverek
Unix Pár jellemzője: Nagyon elterjedt Multiprocessing Multiuser Időosztás Általános cél Néhány ismertebb kiindulási anyag Orlando Unix iskola: http://www.cab.u-szeged.hu/local/doc/: UNIX/orlando/bev.html Egy nagyon rövid leírás: gopher://helka.iif.hu:7070/0/porta/szint/muszaki/sz amtech/os/unixalap.hun A Unix rövid története: www.cs.elte.hu/~gombasg/unix_tortenelem.html
Unix (2) Neve programja szokásos promptja előnye Bourne shell sh $ Mindenhol, shell programozásra C shell csh % Mindenhol, interaktív használatra TC shell tcsh % Interaktív használatra Korn shell ksh $ SVR4-ben ajánlott Super user shell-je sh #
Kialakulása Kutatási program az 1960-as években. Cél: Az MIT, a Bell laboratórium és a GE Neve: MULTICS (MULTiplexed Information and Computing Service) fejlesztés PL/I nyelven folyt egyetlen működőképes PL/I fordító sem létezett!!!
Kialakulása (2) A program feladására kényszerültek. Az egyik fejlesztő, Ken Thompson megírta a MULTICS egyszerűsített változatát egy használaton kívül lévő PDP-7 számítógépen Volt: állomány és file kezelés process kezelő alrendszer segédprogramok Elnevezése: (Brian Kernighan): eunuch multics, röviden UNICS (Uniplexed Information and Computing Service).
előnye: működött. Kialakulása (3) Dennis Ritchie emiatt egész osztályával együtt csatlakozott a UNIX fejlesztéséhez (közben megváltoztatták a nevét). Cél: más gépre is elkészíteni Az ős-unix assembly nyelven készült, így újra kellett írni az egészet.
Kialakulása (4) a C nyelv A B nyelv szerepe. Elődje a BCPL, annak pedig a CPL volt. Egyikre sem készült el fordító! Dennis Ritchie, újratervezte a B nyelvet (C nyelv), bevezette a struktúrákat, és egy fordítót is írt PDP-11 gépre.
Kialakulása (5) A kernel átírása 1973: a UNIX rendszer magját (Kernel) átírták C- re! hordozhatóvá vált, 1974: az első nyilvános publikáció Az AT&T egyetemek részére ingyenesen hozzáférhetővé tette
Kialakulása (6) 1979: az első, nem PDP-s gépre történő kifejlesztés a forráskód birtokában megindult a véget nem érő buherálás az egyetemeken. Az egyetemek közül kiemelkedik a: University of California at Berkeley 1979: kb. 500 különböző UNIX, mind az USA-ban. Nagyon népszerű a telefontársaságoknál.
Kialakulása (7) A Berkeley egyetem számos ponton javítottak az AT&T-től kapott Unixon: gyorsabb fájlrendszert írtak, elkészítették a VAX-on futó változatot, beépítették a hálózatkezelést, számos segédprogramot Jelenleg: 4.4 BSD UNIX
Kialakulása (8) A bajok kezdődnek nyolcvanas évek végére két különböző, Unix van: AT&T: UNIX BSD UNIX 1977-1982: az AT&T összefogja a saját verzióit és a version 7 után System III néven jelenik meg. 1983: kb. 100.000 működő UNIX rendszer. 1983: megjelenik a System III továbbfejlesztése a System V. (System IV???), majd annak release-ei. Pl: System V Release 4, röviden: SVR4
Kialakulása (9) bajok még vannak a System V-re írt C programot a BSD-s rendszerek fordítói nem tudták lefordítani, és viszont. A C nyelv fordításvezérlő direktíváival (#ifdef, #ifndef, #endif) korrigálható, de ez egyúttal azt jelenti, hogy a C programot minden géphez át kell egy kicsit alakítani, "portolni" kell
Kialakulása (10) XENIX A Microsoft PC-re fejlesztett UNIX változata. Akkor még DOS 3.1 volt: single task-os single user-es használata user név és jelszó nélkül.
Kialakulása (11) egységesítések 1. AT&T: SVID (System V Interface Definition) Szabványos rendszer hívások Szabványos szubrutinok Jó: végre van szabványtervezet Hátrány: egy cég tartsa kezében az egészet? NEM! Következmény: a BSD-sek figyelmen kívül hagyták 2. IEEE: POSIX (Portable Operation System Interface (x)) Támogatói: ANSI, ISO Összetétele: 70%-ban SVID, 30% saját elképzelések Minden nagy UNIX gyártó elismeri a POSIX jelentőségét, és támogatja azt. Ettől függetlenül továbbra is építenek be inkompatibilis részeket saját UNIX-ukba
Kialakulása (12) egységesítések (2) A riválisok két szervezetbe tömörülnek: OSF (Open System Foundation) vezetője a DEC Tagjai: DEC, IBM, HP, BULL, Siemens-Nixdorf, UI (Unix International) Alapítója az AT&T Tagjai: NCR, Unisys, Data General, Patt helyzet. Új szervezetet hoznak létre: X/OPEN
Kialakulása (13) egységesítések (3) Az X/OPEN által készítet operációs rendszer szabvány neve: Core OS API, más néven Common API. A szabványt a benne leírt specifikációk alapján hívják Spec 1170-nek is, sőt egy további neve is van: UNIX 95 Ha egy OS átmegy az X/OPEN minősítő tesztjein, megkapja a UNIX 95 minősítést. Távlati cél: bináris kompatibilitás
UNIX-ok IBM, DEC, Berkelay, Silicon, Hewlett-Packard, SUN, Microsoft, Linux-ok,
Linux (1) Finn egyetemista: Linus Thorvalds Kurzus: OS Tanára: Tanenbaum Tanenbaum: microkernel Linus: monolitikus kernel Ellentétek
Linux (2) Operating systems news:... Jelenleg: 2.4.19 a legfrissebb kernel (2002. szeptember 28!) Terjesztők (Slackware, Suse, Open Linux, Red Hat, Debian, Mandrake, )
Linux (3) Suse: 8.1 (http://www.suse.com/index_us.html) Mandrake: 9.0 (http://www.linux-mandrake.com/en/) Debian: 3.0r0 (http://www.debian.org) Slackware: 8.1 (http://www.slackware.com) Red Hat: 8.0 (http://www.redhat.com)
Unix filozófia Mások munkájára építs! Ezt segítik a következő koncepciók: processz általában az stdin-ről olvas, stdout-ra (stderr-re) ír; a parancsok is! A standard adatfolyamok átirányíthatók. Csővezeték képezhető. Szűrők használhatók. Sok daemon processz szolgáltat. $ cat txt $ cat >txt $ grep vmi <txt wc
Honnan tanulhatunk? Könyvekből, az Orlando iskolából, insight-ból az Irix-ben, info-ból az AIX-ben stb. Az on-line kézikönyvből: > man [-opc] [section] lap Tanácsok: Tudni kell angolul olvasni! Fontos parancsok nevét pontosan tudni! Parancs-kártya a fontos parancsok nevével!
Parancsok: editorok ed sororientált vi (vim) képernyőorientált e (emacs) képernyőorientált jot, zip egyszerű, egész jó, de csak SGI-n pico egyszerű, SGI-n, gold-on (vt100 kell)
Parancsok: kiírók cat pr head tail more od concatenál, stdout-ra printel, stdout-ra file első sorait file utolsó sorait lapokra tördelő szűrő oktális dump (ömlesztés)
Parancsok: jegyzékekkel kapcsolatban ls jegyzék tartalom lista (dir helyett) mkdir jegyzék készítés rmdir jegyzék törlés cd munkajegyzék váltás pwd munkajegyzék lekérdezés chmod fájl védelmi maszk váltás chown fájl tulajdonos váltás file fájl típus lekérdezés
Parancsok: másolások, mozgatások cp copy, másolás mv move, mozgatás (rename helyett is!) ln (link) "linkel" rm (unlink) töröl find keres fájlt egy fán és csinál is valamit (bonyolult, de nagyon hasznos!)
Parancsok: állapotlekérdezések ps processzek listája file, ls, pwd ld. fönn date dátum, idő lekérdezés who, w, rwho, rusers ki van bejelentkezve? rup mely rendszerek élnek? top, gr_top erőforráshasználat csúcsok osview, gr_osview erőforráshasználat last utolsó bejelentkezések
Parancsok: állapotlekérdezések 2 finger ki kicsoda? passwd, yppasswd jelszóállítás ypchpass név, induló burok stb. beállítás ypcat NIS (yellow pages) adatbázis lekérdezés xhost X11 munka engedélyezése set környezet (environment) lekérdezés du, df diszk használat
Parancsok: processz indítás,vezérlés sh, csh, ksh, tcsh shell idítás exec processz indítás kill processz "megölése", szignálküldés sleep processz altatása wait processz várakoztatás at processz indítása egy adott időpontban nohup kilépéskor ne ölje meg test kifejezés tesztelése
Parancsok: processz indítás,vezérlés 2 expr kifejezés kiértékeltetése if, case, for, do while vezérlő szerkezetek break, continue vezérlő szerkezetek echo argumentumai echo-ja (meglepően hasznos valami)
Parancsok: kommunikáció telnet, rlogin, rsh kapcsolatlétesítés rwho, rusers, finger lásd fönt write üzenet konzolokra talk, xtalk, irc interaktív "beszélgetés" mail, Mail, pine, zmail e-mail ftp fájl átvitel lynx, netscape WWW böngésző (kliens)
Parancsok: hasznos szűrők grep mintakereső awk, nawk mintakereső feldolgozó wc sor, szó, karakterszámláló sed áradatszerkesztő cut mezőkivágó tail, head lásd fönn.
Az sh burok A shell kettős értelme: parancsértelmező processz, prompt-otad, parancsot elfogad, értelmez, átalakít (behelyettesítések!), végrehajt. Programnyelv, vannak adatszerkezetei, vezérlési szerkezetei, kommentezhető, odaadható a parancsértelmezőnek, hogy hajtsa végre.
Több burok van! Melyiket? Az sh előnyei: mindenütt, shell programokat konvenció miatt ebben! Hátránya: interaktív használatban kényelmetlenebb. Szerencsére a legtöbb segédprogram (külső parancs) bármelyik burokból ugyanúgy hívható! Mi mindenesetre az sh burkot kérjük!
A parancs fogalma Fehér karakterekkel határolt szavak sora első szó a parancs neve, többi szó az argumentumok. Az sh beolvassa, értelmezi, átalakítja, végrehajtja saját maga (belső p.), gyermek processzben (külső p.) Mindkét esetben van visszatérési értéke!
A visszatérési érték Lehet normális (0), lehet nem normális (nem 0), ennek oka többféle: valami hiba van, nincs hiba, de szemantikailag van gond. (Pl. grep szűrő nem talál mintaegyezést, vagy test parancs tesztelése nem igaz.) A visszatérési értéket a programvezérlésben használhatjuk majd.
A szabványos adatfolyamok Az sh processznek (rendszerint) van legalább 3 nyitott adatfolyama. Ezek a szokásos leképzésükkel: Leíró Név Leképzés 0 stdin billentyűzet 1 stdout képernyő 2 stderr képernyő Gyermek processzben a leképzések átirányíthatók fájlba(-ból), csőbe(-ből).
Egy példa parancsra > find. -name a.c -print ahol a szavak számozása 0 1 2 3 4 Azaz a fenti parancs 5 szóból áll. Vegyük észre, hogy a burok promptja nem része a parancsnak! Inputot nem kíván, outputja (esetleges hibaüzenetei is) a képernyőre megy. > find. -name a.c -print >myfile.txt
A csővezeték fogalma A csővezeték (pipe) parancsok sora operátorral összekötve: parancsbal parancsjobb Szematikája: végrehajtódik a parancsbal, szabványos kimenete egy csőbe képződik, majd végrehajtódik a parancsjobb, aminek szabványos bemenete erre a csőre képződik. A cső visszatérési értéke: a parancsjobb visszatérési értéke. A parancs degenerált cső. Példa: > ypcat passwd grep kovacs
A parancslista Csővezetékek sora listaoperátorral összekötve: csőbal op csőjobb Listaoperátorok: && # magasabb precedencia, de alacsonyabb mint a & ; \n # alacsonyabb precedencia A szemantika: ; \n soros végrehajtása a csöveknek & aszinkron végrehajtás (csőbal háttérben) && folytatja a listát, ha csőbal normális visszatérésű folytatja a listát, ha a csőbal nem normál visszatérésű
Parancslisták A lista visszatérési értéke az utolsó cső visszatérési értéke. Háttérben futó cső visszatérési értéke különlegesen kezelhető. A cső degenerált lista (ahol ezentúl listát írunk, írhatunk csövet, sőt parancsot is!) A && és operátoros listáknál először láthatjuk a visszatérési érték értelmét! Valóban a vezérlés menetét befolyásoljuk!
Példák > cd ide && rm junk # csak akkor töröl, ha... > ls ide cp valami ide # ha nincs ide, készíti Nézzük, magyarázzuk ezt! > (mv a tmp && mv b a) && mv tmp b
Példák Háttérben futtatunk > myprog 1 2 & 125 > Mi a különbség? > echo valami echo valami valami echo valami > echo valami; echo valami valami valami
Parancs (cső, lista) zárójelezés A zárójelezés (csoportosítás) oka kettős: operátorok precedenciáját akarjuk átértékelni, processz szeparálást akarunk elérni. Szintaxis ( lista ) { lista } Szemantika ( ) zárójelezéssel a lista mindenképp szeparált processzben fut. Precedencia átértékelés is lehet. { } zárójelezéssel nem fut feltétlenül szeparált processzben.
Példák zárójelezésre Mást ad az alábbi két lista: > date ; who wc > ( date ; who ) wc # itt precedenciát értékelünk át Két példa következik. Az első: > pwd vhol > cd ide ; rm junk ; pwd vhol/ide A második: > pwd vhol > (cd ide ; rm junk); pwd vhol A processz szeparálás hatásai: más lehet a környezet (csak öröklődő változókat lát a gyermek, ott más lehet a munkajegyzék stb.). Számítsunk erre!
Parancsvégrehajtás Általában az sh készít új processzt a parancs számára, ebbe betölti a parancsot, átadja az argumentumokat neki (szkriptek, exe-ek; PATH szerinti kereséssel). Ha nincs ( ) zárójelezés, sem átirányítás, nem készül új processz a belső parancsoknak (melyek ezek?), vezérlő parancsoknak, sh makróknak (definiált függv.ek). Ha belső parancs bármilyen okból szeparált processzben fut, abba az sh töltődik!
Belső parancs szeparált processzben > (ls a b c) # sok értelme nincs, de kikényszeríthetjük > ls a b c wc # ezek is gyermek processzekben. Magyarázat, miért gyermek processzekben
Összefoglalás Több burok van... Fontos Unix burok parancsok nevei Az on-line man használata A parancs, cső, parancslista fogalmak A burok beolvas, értelmez, átalakít majd végrehajt A visszatérési érték A standard adatfolyamok (csőnél fontos) A parancs processzek szeparálása
Az adatfolyamok átirányítása Mielőtt a lista/parancs végrehajtódik, az sh nézi, van-e átirányító operátor > >> < a szavakban (szavak előtt). (A << különleges!) Ha ilyeneket talál, szeparált processz(eke)t készít, azokban az adatfolyamokat fájlokba(ból) képzi le, majd abban futtaja a listát/parancsot. (Csőnél is szep. processz!) A szeparált processz(ek)nek átadja a maradék argumentumokat.
Az átirányító operátorok < file # file legyen az stdin > file # file legyen az stdout, rewrite >> file # file legyen az stdout, append <<[-]eddig # here document, beágyazott input Példa: > mypr < innen > ide elso masodik 0 1 2
Fájlnév kifejtés (behelyettsítés) Argumentumokban használt metakaraktereket (közöttük a dzsókereket: *? [ ]) a burok a lista/parancs végrehajtása előtt különlegesen kezeli. Ha a szavakban dzsókereket talál, azt a szót mintának (pattern) veszi. A minta behelyettesítődik alfabetikus sorrendű fájlnevek litájává, olyan nevekre, melyek a fájlnév-térben illeszkednek a mintára. Csak ezután hajtódik végre a parancs/lista.
Az illeszkedés A? egyetlen, bármely karakterre illeszkedik. A * tetszőleges számú, tetszőleges karakterre illeszkedik. A [...] illeszkedik egyetlen, valamelyik bezárt karakterre. A [!.] illeszkedik egyetlen, bármely, kivéve a! utáni karakterre. stb, nézz utána!
Példák Tegyük fel, az aktuális jegyzékben van 4 fájl: a abc abc.d xyz $ ls * # ls a abc abc.d xyz $ ls a* # ls a abc abc.d $ ls [a]?? # ls abc $ ls [!a]?? # ls xyz Vegyük észre, előbb megtörténik a behelyettesítés, csak azután hívódik az ls parancs! Vö: $ rm * és DOS> DEL * Vigyázz: > echo *
A metakarakterek semlegesítése Ezeket az sh kifejti, ezek miatt a parancsot átalakítja. Ha mégis szükségünk van ezekre a parancshoz, (pl. szűrőnek kellenek) quotá-zuk őket! Egyetlen karakter semlegesítése: \kar Több karakter semlegesítése: karaktersor # minden bezárt quótá-zott. karaktersor # a paraméter és parancsbehelyettesítésen kívül (lásd később) minden quótá-zott.
Példák $ a=valami $ echo $a valami $ echo $a $a $ echo *$a *valami $
Burokprogramozás A burokprogram (shell script) szövegszerkesztővel készült ASCII fájl, parancsokat (csöveket, listákat) tartalmaz soraiban, esetleg beágyazott input sorokat, odaadható a burok-értelmezőnek, hogy dolgozza fel, olvasható (és futtatható) legyen a fájl! Az editorok általában olvasható fájlokat készítenek. De nem futtathatókat. A futtathatóvá tétel: > chmod +x bprogram
Hogy futtassuk? Ha csak olvasható, nem lehet argumentumokat adni: > sh < bprogram > sh bprogram vagy $. bprogram Ha futtatható is, akkor > bprogram arg1 arg2...
A burok program,... Ha program, akkor van (egyszerű) végrehajtási szerkezete, vannak (egyszerű) adatszerkezetei, kommentározható. A kommentározás # után a sor maradéka: kommentár. Figyelni az első sorra! Lásd később! Tessék kommentározni!
A shell adatszerkezetei Típusuk: szöveglánc (füzér). Csak numerikus karakterekből álló szöveglánc néha numerikus adatként viselkedhet: numerikus operációk hajthatók rajtuk végbe. Lehetnek: változók: ekkor van nevük, van pillanatnyi értékük. Konstansok: szövegkörnyezetből adódnak (lexikális szöveg-konstansok).
A változók A burok által definiált változók: nevüket nem mi választjuk meg. Lehetnek: pozicionális változók (argumentumok), Egyéb, a shell által definiált változók. A felhasználók által definiált változók (nevüket kiválaszthatjuk): a rendszergazda által definiáltak: konvencionális nevek! Az egyes felhasználók által definiáltak: legyenek itt is konvencióink!
A pozicionális változók Nevük: 0 1 2 3 4 5 6 7 8 9 Pillanatnyi értékük: az aktuális argumentumok (a szavak) Emlékezz: a 0. szó a parancs neve: a 0 nevű változó pill. értéke, az 1. szó az 1. argumentum: az 1 változóban van. Annyi változó definiált, ahány szó van! Ha 9-nél több argumentum van: a shift paranccsal eltolhatók, így kezelhetők!
Néhány, a shell által definiált változó Neve Értéke Kifejtése # az argumentumok száma $#? utolsó parancs exit státusza $? $ a processz pid-je $$! az utolsó background processz exit státusza - burok opciók $- $! * minden argumentum szólistája $*
Néhány, a rendszergazda által szokásosan definiált, exportált változó Neve Értéke Kifejtése HOME a bejelentkezési jegyzék $HOME MAIL a postaládánk $MAIL PATH ösvénylista a futtatáskereséshez $PATH TERM a vonali terminál típusa $TERM USER felhasználó neve $USER DISPLAY az X-szerver azonosító $DISPLAY
Változódefiniálás Szintaxis Példa: $ valtozo=fuzerkifejezes $ tmpfile=/tmp/valami Vigyázz! A következő nem jó! Miért? $ valtozo = fuzerkonstans (Mert ez már 3 szó! Tilos a fehér karakter az = előtt és után!)
Hivatkozás a váltózókra, kifejtésük A kifejtő operátor a $ $valtozo $tmpfile /tmp/valami kifejtődik. Pl.: Néha szükséges lehet az egyértelműsítéshez: Pl: ${valtozo} $ val=valaki; valaki=senki $ echo $valaki senki $ echo ${val}aki valakiaki
Példák $ val=valaki; echo $val valaki $ val= echo valami $ $val valami Írjuk ki az aktuális jegyzék tartalmát ls nélkül $ val=*; echo $val a ab abc f1 f2...
A teljes változókifejtés Itt: valt változónév, szo szövegkifejezés, parancs. Ha a : (colon) hiányzik, a 0 string-hosszúság nem ellenőrződik! ${valt:-szo} ${valt:=szo} ${valt:?szo} ${valt:+szo} Ha a valt definiált és nem 0 string, akkor kifejtődik. Különben kifejtődik a szo. Ha a valt nem definiált vagy 0 string, akkor felveszi a szo-t, különben nem veszi fel. Ezután a valt kifejtődik. Ha a valt definiált és nem 0 string, akkor kifejtődik. Különben kiíródik a szo (hiánya esetén default üzenet és exitál a shell). Ha a valt definiált és nem 0 string, akkor kifejtődik a szo. Különben semmi sem fejtődik ki.
Parancsbehelyettesítés A parancsok szokásosan az stdout-ra írnak. A ` ` (grave account) közé zárt parancs fut és kimenete kifejtődik! Példa: $ valt=`wc -l <myfile.txt` # a valt felveszi # a sorok számát $ test `wc -l <myfile.txt` -gt 3 && cat myfile.txt # ha több mint 3 sorból áll, írja ki
A változók érvényességéhez: a processzek környezete Minden processznek - így a buroknak is - van környezete (environment) A környezet: vált=szöveglánc sorokból álló tábla Gyermek processz a környezetet örökli a szülőtől Mikor az sh processz indul, végigolvassa a környezetét és definiálja a benne található változókat További definiciók is lehetnek az sh életében, átdefiniálások is lehetnek. Ezek nem kerülnek a környezetbe (nem örökölhetők)
Exportálás: többszintes öröklődés Exportálással változót a környezetbe teszünk (ezzel lefelé öröklődővé tesszük) > export valtozónév-lista Pl. a rendszergazda valahol leírta : $ export MAIL HOME PATH... Exportálással csak leszármazottak örökölhetnek (fölfelé nem) Nem exportált változó nem látható a leszármazott processzekben, de visszatérve abba a burokba, amiben definiáltuk újra láthatóvá válik
Egyszintes környezetbe tétel Egyszintes öröklődés $ valt=kifejezés parancs # ugyanabban a sorban ha a parancs külső: látni fogja ha belső: nem látja $ valt=kifejezés; parancs # ugyanabban a sorban ha a parancs külső: nem látja ha belső: látja
Egy másik tárgyalásmód: változók érvényessége A változó definiálása: bekerül az aktuális burok környezetébe (environment). (A környezet: szövegsorok táblája.) Gyermek processz a környezet egy részét örökli. Az örökölt környezetbe definiált változók a gyermekben is láthatók! Egy szintes öröklődés: $ valt=kifejezes parancs
Egy másik tárgyalásmód: exportálás: több szintes öröklődés Az exportálás az öröklődő részhalmazba tesz. $ export valtozonev-lista Pl. a rendszergazda valahol leírta : $ export MAIL HOME PATH... Exportálással csak leszármazottak örökölhetnek (fölfelé nem!) Nem exportált változó nem látható a leszármazott processzekben, de visszatérve abba a burokba, amiben definiáltunk, ismét látható!
CSH, TCSH különlegességek Itt vannak közönséges változók % set valt=kifejezes % @ nvalt=numerikus-kifejezes % unset valt # def. megszüntetés Van közönséges tömbváltozó is! % set valt=(szolista) % @ valt[index]=kifejezes % ${valt[index]} $valt[i-k] # hivatkozások
CSH, TCSH különlegességek Vannak környezeti változók. Ezeket automatikusan exportálja a c-shell. % setenv VALT kifejezes A közönséges változókat itt is exportálhatjuk. Egyes fontos változók itt is, ott is! Nézz utána, érdekes!
A változó érvényessége, láthatósága A pozícionális változók csak az adott shell-ben láthatók. A shell által definiáltak csak az adott shell-ben láthatók. A definiált változók az adott shell-ben láthatók. Az exportált változók lefelé, a gyermekekben is láthatók.
Vezérlési szerkezetek Szekvenciális programszerkezetek Elágazások Hurkok A szekvenciális szerkezetek A parancslisták
Az if elágazás if plista1 then plista2 [elif plista3 then plista4] [else plista5] fi A plista1 és plista3 predikátumok: igazak, ha normális visszatérési értékül van. Figyelj a kulcsszavakra: if, then, elif, else, fi Érdekes a fi lezáró. A [ ] nem része szintaxisnak: jelzi, elmaradhat a bezárt rész.
A case elágazás case szo in minta1 ) lista1 ;; minta2 ) lista2 ;;... esac Pl. ugyanaz -x -y -[xy] Kifejtődik a szo és összevetődik a mintákkal (az írt sorrendben). Ha egyezés van, végrehajtódik a mintához tartozó lista és vége! A minták (hasonlítanak a fájlnév behelyettesítési mintákhoz): * ) akármi, default. p1 p2 [p1p2] alternatíva alternatíva Érdekes kulcsszavak: case, in, esac, figyeld a ) -t, a ;; -t
A for ciklus for valt [in szolista] do plista done Pl.: for i in egy ket harom do echo $i done A valt rendre felveszi a szolista elemeit és minden értékével végrehajtódik a plista (a ciklus teste). Vedd észre a kulcsszavakat: for, in, do done Elmaradó in szolista ugyanaz, mint in $* (az aktuális argumentumlista a szólista)
Egy kérdés Mi a különbség? for valt in $*... for valt... for valt in *...
A while ciklus while plista1 do plista2 done until plista1 do plista2 done Végrehajtódik plista1, és ha normális visszatérésű, a plista 2, majd újra a plista1, s így tovább. Némely shell-ben until ciklus is van. Új kulcsszavak! Most már érthetjük a parancs visszatérési érték értelmét!
Foglaljunk össze Átvettük az átirányítást, a fájlnév behelyettesítést, a burokprogram adatszerkezeteit, a változóbehelyettesítést és vezérlési szerkezeteket: a szekvenciális szerkezetet (listák), elágazásokat (if és case), a for ciklust, a while (until) ciklust.
Jó dolog a test parancs! Két szintaxisa is van: test kifejezes [ kifejezes ] Szemantika: Normális (igaz) visszatérési értéke van, ha a kifejezés (szemantikailag) igaz! A kifejezés lehetőségeknek 2 csoportja van: Fájlokkal kapcsolatos tesztek, adatszerkezetek relációi.
Fájlokkal kapcsolatos tesztek Csak néhány példa, az első szintaxissal test -f file test -d file test -r file test -s file # file létezik és sima fájl # file létezik és jegyzék # file létezik és olvasható # file létezik és 0-nál hosszabb stb.
Adatrelációk Példák itt is, [ ertek1 -gt ertek2 ] [ ertek1 -eq ertek2 ] stb. [ s1 = s2 ] [ s1 > s2 ] stb. [ -z s1 ] [ -n s1 ] [ s1 ] a másik szintaxissal. Igaz, ha # algebrailag nagyobb # algebrailag egyenlő # szövegként egyenlő # szövegként nagyobb # s1 füzér hossza 0 # s1 füzér hossz nem 0 # s1 füzér nem a null füzér
Jó dolog az expr parancs Szintaxisa: expr kifejezes expr kif1 op kif2 Pl: sum=0 sum=`expr $sum + 1` echo $sum Szemantika: Kiértékelődik a kifejezés és az eredmény az stdout-ra íródik. Vannak algebrai operátorok, zárójelezés lehetséges. Nézz utána! Itt parancsbehelyettesítés! Vedd észre fehér karaktereket!
bell burokprogram n=${1-1} # mindenképp 1 while [ $n -gt 0 ] do echo -n \7 # sípol n=`expr $n - 1` # csökkenti n-et sleep 1 # alszik 1 sec-t done ---------------------- Így hívd: $ bell 3 # hármat sípol
Rekurzió lehetséges Pl. a HOME-ban van egy rekurzív shell program: --------------------------------------------------- cd $1 ; ls -l # és ha $1 nem jegyzék? for i in * do if test -f $i # ez nem a legjobb! then : # do-nothing parancs else $HOME/rek $i fi done --------------------------------------------------- Így hívom: $ rek dir
A read parancs read valt1 valt2... Információátadás a sh-nek: argumentumokkal, exportált változóval, fájlokkal, read paranccsal Beolvas egy sort az stdin-ről, és az első szót a valt1-be, másodikat valt2-be s.í.t. teszi. Ha több szó, mint változó: az utolsóba a maradék szavak listája. Nem átirányítható!
Tanácsok 1 Szabályozzuk, hogy bármi is az interaktív burkunk, a bourne shell dolgozza fel burokprogramjainkat! Ha az első sor nem kommentár: az sh dolgozik, #!/bin/sh akkor is az sh dolgozik, #!/bin/ksh akkor a Korn shell dolgozza fel #/bin/csh akkor a c-shell, ezektől eltérő kommentár: az interaktív shell!
Tanácsok 2 Tanulmányozzuk a login/burokindítási startup programokat! Sajátjainkat igazítsuk! Vannak rendszer-széles és saját startupok! Korn shell login rendszerszéles: /etc/profile saját: $HOME/.profile TC shell burokindítási és login rendszerszéles: /etc/cshrc saját: ~/.cshrc ~/.login
A szűrők Szabványos bemenetüket olvassák azt szöveg-folyamnak tekintik, ami sorvég karakterekkel sorokra tagolt. A sorokat így értelmezik. Argumentumban is lehet a szabványos bemenet megadva. A szabványos kimenetükre teszik a "szűrt" (átalakított) eredményüket.