Hirdetés




Hirdetés

Terminál és Unix alapok - Bevezetés

Évekkel ezelőtt többször hallottam azt a kritikai megjegyzést a Mac operációs rendszerére, hogy "azért nem jó, mert nincs karakteres üzemmód benne!" Persze a Classicban is volt AppleScript, de a Mac OS X megjelenése óta a fenti kritika teljesen elvesztette alapját. Itt már csak arról lehet meditálni, hogy egy nagyon jól használható grafikus felülettel rendelkező (GUI: Graphical User Interface) operációs rendszer használatához van-e még szükség egy parancs soros kezelői felületre (CLI: Command Line Interface)? A Mac felhasználók többsége úgy gondolja, hogy számára tökéletesen elegendő a grafikus felület, azzal szépen, biztonsággal mindent meg tud csinálni, amire szüksége van. Ez többnyire igaz is, de sokan vannak olyanok akik szeretnének mélyebben elmerülni az operációs rendszer rejtelmeiben, vagy éppen egy eszközt szeretnének amivel meg lehet oldani problémákat amikor a grafikus felület esetleges korlátaival találjuk magunkat szembe. Sok izgalmas, érdekes dologgal találkozik aki erre a kalandra vállalkozik!

CLI, AZ ÁLOM

A CLI-t, azaz a parancs üzemmódot a legegyszerűbben a Terminal programból érhetjük el. Ez a segédprogram az Applications > Utilities könyvtárban található, és sokan mondják, hogy "nagyon veszélyes" program, ezért félnek is tőle. Én úgy gondolom, hogy érdemesebb inkább megismerni és megtanulni az alapvető használati szabályokat. Ha nem vagyunk eléggé körültekintőek, akkor a grafikus felületen is tudunk kellemetlenséget, vagy komoly problémát okozni: például törlünk egy könyvtárt és rábökünk a kuka ürítésre is és csak azután jövünk rá, hogy a törölt könyvtárban számunkra fontos állományok is voltak, vagy szélsőséges esetben a telepítő lemezről újraindítás után kipróbáljuk, hogy mi történik, ha rábökünk az Erase gombra miután kiválasztottuk kedvenc diszkünket és meglepődve tapasztaljuk, hogy minden adatunkat töröltük a gépről, és az operációs rendszert is telepíthetjük újra! Az igaz, hogy a fentihez hasonló szituációkat sokkal könnyebben teremthetünk magunknak parancsok segítségével: fontos állományokat nagyon könnyen ki tudunk törölni és alapbeállításban a rendszer még csak rá sem kérdez, hogy valóban törölni akarjuk-e azokat, vagy bizonyos körülmények fennállása esetén akár egyetlen jól beállított paranccsal le lehet radírozni a lemez teljes tartalmát!

ALAP DOLGOK

Leegyszerűsítve két típusú parancs létezik. Az egyikkel csak információt kérünk a rendszerről, például kilistázzuk egy könyvtár, vagy állomány tartalmát, megnézzük az éppen futó programokat, keresünk a lemezen, vagy fájlok tartalmában, ellenőrizzük a diszk telítettségét... Ezekkel bátran próbálkozhatunk.

Azok a parancsok, amelyek eredménye már valamilyen változást eredményez, állományokat hoznak létre, törölnek, mozgatnak, megváltoztatják azok jellemzőit, hatással vannak a rendszer működésére, ... már sokkal több figyelmet és körültekintést igényelnek. Tisztában kell lenni a saját rendszerünk felépítésével is, mert ugyanannak a parancsnak lehet más, esetleg meglepő eredménye különböző beállítások esetében! (Nem mindegy például az sem, hogy a telepítés során a Mac OS Extended, vagy az UFS, a Unix File System lett kiválasztva.)

A legjobb, ha olyan gépen tudunk próbálkozni, amelyiken nincs fontos adat. Ha csak a saját gépünkön van erre lehetőség, akkor érdemes létrehozni egy új felhasználót kifejezetten gyakorlási célra, aki NEM rendelkezik admin jogosultsággal (nincs kipipálva az "Allow user to administer this computer" opció a System Preferences Accounts > Password oldalán). Adminisztrátori, vagy root jogosultsággal csak akkor ajánlott dolgozni, ha kellő tapasztalatot szereztünk és biztosan tudjuk, hogy mit csinálunk. Nézzük mit találunk, ha kinyitjuk a Terminál ablakot!

TERMINÁL NYITÁS

