Hirdetés




Hirdetés

Terminál és Unix alapok II.

Az első részben létrehoztunk egy teszt nevű felhasználót akinek nincsenek adminisztrátori jogosultságai annak érdekében, hogy biztonságosan tudjunk gyakorolni. Beállítottuk azt is, hogy ennek az új felhasználónak a neve és egy kettőspont látható a terminál ablakban, amikor az arra vár, hogy kívánságunkat teljesítse. Érdemes megszokni, hogy gyakorláskor átjelentkezünk a su paranccsal a teszt felhasználó területére, annak ellenére, hogy ebben a részben inkább érdekes, mint veszélyes területekre kirándulunk. Legyen ez kedvcsináló a további ismerkedésre!

A DUMAGÉP

A Macintosh régóta híres beszédességéről és jelenleg is számos widget és más programok is léteznek, amelyek képesek szövegek felolvasására. A terminálban ez egy nagyon kézenfekvő lehetőség, csak be kell írni a say parancsot és a kívánt szöveget:
teszt: say almalap
Ha nincs lekapcsolva a hangerő, máris kedvenc lapunk nevét halljuk, bár kicsit tört magyarsággal. Angol szövegekkel nyílván jobbal boldogul. Ha az f opcióval megadjuk egy szöveges fájl nevét, akkor annak tartalmát fogja felolvasni: "say -f fájl-neve". Ha az o opciót adjuk meg, akkor egy hangfájlba menthetjük el a felolvasott szöveget:
teszt: say -o teszt.aiff Olvasom a lapot
Ezt könnyen ellenőrizhetjük, írjuk be a következő parancsot:
teszt: open .
ennek segítségével kinyitunk egy Finder ablakot (az open parancs után egy szóköz karaktert kell írni a pont előtt) és a grafikus, megszokott környezetben meggyőződhetünk róla, hogy valóban ott van egy teszt.aiff nevű hangfájl, amit rögtön vissza is hallgathatunk!

AZ IDŐUTAZÓ

Milyen nap volt 1999. január 10-én? Szeretnénk gyorsan választ kapni erre a kérdésre, de éppen nincs kéznél egy 1999-es naptár. Persze ott van a grafikus iCal program amit megnyitunk, majd kattintgatunk egy párat és megkapjuk a választ. Egy picit gyorsabb, ha beírjuk a következő parancsot a terminálban:
teszt: cal 1 1999

és máris látható, hogy a keresett nap vasárnap volt. Ha csak a cal parancsot írjuk be, akkor az aktuális hónap napjait mutatja, ha csak egy számot írunk a cal parancs után, akkor azt évként értelmezi, tehát a "cal 3006" parancs eredményeképpen a 3006-os év naptára varázsolódik az ablakba,

ha pedig két számot adunk meg, akkor az elsőt a hónap sorszámának, a másodikat pedig az év sorszámának tekinti. Ha az első szám 1-nél kisebb, vagy 12-nél nagyobb, akkor udvariasan figyelmeztet, hogy 1 és 12 közötti értéket illene megadnunk. Az évek számát pedig 1 és 9999 között várja! Végül még egy érdekesség: ha a j opciót is megadjuk, akkor a napokat január 1-től kezdve sorszámozza, tehát pl. a "cal -j 4 2006" parancsot beírva, könnyen leolvasható, hogy idén április utolsó napja az év 120. napja.

A date parancs kiírja az aktuális dátumot és időpontot. Az első részben láttuk, hogy a nagyobb jel segítségével parancsok kimenetét át lehet irányítani például egy fájlba. Próbáljuk ki:
teszt: date > idopont
majd ellenőrizzük a cat paranccsal az idopont nevű fájl tartalmát. Már láttuk, hogy az átirányítás kérdezés nélkül felülírja egy létező fájl tartalmát! Ha a fenti parancsot többször kiadjuk, akkor az idopont fájl tartalma mindig az az időpont lesz, amikor utoljára kiadtuk a parancsot.

Természetesen van arra lehetőség, hogy megőrizzük a korábbi dátumokat is! Ha a nagyobb jelet megduplázzuk, akkor az aktuális parancs eredménye hozzáíródik a megadott fájlhoz, tehát nem törlődik annak korábbi tartalma. Adjuk ki többször egymás után a
teszt: date >> idopont
parancsot. Szeretnék emlékeztetni arra, hogy a felfelé mutató nyíllal előhívhatjuk a korábbi parancsokat, tehát nem kell ismét begépelni azokat. Ezután a cat paranccsal kiíratva a fájl tartalmát, megtaláljuk abban a parancs kiadási dátumokat. A korábban bevitt parancsokat nem csak az imént említett nyíl billentyűkkel tudjuk előhívni, hanem rendelkezésünkre áll egy parancs is:
teszt: history
Ennek hatására megkapjuk a korábban kiadott parancsok sorszámozott listáját.

