Pannon Egyetem Matemetika Intézet
Linux operációs rendszer alapismeretei, és a BASH parancsértelmező programozása
Készítette: Németh István Témavezető: Pozsgai Tamás Veszprém 2010
1. Bevezető 1.1. Témaválasztás indoklása Tanítási gyakorlatomat a Pécsi Tudományegyetem Természettudományi Karának Informatika Tanszékén végeztem, ahol a GNU/Linux operációs rendszer alapjait és a BASH parancsértelmezőjének a programozását tanítottam. Ezen dolgozat az óravázlataimra épül, azokat a példákat. Mindennapi munkám során jómagam is használom a Linux operációs rendszer eszköztárát mind általános feladatok megoldására, mind rendszeradminisztrációs teendők ellátására. Sokan idegenkednek a Linux kezelésének megtanulásától, de aki egyszer már elsajátította, az kétségkívül hatékony eszköznek ítéli meg a linux parancssoros felületét. Másodsorban egy grafikus program soha nem lehet olyan hatékony mint egy ugyanolyan funkciókat megvalósító karakteres, hiszen karakteres program kimenetét csőbe irányítva szabadon tovább feldolgozhatjuk. Ebben a dolgozatban a Linux rendszer adminisztráció szintű felhasználására csak olyan mértékben szeretnék kitérni, mely indokolt ahhoz hogy a szemléltető példák érthetőek legyenek. A dolgozatnak nem célja hogy komplett referenciát a megemlített programokról, hanem az, hogy gyorsan megtanulható bevezetőként szolgáljon a Linux operációs rendszerrel most ismerkedő felhasználók számára. Csak olyan mélységig dolgozom fel a Linux alapismereteket, mely egy féléves kurzus időbeosztásába belefér. Ennél fogva kimarad sok olyan rész, mely kimondottan a Linux operációs rendszer konfigurálásához szükséges, vagy olyan témát ölel fel, melyet az átlagos felhasználónak a napi munka elvégzéséhez nem szükségképpen kell ismerni. Némely esetben az adott rész megértéséhez szükség lehet olyan fogalmak ismeretére, melyek az operációs rendszer elméletével foglalkozó kurzusok anyaga.
1.2. Miért használjunk Linuxot? A linux mellett az első érvként sokan az ingyenességét hozzák fel. Ez kétségtelenül így is van de szerintem nem ez az elsődleges oka a linux terjedésének. Az angol free ó egyik jelentése valóban az „ingyenes” kifejezés. Fordíthatjuk azonban szabadnak is és ez az amit igazából érzékeltetni szeretnénk a freekifejezés kapcsán. A Linux ugyanis szabadon továbbadható másoknak, lemásolhatjuk korlátlan példányban. Ezen túlmenően adott a jog
ahhoz, hogy kellő programozási ismeret birtokában saját ízlésünk szerint módosítsuk a programokat, melyeket a GNU/GPL Licensszel láttak el. Sőt ezeket a módosításokat is szabadon terjeszthetjük. Az igazi Linux felhasználó kezét nem kötik ipari titokként őrzött fileformátumok, illetve konkurenciaharcokból adódó inkompatibilitások, vagy árukapcsolások. A Linux stabil rendszermagja megbízhatóan és hatékonyan használja a számítógép erőforrásait. A költségmegtakarítás tehát kétszeresen is tetten érhető a Linux kapcsán. Egyrészről a már említett ingyenesség v miatt, másrészről pedig a gazdaságos erőforrásfelhasználás miatt nem kell olyan mértékben a zsebünkbe nyúlnunk mint sok egyéb kereskedelmi rendszer esetében. Természetesen Linux operációs rendszer alá is írhatók nagy „programmonstrumok”, de mivel a Linux alatt minden program használata önkéntes jellegű, ezért ezek használata elkerülhető.
1.3. Dolgozatban használt jelölések Állandó szélességű betűtípussal írom a parancsokat, állományneveket és mindent ami a képernyőn megjelenik. Például a szövegben a sorok között azonnal fellelhető a
cut –d ":" –f "2"parancs. Az idegen kifejezéseket dőlt betűvel lesznek láthatók, és ahol van értelme ott szerepeltetem a magyar jelentést is. Erre például a cat parancsnál magyarázatánál lehet szükség amikor kitérek arra hogy a parancs neve a „concatenate” szóból ered melynek a jelentése: összefűzni. Amikor egy billentyű leütését szeretném leírni akkor a billentyű nevét bekeretezem. Pl. a lilo a TAB hatására listát az indítható operációs rendszerekről. A prompt-ot mindig #jellel jelölöm, és a képernyőről lemásolt részeket mindig állandó szélességűvel szedem, annak érdekében, hogy ugyanolyan elrendezést kapjak mint ami a képernyőn látható. Pl.: # head –n 2 dolgozat.tex \documentclass[12pt,a4paper]{article} \usepackage[T1]{fontenc} # Külön kiemelem a különösen veszélyes helyzeteket. Pl.:
Figyelem! Root-ként kiadott az rm –rf /parancs általában a rendszer újratelepítését vonja maga után!
2. Általánosságban a Linuxról 2.1. A linux története Sok mindent megtudhatunk a Linux filozófiájáról, ha megismerkedünk a történetével. A Linux operációs rendszer a Unixból származik, melyet Ken Thompson és Brian W. Kernigham készített el a Multics operációs rendszer fejlesztésekor született eredményekből. A Unix-ot eredetileg PDP-7 típusú számítógépen futott, szerették volna áttenni a PDP-11 gépre. Ehhez az operációs rendszer gépközeli nyelven írt forráskódját kellett volna soronként újraírni. Ezt minden olyan esetben meg kellett volna tenni, amikor új géptípusra szerették volna portolni a UNIX-ot. A fejlesztőcsapat elhatározta hogy egyszer hajlandóak újraírni a UNIX-ot, de a cél nem egy másik géptípus gépközeli nyelve lesz. A megoldást a gépfüggetlen C programozási nyelv jelentette, melyet Dennis Ritchie szállított. A 70-es évek elején már hatékony, és hordozható operációs rendszer volt a UNIX, melyet egyre többen használtak. A fejlesztés a Bell Laboratories nevű cégnél folyt, melynek az anyavállalata az AT&T volt. Az AT&T el volt tiltva az amerikai trösztellenes törvény értelmében attól hogy kereskedelmi forgalomba hozza a UNIX-ot. Mivel el nem adhatták, ezért egyszerűen odaadták annak aki csak kérte tőlük. Később az amerikai kormány darabokra szedte az AT&T-t és a UNIX-ot birtokló utódvállalat számára megnyílt a lehetőség a UNIX értékesítésére. Ezáltal a UNIX olyan védett lett mint bármely más kereskedelmi szoftver. Nem lehetett hozzáférni, vagy módosítani, de még ingyen használni sem. Itt jön a képbe Richard M. Stallman. Elindított egy projektet, melynek a GNU nevet viseli. A mozaikszó jelentése rekurzív módon a GNU is Not Unix (A GNU nem Unix). Stallman és a GNU fejlesztői sok szftvert létrehoztak, de a rendszermag váratott magára. A rendszermagot egy fiatal finn egyetemista Linus Torvalds írta meg. A kernel neve Linux lett. Rövid idő alatt sokan kapcsolódtak be a rendszermag fejlesztésébe, és a GNU-csapat által írt programokból használható operációs rendszert lehetett összeállítani. Manapság sokan fejlesztenek
programokat Linux alá. Vannak olyanok, akik spontán szerveződő csoportok tagjaikként teszik ezt, másrészről cégek, akik pénzért vagy reklámcéllal ingyenesen terjesztve. Bárki önállóan összeállíthatja saját Linux rendszerét, vagy választhatja az előre összeállított ún. disztribúciók egyikét is.
2.2. További információforrások 2.2.1. Man Az első és legfontosabb információ forrás a Linux operációs rendszer alatt a kézikönyv, mely elektronikus formában minden rendszer alatt rendelkezésre áll. parancssorból a
man(manual, kézikönyv) beírásával érhető el. Mivel a man is egy parancs (kézikönyvlapokat formáz és jelenít meg) ezért neki is van kézikönyv oldala melyet a man man begépelésével tekinthetünk meg. A kézikönyvben keresni is tudunk, ha a / gombot lenyomjuk közvetlenül utána pedig a keresett kifejezést majd az ENTER-t. A felhasználói kézikönyv fejezetekre van osztva, és megmondhatjuk a man-nak, hogy mely fejezetekben keressen. A Linux felhasználói kézikönyve az alábbi fejezeteket tartalmazza: 1. User commands, A felhasználói parancsok 2. System calls, Rendszerhívások 3. Library functions, Megosztott könyvtárak függvényei 4. Device files, Eszközállományok 5. File formats, Fileformátumok 6. Games, Játékok 7. Miscellaneous, Egyéb 8. System administration, Rendszeradminisztráció 9. Kernel functions, Kernel függvényei
Grafikus felület alatt használhatjuk az xman parancsot, grafikus megjelenést, és menüs kezelőfelületet szolgáltat.
2.2.2. apropos Keresésre használatos eszköz, mely a kézikönyv lapok elején található egysoros leírásokban, illetve a csomagnevekben keres. Kilistázza azokat a lapokat, melyek leírásában megtalálható a keresett kifejezés. #apropos vim evim (1) rvim (1) vim (1) vimdiff (1) vimtutor (1) #
-
Vi IMproved, a programmers Vi IMproved, a programmers Vi IMproved, a programmers edit two or three versions the Vim tutor
text text text of a
editor editor editor fájl...
3. A linux vezérlése parancsokkal A Linux többfelhasználós operációs rendszer, ebből kifolyólag a munka megkezdése előtt a felhasználónak azonosítania kell magát. Ez egy felhasználói név (username) és jelszó (password) párossal történik melyet a felhasználónak kell begépelnie. Ha a felhasználói név és jelszó érvényes a rendszeren és egymáshoz tartoznak, akkor a felhasználó a begépelésük után megkezdheti a munkát. A munka történhet grafikus és karakteres felületen. Amennyiben a felhasználó karakteres felületen lép be, elindul az alapértelmezett shell-je is, amiről a parancskérő jel tanúskodik. Ez shell a legtöbb esetben a BASH. A következőkben áttekintjük a felhasználók által a karakteres konzolon kiadható parancsokat.
3.1. A parancsok szerkezete A Linux parancsok szerkezete kevés kivételtől eltekintve egységes. Parancs kiadásakor elsőként a parancs nevét gépeljük be, majd a parancs neve után szóközzel elválasztva következnek az esetleges kapcsolók vagy állomány nevek, amit egységesen parancssori paramétereknek nevezünk. A parancssori paraméterekből is több lehet egy-egy parancs kiadásakor, őket szintén szóközzel választjuk el egymástól. Az alábbi példa egy parancs kiadását mutatja meg:
# ls -l helloworld.c -rw-r--r-- 1 sityu sityu 103 máj # ls -a -l ––color összesen 1040 drwxr-xr-x 2 sityu sityu 16384 drwxr-xr-x 23 sityu sityu 16384 -rwxr-xr-x 1 sityu sityu 134733 -rwxr-xr-x 1 sityu sityu 142739 -rwxr-xr-x 1 sityu sityu 177664 #
13 11.26 helloworld.c máj máj máj máj máj
10 11 12 12 12
20.47 19.08 15.51 15.51 16.55
. .. 1_abra.jpg 1_abra.xcf zd2.doc
A fenti példában két parancsot adtunk ki, mind a két esetben a parancs neve az ls volt, az első esetben a paraméterek a -l
helloworld.c, míg a második esetben a
-a -l ––color. Az egybetűs parancssori paraméterek összevonhatók, tehát a második parancsot -al ––color formában is kiadhattuk volna.
3.2. Szabványos csatornák és átirányításuk Amikor egy program vagy parancs elindul, akkor az operációs rendszertől három csatornát kap megnyitva, amelyeken keresztül kommunikálni tud a felhasználóval vagy egy másik programmal. A három csatorna a következő: 1. standard input (szabványos bemenet): A program a szabványos bemeneten várja a feldolgozandó adatokat. Ha nem adunk meg szabványos bemenetet, akkor az operációs rendszer a billentyűzetet tekinti alapértelmezettnek. 2. standard output (szabványos kimenet): A program a szabványos kimenetre írja a feldolgozáskor keletkezett eredményeket. Ha nem adunk meg szabványos kimenetet, akkor az operációs rendszer a képernyőt tekinti alapértelmezettnek. 3. standard error (szabványos hiba): A program a szabványos hibacsatornára írja a menet közben keletkezett hibákat. Ha nem adunk meg szabványos hibacsatornát, akkor az operációs rendszer a képernyőt tekinti alapértelmezettnek. Mindegyik csatorna kapcsolható állományhoz. Ennek megfelelően az elirányított csatorna nem az alapértelmezettet fogja használni, hanem az adott állományt olvassa, vagy írja. A szabványos bemenet átirányítása a < jellel történik:
# # # #
mail
[email protected] lista.txt echo "--- Lista vege ---" >>lista.txt make bzImage 2>kernelfordhiba.txt
Az első esetben a mail parancs a szabványos bemenetét irányítottuk az uzenet.txt állományra. A második esetben az ls parancs kimenetét irányítottuk a lista.txt állományba. Ezt követően az echo parancs kimenetét irányítottuk az lista.txt file-ba úgy, hogy annak a végéhez fűzze hozzá. Végül pedig a make parancs lefutásakor keletkezett hibákat az operációs rendszer nem a képernyőre, hanem a kernelfordhiba.txt állományba fogja írni. Figyelem! A > átirányító jel hatására az operációs rendszer törli megadott állomány korábbi tartalmát.
3.3. Csővezetékek A Linux parancskészlete sok kis elemi feladatot megvalósító programból épül fel. Emiatt egy összetett feladat megoldására a felhasználónak nem kell programot írnia, hanem ezeket a parancsokat használhatja. Ez a módszer a csővezetékek (pipe) használatában teljesedik ki. Csővezetéket akkor hozunk létre, ha egy program kimenetét továbbfeldolgozás céljából a másik program bemenetére kapcsoljuk, és ezáltal feldolgozási láncot kapunk. Csővezeték építésére a | karaktert használjuk, melyet az összekapcsolandó programok közé írunk. Az alábbi példa a csővezetékek használatát mutatja be: # cat /etc/passwd | grep ^istvan | cut -d: -f5 | cut -d, -f1 Németh István # A cat parancs a szabványos kimenetére küldi a /etc/passwd állomány tartalmát ami egyben a grep parancs bemenete lesz. A grep megszűri a bemenére érkező szöveget, és csak azokat a sorokat engedi tovább a kimenetére, mely a istvan kifejezéssel kezdődik. Ez a sor jut a cut -d: -f5 parancs bemenetére, mely a : karakter mentén felszabdalja a bemenetet, és csak az ötödik mezőt engedi a kimenetére. A felszabdalt szöveg jut az utolsó cut parancs bemenetére, mely a vesszők mentén szintén feldarabolja, és az első mezőt küldi a kimenetére. Mivel az utolsó parancs kimenetét nem kötöttük további parancs bemenetére, ezért rendelkezés hiányában a kimenete az alapértelmezett kimenetre került, vagyis a képernyőre. A fenti programok egymásutánja a rendszeren szereplő „istvan” nevü felhasználónak írta ki a teljes nevét.
Figyelem! Lényeges szempont, hogy a csővezetékben felsorolt programok párhuzamosan futnak le, és nem egymásután. Ha valamelyik program bemenethez jut, azt azonnal fel is dolgozza. Értelemszerűen azok a programok, melyeknek szükségük van az előző program teljes kimenetére, az megvárja amíg az előző program befejezi a munkát. Ilyen pl. a sort parancs, ami rendezést végez a bemenetén.
4. A Linux parancsai 4.1. Állomány- és könytárkezelő parancsok 4.1.1. pwd A pwd (print working directory, munkakönyvtár kinyomtatása) parancs az aktuális könyvtár nevét a szabványos kimenetére küldi. A felhasználó számára az aktuális könyvtár különleges jelentőséggel bír, hiszen a parancsok – ha a felhasználó másképp nem rendelkezik – az aktuális könyvtárban levő állományokkal fognak dolgozni. #pwd /home/sityu/document # A programnak nincs olyan parancssori paramétere, mely a működését befolyásolná, mindössze az egyik (--help) egy súgót jelenít meg a használatról, a másik (--version) pedig kiírja parancsot teljesítő program verziószámát.
4.1.2. mkdir Az mkdir (make directory, könyvtár létrehozása)parancs könyvtárak létrehozására szolgál. Alapértelmezésben a paranccsal csak egyetlen könyvtárat hozhatunk létre. #mkdir newdirname/newsubdirname mkdir: nem lehet a következő könyvtárat létrehozni: "newdirname/newsubdirname": Nincs ilyen fájl vagy könyvtár #mkdir newdirname #mkdir newdirname/newsubdirname # Amint a fenti példában látható, nem sikerült létrehozni newdirname könyvtárat, és abba egy newsubdirname nevű alkönyvtárat. A fenti feladat alapértelmezésben csak két lépcsőben valósítható meg, vagy a -p parancssori paraméter alkalmazásával mely arra
utasítja az mkdir parancsot, hogy a nemlétező szülőkönyvtárakat is hozza létre. A -m jog paraméterrel adott jogosultsággal készül el a könyvtár.
4.1.3. cd A cd (change directory, könyvtár változtatása) parancs segítségével a felhasználó megváltoztathatja a munkakönyvtárat. Paraméterek nélkül meghívva a programot a munkakönyvtár a felhasználó saját könyvtárára változik. Ha paraméterként egy létező könyvtár nevét adjuk meg, akkor a munkakönyvtár a megadottra változik. #pwd /home/sityu/document #cd #pwd /home/sityu #cd document #pwd /home/sityu/document # A szülő könyvtár jele a .. . Szülő konytárra a cd .. paranccsal válthatunk. A cd paramétereként megadott könyvtár lehet abszolút (gyökérkönyvtártól indulva) vagy relatív (munkakönyvtártól indulva) elérési útvonal.
4.1.4. tree A tree (tree, fa) parancs a könyvtár szerkezetet jeleníti meg. Paraméterként megadhatjuk a kiindulási könyvtárat. #tree document document |--text | |--versek | `--levelek `--docs 4 directories, 0 files #
4.1.5. rmdir Könyvtár törlésére szolgál az rmdir (remove directory, könyvtár törlése)parancs. A parancs csak akkor törli a könyvtárat, ha az üres, vagyis nem tartalmaz egyetlen állomány illetve további alkönyvtárat sem. A -p paraméter hatása azonos az mkdir parancsnál, csak ebben az esetben hátulról kezdve törli a könyvtárakat, és csak akkor sikeres a törlés, ha a
szülőkönyvtár üressé válik. az --ignore-fail-on-non-empty paraméter nem ír hibaüzenetet, ha egy könyvtár törlése nem sikerült amiatt mert nem volt üres.
4.1.6. touch A touch (touch, megérinteni) parancs egy nulla byte-os állományt hoz létre a paraméterében megadott névre. A művelet csak akkor sikeres, ha a felhasználónak van joga írni abba a könyvtárba, amelybe az állományt létre kívánja hozni. Ha a megadott nevű állomány már létezett, akkor a parancs nem törli az állományt, de az utolsó módosítás dátumát megváltoztatja. Bár a touch parancsot eredeti szándék szerint a file időbélyegének megváltoztatására hozták létre (és a legtöbb paramétere is ezen működést szabályozza), azonban leggyakrabban állomány létrehozására használjuk.
4.1.7. rm Az rm (remove, leszedni) állományok törlésére szolgál. A felhasználó beállításától függően a törlést megerősítő kérdést tehet fel a program, ekkor csak igenlő válasz esetén töröl. A -f (force, erőltetni) paraméter hatására akkor sincs megerősítő kérdés, ha a felhasználó tett ilyen beállítást. A -i (interactive, interaktív) paraméter pedig mindenképpen tesz fel megerősítő kérdést. Könyvtárat a teljes tartalmával együtt a -r (recursive, rekurzív) paraméterrel tudunk. A -v (verbose, bőbeszédű) paraméter hatására tételes listát kapunk a törölt állományokról. Figyelem! A
meggondolatlanul
használt
rm
-rf
könyvtárnév
parancs
használatával
helyreállíthatatlan károkat okozhatunk a rendszeren, vagy dokumentumainkban. Mindig gondoskodjunk a fontos állományaink biztonsági mentéséről. #rm -i a.tmp rm:remove `a.tmp'? y #rm -f *.o #rm -v -f *.dvi "1.dvi" törölve "2.dvi" törölve "3.dvi" törölve "4.dvi" törölve "5.dvi" törölve #
4.1.8. cp Állományok másolására szolgáló parancs a cp (copy, másolás). Felhasználói beállítástól függ, hogy a felülírással járó másoláskor történik-e kérdés felvetés, de minkét viselkedésnek van kapcsolója. Hasonlóan az rm parancsnál, a -i (interactive, interaktív) kapcsoló hatására a beállítástól függetlenül történik biztonsági kérdés, a -f (recursive, rekurzív) hatására pedig nem. #cp -i file file2 cp: overwrite `file2'? n #cp -f fájl file2 #
4.1.9. file Egy állomány típusának meghatározására szolgál. Fontos szempont, hogy nem a kiterjesztés alapján dolgozik, hanem az állományba olvas bele. Emiatt nehéz félrevezetni. #file en.jpg en.jpg: JPEG image data, JFIF standard 1.01 #
4.1.10.ls Könyvtár tartalmának listázásához az ls parancsot használjuk. Paraméter nélkül kiadva egy egyszerű felsorolást kapunk az aktuális (munka-) könyvtárban található állományokról. A legritkább esetekben hívjuk parancssori paraméterek nélkül. Az egyik leggyakrabban alkalmazott paramétere a -l (long, hosszú) kapcsoló, amely soronként egy állomány adatait jeleníti
meg.
Ekkor
könyvtárbejegyzés
az
egyes
i-node-jára
oszlopok történő
jelentései
hivatkozások
a
következők:
száma,
jogosultság,
tulajdonos
neve,
csoporttulajdonos neve, könyvtárbejegyzés mérete, utolsó módosítás dátuma és ideje, állomány neve. #ls -l drwxr-xr-x 3 sityu sityu 4096 2010-04-14 11:27 . drwxr-xr-x 67 sityu sityu 12288 2010-05-12 11:16 .. -rwx------ 1 sityu sityu 276 2009-09-08 09:35 dhcpgen.sh -rw-r--r-- 1 sityu sityu 13957 2010-04-14 11:01 forras2.txt -rw-r--r-- 1 sityu sityu 13899 2010-04-14 11:02 forras3.txt -rw-r--r-- 1 sityu sityu 13894 2010-04-14 11:04 forras4.txt -rw-r--r-- 1 sityu sityu 133 2010-04-14 11:06 forras5.txt -rw-r--r-- 1 sityu sityu 13957 2010-04-14 10:59 forras.txt drwxr-xr-x 2 sityu sityu 4096 2010-04-14 11:27 zh #ls -l -d bin drwxr-xr-x 3 sityu sityu 4096 2010-04-14 11:27 bin
# A -a (all, összes) paraméter hatására a rejtett állományok (.-tal kezdődők) is megjelítésre kerülnek. Ha egy megadjuk a könyvtár nevét, akkor az ls annak a könyvtárnak fogja megjeleníteni a tartalmát. Ha ehelyett magának a könyvtár bejegyzésének az adataira vagyunk kíváncsiak akkor a -d (directory, könyvtár) paramétert kell megadnunk, ahogy az a fenti példában is látszik. A -s (size, méret) hatására méret, -t (time, idő) hatására pedig utolsó módosítás ideje szerint rendezi a listát. A -r (reverse, fordított) paraméter a rendezés irányát megfordítja. A -R (recursive, rekurzív) pedig bejárja a könyvtárból nyíló alkönyvtárakat, és mindegyiknek a tartalmát a szabványos kimenetre küldi. A -1 paraméter hatására semmiképp nem kerül egy sorba több állománynak az adatai. A --color hatására pedig file-típustól függő színezéssel jelennek meg az egyes állománynevek, amennyiben a terminál alkalmas a színek megjelenítésére.
4.2. Lemezkezelő parancsok 4.2.1. du A du parancs segítségével megállapíthatjuk egy könyvtárnak file-nak a lemezfoglaltságát a háttértárolón. Paraméterek nélkül hívva az munkakönyvtárból kiindulva rekurzívan bejárja a könyvtárszerkezetet, és az összes munkakönyvtárból nyíló alkönyvtárak lemezfoglaltságát írja ki teljes mélységében. A legfontosabb paraméterek közé tartosik a -s (summarize, összegzés), melynek hatására az alkönyvtárak nem kerülnek a szabványos kimenetre, hanem a paraméterként megadott könyvtár, vagy ennek hiányában a munkakönyvtár teljes lemezfoglaltsága kerül a kimenetre. További hasznos paraméterek: -b (byte, bájtok) a lemezfoglaltság byte-okban értendő. A -k (kilobyte, kilobájt) paraméter hatására a lemezfoglaltság kilobyte-okban kerül kiírásra. Szintén fontos paraméter a -h (human readable format, ember számára olvasható formátum), melynek hatására a legkönnebben elolvasható formában kerül ki a könyvtár mérete a kimenetre.
4.2.2. df Linux rendszereken a df (disk free space, szabad lemezterület) parancs használatos az egyes lemezeken levő szabad területek méretének lekérdezésére. A parancs paraméterek
nélkül hívva a rendszerbe illesztett meghajtók foglaltsági és szabad területeinek méretét adja vissza táblázatos formában blokkokban kifejezve. A -k kapcsoló a blokkmérettől függetlenül kilobyte-os egységekben tünteti fel a méreteket, míg a -h csakúgy mint az előző esetben a legkönnyebben értelmezhető változatban jeleníti meg a méretadatokat. # df Fájlrendszer /dev/hdb6 tmpfs /dev/hdb2 /dev/hdb5 /dev/hdc1 /dev/hdc5 /dev/hdc6 /dev/hdc7 /dev/sda1 #
1K-blokk 12120444 387704 3142580 4088532 41959488 41935424 41935424 33680600 19525456
Foglalt 11071228 0 2139196 637916 11883552 27518464 41318304 24010360 10901376
Szabad Fo.% Csatl. pont 433528 97% / 387704 0% /dev/shm 1003384 69% /mnt/hdb03G_2 3450616 16% /mnt/hdb04G_5 30075936 29% /mnt/hdc40G_1 14416960 66% /mnt/hdc40G_5 617120 99% /mnt/hdc40G_6 7959320 76% /mnt/hdc40G_7 8624080 56% /mnt/usb_a_1
4.3. Szűrő parancsok A szűrőparancsok családjába azok a parancsok tartoznak, melyek a bemenetükre érkező adatokon valamilyen átalakítást végeznek automatikus módon. A névből adódóan azt hihetnénk, hogy a szűrő parancsok a bemenetükre érkező adatokat, szöveget „megszűrik”. Mindazonáltal hogy ez a tipikus viselkedésük, vannak olyan szűrők, melyek nem vesznek el semmit a rajtuk átáramló adatokon, sőt olyanok is vannak, melyek hozzátesznek ahhoz.
4.3.1. cat Az egyik legismertebb szűrő a cat. Nevét a latin concatenate szóból kapta. Kiválóan használható állományok összefűzésére, csövekbe ömlesztésére. Paraméterében megadott állományait sorrendben a kimenetére írja. Ha nincs megadva állománynév, akkor a szabványos bemenetét olvassa. Legfontosabb paraméterei a -n (numbering, számozás), mely minden kimeneti sort megszámoz 1-től kezdve. -E paraméter pedig a sorok végére $ jelet küld. #cat film1.mpeg film2.mpeg >film.mpeg # A fenti parancs egy állományba fűzi össze a ket file-ban tárolt filmet.
4.3.2. head, tail A head (head, fej) a bemenetének első néhány sorát, míg a tail (tail, farok) a
bementének utolsó néhány sorát engedi tovább a kimenetére. Mindkét parancs rendelkezik a -n kapcsolóval, mely megmondja, hogy az első illetve az utolsó hány sort szeretnénk létni a kimeneten. A tail rendelkezik egy igen érdekes paraméterrel. A -f paramétert használva folyamatosan figyelhetjük egy csatorna végét. Nagyon hasznos a naplóállományok figyelemmel
kísérésekor.
A
tail
ilyen
jellegű
működését
a
CTRL
+
c
billentyűkombinációval állíthatjuk le. Pl.: egy állomány n-edik sorát a cat allomany | head -n n | tail -n 1 paranccsal tekinthetjük meg, ahol n egy természetes szám.
4.3.3. cut A cut (cut, kivág) parancs segítségével egy karakter mint határolókarakter mentén felszabdalhatjuk a bemenetre érkező sorokat mezőkre, és csak bizonyos mezőket küldhetünk a szabványos kimenetre. A -d paraméter segítségével jelölhetjük ki a határolókarakterként használt karaktert, a -f paraméterrel pedig azokat a mezősorszámokat amelyeket a kimeneten szeretnénk látni. #cat /etc/passwd | cut -d ":" -f 1 root daemon bin sityu sys sync . . . #
4.3.4. rev A rev (reverse, megfordít) parancs függőleges tengely mentén tükrözi a szabványos bemenetére érkező sorokat. #echo "indula görög a ludnI” | rev Indul a görög aludni #
4.3.5. wc A wc (word count, szavak száma) parancs a bemenetére érkező szövegben számolja meg a karaktereket, byte-okat, sorokat és kiírja a szábványos kimenetére. Ha nem adunk meg
paramétereket, akkor mindhárom adatot kiírja. Ha állománynévvel hívtuk, akkor azt is megjeleníti. Ha csak az egyik számra vagyunk kíváncsiak, akkor paraméterrel szabályozhatjuk a működést. A -l csak a sorok, a -w csak a szavak,.a -c csak a karakterek számát írja ki. #cat uzenet.txt 3 65 #cat uzenet.txt 3 #cat uzenet.txt 65 #cat uzenet.txt 474
| wc 474 | wc -l | wc -w | wc -c
4.3.6. tac Hasonlóképpen működik mint a cat parancs, de a tac a bemenetére érkező sorokat fordított sorrendben írja ki a kimenetére.
4.3.7. tee A tee (tee, „t” alakú cső) parancs a szabványos bemenetére érkező szöveget változtatás nélkül a kimenetére írja, de minden sort a paraméterében megadott file-ba is bemásol.
4.3.8. grep A grep az egyik leggyakrabban használt szűrő. A bemenetére érkező sorok közül csak azokat a sorokat engedi tovább a kimenetére, melyek illeszkednek a paraméterként megadott kifejezésre. A grep értelmezi a szabályos kifejezéseket. A grep parancs a visszatérési értékével is jelzi, ha talált legalább egy illeszkedést. A -v (revert, ellentétes) paraméter hatására azokat a sorokat engedi tovább, melyekben nem található meg a kapott kifejezés. A -i (ignore, figyelmen kívül hagy) hatására pedig figyelmen kívül hagyja a kis és nagy betűk közti különbséget. #cat /etc/hosts | grep localhost 127.0.0.1 localhost # A fenti példában megjelenítettük a /etc/hosts állomány azon sorait, melyben megtalálható a localhost kifejezés.
4.4. Egyéb parancsok 4.4.1. echo Az echo (echo, visszhang) a paraméterében kapott szöveget kiküldi a szabványos kimenetére. Paraméterek nélkül indítva egy soremelést ír csak a kimenetre. A -n paraméter ezt a soremelést tiltja le. A -e paraméter esetén a program figyelembe veszi az ún. speciális karaktereket: \a \b \c \f \n \r \t \v \\ \ooo
Csengő Backspace, egy karakter törlése Sorvégi újsor elnyomása Lapdobás Újsor Home, sor elejére ugrás Vízszintes tabulátor Függőleges tabulátor Backslash Az ooo oktális kódú karakte
4.4.2. test vagy [ A test parancs a héjprogramozáshoz hozzáigazított logikai kifejezéseket kiértékelő parancs. Használata: test logikai_kifejezés vagy [ logikai kifejezés ]. A logikai kifejezés vonatkozhat egy állomány (vagy könyvtár) létezésére vagy valamilyen egyéb tulajdonságára, szöveges vagy numerikus kifejezések vizsgálatára. A test parancs állománytesztelő legfontosabb operátorai: -b filenév -c filenév -d filenév -e filenév -f filenév -l filenév -O filenév -p filenév -r filenév -s filenev -w filenev -x filenev file1 -nt file2 file1 -ut file2 file1 -nt file2
Igaz, ha blokkos eszközmeghajtó Igaz, ha karakteres eszközmeghajtó Igaz, ha könyvtár Igaz, ha létezik Igaz, ha szabályos állomány Igaz, ha szimbolikus kötés Igaz, ha saját tulajdon Igaz, ha csővezeték Igaz, ha olvasható Igaz, ha a mérete nem 0 byte Igaz, ha írható Igaz, ha futtatható Igaz, ha file1 újabb mint file2 Igaz, ha file1 régebbi mint file2 Igaz, ha file1 és file2 ugyanaz a file.
A test parancs numerikus operátorai:
kif1 kif1 kif1 kif1 kif1 kif1
-eq -ne -lt -le -gt -ge
kif2 kif2 kif2 kif2 kif2 kif2
Igaz, Igaz, Igaz, Igaz, Igaz, Igaz,
ha ha ha ha ha ha
kif1 kif1 kif1 kif1 kif1 kif1
és kif2 egyenlő és kif2 nem egyenlő kisebb mint kif2 kisebb-egyenlő mint kif2 nagyobb mint kif2 nagyobb-egyenlo mint kif2
A test szöveges operátorai -z szoveg szoveg szoveg1 = szoveg2 szoveg2 != szoveg2
Igaz, Igaz, Igaz, Igaz,
ha ha ha ha
a szoveg 0 hosszúságú a szoveg nem 0 hosszúságú megegyeznek nem egyeznek meg
A test logikai operátorai kif1 -a kif2 kif1 -o kif2 ! kif1
Igaz, ha kif1 és kif2 igaz Igaz, ha kif1 vagy kif2 igaz Igaz, ha kif1 nem igaz
Példák: "szoveg1" = "szoveg2" -o 6 -lt 9 4 -gt 5 -a 5 -gt 4 ”szoveg1” ”” -o ”szoveg1” ! 3 -le 4 -a ! 3 -gt 3
→ → → → →
igaz hamis igaz igaz hamis
4.4.3. seq A seq (sequence, sorozat) parancsot numerikus listák előállítására használjuk. Két numerikus paramétere közti listát állít elő. #seq 1 5 1 2 3 4 5 #
5. A BASH parancsértelmező programozása 5.1. A BASH scriptek alapszerkezete, futtatása A BASH scriptek tulajdonképpen szövegfile-ok amiket kedvenc szövegszerkesztő (nem szövegformázó) programmal hozunk létre. A BASH scriptek ugyanazokat a programokat tartalmazzák, mint
amiket
parancssorból
kiadhatunk.
Hozzájuk társulnak még a
vezérlőszerkezetek, változók, amikről eddig nem esett szó, de természetesen a shell ezen szolgáltatásai parancssorból is elérhetőek. A shell scripteket többféle módon is futásra bírhatunk. Az első, talán legkevésbé alkalmazott indítási mód a következő: #sh shell_script_neve.sh # Ebben az esetben az sh a BASH-ra vagy bármelyik más (a kedvenc) parancsértelmezőre mutató link. Elterjedtebb megoldás, ha a shell script első sorában feltüntetjük a parancsértelmező nevét, melynek nyelvi eszközeivel a shell scriptünk készült: #!/bin/sh vagy #!/bin/bash Az első két karakter tulajdonképpen a varázsszám (magic number) ami az állomány típusát írja le, utána következik a parancsértelmező neve teljes elérési útjával. Ez a megoldás csak akkor működik, ha a héjprogramunknak futtatási jogot adunk az alábbi paranccsal: chmod u+x script_neve.sh
5.2. A nyelv elemei 5.2.1. Megjegyzések Mint nagyon sok programozási nyelv esetében, a BASH-scriptek esetében is lehetőségünk van megjegyzések elhelyezésére a forráskódban. Egy program sorban a # karakter után álló szöveget a parancsértelmező nem értelmezi.
5.2.2. Változók BASH parancsfile-ok írásakor a változókat nem szükséges deklarálni, az első előforduláskor létrejönnek automatikusan. Az értékadás az egyenlőségjel operátorral történik. #NUMBER=14 #STRING=”Magyar Köztársaság” # A fenti példa ellenére A BASH-ban a változóknak nincsenek típusaik. Általánosságban elmondható, hogy minden változó típusa szöveges, de ha egy kifejezésben számként kell
értelmezni az adott változó tartalmát, akkor a konverzió megtörténik automatikusan. A változók típusát tehát a környezet, vagy a felhasználási mód határozza meg. A változó értékét a $VALTOZO alakban érjük el. Ha egy változó értéke után szóköz nélkül szeretnénk megjeleníteni
szöveget,
akkor
a
$VALTOZOszoveg
nevű
változó
helyett
a
${VALTOZO}szöveg formát használjuk, vagy a #echo –n $VALTOZO #echo szoveg # alakot.
5.2.3. Vezérlőszerkezetek A BASH-ban valójában az egyes vezérlő szerkezetek parancsok sorozatával oldható meg. Egy sorba több utasítást is írhatunk, ha a parancsok közé ;-ot teszünk
Feltételes utasításvégrehajtás A feltételes utasításvégrehajtást akkor alkalmazzuk, ha egy utasítást csak bizonyos esetekben akarunk végrehajtani. A bizonyos eset magyarázatra szorul. Bevezető parancsa az if parancs. Az if parancs nem közvetlenül logikai kifejezésekkel dolgozik, hanem parancs(ok) visszatérési értékével. Ha az if kulcsszó után megadott parancs végrehajtása 0 visszatérési értékkel történt akkor a then kulcsszó után megadott parancs végre lesz hajtva, míg az else után írt parancs nem. Ha pedig 0-tól különböző visszatérési értékkel tér vissza az if utáni parancs akkor a then utáni parancs nem lesz végrehajtva, míg az else utáni igen. A parancs szerkezete: #if parancs0; then parancs1; else parancs2; fi A fenti szerkezetet az áttekinthetőség kedvéért több sorba írjuk: #if parancs0; > then parancs1 > else parancs2 >fi Figyelem! Ha az a feltételes utasításvégrehajtást logikai feltétel alapján szeretnénk megvezérelni, akkor a test parancsot használjuk.
Elöl- és hátultesztelő ciklus
Az elöltesztelő ciklus szervezésére a while, míg a hátultesztelő ciklus szervezésére az until parancsot használjuk. Mind a while, mind az until kulcsszó után egy programot adunk meg, melynek visszatérési értéke határozza meg hogy a ciklusmagban szereplő utasítások lefutnak-e. A while esetében ha a parancs visszatérési értéke 0, akkor a ciklusmag lefut, az until esetében ha az utána írt parancs visszatérési értéke nem 0 akkor futnak le a ciklusmag utasításai. Figyelem! Ha az a feltételes utasításvégrehajtást logikai feltétel alapján szeretnénk megvezérelni, akkor a test parancsot használjuk. A parancsok szerkezete #while parancs0; #until parancs0; #while parancs0; > parancs1 >done #until parancs0; > parancs1 >done
do parancs1; done do parancs1; done do do
A for ciklus A BASH talán legtöbbet alkalmazott vezérlőszerkezete a for ciklus. A BASH-beli for ciklus nagyon hasonlít más programozási nyelvek hasonló ciklusszervező utasításaihoz, cs amíg azon esetekben a ciklusváltozó valamilyen numerikus változó értéke változik, addíg a BASH-beli for ciklus a egy listából veszi ezeket az értékeket. Ez a lista származhat bárhonnan. Lehet szóközökkel vagy újsor karakterekkel tagolt kézzel összeállított lista vagy bármilyen program ami ilyen listát produkál. A for ciklus szerkezete a következő: #for I in lista; do > ciklusmag_utasitasai >done # Például: #for I `seq 1 10`; do mkdir kvt-$I done
5.2.4. Idézőjelek használata Héjprogramokon belül háromféle idézőjelet alkalmazhatunk attól függően, hogy a közrezárt szöveget mennyire szeretnénk elzárni a shell kiértékelése elől. Az aposztrófok alkalmazásának hatására a parancsértelmező semmilyen kiértékelést nem végez a közrezárt szövegen. Az normál idézőjelek közé zárt szövegeken a shell értelmezést végez minden olyan kifejezésen, ami számára kiértékelhető. Ha $ jelet talál, akkor az azt követő szót változónak tekinti és az értékével helyettesíti. Ha * karaktert talál, akkor helyettesíti a munkakönyvtár összes állományával. A fordított aposztróf hatására a shell a közrezárt szöveget parancsként végrehajtja, és a kimenetével helyettesíti. #SZAM=5 #echo ’$SZAM darab alma’ $SZAM darab alma #echo "$SZAM darab alma" 5 darab alma #VALT=`cat /etc/passwd | wc -l` #echo $VALT 22 #
5.2.5. Határoló jelek A Linux parancsvezérlésének hatékony eszköze a határolójelek alkalmazása. Mint azt már az előző szakaszban láttuk, a különféle idézőjelek különféle hatást eredményeznek a kifejezésen. Ez nem csak az idézőjelekkel van így, hanem a zárójelekkel is. (…) –jelek közé írt parancsok kimenetét a BASH közös kimenetre küldi, ezáltal lehetőség nyílik több parancs kimenetének egy lépésben történő irányítására. A $(…) hatása megegyezik az előző szakaszban a fordított aposztrófnál írottakkal. $((…)) vagy $[…] hatására a beírt kifejezést a BASH matematikai műveletként értelmezi és a matematikai művelet eredményével helyettesíti.
5.2.6. Paraméterek A BASH scripteket – csakúgy mint a többi Linux parancsait – hívhatjuk paraméterekkel. A
scripten belül $1, $2,…, $n kifejezésekkel érhetjük el, ami rendre az első, második, nedik paramétert jelenti. Fontos megemlíteni, hogy a $0 azt a nevet jelenti, amilyen névvel a shell-scriptet indították.
6. Feladatgyűjtemény 6.1. Első BASH program Írjunk shell-programot, mely kiírja a szabványos kimenetére a „Hello world!” szöveget. 1: #!/bin/bash 2: echo "Hello World!" 3: exit 0
6.2. Változók Írjuk shell-programot, mely a változók kezelését mutatja be. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
#!/bin/bash EGYIK=12 MASIK=34 echo "Egyik : $EGYIK" echo "Masik : $MASIK" FUZOTT=`echo ${EGYIK}${MASIK}` OSSZEG=$(( $EGYIK + $MASIK )) echo "Osszefuzve : $FUZOTT" echo "Osszeg : $OSSZEG" exit 0
6.3. Parancssori paraméterek Írjunk shell programot, mely a parancssori paraméterek kezelését mutatja be 1: #!/bin/bash 2: 3: echo "A scriptet a $0 nevvel inditottak." 4: 5: J=0 6: for I in $@; do 7: J=$(( $J + 1 )) 8: echo "$J. paraméter: $I” 9:done 10: 11: exit 0
6.4. Paraméterek száma Írjunk programot, melyet ha paraméter nélkül hívnak meg, akkor írjon ki ismertetőt a működéséről! 1: #!/bin/bash 2: 3: if [ $# -eq 0 ]; then 4: echo "`basename $0` [-k] [-l] [-m]`" 5: echo " -k egyik funkció” 6: echo " -l másik funkció" 7: echo " -m harmadik funkció" 8: exit 1 9: fi 10: 11:exit 0
6.5. Press any key... Írjunk programot, mely vár egy billentyű leütésére, majd kilép! 1: 2: 3: 4:
#!/bin/bash read -sn1 -p "A folytatáshoz nyomjon meg egy billentyűt" echo exit 0
6.6. Első karakter Írjunk programot, mely a paraméterében megadott fájl nevének első karakterét adja vissza. A megoldás során vegye figyelembe azt, hogy egy állományt teljes elérési útjával vagy relatív elérési útjával is meg lehet adni! dolgozza fel ezt az esetet is. 1: #!/bin/bash 2: 3: echo $1 | rev | cut -d "/" -f 1 | rev | cut -c 1 4: 5: exit 0
6.7. Véletlenszám x és y között Írjon shell scriptet, mely két paraméterében kapott szám közötti egész véletlenszámot állít elő. A feladatot olyan módon írja meg, hogy az felhasználói beavatkozást ne igényeljen. A program szabványos kimenetére csak az előállított véletlenszámot jelenítse meg. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
if [ $# -ne 2 ]; then echo –n "`basename $0` (ERROR): kotelezo " 1>&2 echo "paraméter hianyzik vagy tul sok parameter." 1>&2 exit 2 fi if [ $1 -eq $2 ]; then echo "`basename $0` (ERROR): a szamok egyenloek." 1>&2 exit 1 fi ALSO=$1; FELSO=$2 if [ $ALSO -gt $FELSO ]; then FELSO=$1; ALSO=$2 fi VEL=$RANDOM; INTSZEL=$(( $FELSO - $ALSO )) until [ $VEL -lt $FELSO ]; do VEL=$(( $VEL - $INTSZEL )) done echo $VEL exit 0
6.8. Titkosítás A készen kapott nextchar() függvény segítségével írjon shell scriptet, mely a szabványos bemenetére érkező ékezettelen szöveget az alábbi szabálynak megfelelően átalakítja, és a szabványos kimenetre írja. A bemenetet soronként dolgozza fel. A kimeneten megjelenő szöveg a legyen a bemenetére érkező szöveg kódolása úgy hogy a karaktereket ASCII-kódja alapján eggyel rotálja. (a→b, b→c, ... , z→a és A→B, B→C, ... , Z→A). 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
#!/bin/bash function nextchar(){ if echo "$1" | grep -q '[a-yA-Y]'; then ASCII=$(echo -n "$1" | od -An -t d | sed s/" "//g) NEXTASCII=$(( $ASCII + 1 )) NEXTCHAR=$(awk "BEGIN {printf(\"%c\",$NEXTASCII)}") echo $NEXTCHAR exit 0 fi if [ "$1" = "z" ]; then echo "a" exit 0 fi if [ "$1" = "Z" ]; then echo "A" exit 0 fi exit 1 } while read SOR; do #megallapitjuk a sorhosszt SORHOSSZ=$(( $( echo $SOR | wc -c ) - 1 )) for I in `seq 1 $SORHOSSZ`; do #soronkovetkezo karakter KAR=$(echo "$SOR" | head -c $I | tail -c 1) #ha a karakter betu,akkor uj karakter, es kiírjuk #sortores nelkul, kulonben a magat a karaktert írjuk ki. if echo "$KAR" | grep -q '[a-zA-Z]'; then UJKAR=$(nextchar "$KAR") echo -n "$UJKAR" else echo -n "$KAR" fi done #sorvege echo done
7. Összegzés Jelen dolgozat a 2009/2010. tanév tavaszi szemeszterében tartott operációs rendszerek gyakorlat tananyagának tanári kézikönyv szintű feldolgozása. Az operációs rendszerek előadás
keretében
tanult
elméleti
tudásanyagot
mozgásba
hozva
a
hallgatók
megismerkedhettek a GNU/Linux operációs rendszerrel, és parancssoros felületének használatával. Megmutattuk hogy milyen jelleg munka folyik egy karakteres terminállal rendelkező gépen. Dolgozatban igyekeztem rávilágítani arra, hogy a karakteres felület is hatékony, erőforráskímélő munkaeszköz. Az általam tartott gyakorlatnak és ennek a dolgozatnak a célja egyaránt az volt, hogy alternatív megoldást nyújtson a kereskedelmi szoftverekkel szemben. A dolgozatnak nem volt célja, hogy komplett dokumentációja legyen a Linux operációs rendszernek és a BASH parancsértelmezőnek – több száz oldalt tett volna ki – hanem használható tudásbázisul szolgáljon a rendszerrel ismerkedők számára. A Linux egy nagy múltú operációs rendszer újraírt változata. Mivel teljesen ingyenes, szabadon felhasználható és bárki számára hozzáférhető. Mivel senki sem születik számítógép felhasználónak. Sok tanulás által válik valaki olyanná aki elmondhatja magáról hogy átlátja a számítógép működését és úgy tekint a számítógépre mint a hatékony munkavégzés eszközére.
8. Felhasznált irodalom
Hungarian Unix Portal http://hup.hu
GNU-kiáltvány http://www.mek.iif.hu/porta/szint/muszaki/szamtech/os/gnukialt.hun
GNU General Public License http://www.gnu.org/licenses/gpl.html
A GNU projekt http://www.gnu.org/gnu/the-gnu-project.html
Pere László: Linux felhasználói ismeretek I. 2001 PTE-TTK, Pécs
Büki András Unix/Linux héjprogramozás Kiskapu, 2002
9. Felhasznált irodalom 1.
2.
3.
4.
Bevezető ......................................................................................................................... 2 1.1.
Témaválasztás indoklása ..................................................................................... 2
1.2.
Miért használjunk Linuxot? ................................................................................ 2
1.3.
Dolgozatban használt jelölések ........................................................................... 3
Általánosságban a Linuxról......................................................................................... 4 2.1.
A linux története ................................................................................................... 4
2.2.
További információforrások ............................................................................... 5
2.2.1.
Man ................................................................................................................ 5
2.2.2.
apropos .......................................................................................................... 6
A linux vezérlése parancsokkal ................................................................................... 6 3.1.
A parancsok szerkezete ........................................................................................ 6
3.2.
Szabványos csatornák és átirányításuk .............................................................. 7
3.3.
Csővezetékek ......................................................................................................... 8
A Linux parancsai ........................................................................................................ 9 4.1.
Állomány- és könytárkezelő parancsok .............................................................. 9
4.1.1.
pwd................................................................................................................. 9
4.1.2.
mkdir ............................................................................................................. 9
4.1.3.
cd .................................................................................................................. 10
4.1.4.
tree ............................................................................................................... 10
4.1.5.
rmdir ............................................................................................................ 10
4.1.6.
touch ............................................................................................................ 11
4.1.7.
rm ................................................................................................................. 11
4.1.8.
cp .................................................................................................................. 12
4.1.9.
file................................................................................................................. 12
4.1.10.
ls ................................................................................................................... 12
4.2.
Lemezkezelő parancsok ..................................................................................... 13
4.2.1.
du ................................................................................................................. 13
4.2.2.
df .................................................................................................................. 13
4.3.
Szűrő parancsok ................................................................................................. 14
4.3.1.
cat ................................................................................................................. 14
4.3.2.
head, tail ...................................................................................................... 14
4.3.3.
cut................................................................................................................. 15
4.3.4.
rev ................................................................................................................ 15
4.3.5.
wc ................................................................................................................. 15
4.3.6.
tac ................................................................................................................. 16
4.3.7.
tee ................................................................................................................. 16
4.3.8.
grep .............................................................................................................. 16
4.4.
5.
6.
Egyéb parancsok ................................................................................................ 17
4.4.1.
echo .............................................................................................................. 17
4.4.2.
test vagy [..................................................................................................... 17
4.4.3.
seq ................................................................................................................ 18
A BASH parancsértelmező programozása .............................................................. 18 5.1.
A BASH scriptek alapszerkezete, futtatása ..................................................... 18
5.2.
A nyelv elemei ..................................................................................................... 19
5.2.1.
Megjegyzések .............................................................................................. 19
5.2.2.
Változók....................................................................................................... 19
5.2.3.
Vezérlőszerkezetek ..................................................................................... 20
5.2.4.
Idézőjelek használata ................................................................................. 22
5.2.5.
Határoló jelek ............................................................................................. 22
5.2.6.
Paraméterek ................................................................................................ 22
Feladatgyűjtemény ..................................................................................................... 24 6.1.
Első BASH program........................................................................................... 24
6.2.
Változók............................................................................................................... 24
6.3.
Parancssori paraméterek ................................................................................... 24
6.4.
Paraméterek száma ............................................................................................ 25
6.5.
Press any key....................................................................................................... 25
6.6.
Első karakter ...................................................................................................... 25
6.7.
Véletlenszám x és y között ................................................................................. 26
6.8.
Titkosítás ............................................................................................................. 27
7.
Összegzés ..................................................................................................................... 28
8.
Felhasznált irodalom .................................................................................................. 29
9.
Felhasznált irodalom .................................................................................................. 30
Melléklet .............................................................................................................................. 32
Melléklet
héten íratott zárthelyi dolgozat
16 db óravázlat az első 16-szor 45 percről külön állományokban a dolgozathoz tömörítve
1. Írja a parancsok mellé azt a betűt, amely legjobban jellemzi az adott parancsot! 10p
sed head cat du rev
.... .... .... .... ....
grep test cut df file
.... .... .... .... ....
(a) annyi darab sort ír a kimenetére amennyi a bemenetére érkezett (b) numerikus, karakteres és logikai kifejezésekkel tud dolgozni (c) van olyan paramétere, melynek hatására rekurzívan „dolgozik” (d) alapértelmezésben tíz sorral dolgozik (e) cső alkalmazásakor kétszer egymásután kiadva elveszti az értelmét a parancs (f) partíciókkal dolgozik (g) képes megváltoztatni a bemenetére érkező kifejezést (h) a „-d” paramétere után a határoló jelet kell megadni (i) a program megmondja egy állományról hogy milyen jellegű adat található benne (j) sorokat szűr a bemenetére érkező szövegből,korábban a sed-nek volt programja
2. A test parancs melyik kifejezésre tér vissza igaz értékkel? 10p
”szoveg1” = ”szoveg2” -o 6 -lt 9 4 -gt 5 -a 5 -gt 4 ”szoveg1” ”” -o ”szoveg1” ! 3 -le 4 -a ! 3 -gt 3
........... ........... ........... ........... ...........
3. Írjon fel öt Linux-parancsot, amely nem szerepel az 1. feladatban viszont az órán elhangzott! 5p
...................., ...................., ...................., ...................., .................... 4. Adja meg a kimeneten megjelenő szöveget! Ügyeljen a kis és nagy betűk közti különbségre! 2p+3p+2p
(1) echo ”indula görög a ludnI” | wc -c (2) echo -e ”\n\n\n\n\n\n\n\n\n\n\n\n” | wc -l | rev (3) cat /etc/passwd | cut -d ”:” -f 1 (1) ...................................... (2) ...................................... (3) ...................................... 5. Mikor használunk csöveket Linux alatt! 5p