Nos, ennek belseje nem annyira látványos, mint a többség által ismert grafikus felület (AQUA), de innen elérhető az operációs rendszer valódi arca a Darwin. A Darwin a FreeBSD családjához tartozik, egy valódi Unix-szerű rendszer és igen tekintélyes ősökkel rendelkezik. A Unix első változatát Ken Thompson még 1969-ben írta meg, a cél egy többfelhasználós, többfeladatos operációs rendszer készítése volt. A kaliforniai Berkeley Egyetemen a 70-es évek vége óta fejlesztik ennek egyik változatát. Innen származik az elnevezés: BSD = Berkeley Software Distribution. Aki bármilyen Unix-szerű rendszert ismer, de különösen ha jártas a BSD-s rendszerekben, az otthonosan érezheti magát a Darwin környezetben is hiszen nagyon sok ismerős dologgal fog találkozni, csak a nyelvjárásbeli különbségeket kell megismernie. Aki viszont nem, nos itt az ideje, hogy elkezdje az ismerkedést!

A TERMINÁL TESTRE SZABÁSA

A Terminál programot a grafikus felületről érjük el, ezért nem meglepő, hogy rendelkezik az ott megszokott beállítási lehetőségekkel. Egyszerre akár több Terminál ablakot is nyithatunk (File  > New Shell, vagy az és az N billentyűk együttes lenyomásával), ami első pillanatban feleslegesnek is tűnhet, gyakorlott használók azonban tudják, hogy sok esetben jelentősen megkönnyíti a munkát. A Terminal > Window Settings ... menüt kiválasztva, a Terminal Inspectorban rugalmasan beállíthatjuk a számunkra szimpatikus színt, betűtípust, méretet, háttérképet, akár transzparenssé is tehetjük az ablakot - lásd a lenti képernyő képet!

A beállítások elmenthetők, és akár előírható az is, hogy automatikusan minden új terminál ablak az elmentett beállításokkal nyíljon meg. Természetesen az igazi értéket a további professzionális beállítások sokasága jelenti, melyek lehetővé teszik, hogy a terminál programot széles körben használhassuk a legkülönbözőbb feladatokra: szövegszerkesztés, rendszerkarbantartás, folyamatirányítás ...

SHELL ÉS SHELL

A Terminal Inspector Shell gombját kiválasztva egy nagyon fontos információ birtokába jutunk. Ebben az ablakban látható, hogy milyen shell program fut a terminálban. Az aktuális shell program határozza meg azt, hogy milyen "nyelven" társaloghatunk az operációs rendszerrel. Több fajta shell program létezik, ezek sok tekintetben hasonlítanak egymásra, de mindegyiknek vannak sajátosságai.

Az alapot a Bourne shell (sh) jelenti, ezt, vagy ezzel egyenértékű shell programot minden Unix-szerű rendszer tartalmaz. Megalkotója Stephen Bourne volt még 1977-ben. A Tigrisben a legtöbb az alapból választható shell programok száma (bash, tcsh, csh, zsh, ksh), de akár továbbiak is telepíthetők szükség esetén. Fontos azonban tudni, hogy a Jaguárig a Tenex C shell (tcsh) volt a default shell, a Párductól viszont a Bourne-Again shell (bash) lett az alapértelmezett program. De hogy ne legyen ilyen egyszerű az élet, ha valaki a Jaguár szerverről upgrade-elt Párducra, akkor vitte magával a korábbi shellt, csak a Párduc új felhasználói kapták meg a bash alapbeállítást. Ezt azért fontos tudni, mert a lehetőségek, a konfiguráció, a beállítások tekintetében nagyon sok eltérés van a különböző shell programok között.