A HATÁR A CSILLAGOS ÉG

Van egy számológép, ami mindig kéznél van a Terminal ablakban. Vegyünk egy mély lélegzetet, írjuk be a dc parancsot és küldjük el, majd beírjuk az első számot, elküldjük, jöhet a második szám, ezt is elküldjük, majd beírva egy műveleti jelet, elküldjük és végül beírunk egy p betűt (pops) és ezt is elküldjük és máris láthatjuk az eredményt. Szorozzuk meg 123-t 456-tal:
teszt: dc 123
456
*
p
56088

A dc programból a q betű (quit) elküldésével léphetünk ki. Kicsit szokatlan a használata! Ez tény. De ha most beírunk két 500 jegyű számot és összeszorozzuk őket, akkor jön az igazi meglepetés: a dc megcsinálja! Tessék kipróbálni! Zsebszámológépeink számolási korlátait messze felülmúlja, jó tudni, hogy van egy ilyen lehetőség a tarsolyunkban. Egy másik, kevéssé ismert ügyes program a units. Ha például km/h-t szeretnénk m/s-ra, inchet méterre, köbmétert gallonra, vagy centimétert feetre (láb) váltani, csak gépeljük be ezt a parancsot:
teszt: units
You have: 100 km/hour
You want: m/s
* 27.777778
/ 0.036
You have: 300 inch
You want: m
* 7.62
/ 0.1312336
You have: m^3
You want: gallons
* 264.17205
/ 0.0037854118
You have: 150 cm
You want: feet
* 4.9212598
/ 0.2032

Ötszáz különböző mértékegység között válogathatunk! Ebből a programból a CTRL + c billentyűk együttes lenyomásával lehet kilépni. Érdemes megjegyezni ezt a billentyű kombinációt, általában is használhatjuk parancsok futásának megszakítására. Pl. az iménti dc parancsból kiléphetünk ennek segítségével is.

AKI KÍVÁNCSI ...

az jó ha ismeri a man ( class="unix">manual) parancsot. Ennek segítségével sok mindent megtudhatunk a parancsokról, gyakran egyszerű példákat is találunk használatukra. Próbáljuk ki például:
teszt: man units
de érdemes az eddig megismert parancsokról (például "man dc", "man cal", vagy "man man" :) és a későbbiekről is további információkat gyűjteni az operációs rendszerbe beépített manuálok alapján. Gyakran kiderül, hogy egy egyszerűnek látszó parancs rendkívül sokszínű tud lenni, különböző opciók megadásával kiválóan testre szabhatjuk.

A VILÁGJÁRÓ

Már láttuk, hogy a su parancs segítségével egy terminál ablakon belül egyszerűen átjelentkezhetünk egy másik felhasználó területére.

Lehetőség van azonban arra is, hogy a hálózaton levő másik számítógépre jelentkezzünk be a terminál ablakon keresztül, és ott szinte ugyanúgy dolgozzunk, mintha közvetlenül a másik gép előtt ülnénk. Amennyiben ez a hálózat például az Internet, akkor így akár a világ másik felén levő számítógépet is használhatjuk. Erre a telnet parancs szolgált sokáig, de ma már csak nagyon kevés számítógépen engedélyezik a használatát, mert ennek során a megadott jelszó kódolatlanul utazik a másik gépre, és menet közben könnyen elkapható, mások által is olvasható. A mai biztonsági előírásoknak ez már egyáltalán nem felel meg. Helyette az ssh parancs használata sokkal elterjedtebb, ennek során a jelszó a bejelentkezéskor titkosítva lesz elküldve a távoli gépre. Alakja:
teszt: ssh -l felhasználó-név távoli-gépneve
A távoli gépen biztosítani és engedélyezni kell az adott felhasználó számára, hogy ezen a módon be tudjon jelentkezni. Ha a bejelentkezés sikeres volt, ugyanazokat a parancsokat adhatjuk ki, mintha egy terminál ablakot nyitottunk volna az előttünk levő gépen.

Az ftp egy másik gyakran használt program, aminek a segítségével távoli gépre bejelentkezünk és onnan fájlokat letöltünk, esetleg bizonyos fájlműveleteket is végrehajtunk.

