EDU::GAMF::Operációs rendszerek::Gyakorlatok

Innen: Farkas Attila Wiki
A lap korábbi változatát látod, amilyen ApelPro (vitalap | szerkesztései) 2023. szeptember 21., 14:24-kor történt szerkesztése után volt. (→‎nano)
Ugrás a navigációhoz Ugrás a kereséshez

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

sort

tr

if

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.