Hasznos parancsok¶
Kapcsolódó alapfogalmak¶
Forráskód
Utasítások sorozata, általában szöveges formában megadva. A forráskód egy program különböző formái közül az, amelyik emberi megértésre és módosításra legalkalmasabb.
Fordított programoknál (pl. C, JAVA) a fordító a forráskód(ok) alapján készíti el a bináris futtatható fájlt. Értelmezett programoknál (Python, Bash, PowerShell) az értelmező a forráskód sorait értelmezi, és egyesével végrehajtja az utasításokat.
Fordító program
A fordítóprogram más programok, könyvtárak, modulok forráskódjának tárgykódúvá - tipikusan, de nem feltétlenül gépi kódúvá - alakítására képes pogram. Az átalakítási folyamatot, amelynek során az emberi szerkesztésre és megértésre tervezett forráskódot (valamely programozási nyelven leírt utasításokat) az adott célplatform által közvetlenül értelmezhető kódra kerül átalakításra, a program fordításának nevezzük.
A fordított programok általában lényegesen gyorsabban futnak, mint az értelmezett, vagy virtuális gépen futó társaik.
Szkript nyelvek
Szkriptnyelvnek azokat a programozási nyelveket szokás nevezni, amelyek tipikusan - de nem mindig - egy adott alkalmazás vagy működési környezet vezérlését teszik lehetővé elemi programmatikus utasítások segítségével. Ez utóbbiak sorozata ill. halmaza alkotja az ún. szkriptet. Fontos, hogy a szkript nem szabályokat, beállítások ír le és határoz meg - mint pl. egy konfigurációs állomány -, hanem elemi utasítások sorozatából áll, tehát maga is egy algoritmusokból felépülő programot alkot.
A szkriptnyelvek szinte kivétel nélkül értelmező által kerülnek futtatásra, bár a sebesség növelése érdekében nem ritka a bájtkódra történő futásidejű fordítás alkalmazása sem. Az értelmező maga ugyanakkor tipikusan gépi kódra fordított natív programként fut a vezérelt célalkalmazás vagy platform részeként. Ha szkriptnyelv értelmezője több platformon is fut, akkor a szkriptnyelvben magában íródott programok platformfüggetlenek is lehetnek (pl. Python).
Imperatív nyelvek
Az imperatív paradigmát követő nyelvek esetén a programozó utasítások segítségével (felszólítja) éri el hogy a program megváltoztassa az állapotát.
A kurzus során csak az imperatív paradigmát követő szkriptnyelvekkel fogunk foglalkozni.
Automatizáció¶
A különböző (általában az oprációs rendszer által végrehajtott) szkriptek segítségével lehetőségünk nyílik szinte bármelyik korábban tárgyalt témához kapcsolódó műveletek konzisztens és megismételhető módon való végrehajtására.
Mikor hasznos szkripteket írni?
- többszöri végrehajtás esetén
- egyértelmű és szabványos dokumentálás céljából
- végrehajtási sebesség (manuális végrehajtáshoz képest) növelése
Védelem
Csak megbízható forrásból származó szkriptet futtassunk le. Szükség esetén ellenőrizzük a szkript tartalmát.
A szkriptek parancsokból vagy utasításokból épülnek fel.
Parancsok felépítése¶
Számos szkriptnyelv létezik, mely több különböző parancsot és utasítást is tartalmaz. Bár ezek eltérnek, bizonyos általános irányelvek megfigyelhetőek a felépítésükben. Ezen irányelvek megértése nagyban segíti későbbi nyelvek megismerését. Az elveket pár példán keresztül fogom bemutatani. Ezek a példa nyelvek a PowerShell, a Bash és a Python.
Hal helyett háló
"Adj halat az éhezőnek és aznap megmented a haláltól. Tanítsd meg őt halászni-örök életére jóllakott lesz, sem ő sem családja nem szenved majd hiányt."
Bár bizonyos esetben fontos a parancsok és utasítások közötti különbség a továbbiakban ezektől eltekintünk és egységesen a parancsok kifejezést használjuk.
A parancsok szerkezete a következő általános sémát követi.
parancs = parancs neve paraméter lista
Másolás parancs: Copy-Item "C:\Logfiles" -Destination "C:\Drawings" -Recurse
parancs neve = Copy-Item
paraméter lista = "C:\Logfiles" -Destination "C:\Drawings" -Recurse
Másolás parancs: shutil.copyfile('file1.txt', 'file2.txt')
parancs neve = shutil.copyfile
paraméter lista = ('file1.txt', 'file2.txt')
A paraméter lista¶
paraméter lista =
paramtéter lista kezdetét jelölő
paraméter paraméter elválasztó
paramtéter lista végét jelölő
Másolás parancs: cp -v filename.txt filename.bak
paramtéter lista kezdetét jelölő = szóköz
paraméter elválasztó = szóköz
1. paraméter = -v
2. paraméter = filename.txt
3. paraméter = filename.bak
paramtéter lista végét jelölő = szóköz
Pozicióhoz kötött paraméterek¶
paraméter = (pozicióhoz kötött) paraméter értéke
A parancsok paramétereit nem csak a nevükkel hanem a poziciójukkal is azonosíthatjuk bizonyos nyelvekben, ilyen esetben a parancs neve akár el is hagyható.
Másolás parancs: cp -v filename.txt filename.bak
1. (pozicióhoz kötött) paraméter értéke = filename.txt
2. (pozicióhoz kötött) paraméter értéke = filename.bak
Másolás parancs: shutil.copyfile('file1.txt', 'file2.txt')
1. (pozicióhoz kötött) paraméter értéke = 'file1.txt'
2. (pozicióhoz kötött) paraméter értéke = 'file2.txt'
Nevesített paraméterek¶
paraméter = paraméter jelölőparaméter neve érték elválasztó paraméter értéke
Másolás parancs: Copy-Item "C:\Logfiles" -Destination "C:\Drawings" -Recurse
paraméter jelölő = -
paraméter neve = Destination
érték elválasztó = =
paraméter értéke = "C:\Drawings"
Kapcsolók¶
paraméter = paraméter jelölőkapcsoló paraméter neve
A logikai értékket tároló paramétereknél bizonyos nyelvek megengedik, hogy a paraméter nevének puszta jelentléte fejezze ki a logikai értéket, ekkor az érték megadása nem szükséges. Vagyis ha megadjuk a paramétert akkor igaz értéket kap, hanem akkor hamisat.
Másolás parancs: Copy-Item "C:\Logfiles" -Destination "C:\Drawings" -Recurse
paraméter jelölő = -
kapcsoló paraméter neve = Recurse
Futtatás¶
Python¶
PowerShell¶
Bash¶
Gyakran használt parancsok¶
Az alábbi lista nem teljes, de jó kindulási alap további parancsok megismeréséhez.
Vigyázz a sudo
-val!
A sudo egy olyan alkalmazás az Unix-szerű operációs rendszert futtató számítógépek számára, amely lehetővé teszi egy felhasználó számára, hogy egy másik felhasználó (általában a superuser, vagy a root) biztonsági jogosultságaival futtasson programokat. A sudo név a su parancs és a „do” angol szó összevonásának eredménye. Míg a su parancsnál a felhasználók a root jelszót adják meg, a sudo parancsnál a saját jelszavukat. A hitelesítés után, és ha a /etc/sudoers konfigurációs fájl engedi a felhasználói hozzáférést, a rendszer végrehajtja a megadott parancsot.
-f
és --force
A force
kapcsolók sok biztonsági ellenőrzést felül szoktak bírálni, pl. törlésnél nem lesz megerősítő kérdés. Ezért mindig körültekintéssel használjuk.
Dokumentáció és segítség kérés¶
Fájlok kezelése¶
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/copy-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/move-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-acl?view=powershell-7.1
https://man7.org/linux/man-pages/man1/cp.1.html
https://man7.org/linux/man-pages/man1/mv.1.html
https://man7.org/linux/man-pages/man1/rm.1.html
https://man7.org/linux/man-pages/man1/chmod.1.html
https://docs.python.org/3/library/shutil.html#shutil.copy
https://docs.python.org/3/library/shutil.html#shutil.move
https://docs.python.org/3/library/os.html#os.remove
https://docs.python.org/3/library/os.html#os.access
https://docs.python.org/3/library/os.html#os.chmod
Mappák kezelése¶
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/copy-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/move-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-acl?view=powershell-7.1
https://man7.org/linux/man-pages/man1/cp.1.html
https://man7.org/linux/man-pages/man1/mkdir.1.html
https://man7.org/linux/man-pages/man1/rmdir.1.html
https://docs.python.org/3/library/shutil.html#shutil.rmtree
https://docs.python.org/3/library/shutil.html#shutil.copytree
https://docs.python.org/3/library/os.html#os.mkdir
https://docs.python.org/3/library/os.html#os.makedirs
Navigáció a fájlrendszerben¶
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-item?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-location?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-location?view=powershell-7.1
https://man7.org/linux/man-pages/man1/cd.1p.html
https://man7.org/linux/man-pages/man1/pwd.1.html
https://man7.org/linux/man-pages/man1/ls.1.html
https://docs.python.org/3/library/os.html#os.chdir
https://docs.python.org/3/library/os.html#os.getcwd
https://docs.python.org/3/library/os.html#os-file-dir
Felhasználói adatok beolvasása¶
https://docs.python.org/3/library/functions.html#input
https://docs.python.org/3/tutorial/inputoutput.html
Adatok kiírása¶
https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/wmf/whats-new/informationstream-overview?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-host?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-debug?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-verbose?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-warning?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-information?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-error?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-output?view=powershell-7.1
https://docs.python.org/3/library/functions.html#print
https://docs.python.org/3/tutorial/inputoutput.html
Szűrés és keresés¶
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/where-object?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_split?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/scripting/gallery/how-to/finding-packages/filtering-packages?view=powershell-7.1
https://man7.org/linux/man-pages/man1/less.1.html
https://man7.org/linux/man-pages/man1/more.1.html
https://man7.org/linux/man-pages/man1/tail.1.html
https://man7.org/linux/man-pages/man1/head.1.html
https://www.gnu.org/software/gawk/manual/gawk.html
https://www.gnu.org/software/sed/manual/sed.html
https://docs.python.org/3/library/stdtypes.html?#text-sequence-type-str
https://docs.python.org/3/library/glob.html
https://pypi.org/project/glob2/
https://docs.python.org/3/library/re.html
Gyakorlás¶
Gyakoroljunk!
Válasszunk egyet a fennti szkriptnyelvek közül és oldjuk meg a következő feladatot.
- Hozzunk létre egy új mappát
school
néven. - Hozzuk létre benne az
A
,B
ésteachers
mappákat. - Állítsuk be hogy a
teachers
mappát csak az aktuális felhasználó tudja írni és olvasni. - Készítsünk tetszőleges szerkesztővel egy fájlt a
teachers
mappába. - Másoljuk át a fájlt a többi mappába is.
- Töröljük ki a
B
mappát. - Irassuk ki mindegyik mappa tartalmát egymás után.
Feladatok keresése
Keressünk olyan ismétlődő feladatokat, melyeket az oktatás során sokszor végre kell hajtani és esetleg megoldható lenne a fenti parancsokkal. Melyik parancsokat használnánk? Miért?
Projektmunka
Gondoljuk végig, hogy milyen műveleteket végeztünk el a projektmunka összeállítása során. Mely parancsokkal lehetett volna ezeket végrehajtani a fentiek közül?