Régebben nagyon gyakori volt az ftp parancssori használata, ma már a grafikus programok háttérbe szorítják, de jó ha ismerjük a használatát, ami nagyon egyszerű. Nézzük például, hogyan tudunk bejelentkezni az Apple ftp szerverére:
teszt: ftp ftp.apple.com
Ha a kapcsolat létrejött, akkor a távoli gép kéri a bejelentkezési nevünket. Ez vagy ismert a számunkra, vagy ha nem akkor meg lehet próbálni anonymous-ként bejelentkezni. Egyszerűen írjuk be az anonymous szót és küldjük el. Ha ez engedélyezve van a távoli gépen (a nyilvános ftp szerverek ilyenek), akkor általában még megkérdezi az email címünket. Illik megadni, de ha nem tesszük, attól még többnyire be fog engedni. Több-kevesebb üdvözlő szöveg után kapunk egy új promptot:
ftp>
ez jelöli, hogy a távoli ftp szerver várja az utasításainkat. A legfontosabbak a következők. Az ls paranccsal kérhetünk egy listát a távoli gépen levő állományokról:
ftp> ls
drwxrwxrwx 3 ftpprod ftpprod 102 May 7 2003 Apple_Support_Area
drwxrwxr-x 11 ftpprod ftpprod 374 Mar 9 2004 filemaker
........

A d betűvel kezdődő sorok könyvtárakat jelölnek a távoli gépen, a könyvtár neve pedig a sor végén látható. A könyvtárakba a cd paranccsal lehet belépni. Például lépjünk be és nézzük meg mi van a filemaker nevű könyvtárban:
ftp> cd filemaker ftp> ls
drwxrwxr-x 7 ftpprod ftpprod 238 Nov 5 2002 Updaters
drwxrwxr-x 4 ftpprod ftpprod 136 Aug 19 2004 applications
-rwxrwxr-x 1 ftpprod ftpprod 44 Feb 21 2003 distribution.txt
....

Itt is vannak alkönyvtárak, de találtunk egy szöveges fájlt is. Töltsük le ezt a saját gépünkre, erre a get parancs szolgál:
ftp> get distribution.txt
Az ftp programból az exit, a close, a bye, vagy a quit parancsokkal léphetünk ki. Ezután például a már jól ismert cat paranccsal megnézhetjük a distribution.txt fájl tartalmát.

A get parancs hatásával ellenkező irányú állománymozgást érhetünk el a put parancs segítségével.

Ezzel tudunk fájlokat feltölteni a távoli ftp szerverre, ha ez ott engedélyezve van. Az ftp program testvére az sftp program, ami ssh alapon működik, ezért ez egy secure ftp program. Persze ennek nem nyilvános szerverek esetében, hanem akkor van értelme, ha biztonságos adatcserét szeretnénk végrehajtani távoli gépek között. Ekkor a felhasználónév és a hozzátartozó jelszó ismeretére is szükség van. Mindkét ftp program lehetőséget biztosít arra, hogy bejelentkezés után parancsokat adjunk ki a távoli gépen, fájlokat töröljünk, könyvtárakat hozzunk létre ...

Mutatok még egy érdekes lehetőséget:
teszt: curl -O http://www.almalap.hu/img/alma.gif
és máris leszedtük az Almalap nyilvános szerveréről a kis alma logót (feltéve, hogy nem gépeltünk el semmit és a szerver is elérhető :).

Aki nem hiszi járjon utána, például az "open ." parancs segítségével megnézheti, hogy a logó ott van az aktuális könyvtárban. Akit mélyebben érdekel a fenti programok használata, érdemes a man paranccsal tanulmányoznia őket.

MI VAN A HÁTTÉRBEN?

Operációs rendszerünk jó pár beépített programmal rendelkezik. Amikor elindítunk egy ilyen programot, azt úgy mondjuk, hogy kiadunk egy parancsot. Láttuk, hogy a parancs kiadása vagy egyszerűen a program nevének megadásával történik, vagy különböző opciókkal kiegészíthetjük és ezáltal számunkra hasznosabb feltételekkel is indíthatjuk. Amikor egy parancs segítségével elindítunk egy programot, akkor elindul egy új processz. A ps parancs (process status) segítségével kilistázhatjuk őket:
teszt: ps
Ennek hatására kapunk egy listát a saját processzeinkről. Ebben a listában két oszlopra szeretném felhívni a figyelmet:
  • az első oszlopban áll egy szám (PID), ez a processz egyedi azonosítója,
  • az ötödik oszlopban áll a parancs neve, amivel az adott processz elindult.
Legalább egy processz mindig fut, mert amikor elindítjuk a terminált, akkor elindul egy shell. Érdemes kipróbálni a következőt: az egyik ablakban elindítjuk a units parancsot, majd egy másik ablakban a ps parancsot.

