„EDU::GAMF::Operációs rendszerek::Gyakorlatok” változatai közötti eltérés
(→tr) |
(→if) |
||
| 435. sor: | 435. sor: | ||
==== if ==== | ==== if ==== | ||
Az '''if''' segítségével elágazásokat hozhatunk létre, mint minden más programozási nyelven. A szerkezet a következőképp néz ki: | |||
<syntaxhighlight lang="bash"> | |||
if KIFEJEZÉS | |||
then | |||
elif KIFEJEZÉS | |||
elif KIFEJEZÉS | |||
else | |||
fi | |||
</syntaxhighlight> | |||
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű '''if''' elágazást is: | |||
<syntaxhighlight lang="bash"> | |||
if KIFEJEZÉS | |||
then | |||
fi | |||
</syntaxhighlight> | |||
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg: | |||
<syntaxhighlight lang="bash"> | |||
if KIFEJEZÉS then UTASÍTÁS1; UTASÍTÁS 2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi | |||
</syntaxhighlight> | |||
==== for ==== | ==== for ==== | ||
==== while ==== | ==== while ==== | ||
A lap 2023. szeptember 23., 08:19-kori változata
1. óra
Az első óra a tantárgy és annak követelményeinek ismertetésével kezdődik, majd egy-két alap utasítást tekintünk meg. Ezután a programok csatornáival folytatjuk.
Parancsok és példák
man
A man parancs segítségével megtekinthetjük egy-egy alkalmazás, parancs, esetleg külső könyvtár függvényeinek dokumentációját.
Használata: A program neve után írhatjuk, hogy melyik alkalmazás, parancs vagy esetleg külső könyvtár függvényének dokumentációját szeretnénk megtekinteni. Megtekinthetjük ily módon a man parancs használati útmutatóját is a következő utasítás kiadásával:
man man
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a head utasítás dokumentációját az alábbi módon érhetjük el
man head
ls
Érdemes megtekinteni a parancs dokumentációját a man ls utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.
Az ls parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a ., tehát a jelenlegi könyvtárat listázza.
# meghívás paraméter nélkül
ls
# meghívás . paraméterrel - ugyanaz az eredmény
ls .
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:
# root könyvtár listázása
ls /
# a /usr/local/bin könyvtár listázása
ls /usr/local/bin
Érdemes megjegyezni a hosszú formátumú kiírást, aminek segítségével a fájlrendszer bejegyzések jogosultságait és méretét kérhetjük le.
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait
ls -l
# A /bin/ls fájl jogosultságainak lekérdezése
ls -l /bin/ls
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az ls megnyitja a könyvtárat és annak tartalmát listázza ki.
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga
ls /bin
Ez különösen akkor okoz problémát, ha például az adott könyvtár jogosultságait szeretnénk megtekinteni. Ekkor két választási lehetőségünk adódik:
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést
ls / -l
# használjuk a -d kapcsolót, aminek segítségével felszólítjuk az ls-t, hogy ne nyissa meg az adott könyvtárat
# Ekkor a könyvtár listázódik, nem a tartalma
ls -d /bin
pwd
A pwd parancs segítségével lekérdezhetjük annak a könyvtárnak az abszolút elérési útvonalát, amelyben éppen benne vagyunk.
A parancsot főleg arra használjuk, hogy aktuálisan mellettünk elhelyezett fájlok és könyvtárak abszolút útvonalát ki tudjuk alakítani.
pwd
cd
A cd parancs segítségével könyvtárat válthatunk (changedir). A cél könyvtár nevét paraméterben kell megadnunk.
# root könyvtár megnyitása
cd /
# HOME könyvtár megnyitása
# ~ egy alias
cd ~
# /usr/bin megnyitása
cd /usr/bin
A hivatkozásoknál, így a cd esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:
- Az abszolút hivatkozás / elérési út mindig / jellel kezdődik. pl.: cd /home/, cd /usr/bin
- A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: cd home, cd bin, vagy . illetve .. karakterekkel kezdődnek.
- A . könyvtár jelenti az aktuális könyvtárat
- A .. könyvtár jelenti a szülő könyvtárat
# szülő könyvtár megnyitása
cd ../
# a szülőkönyvtárban található bin könyvtár megnyitása
cd ../bin
# az aktuális könyvtárban található bin könyvtár megnyitása
cd ./bin
cd bin # vegyük észre: a ./ ez esetben elhagyható
mkdir
Az mkdir parancs segítségével könyvtárakat hozhatunk létre (make directory). Alapértelmezetten a . könyvtáron (tehát ahol éppen tartózkodunk, azon a könyvtáron) belül hozza létre az új mappát, de lehetőségünk van mind relatív, mind abszolút hivatkozások használatára.
# folder könyvtár létrehozása az aktuális könyvtárban
mkdir folder
mkdir ./folder2
# subfolder létrehozása a folder könyvtáron belül.
mkdir folder/subfolder
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk
mkdir /tmp/folder
# folder létrehozása a szülőkönyvtárban
mkdir ../folder
A fentebb leírtak alapján egyetlen könyvtárat hozhatunk létre, egy már létező könyvtáron belül, legyen az éppen az, amiben tartózkodunk, vagy valahol máshol a fájlrendszerben. Azonban előfordul, hogy egyszerre több mappát szeretnénk elkészíteni, például egy mélyebb struktúrát szeretnénk kialakítani, mint ami a rendelkezésünkre áll. Ezt természetesen megtehetjük úgy, hogy az egyes szinteket egyesével hozzuk létre, de alkalmazhatunk kapcsolót, amelynek segítségével a nem létező szülőkönyvtárakat is létrehozza, amennyiben nem léteznek.
# root könyvtáron belül létrejön egy ''test'' könyvtár és azon belül jön létre a ''folder'' könyvtár.
mkdir /test/folder/ -p
# az aktuális könyvtárban jön létre egy ''test'' könyvtár és azon belül a ''folder'' könyvtár
mkdir -p test/folder
# a jelenlegi könyvtárban létrejon a ''test'' könyvtár,
# azon belül létrejön egy ''folder1'' és egy ''folder2'' könyvtár,
# majd mind a kettőben létrejön a ''work'' könyvtár.
mkdir -p test/{folder1,folder2}/work
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.
rmdir
Az rmdir parancs segítségével üres könyvtárakat törölhetünk.
Figyelem! Ha a könyvtár nem üres (fájlok vagy egyéb könyvtárak találhatók benne, akkor hibaüzenetet kapunk és nem csinál semmit!
# relatív hivatkozással
rmdir test/folder
# abszolút hivatkozással
rmdir /test/folder
cp
A cp parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető
cp /etc/passwd ./
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra
cp /etc/passwd ./file
# /etc/passwd lemásolása a /tmp könyvtárba
cp /etc/passwd /tmp/
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra
cp /etc/passwd /tmp/file
Könyvtárak másolása esetén a -r kapcsoló használata szükséges (recursive).
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba
cp /etc/network /tmp/ -r
mv
Az mv parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.
A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!
cp /etc/passwd ./
# passwd állomány átnevezése file-ra
mv passwd file
# nem fut le!
# /etc/passwd állomány átnevezése file-ra
mv /etc/passwd /etc/file
# nem fut le!
# /etc/passwd állomány áthelyezése /tmp-be
mv /etc/passwd /tmp
# nem fut le!
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra
mv /etc/passwd /tmp/file
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a recursive (-r) jelölésre.
rm
Az rm parancs segítségével fájlokat és könyvtárakat törölhetünk.
rm file
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: -r.
rm folder -r
less
A less egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.
less /etc/passwd
more
A more szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.
more /etc/passwd
which
A 'which program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.
# az ls parancs abszolút elérési útvonala
which ls
# a which parancs abszolút elérési útvonala
which which
# a man parancs elérési útvonala
which man
file
A file utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.
file /etc/passwd
file /bin/ls
echo
Az echo mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.
echo "Hello World"
echo Hello World
echo Ez egy teszt üzenet
echo "Ez egy teszt üzenet"
Láthatjuk, hogy idézőjeltől függetlenül minden megjelenik a képernyőn. Észrevehetjük azt is, hogy minden sor végén új sor karakter (enter) található, amit a "-n" kapcsoló segítségével kapcsolhatunk ki.
echo -n "Hello world"
cat
A cat utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)
cat /etc/passwd /etc/profile
Egy gyakoribb felhasználási módja, hogy a fájlok tartalmát a képernyőre vessük - ez esetben nem fűzünk hozzá semmit a fájlhoz.
# /etc/passwd és a <semmi> összefűzése és megjelenítése a képernyőn
cat /etc/passwd
head
A head utasítás segítségével a fájlok első N során írhatjuk ki a képernyőre. Alapértelmezetten N=10, így ha csak egy fájlnevet adunk neki, akkor annak legfeljebb 10 sorát fogja kiírni (ha van annyi).
head /etc/passwd
Az alapértelmezett N=10 értéket a -n kapcsoló segítségével módosíthatjuk
head -n 5 /etc/passwd
# a -n a dokumentáció elhagyható, ha a - után szám található
head -5 /etc/passwd
tail
A tail hasonlóan működik, mint a head, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.
tail /etc/passwd
Az alapértelmezett N=10 értéket a -n kapcsoló segítségével módosíthatjuk
tail -n 5 /etc/passwd
# a -n a dokumentáció elhagyható, ha a - után szám található
tail -5 /etc/passwd
wc
A wc utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (word counter): sorok, szavak, karakterek és bájtok száma.
wc /etc/passwd
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:
- -l, --lines: sorok számát adja vissza
- -w, --words: szavak számát adja vissza
- -c, --chars: karakterek számát adja vissza
- --bytes: bájtok számát adja vissza
# sorok számát írja ki
wc -l /etc/passwd
# szavak számát írja ki
wc -w /etc/passwd
# bájtok számát írja ki
wc --bytes /etc/passwd
# sorok és szavak számát írja ki a képernyőre
wc -l -w /etc/passwd
find
A find utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.
# passwd nevű fájl keresése a /etc könyvtárban
find /etc -name passwd
Programok csatornái
STDIN
STDOUT
STDERR
Pipeline
Parancsbehelyettesítés
Feladatok
2. óra
A második órát az alap utasításokkal folytatjuk. Utána scriptek írásával foglalkozunk, amelyben megtekintjük a különböző vezérlési szerkezeteket is.
Parancsok és példák
mcedit
Az mcedit az mc (Midnight Commander) szerkesztője. A Midnight Commander testvére a Total Commander ősének, a Volkov Commandernek, ami szintén egy konzolos alkalmazás. A közös gyökerek miatt nagyon hasonló funkcionalitásokat érhetünk el ebben is, mint a TC-ben - érdemes megnyitni az mc utasítással, amit később az F10 billentyűvel, vagy az alsó sorban arra a gombra kattintással tudunk bezárni. Ebben az alkalmazásban működik az egér is, így kényelmes használatot eredményez. Érdekesség, hogy a "tálcára helyezés" is megoldott, így a Ctrl+O billentyűkombinációkkal háttérbe küldhetjük és folytathatjuk dolgunkat a terminálon, majd ugyanezzel a kombinációval előtérbe is hívhatjuk.
Az mcedit megnyitható az mc-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.
Az egér az mcedit-ben is működik!
A másolás a szerkesztőben is hasonlóan működik, mint a kétpaneles fájltallózóban: F5 és F6 billentyűkkel másolhatunk illetve áthelyezhetünk sorokat. Kilépni az F10 billentyűvel, ESC-el tudunk, de ezt az ablakot is a háttérbe küldhetjük, ha szerkesztés közben terminált szeretnénk elérni (CTRL+O).
mcedit /etc/passwd
nano
A nano szintén egy szövegszerkesztő alkalmazás.
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:
- CTRL+K segítségével kivághatunk sorokat a vágólapra (shift+kurzorbillentyűk segítségével tört sorok is kijelölhetők)
- CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba
- CTRL+O Menti a változásokat
- CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások
nano /etc/passwd
chmod
shift
cut
A cut parancs segítségével táblázatos adatokat szűrhetünk: kiválaszthatjuk, hogy mely oszlopokat szeretnénk megjeleníteni. A két legfontosabb kapcsolója a -f (field), ahol a megjelenítendő oszlopokat adhatjuk meg és a -d (delimiter), ahol az elválasztó karaktert állíthatjuk be.
Általában a /etc/passwd állományon dolgozunk, mert ebben egy :-al elválasztott táblázat található.
# a fájl első oszlopát szedi ki :-nál elválasztva,
# tehát a felhasználónevet
cut -f1 -d':' /etc/passwd
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva,
# tehát a felhasználónevet és az id-ját
cut -f1,3 -d':' /etc/passwd
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát
cut -f1-3,6 -d':' /etc/passwd
sort
A sort utasítás segítségével rendezhetjük az adattömböt.
# a passwd állomány rendezése a felhasználónév szerint - ez van elől
sort /etc/passwd
# fordított sorrend - reverse
sort -r /etc/passwd
Alapértelmezetten karakterek szerint rendez, tehát a számokat tartalmazó adatsorokat nem helyes sorrendben adja vissza. Ha számérték szerinti rendezést szeretnénk végrehajtani, akkor használjuk a -n opciót.
# file egy számokat tartalmazó fájl - egy sor egy fájl
sort -n file
# fordított sorrend
sort -r -n file
tr
A tr parancs segítségével karaktereket cserélhetünk ki egy fájlban. Ezen kívül nagyon hasznos tulajdonsága, hogy a kívánt ismétlődéseket el tudja távolítani, mintegy megtisztítva az adatsort.
# az e betűt o-ra, az o betűt e-re cseréli ki
echo "hello" | tr eo oe
# A T betűt K-ra, az n betűt p-re cseréli ki
echo "Tanar" | tr Tn Kp
A fenti példák alapján nézzük meg, hogy mi történik:
- A tr két pozicionális paraméterrel lett meghívva
- Az első paraméter adja meg a lecserélendő karakterek halmazát
- A második paraméter adja meg az új karakterek halmazát
- A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben
- ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre
- ha nincs benne, akkor megy tovább
- a metodika miatt keresztbe is lehet cserélni (pl. o-t e-re, e-t o-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt e betűnek a végén o betűre kéne cserélődnie.
if
Az if segítségével elágazásokat hozhatunk létre, mint minden más programozási nyelven. A szerkezet a következőképp néz ki:
if KIFEJEZÉS
then
elif KIFEJEZÉS
elif KIFEJEZÉS
else
fi
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű if elágazást is:
if KIFEJEZÉS
then
fi
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:
if KIFEJEZÉS then UTASÍTÁS1; UTASÍTÁS 2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi
for
while
seq
read
Script létrehozása
- Script megírása
- Futási jog
Pozicionális paraméterek
Változók
Vezérlési szerkezetek
3. óra
A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a grep-et foguk megvizsgálni.
Reguláris kifejezés szerkezete
Parancsok és példák
grep
4. óra
A negyedik órán a reguláris kifejezések elkészítését gyakoroljuk különböző példákon keresztül. Főleg scripten belül használjuk.
Feladatok
5. óra
Az ötödik órán minta ZH feladatsort oldunk meg.