A Bourne-again shell (tréfásan born-again) Brian Fox nevéhez főződik és 10 évvel fiatalabb, mint a Bourne shell. Fontos jellemzője, hogy "free software" és a legtöbb Linux rendszerben is ez az alapértelmezett shell program. (Megjegyzés: Ha valaki szeretné megváltoztatni a Terminal shell programját, ajánlom figyelmébe a http://searchdocs.info.apple.com/article.html?artnum=86135&coll=cp oldalt.)

A továbbiakban a Tigris alapértelmezett shell programjára fogunk koncentrálni. Ha valaki megfogadta a tanácsomat és létrehozott egy új felhasználót a Tigris alatt, és nyit egy Terminal ablakot, akkor a Terminal Inspector ablakban a
Shell: bash
információt találja (feltéve, hogy a gép rendszer konfigurációja nem lett korábban módosítva!)

UNIX PARANCSOK

A fenti információt másképpen is megkaphatjuk. Ha már nyitva van egy terminal ablak, akkor adjuk ki a következő parancsot:
echo $SHELL
Ha az alapértelmezett shell programunk a bash, akkor az Enter billentyű megnyomása után azt látjuk a kurzor után, hogy:
/bin/bash
Ez is azt mutatja, hogy a bash nevű shell program rendelkezésünkre áll.

A Unix-szal parancsok segítségével tudunk beszélgetni. A parancsok megadása után meg kell nyomni az Enter (vagy Return) billentyűt. Ekkor az aktuális shell program megpróbálja értelmezni a bevitt parancsot és vagy szól, hogy valamit nem ért, vagy végrehajtja azt, pontosan úgy ahogy azt ő érti. (Már most az elején érdemes tisztázni, hogy ez nem mindig egyezik meg azzal, amit mi gondoltunk, és jó tudni, hogy az esetek döntő többségében neki van igaza! :) A parancsokat pontosan kell begépelni: ne maradjon ki a space (üres karakter), általában fontos a kis- és nagybetűk megkülönböztetése. A fenti parancsban az "echo" a parancs neve, ami utána van az egy un. shell változó (ezt jelöli a név előtt álló dollár jel, és ennek értékét írattuk ki az echo paranccsal), ami tartalmazza az éppen futó shell program nevét.

A kurzor előtt is sok minden látható, erről majd később lesz szó, most megmutatom, hogyan lehet leegyszerűsíteni ezt a részt. Azt szeretném, ha például minden új sor a
teszt:
karakterekkel kezdődne a Terminál ablakban. Ismételten javaslom, hogy aki még nem tette meg, hozzon létre egy új felhasználót a System Preferences > Accounts ablakában, a neve legyen: teszt és fontos, hogy kezdetben NE legyen adminisztrátori jogosultsága!

Ahhoz, hogy bejelentkezzünk egy másik felhasználó területére, nem szükséges kilépni és ismét bejelentkezni a grafikus felület Log Out parancsával, de nincs szükség "Fast user switching" bekapcsolására sem. A Terminál erre egy sokkal egyszerűbb utat kínál! Gépeljük be a következő parancsot a Terminál ablakba:
su - teszt
majd meg kell adni a teszt felhasználó jelszavát és máris indul egy új shell program, de már az új felhasználó tárterületén vagyunk. Érdekes megemlíteni, hogy ha több Terminál ablakot is nyitunk, így akár két-három, vagy több különböző felhasználó területére is bejelentkezhetünk egyszerre. Sőt, később azt is látni fogjuk, hogy ezek a felhasználók nem csak a saját gépünkön, hanem bárhol lehetnek az Interneten, vagy más hálózaton.

Fontos: ha rossz felhasználó nevet adunk meg, vagy elgépeljük a jelszót, akkor kapunk egy "Sorry" üzenetet és maradunk a saját területünkön (tessék kipróbálni!).

Ha sikeresen bejelentkeztünk, akkor nincsen hiba üzenet, de megváltozott a kurzor előtti rész tartalma, jelezve, hogy felhasználót váltottunk. Ezt a részt fogjuk most leegyszerűsíteni. Gépeljük be először a következő parancsot:
echo "export PS1=\"\u: \" "
Első pillanatra kissé bonyolultnak tűnhet, de az echo parancsot már ismerjük, ez kiírja a képernyőre a következő sorba az utána álló, idézőjelek közé tett karaktereket. (Megjegyzés: Amit az idézőjelek között látunk, az nem más, mint egy változó értékadása, amit természetesen még lehet tovább is variálni, és így később kedvünkre alakítgathatjuk majd a kurzor előtti területet, de kezdetnek elég ha a fenti példát kipróbáljuk.)

Nyomjuk meg a billentyűzeten a felfelé mutató nyilat és ismét megkapjuk a fent begépelt parancsot. Ez egy nagyon kellemes tulajdonsága a shell programunknak: emlékezik a korábban megadott parancsokra és azok egyszerűen előhívhatók több lépésre visszamenőleg! Egészítsük ki a fenti parancsot az alábbi módon:
echo "export PS1=\"\u: \" " > .profile
A nagyobb jel egyszerűen átirányítja a kiíratást és egy fájlba ír a képernyő helyett. A fájl neve a .profile lesz. (Ne feledkezzünk meg az Enter billentyűről a parancs végén.)

Ellenőrizzük, sikerült-e pontosan begépelni a fenti példát! Lépjünk ki az imént indított shell programból úgy, hogy beírjuk az
exit
parancsot. Ekkor kapunk egy logout üzenetet, hiszen kilépünk egy unix felhasználó területéről, majd jelentkezzünk be hozzá ismét a már ismert "su - teszt" paranccsal. A jelszó megadása után a következő sorban most már ezt fogjuk látni:
teszt:
és ezután villog a kurzor. A parancsok végrehajtása után mindig ezt kapjuk vissza, innen lehet tudni, hogy a shell program várja a következő utasításunkat. Kipróbálhatjuk azt is, hogy nyitunk egy új terminál ablakot (File menü New Shell kiválasztásával), és abban is bejelentkezünk a teszt nevű felhasználó területére. A kurzor előtti rész itt is ugyanaz lesz. Ezen a területen nyugodtan tesztelhetünk, gyakorolhatunk.

ECHO, CAT

Láttuk, hogy az echo parancs eredményét át lehet irányítani egy fájlba. Ez valóban nagyon egyszerű, de ugyanakkor oda kell rá figyelni! Lazán felülír egy létező állományt, ha annak a nevét adjuk meg a nagyobb jel mögött! Nem kérdez semmit, nem figyelmeztet, hogy ilyen fájl már létezik. Feltételezi, hogy átgondoltuk és pontosan tudjuk, hogy mit és miért csinálunk. Megér egy próbát a dolog! Adjuk ki a
teszt: echo "valami eredeti" > aminta
parancsot. Ez létrehozza az aminta nevű fájlt és az idézőjelek közé tett szöveget beleírja. Ezután próbáljuk ki, hogy:
teszt: cat aminta
ahol a cat parancs a minta fájlba imént írt szöveget kiírja a képernyőre, azaz megmutatja, hogy mi van a fájlban. Ha most kiadjuk a
teszt: echo "ez fog megmaradni" > aminta
parancsot, akkor az könyörtelenül kicseréli az aminta fájl tartalmát az új szövegre, a fájl régi tartalma elveszett, nem visszaállítható! Nézzük meg most is az aminta fájl tartalmát a cat paranccsal!

Nos ebből már kezd érthetővé válni, miért is érdemes egy teszt felhasználó területén megfizetni a tanulópénzt.

Végül gyakoroljuk az echo parancsot és hozzunk létre még néhány a-betűvel kezdődő minta fájlt!

Megjegyzés: többsoros szöveget is írhatunk a fájlba, ha a záró idézőjel előtt új sor (Enter) billentyűt nyomunk akár többször is, mert az echo parancsot csak a második idézőjel utáni Enter megnyomását követően kezdi értelmezni a shell. Közben ideiglenesen megváltozik a prompt, ezzel is jelezve, hogy egy parancs megadása közben vagyunk. Emlékezzünk a felfelé mutató nyíl használatára, ezzel könnyen visszahozhatunk korábbi parancsokat. A felfelé és a lefelé mutató billentyűkkel lépkedhetünk visszafelé és előrefelé a korábban kiadott parancsok között. A vízszintes nyíl billentyűkkel pedig az aktuális parancsok belsejében mozoghatunk, ahol karaktereket törölhetünk (Delete) és beszúrhatunk, így egyszerűen módosítva a korábbi parancsokat, könnyedén és gyorsan létrehozhatunk újakat.

Végezetül gondolkodjunk el azon, hogyan lehet megoldani a grafikus környezetben a következő feladatot: gyűjtsük össze az aktuális könyvtárban az összes a-betűvel kezdődő fájlból minden sor második szavát, töröljük ezekből az összes nem betű karaktert, a kisbetűket változtassuk a megfelelő nagybetűre és végül a szavakat ABC sorrendben írassuk ki a képernyőre, de ismétlődés nélkül, és sorszámozzuk is meg őket! (A pontosság kedvéért: a betű karakter az angol ABC betűit jelenti.)

Most mutatok egy lehetséges parancssori megoldást:
teszt: cat a* | awk '{print $2}' | sed s/[^a-zA-Z]//g | tr '[a-z]' '[A-Z]' | sort | uniq | cat -n
mindezt egy sorba gépeld be! Ennyi. Érdemes kipróbálni! Ez egy példa a unix szövegszerkesztési és folyamatvezérlési képességeinek bemutatására. Aki elég változatos és sok példát készített az echo parancs gyakorlása során, annak biztosan tetszik az eredmény. A folytatásban megismerkedünk a legfontosabb unix parancsokkal és a shell programozás alapjaival Mac OS X környezetben.

Major Zoltán
zoli(kukac)mac.com


A lap tetejére


Alkalmazás cikkeink 2006-ban