Ugyanaz a program több példányban is futhat. Nyissunk ki több terminált és adjuk ki a dc parancsot legalább két ablakban és egy másikban a ps parancsot.

Látni fogjuk, hogy a shell és az említett programok is több példányban futnak, mindegyik más és más PID számmal rendelkezik.

Ha opcióval együtt indítjuk, például:
teszt: ps -ax
akkor egy sokkal részletesebb listát kapunk a gépen futó összes processzről (amikor elindítjuk a gépünket egy sor program gondoskodik a háttérben, hogy kiszolgálja kívánságainkat és más felhasználók is indíthatnak processzeket). Alapesetben a ps parancs növekvő PID szerint írja ki a listát, de ezt lehet befolyásolni. A "ps -axm" parancs a memória használat, a "ps -axr" pedig az aktuális processzor használat alapján rendezi a listát. Érdemes megfigyelni, hogy az a, x m, r és még további opciókat is tetszés szerint variálhatjuk, és ennek függvényében más és más típusú listát kapunk. A PID használatára még hamarosan visszatérünk!

Van még egy érdekes parancs a processzek listázására, ez dinamikusan, periodikusan frissülve szolgáltat információkat: PID, CPU használat, memória használat ..., illetve többek között az összes futó processz számáról, állapotáról, a memória, a CPU kihasználtságáról is tájékoztat. Ez az Activity Monitor nevű grafikus program (Applications/Utilities mappában található) terminálbeli megfelelője, a neve top:
teszt: top
A parancsból a q billentyű megnyomásával, vagy a CTRL + c billentyűkombinációval tudunk kilépni.

Érdemes kipróbálni mondjuk a "top -u" változatot, a processzeket így a pillanatnyi memóriahasználatuk sorrendjében láthatjuk.

A GYILKOS

Hogy maradjon egy kis izgalom is a mai nap végére, megismerkedünk egy profi gyilkossal!

A parancs neve stílszerűen: kill. Annak ellenére, hogy nem gyilkolásra lett kitalálva, hanem arra, hogy különböző szignálokat küldjön a futó processzeknek, mégis leggyakrabban arra használják, hogy beragadt processzeket kilőjenek vele. A parancs alap formája:
teszt: kill PID
ahol a PID a processz sorszáma, amit például a ps parancs első oszlopában találunk meg.

Figyelem! Ha elnézzük a sorszámot, tehát rosszul írjuk be a PID számot, akkor két eset lehetséges, vagy nincs az adott sorszámmal rendelkező processz, vagy van. Az első esetben csak egy hibajelzést kapunk arról, hogy ilyen sorszámmal nem létezik processz, a második esetben viszont kellemetlen meglepetés is érhet. Példaképpen megemlítem, hogy saját magunk alatt is vághatjuk a fát, kilőhetjük a terminálban futó saját shell processzünket.

Tessék kipróbálni!

Vannak azonban olyan processzek amelyek nem reagálnak a sima kill parancsra, vagy éppen annyira beragadtak, hogy azért nem veszik az adást. Ilyenkor lehet fokozni az élvezetet:
teszt: kill -9 PID
A -9 opciónak már nem tud ellenállni egyetlen processz sem.

Vannak olyan parancsok, amik rögtön végrehajtódnak, elvégzik a dolgukat és maguktól leállnak, visszakapjuk a promptot és újabb parancs beírására vár a shell. Ilyen például a say, a cal, a date vagy a kill parancs.

De több olyan paranccsal is találkoztunk, amelyek indítás után folyamatosan futnak, és a saját parancsaikra várnak, Ilyen például a dc, a units, a top. Azt is láttuk, hogy az utóbbiakból általában a CTRL + c billentyűkombinációval lehet kilépni, azaz megszakítani a futásukat, de többnyire vannak saját beépített megszakító parancsaik is (q, quit, exit, ...). Azonban már velem is előfordult többször is, hogy nem sikerült így kilőni egy processzt. Vagy lefagyott és nem reagált, vagy eleve úgy lett megírva a program, hogy ne lehessen szabványosan kilépni belőle. Ilyenkor meg lehet próbálni a CTRL + z billentyűkombinációt, ami felfüggeszti a processzek futását. Ezután a ps paranccsal megkeressük a felfüggesztett (vagy beragadt) processz PID értékét és először a kill parancs első változatával megpróbáljuk kilőni. A második változatot (-9) csak akkor használjuk, ha az első csütörtököt mondott.

Előfordulhat olyan eset is, hogy a grafikus Force Quit Applications sem tud segíteni, de a terminál kill parancsával akkor is érdemes próbálkozni!

Major Zoltán
zoli(kukac)mac.com


A lap tetejére


Alkalmazás cikkeink 2006-ban