UNIX/héjprogramozás - Terminál
Bevezetés a héj (shell) és a UNIX terminál használatába Tartalom 1. Egy kis történelem ..........................................................................................................................1 2. A terminállal való munkát segítő billentyűk....................................................................................2 3. Egy munkaszesszió lefutása.............................................................................................................3 4. Bevezető fogalmak a burokkal való munkához................................................................................4 A a parancsok formátuma................................................................................................................4 A parancsok végrehajtása................................................................................................................5 5. Hálózaton keresztüli bejelentkezés...................................................................................................5 Jelenleg bármely Unix vagy Linux rendszer grafikus interfésszel is rendelkezik, ha egy személyi számítógépen vagy munkaállomáson használjuk. Ennek megjelenése hasonló a Windows-hoz, és a legtöbb Linuxon egy frissen telepített rendszer ezzel indul el. Az ablakkezelő rendszerben viszonylag könnyű eligazodni - már ami a programok egyszerű elindítását illeti. Egyelőre nem fogunk ezzel foglalkozni, hanem egy kis program, a terminál emulátor használatát tanuljuk meg. Ha grafikus interfész van előttünk, akkor abból indítjuk a Terminal nevű programot. A program egy egyszerű beviteli eszközt utánoz, amelybe csak szövegsorokat lehet begépelni, illetve válaszként szövegsorokat ír ki.
1. Egy kis történelem A 70-es évek UNIX-ához egy külső hardware eszköz csatlakozott, amelyet teletypewriter-nek neveztek (így lett a rendszerben a terminált csatlakoztató speciális állományok neve tty). A kommunikáció egy soros kommunikációs vonalon keresztül zajlott, a bemenet írógépszerű billentyűzet volt, a gép által visszaírt szöveget papírra nyomtatta (ezért zajlott a kommunikáció mindkét irányban szövegsorokon keresztül). Később (1978) képernyős terminálok jelentek meg (CRT - Cathode Ray Tube terminálok). Legismertebbek a DEC cég VT sorozata, pl. a VT100. Ezeken a kurzort mozgatni lehetett, ezt a kiíró szoftver un. escape szekvenciákkal tette. Az első időszakban ezek nem tudtak grafikus képet megjeleníteni. A szöveget pedig 80 oszlop, 24 sor méretben tudták kiírni. Utánuk grafikus terminálok jelentek meg ezek egy programot futtattak (X server) amely a UNIX-ot futtató gép grafikus alkalmazásai jelenítette meg. Ezek voltak az X terminálok. Később a hagyományos terminált egy program jelenítette meg a grafikus képernyőn. Például az X Window grafikus felület esetében ez a program kirajzolt egy terminált, ami úgy nézett ki, mint egy terminál képernyő. A géptől jövő információ (karakterek és kurzorvezérlés továbbra is úgy jött mint a CRT termináloknál, de a szoftver átalakította grafikus képpé). Mivel ez az információ ugyanúgy jött mint pl. egy VT-100 számára, azt mondták, hogy a szoftver a VT-100 terminált emulálta. Ezeket a programokat hívják terminál emulátornak.
1
UNIX/héjprogramozás - Terminál
1. ábra. A Digital Equipment Corporation cég VT-101-es típusú terminálja
A személyi számítógépek megjelenésével a képernyő illetve a billentyűzet bekerült magát a számítógépet tartalmazó hardverbe, de a parancssor beütése ugyanúgy történt. A terminált emuláló programnak ezúttal nem volt szüksége egy konkrét hardware eszközre (pl. a soros port), hanem maga az operációs rendszer nyitott a számára 2 állományt (pontosabban karakter eszközt) amin keresztül a kommunikáció zajlott. Ezért ezt az eszközt pseudo terminálnak nevezik.
2. A terminállal való munkát segítő billentyűk A terminál billentyűjén beütött karakterek eljutnak egy programhoz, az pedig a karakterekre adott választ visszaírja a terminál képernyőjére. A kapcsolat két irányú, ezt full duplex működési módnak nevezzük. Ha a billentyűn leütött karaktert a vezérelt program fogadta, és visszaírja a terminál képernyőjére – ekkor az megjelenik, ezt nevezzük visszhangnak. A beütött szövegen (parancsok egy program számára) kívül a terminált vezérlő parancsokat is üthetünk be, ezeket általában kontroll karakterekkel adjuk meg. Fontosabb kontroll billentyű kombinációk és azok angol elnevezése:
Angol neve
billentyű (kód)
return
^M
parancs bevitele
eof
^D
állomány vége
escape
^[
newline
^J
az új sor karakter
tab
^I vagy TAB
tabulátor
erase
^H vagy BS
a törlésre használt karakter (a modern terminálokon backspace)
^A
a sor elejére mozgatja a kurzort
^E
a sor végére mozgatja a kurzort
^→
egy szó előre
^←
egy szó vissza
vagy ESC általános célú kontroll a terminálvezérlésben
2
UNIX/héjprogramozás - Terminál
Angol neve
billentyű (kód)
werase
^W
egy szót töröl (word erase)
kill
^U
egy teljes parancssort töröl
^K
a kurzortól jobbra mindent töröl
intr
^C
interrupt, a megszakító billentyű, a futó programot szakítja meg
quit
^\
szintén megállítja a futó programot
suspend
^Z
felfüggeszti az éppen futó programot (a felfüggesztett program ü folyamat fogalmát lásd később)
stop
^S
megállítja a terminálra írást
start
^Q
újraindítja az írást
clear
^L
törli a terminált, vagy más alkalmazások esetében újrarajzolja a képernyőt
Shift-PgUp
lapozza a képernyő tartalmát felfelé
Shift-PgDown lapozza a képernyő tartalmát lefelé ^T
Kicseréli a kurzor alatti és az előtte levő karaktereket (ha rossz sorrendben gépeltük őket)
A terminál beállításait az stty paranccsal lehet megnézni illetve módosítani. Pl. a -a opció kilistázza a terminál beállításait, ennek pl. a kontroll billentyűkre vonatkozó része így néz ki: [lszabo@eowyn ~]$ stty -a speed 38400 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =
; eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
A parancssor visszaforgatására a modern Linux-ok a readline függvény egyik opcióját, a “reverse search”-öt használják, ez a ^R -billentyűvel aktiválható. A klasszikus Unix parancs a parancssor történetének kinyerésére a history . Az állomány nevek begépelését a TAB karakterrel kiváltható név kiegészítéssel lehet gyorsan megoldani (tab completion). A terminálra listázott, de a képernyőről már kifutott szöveget a Shift-PgUp és Shift-PgDown kombinációkkal lehet görgetni.
3. Egy munkaszesszió lefutása -belépés vagy login -a felhasználói név (user name) és a jelszó használata -a szesszió alatt a héjjal dolgozunk -parancssorokat gépelhetünk be -kilépés előtt: takarítás -a kilépés: exit parancs 3
UNIX/héjprogramozás - Terminál
-a home könyvtár -a pwd parancs A bejelentkezés egy asztali PC-n található rendszer esetében, amelyen el van indítva a grafikus felhasználói környezet egy grafikus ablak által megvalósított név/jelszó pár beütéséből áll. Amennyiben a felhasználót azonosítja a rendszer, elindítja mindazokat a szolgáltatásokat amelyre a felhasználónak szüksége van, többek közt egy munkaasztalt kezelő felületet. Ez jelenleg a Linuxokon általában a Gnome vagy KDE (K Desktop Environment). Ezek használata elég intuitív, és egyelőre részletesen nem foglalkozunk velük. Amennyiben egy gépen nincs elindítva grafikus környezet, akkor a felhasználói interfész gyakorlatilag egy egyszerű szöveges interfész, egy terminált emuláló megjelenítés. A bejelentkezés ebben az esetben is név jelszó pár, es tulajdonképpen ami ilyenkor történik az a klasszikus UNIX belépés a rendszerbe (ugyanezt fogjuk tapasztalni, ha egy már megnyitott terminálról belépünk hálózaton keresztül egy távoli gépre). A név/jelszó elfogadása után a rendszer elindítja a shell egy példányát, amely parancsokat vár tőlünk. A parancsok beütéséhez szükséges alapvető fogalmakat alább ismertetjük.
4. Bevezető fogalmak a héjjal való munkához A belépés után a rendszer elindítja számunkra a shellt, amelyik a következőket teszi: -beolvas néhány konfigurációs állományt és végrehajtja azokat(ezekről illetve a végrehajtásuk során történő beállításokról majd később beszélünk) -kiír számunkra egy un. készenléti jelet, szöveget ("promt string") (ez általában a gép neve, a felhasználó néve vagy munkakönyvtár), a szöveg végén egy karaktert: ez egy $, # vagy > jel nyílván állítható -ezek után parancsokat vár tőlünk, mindaddig amíg beütjük az exit vagy bye parancsokat illetve az állomány vége (^D) karaktert.
A a parancsok formátuma Egy parancs alapformátuma a UNIX-Linux rendszereknél parancs opciók argumentumok
-opciók, kapcsolók vagy switch-ek, egyszerű és kiterjesztett formában (hosszú kapcsolók) használhatóak (pl. a ls parancs esetében, amely állománylistát ír ki): ls -l ls --color=no
-több opciót megadhatunk egyszerre: ls -1t
-kis/nagybetűk számítanak 4
UNIX/héjprogramozás - Terminál
Néhány példa az ls parancs használatára különböző kapcsolókkal (a # karakter a shell számára a megjegyzés kezdetét jelenti, a $ pedig az alábbi esteben a shell prompter : #hosszú lista ls -l total 8 -rw-r--r-- 1 lszabo lszabo 0 Sep 19 14:26 1.txt -rw-r--r-- 1 lszabo lszabo 8 Sep 19 14:26 2.txt -rw-r--r-- 1 lszabo lszabo 54 Sep 19 14:27 3.txt #időrendben listáz, legelől a legutóbb létrehozott file ls -t 3.txt 2.txt 1.txt #fordított sorrendben listáz ls -rt 1.txt 2.txt 3.txt #fordított sorrendben, időrendben és részletesen ls -ltr -rw-r--r-- 1 lszabo lszabo 0 Sep 19 14:26 1.txt -rw-r--r-- 1 lszabo lszabo 8 Sep 19 14:26 2.txt -rw-r--r-- 1 lszabo lszabo 54 Sep 19 14:27 3.txt #ezt így is be lehet ütni: ls -l -t -r -rw-r--r-- 1 lszabo lszabo 0 Sep 19 14:26 1.txt -rw-r--r-- 1 lszabo lszabo 8 Sep 19 14:26 2.txt -rw-r--r-- 1 lszabo lszabo 54 Sep 19 14:27 3.txt #a file1 és file2 tulajdonságait listázza ls -l 1.txt 2.txt rw-r--r-- 1 lszabo lszabo 0 Sep 19 14:26 1.txt -rw-r--r-- 1 lszabo lszabo 8 Sep 19 14:26 2.txt
Néhány egyszerű parancs amelyet azonnal kipróbálhatunk: w, who (kik dolgoznak jelenleg a rendszeren), whoami (mi a pillanatnyi felhasználó nevem), last (mikor és mennyi időre lépett be utoljára egy bizonyos felhasználó) .
A parancsok végrehajtása Amikor egy operációs rendszer elindít egy parancsot, akkor tulajdonképpen egy programot futtat. A futó programot (a futó kódon kívül mindenféle járulékos információval együtt) folyamatnak (process) hívjuk. Belépés után a számunkra elindított shell is egy folyamat, amely parancsok végrehajtása során más folyamatokat futtat. Leegyszerűsítve, az alábbi történik: a velünk társalgó shell elindít egy parancsot, és utána addig vár, amíg az befejeződik (tehát a futó program kilép). Ez alatt nem írja ki nekünk a promptert, tehát nem üthetünk be új parancsokat. Az elindított parancs viszont, amennyiben kimenetre ír valamit, az megjelenik a terminálon. A parancs befejezése után visszakapjuk a promptert és új parancsot üthetünk be. A folyamat pontos leírását (mik történnek ilyenkor) egy későbbi fejezetben vesszük át.
5. Hálózaton keresztüli bejelentkezés Igen fontos olyan gépen is tanulni, amely hálózatban működik, multiuser módban, tehát egyszerre több felhasználó van rá belépve. Egy Linuxról az ssh (Secure Shell) nevű kliens programot fogjuk használni a hálózaton keresztüli 5
UNIX/héjprogramozás - Terminál
biztonságos belépéshez. A belépést el lehet indítani Windows-ot futtató gépről, itt a Putty nevű terminál emulátor és ssh kliens programot fogjuk használni. Az ssh illetve Putty használatát laboron vesszük át.
6