|
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
|