<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>http://wiki.farkas-attila.hu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ApelPro</id>
	<title>Farkas Attila Wiki - Felhasználó közreműködései [hu]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.farkas-attila.hu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ApelPro"/>
	<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php/Speci%C3%A1lis:Szerkeszt%C5%91_k%C3%B6zrem%C5%B1k%C3%B6d%C3%A9sei/ApelPro"/>
	<updated>2026-04-18T14:19:52Z</updated>
	<subtitle>Felhasználó közreműködései</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=833</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=833"/>
		<updated>2025-10-14T06:29:19Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* UI indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.3 php8.3 php8.3-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog \${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog \${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip python3-flask -y&lt;br /&gt;
pip3 install mysql-connector-python --break-system-packages&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=832</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=832"/>
		<updated>2025-10-14T06:23:39Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* UI indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.3 php8.3 php8.3-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog \$\{APACHE_LOG_DIR\}/error.log&lt;br /&gt;
	CustomLog \$\{APACHE_LOG_DIR\}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip python3-flask -y&lt;br /&gt;
pip3 install mysql-connector-python --break-system-packages&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=831</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=831"/>
		<updated>2025-10-14T06:18:45Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* API indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.3 php8.3 php8.3-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip python3-flask -y&lt;br /&gt;
pip3 install mysql-connector-python --break-system-packages&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=830</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=830"/>
		<updated>2025-10-14T06:08:44Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* UI indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.3 php8.3 php8.3-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip -y&lt;br /&gt;
pip3 install flask mysql-connector-python --break-system-packages&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=829</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=829"/>
		<updated>2025-09-15T08:15:01Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A gyakorlat menete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
Az Előadás második felében a hallgatók előadják korábban elkészített munkájukat egy a felhővel kapcsolatban saját maguk által kiválasztott témában. A kiselőadás nem lehet csupán bemutató jellegű, technikai információkat is tartalmaznia kell.&lt;br /&gt;
 A kiselőadásra járó pont: &#039;&#039;&#039;30p&#039;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
A gyakorlati részhez kapcsolódóan a hallgatók csoportos munkában készítenek el egy projektfeladatot, amelyben a következő pontok közül legalább 5-nek teljesülnie kell:&lt;br /&gt;
* legyen benne ASG és LB&lt;br /&gt;
* Legyen benne tárolás S3-ra&lt;br /&gt;
* Legyen legalább 2 EC2 szolgáltatás (pl. api, ui)&lt;br /&gt;
* Használjon RDS-t&lt;br /&gt;
* Használjon VPC&lt;br /&gt;
* Docker környezetben fusson az alkalmazás (akár az AWS ECS-ben is)&lt;br /&gt;
* Serverless megoldás&lt;br /&gt;
* Valamilyen orchestrator használata (kubernetes, swarm stb., akár beépített verziót is)&lt;br /&gt;
&lt;br /&gt;
A projektfeladat végrehajtása során a generatív mesterséges intelligencia használata &#039;&#039;&#039;engedélyezett&#039;&#039;&#039; és &#039;&#039;&#039;javasolt&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 A projektfeladatra járó pont: &#039;&#039;&#039;70p&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# &#039;&#039;&#039;Projekt bemutató&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=828</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=828"/>
		<updated>2025-09-15T08:14:18Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Kiselőadás témák */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
Az Előadás második felében a hallgatók előadják korábban elkészített munkájukat egy a felhővel kapcsolatban saját maguk által kiválasztott témában. A kiselőadás nem lehet csupán bemutató jellegű, technikai információkat is tartalmaznia kell.&lt;br /&gt;
 A kiselőadásra járó pont: &#039;&#039;&#039;30p&#039;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
A gyakorlati részhez kapcsolódóan a hallgatók csoportos munkában készítenek el egy projektfeladatot, amelyben a következő pontok közül legalább 5-nek teljesülnie kell:&lt;br /&gt;
* legyen benne ASG és LB&lt;br /&gt;
* Legyen benne tárolás S3-ra&lt;br /&gt;
* Legyen legalább 2 EC2 szolgáltatás (pl. api, ui)&lt;br /&gt;
* Használjon RDS-t&lt;br /&gt;
* Használjon VPC&lt;br /&gt;
* Docker környezetben fusson az alkalmazás (akár az AWS ECS-ben is)&lt;br /&gt;
* Serverless megoldás&lt;br /&gt;
* Valamilyen orchestrator használata (kubernetes, swarm stb., akár beépített verziót is)&lt;br /&gt;
&lt;br /&gt;
A projektfeladat végrehajtása során a generatív mesterséges intelligencia használata &#039;&#039;&#039;engedélyezett&#039;&#039;&#039; és &#039;&#039;&#039;javasolt&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 A projektfeladatra járó pont: &#039;&#039;&#039;70p&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=827</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=827"/>
		<updated>2025-09-15T08:13:23Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tantárgy követelményei - nem hivatalos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
Az Előadás második felében a hallgatók előadják korábban elkészített munkájukat egy a felhővel kapcsolatban saját maguk által kiválasztott témában. A kiselőadás nem lehet csupán bemutató jellegű, technikai információkat is tartalmaznia kell.&lt;br /&gt;
 A kiselőadásra járó pont: &#039;&#039;&#039;30p&#039;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
A gyakorlati részhez kapcsolódóan a hallgatók csoportos munkában készítenek el egy projektfeladatot, amelyben a következő pontok közül legalább 5-nek teljesülnie kell:&lt;br /&gt;
* legyen benne ASG és LB&lt;br /&gt;
* Legyen benne tárolás S3-ra&lt;br /&gt;
* Legyen legalább 2 EC2 szolgáltatás (pl. api, ui)&lt;br /&gt;
* Használjon RDS-t&lt;br /&gt;
* Használjon VPC&lt;br /&gt;
* Docker környezetben fusson az alkalmazás (akár az AWS ECS-ben is)&lt;br /&gt;
* Serverless megoldás&lt;br /&gt;
* Valamilyen orchestrator használata (kubernetes, swarm stb., akár beépített verziót is)&lt;br /&gt;
&lt;br /&gt;
A projektfeladat végrehajtása során a generatív mesterséges intelligencia használata &#039;&#039;&#039;engedélyezett&#039;&#039;&#039; és &#039;&#039;&#039;javasolt&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 A projektfeladatra járó pont: &#039;&#039;&#039;70p&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=826</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=826"/>
		<updated>2025-09-15T08:11:00Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tantárgy követelményei - nem hivatalos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
Az Előadás második felében a hallgatók előadják korábban elkészített munkájukat egy a felhővel kapcsolatban saját maguk által kiválasztott témában. A kiselőadás nem lehet csupán bemutató jellegű, technikai információkat is tartalmaznia kell.&lt;br /&gt;
A kiselőadásra járó pont: &#039;&#039;&#039;30p&#039;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
A gyakorlati részhez kapcsolódóan a hallgatók csoportos munkában készítenek el egy projektfeladatot, amelyben a következő pontok közül legalább 5-nek teljesülnie kell:&lt;br /&gt;
* legyen benne ASG és LB&lt;br /&gt;
* Legyen benne tárolás S3-ra&lt;br /&gt;
* Legyen legalább 2 EC2 szolgáltatás (pl. api, ui)&lt;br /&gt;
* Használjon RDS-t&lt;br /&gt;
* Használjon VPC&lt;br /&gt;
* Docker környezetben fusson az alkalmazás (akár az AWS ECS-ben is)&lt;br /&gt;
* Serverless megoldás&lt;br /&gt;
* Valamilyen orchestrator használata (kubernetes, swarm stb., akár beépített verziót is)&lt;br /&gt;
&lt;br /&gt;
A projektfeladat végrehajtása során a generatív mesterséges intelligencia használata &#039;&#039;&#039;engedélyezett&#039;&#039;&#039; és &#039;&#039;&#039;javasolt&#039;&#039;&#039;.&lt;br /&gt;
A projektfeladatra járó pont: &#039;&#039;&#039;70p&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=825</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=825"/>
		<updated>2025-09-15T08:09:42Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tantárgy követelményei - nem hivatalos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
Az Előadás második felében a hallgatók előadják korábban elkészített munkájukat egy a felhővel kapcsolatban saját maguk által kiválasztott témában. A kiselőadás nem lehet csupán bemutató jellegű, technikai információkat is tartalmaznia kell. Ennek értékelése &#039;&#039;&#039;30p&#039;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
A gyakorlati részhez kapcsolódóan a hallgatók csoportos munkában készítenek el egy projektfeladatot, amelyben a következő pontok közül legalább 5-nek teljesülnie kell:&lt;br /&gt;
* legyen benne ASG és LB&lt;br /&gt;
* Legyen benne tárolás S3-ra&lt;br /&gt;
* Legyen legalább 2 EC2 szolgáltatás (pl. api, ui)&lt;br /&gt;
* Használjon RDS-t&lt;br /&gt;
* Használjon VPC&lt;br /&gt;
* Docker környezetben fusson az alkalmazás (akár az AWS ECS-ben is)&lt;br /&gt;
* Serverless megoldás&lt;br /&gt;
* Valamilyen orchestrator használata (kubernetes, swarm stb., akár beépített verziót is)&lt;br /&gt;
&lt;br /&gt;
A projektfeladat végrehajtása során a generatív mesterséges intelligencia használata &#039;&#039;&#039;engedélyezett&#039;&#039;&#039; és &#039;&#039;&#039;javasolt&#039;&#039;&#039;.&lt;br /&gt;
A projektfeladatra járó pont: &#039;&#039;&#039;70p&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=824</id>
		<title>EDU::GAMF::Operációs rendszerek::Gyakorlatok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=824"/>
		<updated>2024-10-09T12:15:27Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* MAC cím parser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
==== man ====&lt;br /&gt;
A &#039;&#039;man&#039;&#039; 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.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Használata:&#039;&#039;&#039;&lt;br /&gt;
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 &#039;&#039;man&#039;&#039; parancs használati útmutatóját is a következő utasítás kiadásával:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a &#039;&#039;head&#039;&#039; utasítás dokumentációját az alábbi módon érhetjük el&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ls ====&lt;br /&gt;
 Érdemes megtekinteni a parancs dokumentációját a &#039;&#039;man ls&#039;&#039; utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.&lt;br /&gt;
Az &#039;&#039;&#039;ls&#039;&#039;&#039; parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a &#039;&#039;&#039;.&#039;&#039;&#039;, tehát a jelenlegi könyvtárat listázza.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# meghívás paraméter nélkül&lt;br /&gt;
ls&lt;br /&gt;
&lt;br /&gt;
# meghívás . paraméterrel - ugyanaz az eredmény&lt;br /&gt;
ls .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár listázása&lt;br /&gt;
ls /&lt;br /&gt;
&lt;br /&gt;
# a /usr/local/bin könyvtár listázása&lt;br /&gt;
ls /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait&lt;br /&gt;
ls -l&lt;br /&gt;
&lt;br /&gt;
# A /bin/ls fájl jogosultságainak lekérdezése&lt;br /&gt;
ls -l /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az &#039;&#039;&#039;ls&#039;&#039;&#039; megnyitja a könyvtárat és annak tartalmát listázza ki.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga&lt;br /&gt;
ls /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést&lt;br /&gt;
ls / -l&lt;br /&gt;
&lt;br /&gt;
# 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&lt;br /&gt;
# Ekkor a könyvtár listázódik, nem a tartalma&lt;br /&gt;
ls -d /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pwd ====&lt;br /&gt;
A &#039;&#039;&#039;pwd&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cd ====&lt;br /&gt;
A &#039;&#039;&#039;cd&#039;&#039;&#039; parancs segítségével könyvtárat válthatunk (&#039;&#039;changedir&#039;&#039;). A cél könyvtár nevét paraméterben kell megadnunk.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár megnyitása&lt;br /&gt;
cd /&lt;br /&gt;
&lt;br /&gt;
# HOME könyvtár megnyitása&lt;br /&gt;
# ~ egy alias&lt;br /&gt;
cd ~&lt;br /&gt;
&lt;br /&gt;
# /usr/bin megnyitása&lt;br /&gt;
cd /usr/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hivatkozásoknál, így a &#039;&#039;cd&#039;&#039; esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:&lt;br /&gt;
* Az abszolút hivatkozás / elérési út mindig &#039;&#039;/&#039;&#039; jellel kezdődik. pl.: &#039;&#039;cd /home/&#039;&#039;, &#039;&#039;cd /usr/bin&#039;&#039;&lt;br /&gt;
* A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: &#039;&#039;cd home&#039;&#039;, &#039;&#039;cd bin&#039;&#039;, vagy &#039;&#039;.&#039;&#039; illetve &#039;&#039;..&#039;&#039; karakterekkel kezdődnek.&lt;br /&gt;
** A &#039;&#039;.&#039;&#039; könyvtár jelenti az aktuális könyvtárat&lt;br /&gt;
** A &#039;&#039;..&#039;&#039; könyvtár jelenti a szülő könyvtárat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# szülő könyvtár megnyitása&lt;br /&gt;
cd ../&lt;br /&gt;
&lt;br /&gt;
# a szülőkönyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ../bin&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ./bin&lt;br /&gt;
cd bin      # vegyük észre: a ./ ez esetben elhagyható&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mkdir ====&lt;br /&gt;
Az &#039;&#039;&#039;mkdir&#039;&#039;&#039; parancs segítségével könyvtárakat hozhatunk létre (&#039;&#039;make directory&#039;&#039;). Alapértelmezetten a &#039;&#039;.&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# folder könyvtár létrehozása az aktuális könyvtárban&lt;br /&gt;
mkdir folder&lt;br /&gt;
mkdir ./folder2&lt;br /&gt;
# subfolder létrehozása a folder könyvtáron belül.&lt;br /&gt;
mkdir folder/subfolder&lt;br /&gt;
&lt;br /&gt;
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk&lt;br /&gt;
mkdir /tmp/folder&lt;br /&gt;
&lt;br /&gt;
# folder létrehozása a szülőkönyvtárban&lt;br /&gt;
mkdir ../folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtáron belül létrejön egy &#039;&#039;test&#039;&#039; könyvtár és azon belül jön létre a &#039;&#039;folder&#039;&#039; könyvtár.&lt;br /&gt;
mkdir /test/folder/ -p&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban jön létre egy &#039;&#039;test&#039;&#039; könyvtár és azon belül a &#039;&#039;folder&#039;&#039; könyvtár&lt;br /&gt;
mkdir -p test/folder&lt;br /&gt;
&lt;br /&gt;
# a jelenlegi könyvtárban létrejon a &#039;&#039;test&#039;&#039; könyvtár, &lt;br /&gt;
# azon belül létrejön egy &#039;&#039;folder1&#039;&#039; és egy &#039;&#039;folder2&#039;&#039; könyvtár, &lt;br /&gt;
# majd mind a kettőben létrejön a &#039;&#039;work&#039;&#039; könyvtár.&lt;br /&gt;
mkdir -p test/{folder1,folder2}/work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.&lt;br /&gt;
&lt;br /&gt;
==== rmdir ====&lt;br /&gt;
Az &#039;&#039;&#039;rmdir&#039;&#039;&#039; parancs segítségével üres könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figyelem&#039;&#039;&#039;! 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!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# relatív hivatkozással&lt;br /&gt;
rmdir test/folder&lt;br /&gt;
&lt;br /&gt;
# abszolút hivatkozással&lt;br /&gt;
rmdir /test/folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cp ====&lt;br /&gt;
A &#039;&#039;&#039;cp&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd ./file&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba&lt;br /&gt;
cp /etc/passwd /tmp/&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak másolása esetén a &#039;&#039;-r&#039;&#039; kapcsoló használata szükséges (&#039;&#039;recursive&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba&lt;br /&gt;
cp /etc/network /tmp/ -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mv ====&lt;br /&gt;
Az &#039;&#039;&#039;mv&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.&lt;br /&gt;
&lt;br /&gt;
 A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd állomány átnevezése file-ra&lt;br /&gt;
mv passwd file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány átnevezése file-ra&lt;br /&gt;
mv /etc/passwd /etc/file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be&lt;br /&gt;
mv /etc/passwd /tmp&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra&lt;br /&gt;
mv /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a &#039;&#039;recursive&#039;&#039; (&#039;&#039;-r&#039;&#039;) jelölésre.&lt;br /&gt;
&lt;br /&gt;
==== rm ====&lt;br /&gt;
Az &#039;&#039;&#039;rm&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: &#039;&#039;-r&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm folder -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== less ====&lt;br /&gt;
A &#039;&#039;&#039;less&#039;&#039;&#039; egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
less /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== more ====&lt;br /&gt;
A &#039;&#039;&#039;more&#039;&#039;&#039; szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
more /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== which ====&lt;br /&gt;
A &#039;&#039;&#039;which&#039;&#039; program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az ls parancs abszolút elérési útvonala&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# a which parancs abszolút elérési útvonala&lt;br /&gt;
which which&lt;br /&gt;
&lt;br /&gt;
# a man parancs elérési útvonala&lt;br /&gt;
which man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== file ====&lt;br /&gt;
A &#039;&#039;&#039;file&#039;&#039;&#039; utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file /etc/passwd&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== echo ====&lt;br /&gt;
Az &#039;&#039;&#039;echo&#039;&#039;&#039; mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hello World&amp;quot;&lt;br /&gt;
echo Hello World&lt;br /&gt;
echo Ez egy teszt üzenet&lt;br /&gt;
echo &amp;quot;Ez egy teszt üzenet&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;-n&amp;quot; kapcsoló segítségével kapcsolhatunk ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cat ====&lt;br /&gt;
A &#039;&#039;&#039;cat&#039;&#039;&#039; utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)&lt;br /&gt;
cat /etc/passwd /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a &amp;lt;semmi&amp;gt; összefűzése és megjelenítése a képernyőn&lt;br /&gt;
cat /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== head ====&lt;br /&gt;
A &#039;&#039;&#039;head&#039;&#039;&#039; 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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
head -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tail ====&lt;br /&gt;
A &#039;&#039;&#039;tail&#039;&#039;&#039; hasonlóan működik, mint a &#039;&#039;&#039;head&#039;&#039;&#039;, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
tail -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wc ====&lt;br /&gt;
A &#039;&#039;&#039;wc&#039;&#039;&#039; utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (&#039;&#039;word counter&#039;&#039;): sorok, szavak, karakterek és bájtok száma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Rövid kapcsoló !! Hosszú kapcsoló !! Leírás&lt;br /&gt;
|-&lt;br /&gt;
| -l || --lines || sorok számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -w || --words || szavak számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -c || --chars || karakterek számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
|  || --bytes || bájtok számát adja vissza&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# sorok számát írja ki&lt;br /&gt;
wc -l /etc/passwd&lt;br /&gt;
# szavak számát írja ki&lt;br /&gt;
wc -w /etc/passwd&lt;br /&gt;
# bájtok számát írja ki&lt;br /&gt;
wc --bytes /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# sorok és szavak számát írja ki a képernyőre&lt;br /&gt;
wc -l -w /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== find ====&lt;br /&gt;
A &#039;&#039;&#039;find&#039;&#039;&#039; utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd nevű fájl keresése a /etc könyvtárban&lt;br /&gt;
find /etc -name passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programok csatornái ===&lt;br /&gt;
==== STDIN ====&lt;br /&gt;
==== STDOUT ====&lt;br /&gt;
==== STDERR ====&lt;br /&gt;
&lt;br /&gt;
=== Pipeline ===&lt;br /&gt;
&lt;br /&gt;
=== Parancsbehelyettesítés ===&lt;br /&gt;
=== Feladatok ===&lt;br /&gt;
==== Szedjük ki a &#039;&#039;/etc/passwd&#039;&#039; állomány 20. sorát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvassuk az első 20 sort és levágjuk az utolsót&lt;br /&gt;
head -20 /etc/passwd | tail -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mondjuk meg egy keresett bináris típusát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# fájl elérési út lekérdezése&lt;br /&gt;
# STDOUT =&amp;gt; /bin/ls&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# fájl típusának lekérdezése&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze:&lt;br /&gt;
file `which ls`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
&lt;br /&gt;
==== mcedit ====&lt;br /&gt;
Az &#039;&#039;&#039;mcedit&#039;&#039;&#039; az &#039;&#039;&#039;mc&#039;&#039;&#039; (&#039;&#039;Midnight Commander&#039;&#039;) 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 &#039;&#039;&#039;mc&#039;&#039;&#039; utasítással, amit később az &#039;&#039;&#039;F10&#039;&#039;&#039; 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 &amp;quot;tálcára helyezés&amp;quot; is megoldott, így a &#039;&#039;&#039;Ctrl+O&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Az mcedit megnyitható az &#039;&#039;mc&#039;&#039;-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.&lt;br /&gt;
&lt;br /&gt;
Az egér az mcedit-ben is működik!&lt;br /&gt;
&lt;br /&gt;
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 (&#039;&#039;CTRL+O&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mcedit /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nano ====&lt;br /&gt;
A &#039;&#039;&#039;nano&#039;&#039;&#039; szintén egy szövegszerkesztő alkalmazás.&lt;br /&gt;
&lt;br /&gt;
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:&lt;br /&gt;
* 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)&lt;br /&gt;
* CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba&lt;br /&gt;
* CTRL+O Menti a változásokat&lt;br /&gt;
* CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== chmod ====&lt;br /&gt;
==== shift ====&lt;br /&gt;
==== cut ====&lt;br /&gt;
A &#039;&#039;&#039;cut&#039;&#039;&#039; 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 &#039;&#039;-f&#039;&#039; (&#039;&#039;field&#039;&#039;), ahol a megjelenítendő oszlopokat adhatjuk meg és a &#039;&#039;-d&#039;&#039; (&#039;&#039;delimiter&#039;&#039;), ahol az elválasztó karaktert állíthatjuk be.&lt;br /&gt;
&lt;br /&gt;
Általában a &#039;&#039;/etc/passwd&#039;&#039; állományon dolgozunk, mert ebben egy &#039;&#039;:&#039;&#039;-al elválasztott táblázat található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a fájl első oszlopát szedi ki :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet&lt;br /&gt;
cut -f1 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet és az id-ját&lt;br /&gt;
cut -f1,3 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,&lt;br /&gt;
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát&lt;br /&gt;
cut -f1-3,6 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sort ====&lt;br /&gt;
A &#039;&#039;&#039;sort&#039;&#039;&#039; utasítás segítségével rendezhetjük az adattömböt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a passwd állomány rendezése a felhasználónév szerint - ez van elől&lt;br /&gt;
sort /etc/passwd&lt;br /&gt;
# fordított sorrend - reverse&lt;br /&gt;
sort -r /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;-n&#039;&#039; opciót.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# file egy számokat tartalmazó fájl - egy sor egy fájl&lt;br /&gt;
sort -n file&lt;br /&gt;
# fordított sorrend&lt;br /&gt;
sort -r -n file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tr ====&lt;br /&gt;
A &#039;&#039;&#039;tr&#039;&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az e betűt o-ra, az o betűt e-re cseréli ki&lt;br /&gt;
echo &amp;quot;hello&amp;quot; | tr eo oe&lt;br /&gt;
&lt;br /&gt;
# A T betűt K-ra, az n betűt p-re cseréli ki&lt;br /&gt;
echo &amp;quot;Tanar&amp;quot; | tr Tn Kp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A fenti példák alapján nézzük meg, hogy mi történik:&lt;br /&gt;
# A tr két pozicionális paraméterrel lett meghívva&lt;br /&gt;
## Az első paraméter adja meg a lecserélendő karakterek halmazát&lt;br /&gt;
## A második paraméter adja meg az új karakterek halmazát&lt;br /&gt;
# A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben&lt;br /&gt;
## ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre&lt;br /&gt;
## ha nincs benne, akkor megy tovább&lt;br /&gt;
# a metodika miatt keresztbe is lehet cserélni (pl. &#039;&#039;o&#039;&#039;-t &#039;&#039;e&#039;&#039;-re, &#039;&#039;e&#039;&#039;-t &#039;&#039;o&#039;&#039;-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt &#039;&#039;e&#039;&#039; betűnek a végén &#039;&#039;o&#039;&#039; betűre kéne cserélődnie.&lt;br /&gt;
&lt;br /&gt;
==== if ====&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; 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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
else&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű &#039;&#039;&#039;if&#039;&#039;&#039; elágazást is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Egy olyan program, amelynek a visszatérési értéke hasznos információkat hordoz a futás eredményét tekintve. Ne feledjük el, hogy a &#039;&#039;&#039;return&#039;&#039;&#039; kulcsszóval tudunk ilyen értéket generálni C/C++ kódok esetében. Lássunk egy példát:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  if ( 10 % 2 == 0 ) return 0;&lt;br /&gt;
  else return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fenti program visszatérési értéke információval szolgál számunkra, hogy a 10 osztható-e kettővel, avagy sem. Ez az érték vizsgálható az &#039;&#039;&#039;if&#039;&#039;&#039; segítségével és a válasz függvényében más-más kódokat hajthatunk végre.&lt;br /&gt;
&lt;br /&gt;
A kiértékelés ellentétes a megszokott módszerhez képest (ahol minden igaz, aminek az értéke nem 0).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ha a KIFEJEZÉS 0 értéket ad vissza, akkor IGAZ az állítás, tehát az if-en belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; 0&lt;br /&gt;
then&lt;br /&gt;
  ....&lt;br /&gt;
else&lt;br /&gt;
  ....&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# ha a KIFEJEZÉS nem 0 értéket ad vissza, akkor HAMIS az állítás, tehát az else-n belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; != 0&lt;br /&gt;
then&lt;br /&gt;
    ...&lt;br /&gt;
else&lt;br /&gt;
    ...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programozási nyelvek tanításakor ezért térünk vissza 0-s értékkel (&#039;&#039;&#039;return 0;&#039;&#039;&#039;), a programunk végén, és hiba esetén 1, vagy annál nagyobb értékkel.&lt;br /&gt;
&lt;br /&gt;
==== test ====&lt;br /&gt;
A &#039;&#039;&#039;test&#039;&#039;&#039; parancs logikai függvényeket értékel ki és&lt;br /&gt;
* &#039;&#039;&#039;0&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;IGAZ&#039;&#039;&#039;,&lt;br /&gt;
* &#039;&#039;&#039;1&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;HAMIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; utasítással együtt szoktuk használni, de természetesen ettől független is meghívható.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# megtörténik a logikai kiértékelés, eldől, hogy a két string egyezik-e&lt;br /&gt;
test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
# kiírjuk a képernyőre a test utasítás visszatérési értékét&lt;br /&gt;
echo $?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if&#039;&#039;&#039; utasítással a következőképp használhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# hamis&lt;br /&gt;
if test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# igaz&lt;br /&gt;
if ! test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#igaz&lt;br /&gt;
if test &amp;quot;text1&amp;quot; != &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elérhető egy &#039;&#039;alias&#039;&#039;, aminek segítségével olvashatóbbá tehetjük a &#039;&#039;&#039;test&#039;&#039;&#039; utasítást. Ez a &#039;&#039;&#039;[ ]&#039;&#039;&#039; pár.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ügyeljünk rá, hogy a &#039;&#039;[&#039;&#039; és a &#039;&#039;]&#039;&#039; zárójelek mellett &#039;&#039;whitespace&#039;&#039; karakterek vannak. Ha ezeket kihagyjuk, akkor hibát fogunk kapni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A számok ellenőrzése BASH környezetben körülményesebb, mivel itt minden karakterláncnak számít. Emiatt a következő utasítás sorozat nem várt eredménnyel zárul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;1000&amp;quot; &amp;lt;= &amp;quot;20&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: igaz. De tudjuk, hogy ez az eredmény nem igaz, a BASH mégis így értékelte ki. Az oka, hogy az első karaktereket tekintve (&#039;&#039;1&#039;&#039; és &#039;&#039;2&#039;&#039;) elmondható, hogy az &#039;&#039;1&#039;&#039;-es hamarabb van az ABC-ben (kódtáblában), mint a &#039;&#039;2&#039;&#039;, így az &#039;&#039;1000&#039;&#039;-nek kisebbnek kell lennie (mintha a &amp;quot;alma&amp;quot; és &amp;quot;körte&amp;quot; lenne összehasonlítva, hogy melyik következik előbb az ABC-ben).&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy a &#039;&#039;&#039;test&#039;&#039;&#039; utasítás karakterek helyett számként dolgozza fel a paramétert, kapcsolót kell használnunk:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Kapcsoló !! Angol megnevezés !! Magyar megnevezés&lt;br /&gt;
|-&lt;br /&gt;
| -eq || Equals || Egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -ne ||  Not Equals || Nem egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -lt || Lower than || Kisebb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -le || Lower than or equals || Kisebb vagy egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -gt || Greather than || nagyobb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -ge || Greather than or equals || Nagyobb vagy egyenlő&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ 1000 -le 20 ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: Az elvártaknak megfelelően HAMIS.&lt;br /&gt;
&lt;br /&gt;
==== for ====&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; utasítás segítségével egy lista elemein mehetünk végig. Hasonlóan működik, mint a modern programozási nyelvekben a &#039;&#039;foreach&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Legegyszerűbben a következő utasítással tesztelhetjük, ahol a bemeneti listát soronként látjuk viszont a képernyőn:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in 1 2 3 4 5 6&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen van lehetőségünk a listát más program kimenetéből kinyerni a parancsbehelyettesítés segítségével:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `ls`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; gyakorlatilag a pozicionális paramétereken megy végig, tehát egy lista elem a $1, egy másik listaelem a $2. Tudjuk, hogy ha szóközök között adjuk meg, akkor szóközt is tartalmazhat a paraméterünk. Lássunk egy példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;1 2 3&amp;quot; &amp;quot;4 5 6&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben a képernyőn két sor jelenik meg: &#039;&#039;1 2 3&#039;&#039; és &#039;&#039;4 5 6&#039;&#039;. Azonban a parancsbehelyettesítés nem alkalmaz az idézőjelhez hasonló technikát, tehát azt alkalmazva minden szó (szóközökkel határolt karaktersorozat) új pozicionális paramétert jelent. Lássunk egy az előzőhöz hasonló példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `echo &amp;quot;1 2 3 4 5 6&amp;quot;`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben hat sor jelenik meg, benne egy-egy számmal, tehát az &#039;&#039;&#039;echo &amp;quot;1 2 3 4 5 6&amp;quot;&#039;&#039;&#039; kimenetét szóközönként vágta fel.&lt;br /&gt;
&lt;br /&gt;
==== while ====&lt;br /&gt;
A &#039;&#039;&#039;while&#039;&#039;&#039; utasítás, mint minden programozási nyelvben, itt is felfogható úgy, mint egy többször lefutó &#039;&#039;&#039;if&#039;&#039;&#039;. Éppen ezért a szintaktikájuk megegyezik, csupán a feltételek megírásával kell óvatosan bánnunk, hogy a ciklus mag akkor és addig fusson, ameddig mi azt szeretnénk. A &#039;&#039;&#039;while&#039;&#039;&#039; ciklusnál ugyanazokat az alkalmazásokat írhatjuk be a &#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039; helyére, mint az &#039;&#039;&#039;if&#039;&#039;&#039; esetében.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while KIFEJEZÉS&lt;br /&gt;
do&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például ha azt akarjuk, hogy egy ciklus addig fusson, amíg meg nem jelenik egy fájl a fájlrendszerben, akkor azt a következőképp vezethetjük le:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ellenőrzi, hogy a fájl elérhető-e&lt;br /&gt;
test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ez esetben egyetlen kísérletet teszünk, de nem várjuk meg, hogy oda kerüljön, amennyiben nincs ott&lt;br /&gt;
if test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;A fájl nem létezik&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# várakozunk, amíg a feltétel nem lesz igaz, tehát a fájl nem kerül oda&lt;br /&gt;
while ! test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozunk&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# test parancs helyettesítése []-el&lt;br /&gt;
while ! [ -f &amp;quot;file.txt&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A while ciklusnál érdemes megemlíteni a &#039;&#039;&#039;until&#039;&#039;&#039; utasítást, ami annyiban tér el, hogy a feltétel kiértékelését invertálni kell - tehát ami igaz a &#039;&#039;&#039;while&#039;&#039;&#039; esetében, az hamis az &#039;&#039;&#039;until&#039;&#039;&#039; esetében és fordítva. Így a fenti feladatot megvalósíthatjuk invertálás nélkül, az until utasítással is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
until test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
 echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== seq ====&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítás egy listát generál számunkra, amelyben a megadott lépésszámmal, a megadott legkisebb értéktől a megadott legnagyobb értékig szerepelnek a számok.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# számok 1-10-ig&lt;br /&gt;
seq 10&lt;br /&gt;
&lt;br /&gt;
# számok 5-10-ig&lt;br /&gt;
seq 5 10&lt;br /&gt;
&lt;br /&gt;
# számok 3-tól 10-ig 2-esével&lt;br /&gt;
seq 3 2 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást általában a &#039;&#039;&#039;for&#039;&#039;&#039; ciklus listájában használjuk, hogy elő tudjuk állítani az indexeket.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq 3 2 10`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== read ====&lt;br /&gt;
A &#039;&#039;&#039;read&#039;&#039;&#039; utasítás segítségével a STDIN-ről kérhetünk be információt változóba/változókba. Ha több változót sorolunk fel, akkor a bemenetet szóközöknél vágja el.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvasás var-ba&lt;br /&gt;
# STDIN =&amp;gt; teszt&lt;br /&gt;
#  var =&amp;gt; teszt&lt;br /&gt;
# STDIN =&amp;gt; teszt szöveg&lt;br /&gt;
#  var =&amp;gt; teszt szöveg&lt;br /&gt;
read var&lt;br /&gt;
&lt;br /&gt;
# beolvasás fname és lname változókba&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname = Farkas&lt;br /&gt;
# STDIN =&amp;gt; Attila&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas OPSYS&lt;br /&gt;
read fname lname&lt;br /&gt;
&lt;br /&gt;
# beolvasás három változóba. Ha a felhasználó az utasításokkal szemben több szót adott meg, akkor így biztosíthatjuk, hogy ne legyen szóköz az első két változóban&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS meg valami más&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; OPSYS meg valami más&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utóbbi esetben hibaüzenet is generálható, ha megvizsgáljuk, hogy a &#039;&#039;tmp&#039;&#039; változó értéke üres-e:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Adja meg a teljes nevét: &amp;quot;&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&lt;br /&gt;
# -n =&amp;gt; nem üres?&lt;br /&gt;
# -z =&amp;gt; üres?&lt;br /&gt;
if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Valamit elhibáztál&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk ellenőrzött bekérést végrehajtani:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmp=&amp;quot;start value&amp;quot;&lt;br /&gt;
while [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo -n &amp;quot;Adja meg a teljes nevét FNAME LNAME formátumban: &amp;quot;&lt;br /&gt;
  read fname lname tmp&lt;br /&gt;
  if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
  then&lt;br /&gt;
    echo &amp;quot;Valamit elrontottál!&amp;quot;&lt;br /&gt;
    # ez esetben nem lépünk ki, mert bekérjük újra&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expr ====&lt;br /&gt;
Az &#039;&#039;&#039;expr&#039;&#039;&#039; parancs segítségével tudunk matematikai műveleteket végrehajtani. Mivel a BASH-ben minden változó karakterlánc, így nem tudunk közöttük műveletet végezni. Az &#039;&#039;&#039;expr&#039;&#039;&#039; a paramétereket belül számként kezeli. &#039;&#039;&#039;Csak egész számokkal tud dolgozni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a képernyőre kerül az eredmény&lt;br /&gt;
expr 1 + 2&lt;br /&gt;
expr 4 * 4&lt;br /&gt;
&lt;br /&gt;
# csak egész számot ír ki&lt;br /&gt;
expr 3 / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha tört számokkal kell dolgoznunk, akkor a következőket tehetjük:&lt;br /&gt;
# eltávolítjuk a törtrészt&lt;br /&gt;
# felszorozzuk 10^n-nel, ahol n a törtrész számjegyeivel egyezik meg (pl. 10.02-t 100-al kell szorozni). Az egész térben elvégzett művelet eredményét később vissza osztjuk ugyanannyival, amennyivel korábban felszoroztuk. &#039;&#039;&#039;Ez nem egy egyszerű feladat, hiszen a tört számot egyáltalán nem kezeli az expr, tehát cut, wc és egyéb parancsokkal kell kialakítanunk a számot, ahogy utána szét is kell darabolnunk azt.&#039;&#039;&#039;&lt;br /&gt;
# Másik környezetet használunk, ahol tudunk számokat is kezelni - &#039;&#039;&#039;ez a ZH-n nem elfogadott&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A lehetőségek közül csak az elsőt, a ZH-n teljes mértékben elfogadott megoldást mutatom be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a 3.4-et és a 1.2-őt kell összeadnunk.&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 3&lt;br /&gt;
echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 1&lt;br /&gt;
echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
expr `echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1` + `echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok parancsokhoz ===&lt;br /&gt;
==== Írassuk ki a /etc/passwd több sorát ====&lt;br /&gt;
Több választási lehetőségünk van:&lt;br /&gt;
* ha a kiírandó sorszámok valamilyen logikát követnek (minden második, harmadik stb.), akkor használhatjuk a &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást&lt;br /&gt;
* ha nincs logika a sorszámokban, akkor kézzel kell elkészítenünk a listát&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki minden harmadik sor tartalmát&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# határozzuk meg a seq tartományát&lt;br /&gt;
# min: 1&lt;br /&gt;
# max: ahány sora van a fájlnak&lt;br /&gt;
&lt;br /&gt;
# max érték meghatározás&lt;br /&gt;
# a változó létrehozást lentebb tárgyaljuk&lt;br /&gt;
max=`cat /etc/passwd | wc -l`&lt;br /&gt;
&lt;br /&gt;
# lista meghatározása for ciklushoz&lt;br /&gt;
# 1-től $max-ig hármasával&lt;br /&gt;
seq 1 3 $max&lt;br /&gt;
&lt;br /&gt;
# Rakjuk össze&lt;br /&gt;
for i in `seq 1 3 $max`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát nem tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki a 2., 5., 10. és 11. sorokat&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `2 5 10 11`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fájlok ellenőrzése és másolása ====&lt;br /&gt;
Másoljuk át a /etc/passwd állományt egy könyvtárba (~/test/destination). Ha a célkönyvtár nem létezik, akkor hozzuk létre. Ha a célkönyvtár és a fájl is létezik, akkor írjunk ki hibaüzenetet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# forrás fájl létezésének vizsgálata&lt;br /&gt;
test -f /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# célfájl létezésének vizsgálata&lt;br /&gt;
test -f ~/test/destination/passwd&lt;br /&gt;
&lt;br /&gt;
# mappa létezésének vizsgálata&lt;br /&gt;
test -d ~/test/destination&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
&lt;br /&gt;
# ha a forrásfájl nem létezik&lt;br /&gt;
if ! test -f /etc/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A forrásfájl nem létezik&amp;quot;&lt;br /&gt;
# ha a célfájl létezik&lt;br /&gt;
elif test -f ~/test/destination/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A fájl már létezik&amp;quot;&lt;br /&gt;
# ha a cél mappa nem létezik&lt;br /&gt;
elif ! test -d ~/test/destination&lt;br /&gt;
then&lt;br /&gt;
   # mappa létrehozás - szülőkönyvtárakat is, ha nem léteznek&lt;br /&gt;
   mkdir -p ~/test/destination&lt;br /&gt;
   # fájl belemásolása&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
# ha a célfájl nem létezik, de a célmappa igen&lt;br /&gt;
else&lt;br /&gt;
   # a fájlt bemásoljuk a könyvtárba&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script létrehozása ===&lt;br /&gt;
* Script megírása&lt;br /&gt;
* Futási jog&lt;br /&gt;
&lt;br /&gt;
=== Pozicionális paraméterek ===&lt;br /&gt;
&lt;br /&gt;
=== Változók ===&lt;br /&gt;
&lt;br /&gt;
== 3. óra ==&lt;br /&gt;
 A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a &#039;&#039;grep&#039;&#039;-et foguk megvizsgálni.&lt;br /&gt;
&lt;br /&gt;
=== Reguláris kifejezés szerkezete ===&lt;br /&gt;
A reguláris nyelvek atomokból, lezártakból épül fel, amelynek az eredménye az úgynevezett „összetettek”.&lt;br /&gt;
&lt;br /&gt;
==== Atomok ====&lt;br /&gt;
 Az atomok egy karakterre illeszkednek a sorban.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Atom !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| betűk, számok || saját magukra illeszkednek&lt;br /&gt;
|-&lt;br /&gt;
| ^ || sor elejére illeszkedik (csak egyszer lehet a legelején)&lt;br /&gt;
|-&lt;br /&gt;
| $ || sor végére illeszkedik (csak egyszer lehet a legvégén)&lt;br /&gt;
|-&lt;br /&gt;
| [abc] || halmaz: minden benne lévő elemre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| [^abc] || inverz halmaz: egyetlen benne lévő elemre sem illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| . || mindenre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lezártak ====&lt;br /&gt;
 A lezártak ismétlődéseket fogalmaznak meg egy atomra vonatkozóan. &#039;&#039;&#039;Lezárt csak atom után helyezkedhet el!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Lezárt !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| * || az atomot 0 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| + || az atomot 1 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| ? || az atomot 0 és 1 között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n} || az atom pontosan n-szer fordul elő egymás mellett&lt;br /&gt;
|-&lt;br /&gt;
| {n,m} || az atomot n és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n,} || az atomot n és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {,m} || az atomot 0 és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Összefűzöttek ====&lt;br /&gt;
 Az atomok és a lezártak egymás után írt sorozata.&lt;br /&gt;
A lezártaknál fontos kitétel volt, hogy csak atom után lehet írni. &#039;&#039;&#039;Egy összefűzött újra atomizálható&#039;&#039;&#039; a ( ) karakterekkel.&lt;br /&gt;
Az összefűzöttek tartalmazhatnak uniót (|), ahol több szabály közül bármelyik megvalósulhat egy sikeres illesztéshez.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
 Ez egy teszt szöveg, amin próbálkozunk.&lt;br /&gt;
A fenti szöveget alapul véve, a következő reguláris kifejezéseket hozhatjuk létre:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Reguláris kifejezés !! Illeszkedik? || Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| E || Igen || Van a sorban E betű&lt;br /&gt;
|-&lt;br /&gt;
| a || Igen || Van a sorban a betű&lt;br /&gt;
|-&lt;br /&gt;
| b || Nem || Nincs a sorban b betű&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Igen || A sor elején van az E betű&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Nem || Nincs a sor elején A betű&lt;br /&gt;
|-&lt;br /&gt;
| ^e || Nem || nincs a sor elején e betű&lt;br /&gt;
|-&lt;br /&gt;
| .$ || Igen || Bármilyen karakter lehet a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| \. || Igen || . van a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| k$ || Nem || Nincs k a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| egy || igen || Van a sorban „egy” string&lt;br /&gt;
|-&lt;br /&gt;
| egység || Nem || Nincs a sorban egység string&lt;br /&gt;
|-&lt;br /&gt;
| egy* || Igen || eg kötelező, y 0 vagy végtelenszer lehet (egy, egyy, egyyy, egyyyy ...)&lt;br /&gt;
|-&lt;br /&gt;
| l*egy || Igen || l 0 vagy végtelen, eg kötelező (eg, leg, lleg, llleg, lllleg ...)&lt;br /&gt;
|-&lt;br /&gt;
| l+egy || Nem || Nincs a szövegben &amp;quot;l+egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| l\+egy || Nem || l 1 vagy végtelen hosszú, egy kötelező (legy, llegy, lllegy, llllegy ...)&lt;br /&gt;
|-&lt;br /&gt;
| (egy) || Nem || Nincs a sorban &amp;quot;(egy)&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\) || Igen || Van a sorban &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)* || Igen || Van a sorban legalább 0-szor &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\+ || Igen || Van a sorban legalább 1-szer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\{2\} || Nem || Nincs a sorban pontosan kétszer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| [a-z] || Igen || Vannak benne kisbetűk&lt;br /&gt;
|-&lt;br /&gt;
| [A-Z] || Igen || Van benne nagy betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-D] || Nem || Nincs a sor elején A-D tartományban betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z] || Igen || Nagy betű van a sor elején&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z].*\.$ || Igen || Nagybetűvel kezdőik, középen bármi lehet és ponttal végződik a sor.&lt;br /&gt;
|-&lt;br /&gt;
| [0-9] || Nem || Nincs számjegy a sorban&lt;br /&gt;
|-&lt;br /&gt;
| .* || Igen || Mindenre illeszkedik, bármilyen hosszan (üres sorra is)&lt;br /&gt;
|-&lt;br /&gt;
| ^$ || Nem || Csak az üres sorra illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| ^.\+$ || Igen || Mindenre illeszkedik, kivéve az üres sorra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A következő kifejezés szintén illeszkedik:&lt;br /&gt;
 ^[A-Z].*\(egy\)\|\(kettő\).*\.$ =&amp;gt; A sor elején nagybetűvel kezdődik, van a közepén valahol benne &amp;quot;egy&amp;quot; vagy &amp;quot;kettő&amp;quot; karakterlánc és ponttal végződik. A köztes karakterek értéke nincs megszabva.&lt;br /&gt;
&lt;br /&gt;
==== grep ====&lt;br /&gt;
A &#039;&#039;&#039;grep&#039;&#039;&#039; utasítás segítségével végezhetünk el reguláris kifejezés, tehát minta illesztést fájlokon. Amennyiben nem adunk meg fájl paramétert, a STDIN csatornát olvassa. Az eredmények a STDOUT-ra íródnak.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+ Fontosabb kapcsolók&lt;br /&gt;
|-&lt;br /&gt;
! Rövid név !! Hosszú név !! Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| -c || --count || Megszámolja az illeszkedő sorokat&lt;br /&gt;
|-&lt;br /&gt;
| -o || --only-matching || Csak a mintára illeszkedő részt írja ki (nem a teljes sort)&lt;br /&gt;
|-&lt;br /&gt;
| -n || --line-number || Megszámozza a sorokat (a fájl alapján, nem a megjelenítés szerint)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Példa =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# nologin környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;nologin&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;nologin&amp;quot; # STDIN-en érkező adatok szűrése&lt;br /&gt;
&lt;br /&gt;
# bash környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;bash&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;bash&amp;quot;    # STDIN-en érkező adatok szűrése&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Példa 2 =====&lt;br /&gt;
Írjunk egy scriptet, amely a /bin/bash futtatási környezetet kapó felhasználók nevét kiírja a képernyőre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# a fájl sorainak száma&lt;br /&gt;
lines=`cat $file | wc -l`&lt;br /&gt;
&lt;br /&gt;
# végig megyünk a fájl sorain&lt;br /&gt;
for i in `seq 1 $lines`; do&lt;br /&gt;
 # itt kapjuk meg az i. sort&lt;br /&gt;
 line=`head -$i $file | tail -1`&lt;br /&gt;
 # kiszedjük a shell környezetet&lt;br /&gt;
 shell=`echo $line | cut -f7 -d&#039;:&#039;`&lt;br /&gt;
 # ha ez &amp;quot;/bin/bash&amp;quot;, akkor kivágjuk a sor első oszlopát, ezt írhatjuk a képernyőre&lt;br /&gt;
 if test $shell == &amp;quot;/bin/bash&amp;quot;; then&lt;br /&gt;
  echo $line | cut -f1 -d&#039;:&#039;&lt;br /&gt;
 fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.227s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# szűrjük ki a sorokat, amelyeknek a végén a &amp;quot;/bin/bash&amp;quot; karakterlánc található &lt;br /&gt;
#  és a kapott eredményhalmaznak vágjuk ki az első oszlopát&lt;br /&gt;
# a kapott eredményhalmaz még mindig megfelel a /etc/passwd eredeti formátumának, &lt;br /&gt;
#  csak a sorok számát csökkentettük a szűrési feltételnek megfelelően!&lt;br /&gt;
grep &amp;quot;/bin/bash$&amp;quot; $file | cut -f1 -d&#039;:&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.003s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== MAC cím parser =====&lt;br /&gt;
Legyen egy MAC címeket tartalmazó fáljunk - mac-cimek.txt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:0C:42:AB:CD:EF&lt;br /&gt;
00:0c:42:ab:cd:ef&lt;br /&gt;
00-0C-42-AB-CD-EF&lt;br /&gt;
00-0c-42-ab-cd-ef&lt;br /&gt;
000c42abcdef&lt;br /&gt;
000C42ABCDEF&lt;br /&gt;
00:0C:42:AB:CD:EF:AB&lt;br /&gt;
00:0C:42:AB:CD:EF:&lt;br /&gt;
0G:0C:42:AB:CD:EF&lt;br /&gt;
00.0C.42.AB.CD.EF&lt;br /&gt;
00:0C:42:AB:CD:EG&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ebben a fájlban vannak megfelelő és hibás szintaktikájú címek is. A feladat, hogy készítsünk reguláris kifejezést, amely megjeleníti a helyeseket a képernyőn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;quot;^\([[:xdigit:]]\{2\}[-:]\?\)\{5\}[[:xdigit:]]\{2\}$&amp;quot; mac-cimek.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Érdekességképp beletehetünk a fájlba a MAC címek elé és/vagy után véletlenszerű (megjeleníthető) karaktereket.&lt;br /&gt;
 Mit tapasztalunk? Miért?&lt;br /&gt;
&lt;br /&gt;
 Távolítsuk el a sor eleje és a sor vége illesztéseket és futtassuk a grep-et a -o kapcsolóval? Mi változik?&lt;br /&gt;
 (&#039;&#039;grep -o &amp;quot;\(&#039;&#039;&#039;[&#039;&#039;&#039;[:xdigit:]&#039;&#039;&#039;]&#039;&#039;&#039;\{2\}[-:]\?\)\{5\}&#039;&#039;&#039;[&#039;&#039;&#039;[:xdigit:]&#039;&#039;&#039;]&#039;&#039;&#039;\{2\}&amp;quot; mac-cimek.txt&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== 4. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
== 5. óra ==&lt;br /&gt;
 Az ötödik órán minta ZH feladatsort oldunk meg.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=823</id>
		<title>EDU::GAMF::Operációs rendszerek::Gyakorlatok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=823"/>
		<updated>2024-10-09T12:09:20Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* MAC cím parser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
==== man ====&lt;br /&gt;
A &#039;&#039;man&#039;&#039; 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.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Használata:&#039;&#039;&#039;&lt;br /&gt;
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 &#039;&#039;man&#039;&#039; parancs használati útmutatóját is a következő utasítás kiadásával:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a &#039;&#039;head&#039;&#039; utasítás dokumentációját az alábbi módon érhetjük el&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ls ====&lt;br /&gt;
 Érdemes megtekinteni a parancs dokumentációját a &#039;&#039;man ls&#039;&#039; utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.&lt;br /&gt;
Az &#039;&#039;&#039;ls&#039;&#039;&#039; parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a &#039;&#039;&#039;.&#039;&#039;&#039;, tehát a jelenlegi könyvtárat listázza.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# meghívás paraméter nélkül&lt;br /&gt;
ls&lt;br /&gt;
&lt;br /&gt;
# meghívás . paraméterrel - ugyanaz az eredmény&lt;br /&gt;
ls .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár listázása&lt;br /&gt;
ls /&lt;br /&gt;
&lt;br /&gt;
# a /usr/local/bin könyvtár listázása&lt;br /&gt;
ls /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait&lt;br /&gt;
ls -l&lt;br /&gt;
&lt;br /&gt;
# A /bin/ls fájl jogosultságainak lekérdezése&lt;br /&gt;
ls -l /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az &#039;&#039;&#039;ls&#039;&#039;&#039; megnyitja a könyvtárat és annak tartalmát listázza ki.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga&lt;br /&gt;
ls /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést&lt;br /&gt;
ls / -l&lt;br /&gt;
&lt;br /&gt;
# 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&lt;br /&gt;
# Ekkor a könyvtár listázódik, nem a tartalma&lt;br /&gt;
ls -d /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pwd ====&lt;br /&gt;
A &#039;&#039;&#039;pwd&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cd ====&lt;br /&gt;
A &#039;&#039;&#039;cd&#039;&#039;&#039; parancs segítségével könyvtárat válthatunk (&#039;&#039;changedir&#039;&#039;). A cél könyvtár nevét paraméterben kell megadnunk.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár megnyitása&lt;br /&gt;
cd /&lt;br /&gt;
&lt;br /&gt;
# HOME könyvtár megnyitása&lt;br /&gt;
# ~ egy alias&lt;br /&gt;
cd ~&lt;br /&gt;
&lt;br /&gt;
# /usr/bin megnyitása&lt;br /&gt;
cd /usr/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hivatkozásoknál, így a &#039;&#039;cd&#039;&#039; esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:&lt;br /&gt;
* Az abszolút hivatkozás / elérési út mindig &#039;&#039;/&#039;&#039; jellel kezdődik. pl.: &#039;&#039;cd /home/&#039;&#039;, &#039;&#039;cd /usr/bin&#039;&#039;&lt;br /&gt;
* A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: &#039;&#039;cd home&#039;&#039;, &#039;&#039;cd bin&#039;&#039;, vagy &#039;&#039;.&#039;&#039; illetve &#039;&#039;..&#039;&#039; karakterekkel kezdődnek.&lt;br /&gt;
** A &#039;&#039;.&#039;&#039; könyvtár jelenti az aktuális könyvtárat&lt;br /&gt;
** A &#039;&#039;..&#039;&#039; könyvtár jelenti a szülő könyvtárat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# szülő könyvtár megnyitása&lt;br /&gt;
cd ../&lt;br /&gt;
&lt;br /&gt;
# a szülőkönyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ../bin&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ./bin&lt;br /&gt;
cd bin      # vegyük észre: a ./ ez esetben elhagyható&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mkdir ====&lt;br /&gt;
Az &#039;&#039;&#039;mkdir&#039;&#039;&#039; parancs segítségével könyvtárakat hozhatunk létre (&#039;&#039;make directory&#039;&#039;). Alapértelmezetten a &#039;&#039;.&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# folder könyvtár létrehozása az aktuális könyvtárban&lt;br /&gt;
mkdir folder&lt;br /&gt;
mkdir ./folder2&lt;br /&gt;
# subfolder létrehozása a folder könyvtáron belül.&lt;br /&gt;
mkdir folder/subfolder&lt;br /&gt;
&lt;br /&gt;
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk&lt;br /&gt;
mkdir /tmp/folder&lt;br /&gt;
&lt;br /&gt;
# folder létrehozása a szülőkönyvtárban&lt;br /&gt;
mkdir ../folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtáron belül létrejön egy &#039;&#039;test&#039;&#039; könyvtár és azon belül jön létre a &#039;&#039;folder&#039;&#039; könyvtár.&lt;br /&gt;
mkdir /test/folder/ -p&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban jön létre egy &#039;&#039;test&#039;&#039; könyvtár és azon belül a &#039;&#039;folder&#039;&#039; könyvtár&lt;br /&gt;
mkdir -p test/folder&lt;br /&gt;
&lt;br /&gt;
# a jelenlegi könyvtárban létrejon a &#039;&#039;test&#039;&#039; könyvtár, &lt;br /&gt;
# azon belül létrejön egy &#039;&#039;folder1&#039;&#039; és egy &#039;&#039;folder2&#039;&#039; könyvtár, &lt;br /&gt;
# majd mind a kettőben létrejön a &#039;&#039;work&#039;&#039; könyvtár.&lt;br /&gt;
mkdir -p test/{folder1,folder2}/work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.&lt;br /&gt;
&lt;br /&gt;
==== rmdir ====&lt;br /&gt;
Az &#039;&#039;&#039;rmdir&#039;&#039;&#039; parancs segítségével üres könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figyelem&#039;&#039;&#039;! 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!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# relatív hivatkozással&lt;br /&gt;
rmdir test/folder&lt;br /&gt;
&lt;br /&gt;
# abszolút hivatkozással&lt;br /&gt;
rmdir /test/folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cp ====&lt;br /&gt;
A &#039;&#039;&#039;cp&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd ./file&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba&lt;br /&gt;
cp /etc/passwd /tmp/&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak másolása esetén a &#039;&#039;-r&#039;&#039; kapcsoló használata szükséges (&#039;&#039;recursive&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba&lt;br /&gt;
cp /etc/network /tmp/ -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mv ====&lt;br /&gt;
Az &#039;&#039;&#039;mv&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.&lt;br /&gt;
&lt;br /&gt;
 A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd állomány átnevezése file-ra&lt;br /&gt;
mv passwd file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány átnevezése file-ra&lt;br /&gt;
mv /etc/passwd /etc/file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be&lt;br /&gt;
mv /etc/passwd /tmp&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra&lt;br /&gt;
mv /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a &#039;&#039;recursive&#039;&#039; (&#039;&#039;-r&#039;&#039;) jelölésre.&lt;br /&gt;
&lt;br /&gt;
==== rm ====&lt;br /&gt;
Az &#039;&#039;&#039;rm&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: &#039;&#039;-r&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm folder -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== less ====&lt;br /&gt;
A &#039;&#039;&#039;less&#039;&#039;&#039; egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
less /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== more ====&lt;br /&gt;
A &#039;&#039;&#039;more&#039;&#039;&#039; szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
more /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== which ====&lt;br /&gt;
A &#039;&#039;&#039;which&#039;&#039; program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az ls parancs abszolút elérési útvonala&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# a which parancs abszolút elérési útvonala&lt;br /&gt;
which which&lt;br /&gt;
&lt;br /&gt;
# a man parancs elérési útvonala&lt;br /&gt;
which man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== file ====&lt;br /&gt;
A &#039;&#039;&#039;file&#039;&#039;&#039; utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file /etc/passwd&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== echo ====&lt;br /&gt;
Az &#039;&#039;&#039;echo&#039;&#039;&#039; mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hello World&amp;quot;&lt;br /&gt;
echo Hello World&lt;br /&gt;
echo Ez egy teszt üzenet&lt;br /&gt;
echo &amp;quot;Ez egy teszt üzenet&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;-n&amp;quot; kapcsoló segítségével kapcsolhatunk ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cat ====&lt;br /&gt;
A &#039;&#039;&#039;cat&#039;&#039;&#039; utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)&lt;br /&gt;
cat /etc/passwd /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a &amp;lt;semmi&amp;gt; összefűzése és megjelenítése a képernyőn&lt;br /&gt;
cat /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== head ====&lt;br /&gt;
A &#039;&#039;&#039;head&#039;&#039;&#039; 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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
head -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tail ====&lt;br /&gt;
A &#039;&#039;&#039;tail&#039;&#039;&#039; hasonlóan működik, mint a &#039;&#039;&#039;head&#039;&#039;&#039;, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
tail -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wc ====&lt;br /&gt;
A &#039;&#039;&#039;wc&#039;&#039;&#039; utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (&#039;&#039;word counter&#039;&#039;): sorok, szavak, karakterek és bájtok száma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Rövid kapcsoló !! Hosszú kapcsoló !! Leírás&lt;br /&gt;
|-&lt;br /&gt;
| -l || --lines || sorok számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -w || --words || szavak számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -c || --chars || karakterek számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
|  || --bytes || bájtok számát adja vissza&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# sorok számát írja ki&lt;br /&gt;
wc -l /etc/passwd&lt;br /&gt;
# szavak számát írja ki&lt;br /&gt;
wc -w /etc/passwd&lt;br /&gt;
# bájtok számát írja ki&lt;br /&gt;
wc --bytes /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# sorok és szavak számát írja ki a képernyőre&lt;br /&gt;
wc -l -w /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== find ====&lt;br /&gt;
A &#039;&#039;&#039;find&#039;&#039;&#039; utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd nevű fájl keresése a /etc könyvtárban&lt;br /&gt;
find /etc -name passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programok csatornái ===&lt;br /&gt;
==== STDIN ====&lt;br /&gt;
==== STDOUT ====&lt;br /&gt;
==== STDERR ====&lt;br /&gt;
&lt;br /&gt;
=== Pipeline ===&lt;br /&gt;
&lt;br /&gt;
=== Parancsbehelyettesítés ===&lt;br /&gt;
=== Feladatok ===&lt;br /&gt;
==== Szedjük ki a &#039;&#039;/etc/passwd&#039;&#039; állomány 20. sorát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvassuk az első 20 sort és levágjuk az utolsót&lt;br /&gt;
head -20 /etc/passwd | tail -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mondjuk meg egy keresett bináris típusát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# fájl elérési út lekérdezése&lt;br /&gt;
# STDOUT =&amp;gt; /bin/ls&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# fájl típusának lekérdezése&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze:&lt;br /&gt;
file `which ls`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
&lt;br /&gt;
==== mcedit ====&lt;br /&gt;
Az &#039;&#039;&#039;mcedit&#039;&#039;&#039; az &#039;&#039;&#039;mc&#039;&#039;&#039; (&#039;&#039;Midnight Commander&#039;&#039;) 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 &#039;&#039;&#039;mc&#039;&#039;&#039; utasítással, amit később az &#039;&#039;&#039;F10&#039;&#039;&#039; 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 &amp;quot;tálcára helyezés&amp;quot; is megoldott, így a &#039;&#039;&#039;Ctrl+O&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Az mcedit megnyitható az &#039;&#039;mc&#039;&#039;-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.&lt;br /&gt;
&lt;br /&gt;
Az egér az mcedit-ben is működik!&lt;br /&gt;
&lt;br /&gt;
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 (&#039;&#039;CTRL+O&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mcedit /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nano ====&lt;br /&gt;
A &#039;&#039;&#039;nano&#039;&#039;&#039; szintén egy szövegszerkesztő alkalmazás.&lt;br /&gt;
&lt;br /&gt;
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:&lt;br /&gt;
* 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)&lt;br /&gt;
* CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba&lt;br /&gt;
* CTRL+O Menti a változásokat&lt;br /&gt;
* CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== chmod ====&lt;br /&gt;
==== shift ====&lt;br /&gt;
==== cut ====&lt;br /&gt;
A &#039;&#039;&#039;cut&#039;&#039;&#039; 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 &#039;&#039;-f&#039;&#039; (&#039;&#039;field&#039;&#039;), ahol a megjelenítendő oszlopokat adhatjuk meg és a &#039;&#039;-d&#039;&#039; (&#039;&#039;delimiter&#039;&#039;), ahol az elválasztó karaktert állíthatjuk be.&lt;br /&gt;
&lt;br /&gt;
Általában a &#039;&#039;/etc/passwd&#039;&#039; állományon dolgozunk, mert ebben egy &#039;&#039;:&#039;&#039;-al elválasztott táblázat található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a fájl első oszlopát szedi ki :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet&lt;br /&gt;
cut -f1 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet és az id-ját&lt;br /&gt;
cut -f1,3 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,&lt;br /&gt;
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát&lt;br /&gt;
cut -f1-3,6 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sort ====&lt;br /&gt;
A &#039;&#039;&#039;sort&#039;&#039;&#039; utasítás segítségével rendezhetjük az adattömböt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a passwd állomány rendezése a felhasználónév szerint - ez van elől&lt;br /&gt;
sort /etc/passwd&lt;br /&gt;
# fordított sorrend - reverse&lt;br /&gt;
sort -r /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;-n&#039;&#039; opciót.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# file egy számokat tartalmazó fájl - egy sor egy fájl&lt;br /&gt;
sort -n file&lt;br /&gt;
# fordított sorrend&lt;br /&gt;
sort -r -n file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tr ====&lt;br /&gt;
A &#039;&#039;&#039;tr&#039;&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az e betűt o-ra, az o betűt e-re cseréli ki&lt;br /&gt;
echo &amp;quot;hello&amp;quot; | tr eo oe&lt;br /&gt;
&lt;br /&gt;
# A T betűt K-ra, az n betűt p-re cseréli ki&lt;br /&gt;
echo &amp;quot;Tanar&amp;quot; | tr Tn Kp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A fenti példák alapján nézzük meg, hogy mi történik:&lt;br /&gt;
# A tr két pozicionális paraméterrel lett meghívva&lt;br /&gt;
## Az első paraméter adja meg a lecserélendő karakterek halmazát&lt;br /&gt;
## A második paraméter adja meg az új karakterek halmazát&lt;br /&gt;
# A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben&lt;br /&gt;
## ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre&lt;br /&gt;
## ha nincs benne, akkor megy tovább&lt;br /&gt;
# a metodika miatt keresztbe is lehet cserélni (pl. &#039;&#039;o&#039;&#039;-t &#039;&#039;e&#039;&#039;-re, &#039;&#039;e&#039;&#039;-t &#039;&#039;o&#039;&#039;-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt &#039;&#039;e&#039;&#039; betűnek a végén &#039;&#039;o&#039;&#039; betűre kéne cserélődnie.&lt;br /&gt;
&lt;br /&gt;
==== if ====&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; 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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
else&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű &#039;&#039;&#039;if&#039;&#039;&#039; elágazást is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Egy olyan program, amelynek a visszatérési értéke hasznos információkat hordoz a futás eredményét tekintve. Ne feledjük el, hogy a &#039;&#039;&#039;return&#039;&#039;&#039; kulcsszóval tudunk ilyen értéket generálni C/C++ kódok esetében. Lássunk egy példát:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  if ( 10 % 2 == 0 ) return 0;&lt;br /&gt;
  else return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fenti program visszatérési értéke információval szolgál számunkra, hogy a 10 osztható-e kettővel, avagy sem. Ez az érték vizsgálható az &#039;&#039;&#039;if&#039;&#039;&#039; segítségével és a válasz függvényében más-más kódokat hajthatunk végre.&lt;br /&gt;
&lt;br /&gt;
A kiértékelés ellentétes a megszokott módszerhez képest (ahol minden igaz, aminek az értéke nem 0).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ha a KIFEJEZÉS 0 értéket ad vissza, akkor IGAZ az állítás, tehát az if-en belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; 0&lt;br /&gt;
then&lt;br /&gt;
  ....&lt;br /&gt;
else&lt;br /&gt;
  ....&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# ha a KIFEJEZÉS nem 0 értéket ad vissza, akkor HAMIS az állítás, tehát az else-n belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; != 0&lt;br /&gt;
then&lt;br /&gt;
    ...&lt;br /&gt;
else&lt;br /&gt;
    ...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programozási nyelvek tanításakor ezért térünk vissza 0-s értékkel (&#039;&#039;&#039;return 0;&#039;&#039;&#039;), a programunk végén, és hiba esetén 1, vagy annál nagyobb értékkel.&lt;br /&gt;
&lt;br /&gt;
==== test ====&lt;br /&gt;
A &#039;&#039;&#039;test&#039;&#039;&#039; parancs logikai függvényeket értékel ki és&lt;br /&gt;
* &#039;&#039;&#039;0&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;IGAZ&#039;&#039;&#039;,&lt;br /&gt;
* &#039;&#039;&#039;1&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;HAMIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; utasítással együtt szoktuk használni, de természetesen ettől független is meghívható.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# megtörténik a logikai kiértékelés, eldől, hogy a két string egyezik-e&lt;br /&gt;
test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
# kiírjuk a képernyőre a test utasítás visszatérési értékét&lt;br /&gt;
echo $?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if&#039;&#039;&#039; utasítással a következőképp használhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# hamis&lt;br /&gt;
if test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# igaz&lt;br /&gt;
if ! test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#igaz&lt;br /&gt;
if test &amp;quot;text1&amp;quot; != &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elérhető egy &#039;&#039;alias&#039;&#039;, aminek segítségével olvashatóbbá tehetjük a &#039;&#039;&#039;test&#039;&#039;&#039; utasítást. Ez a &#039;&#039;&#039;[ ]&#039;&#039;&#039; pár.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ügyeljünk rá, hogy a &#039;&#039;[&#039;&#039; és a &#039;&#039;]&#039;&#039; zárójelek mellett &#039;&#039;whitespace&#039;&#039; karakterek vannak. Ha ezeket kihagyjuk, akkor hibát fogunk kapni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A számok ellenőrzése BASH környezetben körülményesebb, mivel itt minden karakterláncnak számít. Emiatt a következő utasítás sorozat nem várt eredménnyel zárul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;1000&amp;quot; &amp;lt;= &amp;quot;20&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: igaz. De tudjuk, hogy ez az eredmény nem igaz, a BASH mégis így értékelte ki. Az oka, hogy az első karaktereket tekintve (&#039;&#039;1&#039;&#039; és &#039;&#039;2&#039;&#039;) elmondható, hogy az &#039;&#039;1&#039;&#039;-es hamarabb van az ABC-ben (kódtáblában), mint a &#039;&#039;2&#039;&#039;, így az &#039;&#039;1000&#039;&#039;-nek kisebbnek kell lennie (mintha a &amp;quot;alma&amp;quot; és &amp;quot;körte&amp;quot; lenne összehasonlítva, hogy melyik következik előbb az ABC-ben).&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy a &#039;&#039;&#039;test&#039;&#039;&#039; utasítás karakterek helyett számként dolgozza fel a paramétert, kapcsolót kell használnunk:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Kapcsoló !! Angol megnevezés !! Magyar megnevezés&lt;br /&gt;
|-&lt;br /&gt;
| -eq || Equals || Egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -ne ||  Not Equals || Nem egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -lt || Lower than || Kisebb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -le || Lower than or equals || Kisebb vagy egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -gt || Greather than || nagyobb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -ge || Greather than or equals || Nagyobb vagy egyenlő&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ 1000 -le 20 ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: Az elvártaknak megfelelően HAMIS.&lt;br /&gt;
&lt;br /&gt;
==== for ====&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; utasítás segítségével egy lista elemein mehetünk végig. Hasonlóan működik, mint a modern programozási nyelvekben a &#039;&#039;foreach&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Legegyszerűbben a következő utasítással tesztelhetjük, ahol a bemeneti listát soronként látjuk viszont a képernyőn:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in 1 2 3 4 5 6&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen van lehetőségünk a listát más program kimenetéből kinyerni a parancsbehelyettesítés segítségével:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `ls`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; gyakorlatilag a pozicionális paramétereken megy végig, tehát egy lista elem a $1, egy másik listaelem a $2. Tudjuk, hogy ha szóközök között adjuk meg, akkor szóközt is tartalmazhat a paraméterünk. Lássunk egy példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;1 2 3&amp;quot; &amp;quot;4 5 6&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben a képernyőn két sor jelenik meg: &#039;&#039;1 2 3&#039;&#039; és &#039;&#039;4 5 6&#039;&#039;. Azonban a parancsbehelyettesítés nem alkalmaz az idézőjelhez hasonló technikát, tehát azt alkalmazva minden szó (szóközökkel határolt karaktersorozat) új pozicionális paramétert jelent. Lássunk egy az előzőhöz hasonló példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `echo &amp;quot;1 2 3 4 5 6&amp;quot;`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben hat sor jelenik meg, benne egy-egy számmal, tehát az &#039;&#039;&#039;echo &amp;quot;1 2 3 4 5 6&amp;quot;&#039;&#039;&#039; kimenetét szóközönként vágta fel.&lt;br /&gt;
&lt;br /&gt;
==== while ====&lt;br /&gt;
A &#039;&#039;&#039;while&#039;&#039;&#039; utasítás, mint minden programozási nyelvben, itt is felfogható úgy, mint egy többször lefutó &#039;&#039;&#039;if&#039;&#039;&#039;. Éppen ezért a szintaktikájuk megegyezik, csupán a feltételek megírásával kell óvatosan bánnunk, hogy a ciklus mag akkor és addig fusson, ameddig mi azt szeretnénk. A &#039;&#039;&#039;while&#039;&#039;&#039; ciklusnál ugyanazokat az alkalmazásokat írhatjuk be a &#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039; helyére, mint az &#039;&#039;&#039;if&#039;&#039;&#039; esetében.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while KIFEJEZÉS&lt;br /&gt;
do&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például ha azt akarjuk, hogy egy ciklus addig fusson, amíg meg nem jelenik egy fájl a fájlrendszerben, akkor azt a következőképp vezethetjük le:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ellenőrzi, hogy a fájl elérhető-e&lt;br /&gt;
test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ez esetben egyetlen kísérletet teszünk, de nem várjuk meg, hogy oda kerüljön, amennyiben nincs ott&lt;br /&gt;
if test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;A fájl nem létezik&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# várakozunk, amíg a feltétel nem lesz igaz, tehát a fájl nem kerül oda&lt;br /&gt;
while ! test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozunk&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# test parancs helyettesítése []-el&lt;br /&gt;
while ! [ -f &amp;quot;file.txt&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A while ciklusnál érdemes megemlíteni a &#039;&#039;&#039;until&#039;&#039;&#039; utasítást, ami annyiban tér el, hogy a feltétel kiértékelését invertálni kell - tehát ami igaz a &#039;&#039;&#039;while&#039;&#039;&#039; esetében, az hamis az &#039;&#039;&#039;until&#039;&#039;&#039; esetében és fordítva. Így a fenti feladatot megvalósíthatjuk invertálás nélkül, az until utasítással is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
until test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
 echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== seq ====&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítás egy listát generál számunkra, amelyben a megadott lépésszámmal, a megadott legkisebb értéktől a megadott legnagyobb értékig szerepelnek a számok.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# számok 1-10-ig&lt;br /&gt;
seq 10&lt;br /&gt;
&lt;br /&gt;
# számok 5-10-ig&lt;br /&gt;
seq 5 10&lt;br /&gt;
&lt;br /&gt;
# számok 3-tól 10-ig 2-esével&lt;br /&gt;
seq 3 2 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást általában a &#039;&#039;&#039;for&#039;&#039;&#039; ciklus listájában használjuk, hogy elő tudjuk állítani az indexeket.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq 3 2 10`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== read ====&lt;br /&gt;
A &#039;&#039;&#039;read&#039;&#039;&#039; utasítás segítségével a STDIN-ről kérhetünk be információt változóba/változókba. Ha több változót sorolunk fel, akkor a bemenetet szóközöknél vágja el.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvasás var-ba&lt;br /&gt;
# STDIN =&amp;gt; teszt&lt;br /&gt;
#  var =&amp;gt; teszt&lt;br /&gt;
# STDIN =&amp;gt; teszt szöveg&lt;br /&gt;
#  var =&amp;gt; teszt szöveg&lt;br /&gt;
read var&lt;br /&gt;
&lt;br /&gt;
# beolvasás fname és lname változókba&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname = Farkas&lt;br /&gt;
# STDIN =&amp;gt; Attila&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas OPSYS&lt;br /&gt;
read fname lname&lt;br /&gt;
&lt;br /&gt;
# beolvasás három változóba. Ha a felhasználó az utasításokkal szemben több szót adott meg, akkor így biztosíthatjuk, hogy ne legyen szóköz az első két változóban&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS meg valami más&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; OPSYS meg valami más&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utóbbi esetben hibaüzenet is generálható, ha megvizsgáljuk, hogy a &#039;&#039;tmp&#039;&#039; változó értéke üres-e:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Adja meg a teljes nevét: &amp;quot;&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&lt;br /&gt;
# -n =&amp;gt; nem üres?&lt;br /&gt;
# -z =&amp;gt; üres?&lt;br /&gt;
if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Valamit elhibáztál&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk ellenőrzött bekérést végrehajtani:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmp=&amp;quot;start value&amp;quot;&lt;br /&gt;
while [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo -n &amp;quot;Adja meg a teljes nevét FNAME LNAME formátumban: &amp;quot;&lt;br /&gt;
  read fname lname tmp&lt;br /&gt;
  if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
  then&lt;br /&gt;
    echo &amp;quot;Valamit elrontottál!&amp;quot;&lt;br /&gt;
    # ez esetben nem lépünk ki, mert bekérjük újra&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expr ====&lt;br /&gt;
Az &#039;&#039;&#039;expr&#039;&#039;&#039; parancs segítségével tudunk matematikai műveleteket végrehajtani. Mivel a BASH-ben minden változó karakterlánc, így nem tudunk közöttük műveletet végezni. Az &#039;&#039;&#039;expr&#039;&#039;&#039; a paramétereket belül számként kezeli. &#039;&#039;&#039;Csak egész számokkal tud dolgozni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a képernyőre kerül az eredmény&lt;br /&gt;
expr 1 + 2&lt;br /&gt;
expr 4 * 4&lt;br /&gt;
&lt;br /&gt;
# csak egész számot ír ki&lt;br /&gt;
expr 3 / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha tört számokkal kell dolgoznunk, akkor a következőket tehetjük:&lt;br /&gt;
# eltávolítjuk a törtrészt&lt;br /&gt;
# felszorozzuk 10^n-nel, ahol n a törtrész számjegyeivel egyezik meg (pl. 10.02-t 100-al kell szorozni). Az egész térben elvégzett művelet eredményét később vissza osztjuk ugyanannyival, amennyivel korábban felszoroztuk. &#039;&#039;&#039;Ez nem egy egyszerű feladat, hiszen a tört számot egyáltalán nem kezeli az expr, tehát cut, wc és egyéb parancsokkal kell kialakítanunk a számot, ahogy utána szét is kell darabolnunk azt.&#039;&#039;&#039;&lt;br /&gt;
# Másik környezetet használunk, ahol tudunk számokat is kezelni - &#039;&#039;&#039;ez a ZH-n nem elfogadott&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A lehetőségek közül csak az elsőt, a ZH-n teljes mértékben elfogadott megoldást mutatom be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a 3.4-et és a 1.2-őt kell összeadnunk.&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 3&lt;br /&gt;
echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 1&lt;br /&gt;
echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
expr `echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1` + `echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok parancsokhoz ===&lt;br /&gt;
==== Írassuk ki a /etc/passwd több sorát ====&lt;br /&gt;
Több választási lehetőségünk van:&lt;br /&gt;
* ha a kiírandó sorszámok valamilyen logikát követnek (minden második, harmadik stb.), akkor használhatjuk a &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást&lt;br /&gt;
* ha nincs logika a sorszámokban, akkor kézzel kell elkészítenünk a listát&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki minden harmadik sor tartalmát&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# határozzuk meg a seq tartományát&lt;br /&gt;
# min: 1&lt;br /&gt;
# max: ahány sora van a fájlnak&lt;br /&gt;
&lt;br /&gt;
# max érték meghatározás&lt;br /&gt;
# a változó létrehozást lentebb tárgyaljuk&lt;br /&gt;
max=`cat /etc/passwd | wc -l`&lt;br /&gt;
&lt;br /&gt;
# lista meghatározása for ciklushoz&lt;br /&gt;
# 1-től $max-ig hármasával&lt;br /&gt;
seq 1 3 $max&lt;br /&gt;
&lt;br /&gt;
# Rakjuk össze&lt;br /&gt;
for i in `seq 1 3 $max`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát nem tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki a 2., 5., 10. és 11. sorokat&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `2 5 10 11`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fájlok ellenőrzése és másolása ====&lt;br /&gt;
Másoljuk át a /etc/passwd állományt egy könyvtárba (~/test/destination). Ha a célkönyvtár nem létezik, akkor hozzuk létre. Ha a célkönyvtár és a fájl is létezik, akkor írjunk ki hibaüzenetet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# forrás fájl létezésének vizsgálata&lt;br /&gt;
test -f /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# célfájl létezésének vizsgálata&lt;br /&gt;
test -f ~/test/destination/passwd&lt;br /&gt;
&lt;br /&gt;
# mappa létezésének vizsgálata&lt;br /&gt;
test -d ~/test/destination&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
&lt;br /&gt;
# ha a forrásfájl nem létezik&lt;br /&gt;
if ! test -f /etc/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A forrásfájl nem létezik&amp;quot;&lt;br /&gt;
# ha a célfájl létezik&lt;br /&gt;
elif test -f ~/test/destination/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A fájl már létezik&amp;quot;&lt;br /&gt;
# ha a cél mappa nem létezik&lt;br /&gt;
elif ! test -d ~/test/destination&lt;br /&gt;
then&lt;br /&gt;
   # mappa létrehozás - szülőkönyvtárakat is, ha nem léteznek&lt;br /&gt;
   mkdir -p ~/test/destination&lt;br /&gt;
   # fájl belemásolása&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
# ha a célfájl nem létezik, de a célmappa igen&lt;br /&gt;
else&lt;br /&gt;
   # a fájlt bemásoljuk a könyvtárba&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script létrehozása ===&lt;br /&gt;
* Script megírása&lt;br /&gt;
* Futási jog&lt;br /&gt;
&lt;br /&gt;
=== Pozicionális paraméterek ===&lt;br /&gt;
&lt;br /&gt;
=== Változók ===&lt;br /&gt;
&lt;br /&gt;
== 3. óra ==&lt;br /&gt;
 A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a &#039;&#039;grep&#039;&#039;-et foguk megvizsgálni.&lt;br /&gt;
&lt;br /&gt;
=== Reguláris kifejezés szerkezete ===&lt;br /&gt;
A reguláris nyelvek atomokból, lezártakból épül fel, amelynek az eredménye az úgynevezett „összetettek”.&lt;br /&gt;
&lt;br /&gt;
==== Atomok ====&lt;br /&gt;
 Az atomok egy karakterre illeszkednek a sorban.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Atom !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| betűk, számok || saját magukra illeszkednek&lt;br /&gt;
|-&lt;br /&gt;
| ^ || sor elejére illeszkedik (csak egyszer lehet a legelején)&lt;br /&gt;
|-&lt;br /&gt;
| $ || sor végére illeszkedik (csak egyszer lehet a legvégén)&lt;br /&gt;
|-&lt;br /&gt;
| [abc] || halmaz: minden benne lévő elemre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| [^abc] || inverz halmaz: egyetlen benne lévő elemre sem illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| . || mindenre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lezártak ====&lt;br /&gt;
 A lezártak ismétlődéseket fogalmaznak meg egy atomra vonatkozóan. &#039;&#039;&#039;Lezárt csak atom után helyezkedhet el!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Lezárt !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| * || az atomot 0 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| + || az atomot 1 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| ? || az atomot 0 és 1 között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n} || az atom pontosan n-szer fordul elő egymás mellett&lt;br /&gt;
|-&lt;br /&gt;
| {n,m} || az atomot n és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n,} || az atomot n és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {,m} || az atomot 0 és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Összefűzöttek ====&lt;br /&gt;
 Az atomok és a lezártak egymás után írt sorozata.&lt;br /&gt;
A lezártaknál fontos kitétel volt, hogy csak atom után lehet írni. &#039;&#039;&#039;Egy összefűzött újra atomizálható&#039;&#039;&#039; a ( ) karakterekkel.&lt;br /&gt;
Az összefűzöttek tartalmazhatnak uniót (|), ahol több szabály közül bármelyik megvalósulhat egy sikeres illesztéshez.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
 Ez egy teszt szöveg, amin próbálkozunk.&lt;br /&gt;
A fenti szöveget alapul véve, a következő reguláris kifejezéseket hozhatjuk létre:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Reguláris kifejezés !! Illeszkedik? || Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| E || Igen || Van a sorban E betű&lt;br /&gt;
|-&lt;br /&gt;
| a || Igen || Van a sorban a betű&lt;br /&gt;
|-&lt;br /&gt;
| b || Nem || Nincs a sorban b betű&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Igen || A sor elején van az E betű&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Nem || Nincs a sor elején A betű&lt;br /&gt;
|-&lt;br /&gt;
| ^e || Nem || nincs a sor elején e betű&lt;br /&gt;
|-&lt;br /&gt;
| .$ || Igen || Bármilyen karakter lehet a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| \. || Igen || . van a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| k$ || Nem || Nincs k a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| egy || igen || Van a sorban „egy” string&lt;br /&gt;
|-&lt;br /&gt;
| egység || Nem || Nincs a sorban egység string&lt;br /&gt;
|-&lt;br /&gt;
| egy* || Igen || eg kötelező, y 0 vagy végtelenszer lehet (egy, egyy, egyyy, egyyyy ...)&lt;br /&gt;
|-&lt;br /&gt;
| l*egy || Igen || l 0 vagy végtelen, eg kötelező (eg, leg, lleg, llleg, lllleg ...)&lt;br /&gt;
|-&lt;br /&gt;
| l+egy || Nem || Nincs a szövegben &amp;quot;l+egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| l\+egy || Nem || l 1 vagy végtelen hosszú, egy kötelező (legy, llegy, lllegy, llllegy ...)&lt;br /&gt;
|-&lt;br /&gt;
| (egy) || Nem || Nincs a sorban &amp;quot;(egy)&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\) || Igen || Van a sorban &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)* || Igen || Van a sorban legalább 0-szor &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\+ || Igen || Van a sorban legalább 1-szer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\{2\} || Nem || Nincs a sorban pontosan kétszer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| [a-z] || Igen || Vannak benne kisbetűk&lt;br /&gt;
|-&lt;br /&gt;
| [A-Z] || Igen || Van benne nagy betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-D] || Nem || Nincs a sor elején A-D tartományban betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z] || Igen || Nagy betű van a sor elején&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z].*\.$ || Igen || Nagybetűvel kezdőik, középen bármi lehet és ponttal végződik a sor.&lt;br /&gt;
|-&lt;br /&gt;
| [0-9] || Nem || Nincs számjegy a sorban&lt;br /&gt;
|-&lt;br /&gt;
| .* || Igen || Mindenre illeszkedik, bármilyen hosszan (üres sorra is)&lt;br /&gt;
|-&lt;br /&gt;
| ^$ || Nem || Csak az üres sorra illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| ^.\+$ || Igen || Mindenre illeszkedik, kivéve az üres sorra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A következő kifejezés szintén illeszkedik:&lt;br /&gt;
 ^[A-Z].*\(egy\)\|\(kettő\).*\.$ =&amp;gt; A sor elején nagybetűvel kezdődik, van a közepén valahol benne &amp;quot;egy&amp;quot; vagy &amp;quot;kettő&amp;quot; karakterlánc és ponttal végződik. A köztes karakterek értéke nincs megszabva.&lt;br /&gt;
&lt;br /&gt;
==== grep ====&lt;br /&gt;
A &#039;&#039;&#039;grep&#039;&#039;&#039; utasítás segítségével végezhetünk el reguláris kifejezés, tehát minta illesztést fájlokon. Amennyiben nem adunk meg fájl paramétert, a STDIN csatornát olvassa. Az eredmények a STDOUT-ra íródnak.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+ Fontosabb kapcsolók&lt;br /&gt;
|-&lt;br /&gt;
! Rövid név !! Hosszú név !! Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| -c || --count || Megszámolja az illeszkedő sorokat&lt;br /&gt;
|-&lt;br /&gt;
| -o || --only-matching || Csak a mintára illeszkedő részt írja ki (nem a teljes sort)&lt;br /&gt;
|-&lt;br /&gt;
| -n || --line-number || Megszámozza a sorokat (a fájl alapján, nem a megjelenítés szerint)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Példa =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# nologin környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;nologin&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;nologin&amp;quot; # STDIN-en érkező adatok szűrése&lt;br /&gt;
&lt;br /&gt;
# bash környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;bash&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;bash&amp;quot;    # STDIN-en érkező adatok szűrése&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Példa 2 =====&lt;br /&gt;
Írjunk egy scriptet, amely a /bin/bash futtatási környezetet kapó felhasználók nevét kiírja a képernyőre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# a fájl sorainak száma&lt;br /&gt;
lines=`cat $file | wc -l`&lt;br /&gt;
&lt;br /&gt;
# végig megyünk a fájl sorain&lt;br /&gt;
for i in `seq 1 $lines`; do&lt;br /&gt;
 # itt kapjuk meg az i. sort&lt;br /&gt;
 line=`head -$i $file | tail -1`&lt;br /&gt;
 # kiszedjük a shell környezetet&lt;br /&gt;
 shell=`echo $line | cut -f7 -d&#039;:&#039;`&lt;br /&gt;
 # ha ez &amp;quot;/bin/bash&amp;quot;, akkor kivágjuk a sor első oszlopát, ezt írhatjuk a képernyőre&lt;br /&gt;
 if test $shell == &amp;quot;/bin/bash&amp;quot;; then&lt;br /&gt;
  echo $line | cut -f1 -d&#039;:&#039;&lt;br /&gt;
 fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.227s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# szűrjük ki a sorokat, amelyeknek a végén a &amp;quot;/bin/bash&amp;quot; karakterlánc található &lt;br /&gt;
#  és a kapott eredményhalmaznak vágjuk ki az első oszlopát&lt;br /&gt;
# a kapott eredményhalmaz még mindig megfelel a /etc/passwd eredeti formátumának, &lt;br /&gt;
#  csak a sorok számát csökkentettük a szűrési feltételnek megfelelően!&lt;br /&gt;
grep &amp;quot;/bin/bash$&amp;quot; $file | cut -f1 -d&#039;:&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.003s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== MAC cím parser =====&lt;br /&gt;
Legyen egy MAC címeket tartalmazó fáljunk - mac-cimek.txt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:0C:42:AB:CD:EF&lt;br /&gt;
00:0c:42:ab:cd:ef&lt;br /&gt;
00-0C-42-AB-CD-EF&lt;br /&gt;
00-0c-42-ab-cd-ef&lt;br /&gt;
000c42abcdef&lt;br /&gt;
000C42ABCDEF&lt;br /&gt;
00:0C:42:AB:CD:EF:AB&lt;br /&gt;
00:0C:42:AB:CD:EF:&lt;br /&gt;
0G:0C:42:AB:CD:EF&lt;br /&gt;
00.0C.42.AB.CD.EF&lt;br /&gt;
00:0C:42:AB:CD:EG&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ebben a fájlban vannak megfelelő és hibás szintaktikájú címek is. A feladat, hogy készítsünk reguláris kifejezést, amely megjeleníti a helyeseket a képernyőn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;quot;^\([[:xdigit:]]\{2\}[-:]\?\)\{5\}[[:xdigit:]]\{2\}$&amp;quot; mac-cimek.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Érdekességképp beletehetünk a fájlba a MAC címek elé és/vagy után véletlenszerű (megjeleníthető) karaktereket.&lt;br /&gt;
 Mit tapasztalunk? Miért?&lt;br /&gt;
&lt;br /&gt;
 Távolítsuk el a sor eleje és a sor vége illesztéseket és futtassuk a grep-et a -o kapcsolóval? Mi változik?&lt;br /&gt;
 (&#039;&#039;grep -o &amp;quot;\([[:xdigit:]]\{2\}[-:]\?\)\{5\}[[:xdigit:]]\{2\}&amp;quot; mac-cimek.txt&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== 4. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
== 5. óra ==&lt;br /&gt;
 Az ötödik órán minta ZH feladatsort oldunk meg.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=822</id>
		<title>EDU::GAMF::Operációs rendszerek::Gyakorlatok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=822"/>
		<updated>2024-10-09T12:08:27Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* MAC cím parser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
==== man ====&lt;br /&gt;
A &#039;&#039;man&#039;&#039; 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.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Használata:&#039;&#039;&#039;&lt;br /&gt;
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 &#039;&#039;man&#039;&#039; parancs használati útmutatóját is a következő utasítás kiadásával:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a &#039;&#039;head&#039;&#039; utasítás dokumentációját az alábbi módon érhetjük el&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ls ====&lt;br /&gt;
 Érdemes megtekinteni a parancs dokumentációját a &#039;&#039;man ls&#039;&#039; utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.&lt;br /&gt;
Az &#039;&#039;&#039;ls&#039;&#039;&#039; parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a &#039;&#039;&#039;.&#039;&#039;&#039;, tehát a jelenlegi könyvtárat listázza.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# meghívás paraméter nélkül&lt;br /&gt;
ls&lt;br /&gt;
&lt;br /&gt;
# meghívás . paraméterrel - ugyanaz az eredmény&lt;br /&gt;
ls .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár listázása&lt;br /&gt;
ls /&lt;br /&gt;
&lt;br /&gt;
# a /usr/local/bin könyvtár listázása&lt;br /&gt;
ls /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait&lt;br /&gt;
ls -l&lt;br /&gt;
&lt;br /&gt;
# A /bin/ls fájl jogosultságainak lekérdezése&lt;br /&gt;
ls -l /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az &#039;&#039;&#039;ls&#039;&#039;&#039; megnyitja a könyvtárat és annak tartalmát listázza ki.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga&lt;br /&gt;
ls /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést&lt;br /&gt;
ls / -l&lt;br /&gt;
&lt;br /&gt;
# 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&lt;br /&gt;
# Ekkor a könyvtár listázódik, nem a tartalma&lt;br /&gt;
ls -d /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pwd ====&lt;br /&gt;
A &#039;&#039;&#039;pwd&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cd ====&lt;br /&gt;
A &#039;&#039;&#039;cd&#039;&#039;&#039; parancs segítségével könyvtárat válthatunk (&#039;&#039;changedir&#039;&#039;). A cél könyvtár nevét paraméterben kell megadnunk.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár megnyitása&lt;br /&gt;
cd /&lt;br /&gt;
&lt;br /&gt;
# HOME könyvtár megnyitása&lt;br /&gt;
# ~ egy alias&lt;br /&gt;
cd ~&lt;br /&gt;
&lt;br /&gt;
# /usr/bin megnyitása&lt;br /&gt;
cd /usr/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hivatkozásoknál, így a &#039;&#039;cd&#039;&#039; esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:&lt;br /&gt;
* Az abszolút hivatkozás / elérési út mindig &#039;&#039;/&#039;&#039; jellel kezdődik. pl.: &#039;&#039;cd /home/&#039;&#039;, &#039;&#039;cd /usr/bin&#039;&#039;&lt;br /&gt;
* A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: &#039;&#039;cd home&#039;&#039;, &#039;&#039;cd bin&#039;&#039;, vagy &#039;&#039;.&#039;&#039; illetve &#039;&#039;..&#039;&#039; karakterekkel kezdődnek.&lt;br /&gt;
** A &#039;&#039;.&#039;&#039; könyvtár jelenti az aktuális könyvtárat&lt;br /&gt;
** A &#039;&#039;..&#039;&#039; könyvtár jelenti a szülő könyvtárat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# szülő könyvtár megnyitása&lt;br /&gt;
cd ../&lt;br /&gt;
&lt;br /&gt;
# a szülőkönyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ../bin&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ./bin&lt;br /&gt;
cd bin      # vegyük észre: a ./ ez esetben elhagyható&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mkdir ====&lt;br /&gt;
Az &#039;&#039;&#039;mkdir&#039;&#039;&#039; parancs segítségével könyvtárakat hozhatunk létre (&#039;&#039;make directory&#039;&#039;). Alapértelmezetten a &#039;&#039;.&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# folder könyvtár létrehozása az aktuális könyvtárban&lt;br /&gt;
mkdir folder&lt;br /&gt;
mkdir ./folder2&lt;br /&gt;
# subfolder létrehozása a folder könyvtáron belül.&lt;br /&gt;
mkdir folder/subfolder&lt;br /&gt;
&lt;br /&gt;
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk&lt;br /&gt;
mkdir /tmp/folder&lt;br /&gt;
&lt;br /&gt;
# folder létrehozása a szülőkönyvtárban&lt;br /&gt;
mkdir ../folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtáron belül létrejön egy &#039;&#039;test&#039;&#039; könyvtár és azon belül jön létre a &#039;&#039;folder&#039;&#039; könyvtár.&lt;br /&gt;
mkdir /test/folder/ -p&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban jön létre egy &#039;&#039;test&#039;&#039; könyvtár és azon belül a &#039;&#039;folder&#039;&#039; könyvtár&lt;br /&gt;
mkdir -p test/folder&lt;br /&gt;
&lt;br /&gt;
# a jelenlegi könyvtárban létrejon a &#039;&#039;test&#039;&#039; könyvtár, &lt;br /&gt;
# azon belül létrejön egy &#039;&#039;folder1&#039;&#039; és egy &#039;&#039;folder2&#039;&#039; könyvtár, &lt;br /&gt;
# majd mind a kettőben létrejön a &#039;&#039;work&#039;&#039; könyvtár.&lt;br /&gt;
mkdir -p test/{folder1,folder2}/work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.&lt;br /&gt;
&lt;br /&gt;
==== rmdir ====&lt;br /&gt;
Az &#039;&#039;&#039;rmdir&#039;&#039;&#039; parancs segítségével üres könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figyelem&#039;&#039;&#039;! 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!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# relatív hivatkozással&lt;br /&gt;
rmdir test/folder&lt;br /&gt;
&lt;br /&gt;
# abszolút hivatkozással&lt;br /&gt;
rmdir /test/folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cp ====&lt;br /&gt;
A &#039;&#039;&#039;cp&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd ./file&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba&lt;br /&gt;
cp /etc/passwd /tmp/&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak másolása esetén a &#039;&#039;-r&#039;&#039; kapcsoló használata szükséges (&#039;&#039;recursive&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba&lt;br /&gt;
cp /etc/network /tmp/ -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mv ====&lt;br /&gt;
Az &#039;&#039;&#039;mv&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.&lt;br /&gt;
&lt;br /&gt;
 A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd állomány átnevezése file-ra&lt;br /&gt;
mv passwd file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány átnevezése file-ra&lt;br /&gt;
mv /etc/passwd /etc/file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be&lt;br /&gt;
mv /etc/passwd /tmp&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra&lt;br /&gt;
mv /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a &#039;&#039;recursive&#039;&#039; (&#039;&#039;-r&#039;&#039;) jelölésre.&lt;br /&gt;
&lt;br /&gt;
==== rm ====&lt;br /&gt;
Az &#039;&#039;&#039;rm&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: &#039;&#039;-r&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm folder -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== less ====&lt;br /&gt;
A &#039;&#039;&#039;less&#039;&#039;&#039; egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
less /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== more ====&lt;br /&gt;
A &#039;&#039;&#039;more&#039;&#039;&#039; szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
more /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== which ====&lt;br /&gt;
A &#039;&#039;&#039;which&#039;&#039; program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az ls parancs abszolút elérési útvonala&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# a which parancs abszolút elérési útvonala&lt;br /&gt;
which which&lt;br /&gt;
&lt;br /&gt;
# a man parancs elérési útvonala&lt;br /&gt;
which man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== file ====&lt;br /&gt;
A &#039;&#039;&#039;file&#039;&#039;&#039; utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file /etc/passwd&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== echo ====&lt;br /&gt;
Az &#039;&#039;&#039;echo&#039;&#039;&#039; mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hello World&amp;quot;&lt;br /&gt;
echo Hello World&lt;br /&gt;
echo Ez egy teszt üzenet&lt;br /&gt;
echo &amp;quot;Ez egy teszt üzenet&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;-n&amp;quot; kapcsoló segítségével kapcsolhatunk ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cat ====&lt;br /&gt;
A &#039;&#039;&#039;cat&#039;&#039;&#039; utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)&lt;br /&gt;
cat /etc/passwd /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a &amp;lt;semmi&amp;gt; összefűzése és megjelenítése a képernyőn&lt;br /&gt;
cat /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== head ====&lt;br /&gt;
A &#039;&#039;&#039;head&#039;&#039;&#039; 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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
head -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tail ====&lt;br /&gt;
A &#039;&#039;&#039;tail&#039;&#039;&#039; hasonlóan működik, mint a &#039;&#039;&#039;head&#039;&#039;&#039;, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
tail -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wc ====&lt;br /&gt;
A &#039;&#039;&#039;wc&#039;&#039;&#039; utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (&#039;&#039;word counter&#039;&#039;): sorok, szavak, karakterek és bájtok száma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Rövid kapcsoló !! Hosszú kapcsoló !! Leírás&lt;br /&gt;
|-&lt;br /&gt;
| -l || --lines || sorok számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -w || --words || szavak számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -c || --chars || karakterek számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
|  || --bytes || bájtok számát adja vissza&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# sorok számát írja ki&lt;br /&gt;
wc -l /etc/passwd&lt;br /&gt;
# szavak számát írja ki&lt;br /&gt;
wc -w /etc/passwd&lt;br /&gt;
# bájtok számát írja ki&lt;br /&gt;
wc --bytes /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# sorok és szavak számát írja ki a képernyőre&lt;br /&gt;
wc -l -w /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== find ====&lt;br /&gt;
A &#039;&#039;&#039;find&#039;&#039;&#039; utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd nevű fájl keresése a /etc könyvtárban&lt;br /&gt;
find /etc -name passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programok csatornái ===&lt;br /&gt;
==== STDIN ====&lt;br /&gt;
==== STDOUT ====&lt;br /&gt;
==== STDERR ====&lt;br /&gt;
&lt;br /&gt;
=== Pipeline ===&lt;br /&gt;
&lt;br /&gt;
=== Parancsbehelyettesítés ===&lt;br /&gt;
=== Feladatok ===&lt;br /&gt;
==== Szedjük ki a &#039;&#039;/etc/passwd&#039;&#039; állomány 20. sorát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvassuk az első 20 sort és levágjuk az utolsót&lt;br /&gt;
head -20 /etc/passwd | tail -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mondjuk meg egy keresett bináris típusát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# fájl elérési út lekérdezése&lt;br /&gt;
# STDOUT =&amp;gt; /bin/ls&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# fájl típusának lekérdezése&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze:&lt;br /&gt;
file `which ls`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
&lt;br /&gt;
==== mcedit ====&lt;br /&gt;
Az &#039;&#039;&#039;mcedit&#039;&#039;&#039; az &#039;&#039;&#039;mc&#039;&#039;&#039; (&#039;&#039;Midnight Commander&#039;&#039;) 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 &#039;&#039;&#039;mc&#039;&#039;&#039; utasítással, amit később az &#039;&#039;&#039;F10&#039;&#039;&#039; 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 &amp;quot;tálcára helyezés&amp;quot; is megoldott, így a &#039;&#039;&#039;Ctrl+O&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Az mcedit megnyitható az &#039;&#039;mc&#039;&#039;-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.&lt;br /&gt;
&lt;br /&gt;
Az egér az mcedit-ben is működik!&lt;br /&gt;
&lt;br /&gt;
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 (&#039;&#039;CTRL+O&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mcedit /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nano ====&lt;br /&gt;
A &#039;&#039;&#039;nano&#039;&#039;&#039; szintén egy szövegszerkesztő alkalmazás.&lt;br /&gt;
&lt;br /&gt;
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:&lt;br /&gt;
* 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)&lt;br /&gt;
* CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba&lt;br /&gt;
* CTRL+O Menti a változásokat&lt;br /&gt;
* CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== chmod ====&lt;br /&gt;
==== shift ====&lt;br /&gt;
==== cut ====&lt;br /&gt;
A &#039;&#039;&#039;cut&#039;&#039;&#039; 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 &#039;&#039;-f&#039;&#039; (&#039;&#039;field&#039;&#039;), ahol a megjelenítendő oszlopokat adhatjuk meg és a &#039;&#039;-d&#039;&#039; (&#039;&#039;delimiter&#039;&#039;), ahol az elválasztó karaktert állíthatjuk be.&lt;br /&gt;
&lt;br /&gt;
Általában a &#039;&#039;/etc/passwd&#039;&#039; állományon dolgozunk, mert ebben egy &#039;&#039;:&#039;&#039;-al elválasztott táblázat található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a fájl első oszlopát szedi ki :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet&lt;br /&gt;
cut -f1 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet és az id-ját&lt;br /&gt;
cut -f1,3 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,&lt;br /&gt;
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát&lt;br /&gt;
cut -f1-3,6 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sort ====&lt;br /&gt;
A &#039;&#039;&#039;sort&#039;&#039;&#039; utasítás segítségével rendezhetjük az adattömböt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a passwd állomány rendezése a felhasználónév szerint - ez van elől&lt;br /&gt;
sort /etc/passwd&lt;br /&gt;
# fordított sorrend - reverse&lt;br /&gt;
sort -r /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;-n&#039;&#039; opciót.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# file egy számokat tartalmazó fájl - egy sor egy fájl&lt;br /&gt;
sort -n file&lt;br /&gt;
# fordított sorrend&lt;br /&gt;
sort -r -n file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tr ====&lt;br /&gt;
A &#039;&#039;&#039;tr&#039;&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az e betűt o-ra, az o betűt e-re cseréli ki&lt;br /&gt;
echo &amp;quot;hello&amp;quot; | tr eo oe&lt;br /&gt;
&lt;br /&gt;
# A T betűt K-ra, az n betűt p-re cseréli ki&lt;br /&gt;
echo &amp;quot;Tanar&amp;quot; | tr Tn Kp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A fenti példák alapján nézzük meg, hogy mi történik:&lt;br /&gt;
# A tr két pozicionális paraméterrel lett meghívva&lt;br /&gt;
## Az első paraméter adja meg a lecserélendő karakterek halmazát&lt;br /&gt;
## A második paraméter adja meg az új karakterek halmazát&lt;br /&gt;
# A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben&lt;br /&gt;
## ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre&lt;br /&gt;
## ha nincs benne, akkor megy tovább&lt;br /&gt;
# a metodika miatt keresztbe is lehet cserélni (pl. &#039;&#039;o&#039;&#039;-t &#039;&#039;e&#039;&#039;-re, &#039;&#039;e&#039;&#039;-t &#039;&#039;o&#039;&#039;-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt &#039;&#039;e&#039;&#039; betűnek a végén &#039;&#039;o&#039;&#039; betűre kéne cserélődnie.&lt;br /&gt;
&lt;br /&gt;
==== if ====&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; 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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
else&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű &#039;&#039;&#039;if&#039;&#039;&#039; elágazást is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Egy olyan program, amelynek a visszatérési értéke hasznos információkat hordoz a futás eredményét tekintve. Ne feledjük el, hogy a &#039;&#039;&#039;return&#039;&#039;&#039; kulcsszóval tudunk ilyen értéket generálni C/C++ kódok esetében. Lássunk egy példát:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  if ( 10 % 2 == 0 ) return 0;&lt;br /&gt;
  else return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fenti program visszatérési értéke információval szolgál számunkra, hogy a 10 osztható-e kettővel, avagy sem. Ez az érték vizsgálható az &#039;&#039;&#039;if&#039;&#039;&#039; segítségével és a válasz függvényében más-más kódokat hajthatunk végre.&lt;br /&gt;
&lt;br /&gt;
A kiértékelés ellentétes a megszokott módszerhez képest (ahol minden igaz, aminek az értéke nem 0).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ha a KIFEJEZÉS 0 értéket ad vissza, akkor IGAZ az állítás, tehát az if-en belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; 0&lt;br /&gt;
then&lt;br /&gt;
  ....&lt;br /&gt;
else&lt;br /&gt;
  ....&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# ha a KIFEJEZÉS nem 0 értéket ad vissza, akkor HAMIS az állítás, tehát az else-n belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; != 0&lt;br /&gt;
then&lt;br /&gt;
    ...&lt;br /&gt;
else&lt;br /&gt;
    ...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programozási nyelvek tanításakor ezért térünk vissza 0-s értékkel (&#039;&#039;&#039;return 0;&#039;&#039;&#039;), a programunk végén, és hiba esetén 1, vagy annál nagyobb értékkel.&lt;br /&gt;
&lt;br /&gt;
==== test ====&lt;br /&gt;
A &#039;&#039;&#039;test&#039;&#039;&#039; parancs logikai függvényeket értékel ki és&lt;br /&gt;
* &#039;&#039;&#039;0&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;IGAZ&#039;&#039;&#039;,&lt;br /&gt;
* &#039;&#039;&#039;1&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;HAMIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; utasítással együtt szoktuk használni, de természetesen ettől független is meghívható.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# megtörténik a logikai kiértékelés, eldől, hogy a két string egyezik-e&lt;br /&gt;
test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
# kiírjuk a képernyőre a test utasítás visszatérési értékét&lt;br /&gt;
echo $?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if&#039;&#039;&#039; utasítással a következőképp használhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# hamis&lt;br /&gt;
if test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# igaz&lt;br /&gt;
if ! test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#igaz&lt;br /&gt;
if test &amp;quot;text1&amp;quot; != &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elérhető egy &#039;&#039;alias&#039;&#039;, aminek segítségével olvashatóbbá tehetjük a &#039;&#039;&#039;test&#039;&#039;&#039; utasítást. Ez a &#039;&#039;&#039;[ ]&#039;&#039;&#039; pár.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ügyeljünk rá, hogy a &#039;&#039;[&#039;&#039; és a &#039;&#039;]&#039;&#039; zárójelek mellett &#039;&#039;whitespace&#039;&#039; karakterek vannak. Ha ezeket kihagyjuk, akkor hibát fogunk kapni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A számok ellenőrzése BASH környezetben körülményesebb, mivel itt minden karakterláncnak számít. Emiatt a következő utasítás sorozat nem várt eredménnyel zárul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;1000&amp;quot; &amp;lt;= &amp;quot;20&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: igaz. De tudjuk, hogy ez az eredmény nem igaz, a BASH mégis így értékelte ki. Az oka, hogy az első karaktereket tekintve (&#039;&#039;1&#039;&#039; és &#039;&#039;2&#039;&#039;) elmondható, hogy az &#039;&#039;1&#039;&#039;-es hamarabb van az ABC-ben (kódtáblában), mint a &#039;&#039;2&#039;&#039;, így az &#039;&#039;1000&#039;&#039;-nek kisebbnek kell lennie (mintha a &amp;quot;alma&amp;quot; és &amp;quot;körte&amp;quot; lenne összehasonlítva, hogy melyik következik előbb az ABC-ben).&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy a &#039;&#039;&#039;test&#039;&#039;&#039; utasítás karakterek helyett számként dolgozza fel a paramétert, kapcsolót kell használnunk:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Kapcsoló !! Angol megnevezés !! Magyar megnevezés&lt;br /&gt;
|-&lt;br /&gt;
| -eq || Equals || Egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -ne ||  Not Equals || Nem egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -lt || Lower than || Kisebb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -le || Lower than or equals || Kisebb vagy egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -gt || Greather than || nagyobb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -ge || Greather than or equals || Nagyobb vagy egyenlő&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ 1000 -le 20 ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: Az elvártaknak megfelelően HAMIS.&lt;br /&gt;
&lt;br /&gt;
==== for ====&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; utasítás segítségével egy lista elemein mehetünk végig. Hasonlóan működik, mint a modern programozási nyelvekben a &#039;&#039;foreach&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Legegyszerűbben a következő utasítással tesztelhetjük, ahol a bemeneti listát soronként látjuk viszont a képernyőn:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in 1 2 3 4 5 6&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen van lehetőségünk a listát más program kimenetéből kinyerni a parancsbehelyettesítés segítségével:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `ls`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; gyakorlatilag a pozicionális paramétereken megy végig, tehát egy lista elem a $1, egy másik listaelem a $2. Tudjuk, hogy ha szóközök között adjuk meg, akkor szóközt is tartalmazhat a paraméterünk. Lássunk egy példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;1 2 3&amp;quot; &amp;quot;4 5 6&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben a képernyőn két sor jelenik meg: &#039;&#039;1 2 3&#039;&#039; és &#039;&#039;4 5 6&#039;&#039;. Azonban a parancsbehelyettesítés nem alkalmaz az idézőjelhez hasonló technikát, tehát azt alkalmazva minden szó (szóközökkel határolt karaktersorozat) új pozicionális paramétert jelent. Lássunk egy az előzőhöz hasonló példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `echo &amp;quot;1 2 3 4 5 6&amp;quot;`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben hat sor jelenik meg, benne egy-egy számmal, tehát az &#039;&#039;&#039;echo &amp;quot;1 2 3 4 5 6&amp;quot;&#039;&#039;&#039; kimenetét szóközönként vágta fel.&lt;br /&gt;
&lt;br /&gt;
==== while ====&lt;br /&gt;
A &#039;&#039;&#039;while&#039;&#039;&#039; utasítás, mint minden programozási nyelvben, itt is felfogható úgy, mint egy többször lefutó &#039;&#039;&#039;if&#039;&#039;&#039;. Éppen ezért a szintaktikájuk megegyezik, csupán a feltételek megírásával kell óvatosan bánnunk, hogy a ciklus mag akkor és addig fusson, ameddig mi azt szeretnénk. A &#039;&#039;&#039;while&#039;&#039;&#039; ciklusnál ugyanazokat az alkalmazásokat írhatjuk be a &#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039; helyére, mint az &#039;&#039;&#039;if&#039;&#039;&#039; esetében.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while KIFEJEZÉS&lt;br /&gt;
do&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például ha azt akarjuk, hogy egy ciklus addig fusson, amíg meg nem jelenik egy fájl a fájlrendszerben, akkor azt a következőképp vezethetjük le:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ellenőrzi, hogy a fájl elérhető-e&lt;br /&gt;
test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ez esetben egyetlen kísérletet teszünk, de nem várjuk meg, hogy oda kerüljön, amennyiben nincs ott&lt;br /&gt;
if test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;A fájl nem létezik&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# várakozunk, amíg a feltétel nem lesz igaz, tehát a fájl nem kerül oda&lt;br /&gt;
while ! test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozunk&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# test parancs helyettesítése []-el&lt;br /&gt;
while ! [ -f &amp;quot;file.txt&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A while ciklusnál érdemes megemlíteni a &#039;&#039;&#039;until&#039;&#039;&#039; utasítást, ami annyiban tér el, hogy a feltétel kiértékelését invertálni kell - tehát ami igaz a &#039;&#039;&#039;while&#039;&#039;&#039; esetében, az hamis az &#039;&#039;&#039;until&#039;&#039;&#039; esetében és fordítva. Így a fenti feladatot megvalósíthatjuk invertálás nélkül, az until utasítással is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
until test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
 echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== seq ====&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítás egy listát generál számunkra, amelyben a megadott lépésszámmal, a megadott legkisebb értéktől a megadott legnagyobb értékig szerepelnek a számok.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# számok 1-10-ig&lt;br /&gt;
seq 10&lt;br /&gt;
&lt;br /&gt;
# számok 5-10-ig&lt;br /&gt;
seq 5 10&lt;br /&gt;
&lt;br /&gt;
# számok 3-tól 10-ig 2-esével&lt;br /&gt;
seq 3 2 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást általában a &#039;&#039;&#039;for&#039;&#039;&#039; ciklus listájában használjuk, hogy elő tudjuk állítani az indexeket.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq 3 2 10`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== read ====&lt;br /&gt;
A &#039;&#039;&#039;read&#039;&#039;&#039; utasítás segítségével a STDIN-ről kérhetünk be információt változóba/változókba. Ha több változót sorolunk fel, akkor a bemenetet szóközöknél vágja el.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvasás var-ba&lt;br /&gt;
# STDIN =&amp;gt; teszt&lt;br /&gt;
#  var =&amp;gt; teszt&lt;br /&gt;
# STDIN =&amp;gt; teszt szöveg&lt;br /&gt;
#  var =&amp;gt; teszt szöveg&lt;br /&gt;
read var&lt;br /&gt;
&lt;br /&gt;
# beolvasás fname és lname változókba&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname = Farkas&lt;br /&gt;
# STDIN =&amp;gt; Attila&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas OPSYS&lt;br /&gt;
read fname lname&lt;br /&gt;
&lt;br /&gt;
# beolvasás három változóba. Ha a felhasználó az utasításokkal szemben több szót adott meg, akkor így biztosíthatjuk, hogy ne legyen szóköz az első két változóban&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS meg valami más&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; OPSYS meg valami más&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utóbbi esetben hibaüzenet is generálható, ha megvizsgáljuk, hogy a &#039;&#039;tmp&#039;&#039; változó értéke üres-e:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Adja meg a teljes nevét: &amp;quot;&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&lt;br /&gt;
# -n =&amp;gt; nem üres?&lt;br /&gt;
# -z =&amp;gt; üres?&lt;br /&gt;
if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Valamit elhibáztál&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk ellenőrzött bekérést végrehajtani:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmp=&amp;quot;start value&amp;quot;&lt;br /&gt;
while [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo -n &amp;quot;Adja meg a teljes nevét FNAME LNAME formátumban: &amp;quot;&lt;br /&gt;
  read fname lname tmp&lt;br /&gt;
  if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
  then&lt;br /&gt;
    echo &amp;quot;Valamit elrontottál!&amp;quot;&lt;br /&gt;
    # ez esetben nem lépünk ki, mert bekérjük újra&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expr ====&lt;br /&gt;
Az &#039;&#039;&#039;expr&#039;&#039;&#039; parancs segítségével tudunk matematikai műveleteket végrehajtani. Mivel a BASH-ben minden változó karakterlánc, így nem tudunk közöttük műveletet végezni. Az &#039;&#039;&#039;expr&#039;&#039;&#039; a paramétereket belül számként kezeli. &#039;&#039;&#039;Csak egész számokkal tud dolgozni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a képernyőre kerül az eredmény&lt;br /&gt;
expr 1 + 2&lt;br /&gt;
expr 4 * 4&lt;br /&gt;
&lt;br /&gt;
# csak egész számot ír ki&lt;br /&gt;
expr 3 / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha tört számokkal kell dolgoznunk, akkor a következőket tehetjük:&lt;br /&gt;
# eltávolítjuk a törtrészt&lt;br /&gt;
# felszorozzuk 10^n-nel, ahol n a törtrész számjegyeivel egyezik meg (pl. 10.02-t 100-al kell szorozni). Az egész térben elvégzett művelet eredményét később vissza osztjuk ugyanannyival, amennyivel korábban felszoroztuk. &#039;&#039;&#039;Ez nem egy egyszerű feladat, hiszen a tört számot egyáltalán nem kezeli az expr, tehát cut, wc és egyéb parancsokkal kell kialakítanunk a számot, ahogy utána szét is kell darabolnunk azt.&#039;&#039;&#039;&lt;br /&gt;
# Másik környezetet használunk, ahol tudunk számokat is kezelni - &#039;&#039;&#039;ez a ZH-n nem elfogadott&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A lehetőségek közül csak az elsőt, a ZH-n teljes mértékben elfogadott megoldást mutatom be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a 3.4-et és a 1.2-őt kell összeadnunk.&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 3&lt;br /&gt;
echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 1&lt;br /&gt;
echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
expr `echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1` + `echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok parancsokhoz ===&lt;br /&gt;
==== Írassuk ki a /etc/passwd több sorát ====&lt;br /&gt;
Több választási lehetőségünk van:&lt;br /&gt;
* ha a kiírandó sorszámok valamilyen logikát követnek (minden második, harmadik stb.), akkor használhatjuk a &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást&lt;br /&gt;
* ha nincs logika a sorszámokban, akkor kézzel kell elkészítenünk a listát&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki minden harmadik sor tartalmát&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# határozzuk meg a seq tartományát&lt;br /&gt;
# min: 1&lt;br /&gt;
# max: ahány sora van a fájlnak&lt;br /&gt;
&lt;br /&gt;
# max érték meghatározás&lt;br /&gt;
# a változó létrehozást lentebb tárgyaljuk&lt;br /&gt;
max=`cat /etc/passwd | wc -l`&lt;br /&gt;
&lt;br /&gt;
# lista meghatározása for ciklushoz&lt;br /&gt;
# 1-től $max-ig hármasával&lt;br /&gt;
seq 1 3 $max&lt;br /&gt;
&lt;br /&gt;
# Rakjuk össze&lt;br /&gt;
for i in `seq 1 3 $max`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát nem tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki a 2., 5., 10. és 11. sorokat&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `2 5 10 11`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fájlok ellenőrzése és másolása ====&lt;br /&gt;
Másoljuk át a /etc/passwd állományt egy könyvtárba (~/test/destination). Ha a célkönyvtár nem létezik, akkor hozzuk létre. Ha a célkönyvtár és a fájl is létezik, akkor írjunk ki hibaüzenetet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# forrás fájl létezésének vizsgálata&lt;br /&gt;
test -f /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# célfájl létezésének vizsgálata&lt;br /&gt;
test -f ~/test/destination/passwd&lt;br /&gt;
&lt;br /&gt;
# mappa létezésének vizsgálata&lt;br /&gt;
test -d ~/test/destination&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
&lt;br /&gt;
# ha a forrásfájl nem létezik&lt;br /&gt;
if ! test -f /etc/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A forrásfájl nem létezik&amp;quot;&lt;br /&gt;
# ha a célfájl létezik&lt;br /&gt;
elif test -f ~/test/destination/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A fájl már létezik&amp;quot;&lt;br /&gt;
# ha a cél mappa nem létezik&lt;br /&gt;
elif ! test -d ~/test/destination&lt;br /&gt;
then&lt;br /&gt;
   # mappa létrehozás - szülőkönyvtárakat is, ha nem léteznek&lt;br /&gt;
   mkdir -p ~/test/destination&lt;br /&gt;
   # fájl belemásolása&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
# ha a célfájl nem létezik, de a célmappa igen&lt;br /&gt;
else&lt;br /&gt;
   # a fájlt bemásoljuk a könyvtárba&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script létrehozása ===&lt;br /&gt;
* Script megírása&lt;br /&gt;
* Futási jog&lt;br /&gt;
&lt;br /&gt;
=== Pozicionális paraméterek ===&lt;br /&gt;
&lt;br /&gt;
=== Változók ===&lt;br /&gt;
&lt;br /&gt;
== 3. óra ==&lt;br /&gt;
 A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a &#039;&#039;grep&#039;&#039;-et foguk megvizsgálni.&lt;br /&gt;
&lt;br /&gt;
=== Reguláris kifejezés szerkezete ===&lt;br /&gt;
A reguláris nyelvek atomokból, lezártakból épül fel, amelynek az eredménye az úgynevezett „összetettek”.&lt;br /&gt;
&lt;br /&gt;
==== Atomok ====&lt;br /&gt;
 Az atomok egy karakterre illeszkednek a sorban.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Atom !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| betűk, számok || saját magukra illeszkednek&lt;br /&gt;
|-&lt;br /&gt;
| ^ || sor elejére illeszkedik (csak egyszer lehet a legelején)&lt;br /&gt;
|-&lt;br /&gt;
| $ || sor végére illeszkedik (csak egyszer lehet a legvégén)&lt;br /&gt;
|-&lt;br /&gt;
| [abc] || halmaz: minden benne lévő elemre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| [^abc] || inverz halmaz: egyetlen benne lévő elemre sem illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| . || mindenre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lezártak ====&lt;br /&gt;
 A lezártak ismétlődéseket fogalmaznak meg egy atomra vonatkozóan. &#039;&#039;&#039;Lezárt csak atom után helyezkedhet el!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Lezárt !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| * || az atomot 0 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| + || az atomot 1 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| ? || az atomot 0 és 1 között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n} || az atom pontosan n-szer fordul elő egymás mellett&lt;br /&gt;
|-&lt;br /&gt;
| {n,m} || az atomot n és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n,} || az atomot n és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {,m} || az atomot 0 és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Összefűzöttek ====&lt;br /&gt;
 Az atomok és a lezártak egymás után írt sorozata.&lt;br /&gt;
A lezártaknál fontos kitétel volt, hogy csak atom után lehet írni. &#039;&#039;&#039;Egy összefűzött újra atomizálható&#039;&#039;&#039; a ( ) karakterekkel.&lt;br /&gt;
Az összefűzöttek tartalmazhatnak uniót (|), ahol több szabály közül bármelyik megvalósulhat egy sikeres illesztéshez.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
 Ez egy teszt szöveg, amin próbálkozunk.&lt;br /&gt;
A fenti szöveget alapul véve, a következő reguláris kifejezéseket hozhatjuk létre:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Reguláris kifejezés !! Illeszkedik? || Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| E || Igen || Van a sorban E betű&lt;br /&gt;
|-&lt;br /&gt;
| a || Igen || Van a sorban a betű&lt;br /&gt;
|-&lt;br /&gt;
| b || Nem || Nincs a sorban b betű&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Igen || A sor elején van az E betű&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Nem || Nincs a sor elején A betű&lt;br /&gt;
|-&lt;br /&gt;
| ^e || Nem || nincs a sor elején e betű&lt;br /&gt;
|-&lt;br /&gt;
| .$ || Igen || Bármilyen karakter lehet a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| \. || Igen || . van a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| k$ || Nem || Nincs k a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| egy || igen || Van a sorban „egy” string&lt;br /&gt;
|-&lt;br /&gt;
| egység || Nem || Nincs a sorban egység string&lt;br /&gt;
|-&lt;br /&gt;
| egy* || Igen || eg kötelező, y 0 vagy végtelenszer lehet (egy, egyy, egyyy, egyyyy ...)&lt;br /&gt;
|-&lt;br /&gt;
| l*egy || Igen || l 0 vagy végtelen, eg kötelező (eg, leg, lleg, llleg, lllleg ...)&lt;br /&gt;
|-&lt;br /&gt;
| l+egy || Nem || Nincs a szövegben &amp;quot;l+egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| l\+egy || Nem || l 1 vagy végtelen hosszú, egy kötelező (legy, llegy, lllegy, llllegy ...)&lt;br /&gt;
|-&lt;br /&gt;
| (egy) || Nem || Nincs a sorban &amp;quot;(egy)&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\) || Igen || Van a sorban &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)* || Igen || Van a sorban legalább 0-szor &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\+ || Igen || Van a sorban legalább 1-szer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\{2\} || Nem || Nincs a sorban pontosan kétszer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| [a-z] || Igen || Vannak benne kisbetűk&lt;br /&gt;
|-&lt;br /&gt;
| [A-Z] || Igen || Van benne nagy betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-D] || Nem || Nincs a sor elején A-D tartományban betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z] || Igen || Nagy betű van a sor elején&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z].*\.$ || Igen || Nagybetűvel kezdőik, középen bármi lehet és ponttal végződik a sor.&lt;br /&gt;
|-&lt;br /&gt;
| [0-9] || Nem || Nincs számjegy a sorban&lt;br /&gt;
|-&lt;br /&gt;
| .* || Igen || Mindenre illeszkedik, bármilyen hosszan (üres sorra is)&lt;br /&gt;
|-&lt;br /&gt;
| ^$ || Nem || Csak az üres sorra illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| ^.\+$ || Igen || Mindenre illeszkedik, kivéve az üres sorra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A következő kifejezés szintén illeszkedik:&lt;br /&gt;
 ^[A-Z].*\(egy\)\|\(kettő\).*\.$ =&amp;gt; A sor elején nagybetűvel kezdődik, van a közepén valahol benne &amp;quot;egy&amp;quot; vagy &amp;quot;kettő&amp;quot; karakterlánc és ponttal végződik. A köztes karakterek értéke nincs megszabva.&lt;br /&gt;
&lt;br /&gt;
==== grep ====&lt;br /&gt;
A &#039;&#039;&#039;grep&#039;&#039;&#039; utasítás segítségével végezhetünk el reguláris kifejezés, tehát minta illesztést fájlokon. Amennyiben nem adunk meg fájl paramétert, a STDIN csatornát olvassa. Az eredmények a STDOUT-ra íródnak.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+ Fontosabb kapcsolók&lt;br /&gt;
|-&lt;br /&gt;
! Rövid név !! Hosszú név !! Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| -c || --count || Megszámolja az illeszkedő sorokat&lt;br /&gt;
|-&lt;br /&gt;
| -o || --only-matching || Csak a mintára illeszkedő részt írja ki (nem a teljes sort)&lt;br /&gt;
|-&lt;br /&gt;
| -n || --line-number || Megszámozza a sorokat (a fájl alapján, nem a megjelenítés szerint)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Példa =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# nologin környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;nologin&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;nologin&amp;quot; # STDIN-en érkező adatok szűrése&lt;br /&gt;
&lt;br /&gt;
# bash környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;bash&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;bash&amp;quot;    # STDIN-en érkező adatok szűrése&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Példa 2 =====&lt;br /&gt;
Írjunk egy scriptet, amely a /bin/bash futtatási környezetet kapó felhasználók nevét kiírja a képernyőre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# a fájl sorainak száma&lt;br /&gt;
lines=`cat $file | wc -l`&lt;br /&gt;
&lt;br /&gt;
# végig megyünk a fájl sorain&lt;br /&gt;
for i in `seq 1 $lines`; do&lt;br /&gt;
 # itt kapjuk meg az i. sort&lt;br /&gt;
 line=`head -$i $file | tail -1`&lt;br /&gt;
 # kiszedjük a shell környezetet&lt;br /&gt;
 shell=`echo $line | cut -f7 -d&#039;:&#039;`&lt;br /&gt;
 # ha ez &amp;quot;/bin/bash&amp;quot;, akkor kivágjuk a sor első oszlopát, ezt írhatjuk a képernyőre&lt;br /&gt;
 if test $shell == &amp;quot;/bin/bash&amp;quot;; then&lt;br /&gt;
  echo $line | cut -f1 -d&#039;:&#039;&lt;br /&gt;
 fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.227s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# szűrjük ki a sorokat, amelyeknek a végén a &amp;quot;/bin/bash&amp;quot; karakterlánc található &lt;br /&gt;
#  és a kapott eredményhalmaznak vágjuk ki az első oszlopát&lt;br /&gt;
# a kapott eredményhalmaz még mindig megfelel a /etc/passwd eredeti formátumának, &lt;br /&gt;
#  csak a sorok számát csökkentettük a szűrési feltételnek megfelelően!&lt;br /&gt;
grep &amp;quot;/bin/bash$&amp;quot; $file | cut -f1 -d&#039;:&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.003s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== MAC cím parser =====&lt;br /&gt;
Legyen egy MAC címeket tartalmazó fáljunk - mac-cimek.txt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:0C:42:AB:CD:EF&lt;br /&gt;
00:0c:42:ab:cd:ef&lt;br /&gt;
00-0C-42-AB-CD-EF&lt;br /&gt;
00-0c-42-ab-cd-ef&lt;br /&gt;
000c42abcdef&lt;br /&gt;
000C42ABCDEF&lt;br /&gt;
00:0C:42:AB:CD:EF:AB&lt;br /&gt;
00:0C:42:AB:CD:EF:&lt;br /&gt;
0G:0C:42:AB:CD:EF&lt;br /&gt;
00.0C.42.AB.CD.EF&lt;br /&gt;
00:0C:42:AB:CD:EG&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ebben a fájlban vannak megfelelő és hibás szintaktikájú címek is. A feladat, hogy készítsünk reguláris kifejezést, amely megjeleníti a helyeseket a képernyőn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;quot;^\([[:xdigit:]]\{2\}[-:]\?\)\{5\}[[:xdigit:]]\{2\}$&amp;quot; mac-cimek.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Érdekességképp beletehetünk a fájlba a MAC címek elé és/vagy után véletlenszerű (megjeleníthető) karaktereket.&lt;br /&gt;
 Mit tapasztalunk? Miért?&lt;br /&gt;
 &lt;br /&gt;
 Távolítsuk el a sor eleje és a sor vége illesztéseket és futtassuk a grep-et a -o kapcsolóval? Mi változik?&lt;br /&gt;
 //(grep -o &amp;quot;\([[:xdigit:]]\{2\}[-:]\?\)\{5\}[[:xdigit:]]\{2\}&amp;quot; mac-cimek.txt)//&lt;br /&gt;
&lt;br /&gt;
== 4. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
== 5. óra ==&lt;br /&gt;
 Az ötödik órán minta ZH feladatsort oldunk meg.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=821</id>
		<title>EDU::GAMF::Operációs rendszerek::Gyakorlatok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=821"/>
		<updated>2024-10-09T12:06:07Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Példa 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
==== man ====&lt;br /&gt;
A &#039;&#039;man&#039;&#039; 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.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Használata:&#039;&#039;&#039;&lt;br /&gt;
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 &#039;&#039;man&#039;&#039; parancs használati útmutatóját is a következő utasítás kiadásával:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a &#039;&#039;head&#039;&#039; utasítás dokumentációját az alábbi módon érhetjük el&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ls ====&lt;br /&gt;
 Érdemes megtekinteni a parancs dokumentációját a &#039;&#039;man ls&#039;&#039; utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.&lt;br /&gt;
Az &#039;&#039;&#039;ls&#039;&#039;&#039; parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a &#039;&#039;&#039;.&#039;&#039;&#039;, tehát a jelenlegi könyvtárat listázza.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# meghívás paraméter nélkül&lt;br /&gt;
ls&lt;br /&gt;
&lt;br /&gt;
# meghívás . paraméterrel - ugyanaz az eredmény&lt;br /&gt;
ls .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár listázása&lt;br /&gt;
ls /&lt;br /&gt;
&lt;br /&gt;
# a /usr/local/bin könyvtár listázása&lt;br /&gt;
ls /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait&lt;br /&gt;
ls -l&lt;br /&gt;
&lt;br /&gt;
# A /bin/ls fájl jogosultságainak lekérdezése&lt;br /&gt;
ls -l /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az &#039;&#039;&#039;ls&#039;&#039;&#039; megnyitja a könyvtárat és annak tartalmát listázza ki.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga&lt;br /&gt;
ls /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést&lt;br /&gt;
ls / -l&lt;br /&gt;
&lt;br /&gt;
# 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&lt;br /&gt;
# Ekkor a könyvtár listázódik, nem a tartalma&lt;br /&gt;
ls -d /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pwd ====&lt;br /&gt;
A &#039;&#039;&#039;pwd&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cd ====&lt;br /&gt;
A &#039;&#039;&#039;cd&#039;&#039;&#039; parancs segítségével könyvtárat válthatunk (&#039;&#039;changedir&#039;&#039;). A cél könyvtár nevét paraméterben kell megadnunk.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár megnyitása&lt;br /&gt;
cd /&lt;br /&gt;
&lt;br /&gt;
# HOME könyvtár megnyitása&lt;br /&gt;
# ~ egy alias&lt;br /&gt;
cd ~&lt;br /&gt;
&lt;br /&gt;
# /usr/bin megnyitása&lt;br /&gt;
cd /usr/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hivatkozásoknál, így a &#039;&#039;cd&#039;&#039; esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:&lt;br /&gt;
* Az abszolút hivatkozás / elérési út mindig &#039;&#039;/&#039;&#039; jellel kezdődik. pl.: &#039;&#039;cd /home/&#039;&#039;, &#039;&#039;cd /usr/bin&#039;&#039;&lt;br /&gt;
* A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: &#039;&#039;cd home&#039;&#039;, &#039;&#039;cd bin&#039;&#039;, vagy &#039;&#039;.&#039;&#039; illetve &#039;&#039;..&#039;&#039; karakterekkel kezdődnek.&lt;br /&gt;
** A &#039;&#039;.&#039;&#039; könyvtár jelenti az aktuális könyvtárat&lt;br /&gt;
** A &#039;&#039;..&#039;&#039; könyvtár jelenti a szülő könyvtárat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# szülő könyvtár megnyitása&lt;br /&gt;
cd ../&lt;br /&gt;
&lt;br /&gt;
# a szülőkönyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ../bin&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ./bin&lt;br /&gt;
cd bin      # vegyük észre: a ./ ez esetben elhagyható&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mkdir ====&lt;br /&gt;
Az &#039;&#039;&#039;mkdir&#039;&#039;&#039; parancs segítségével könyvtárakat hozhatunk létre (&#039;&#039;make directory&#039;&#039;). Alapértelmezetten a &#039;&#039;.&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# folder könyvtár létrehozása az aktuális könyvtárban&lt;br /&gt;
mkdir folder&lt;br /&gt;
mkdir ./folder2&lt;br /&gt;
# subfolder létrehozása a folder könyvtáron belül.&lt;br /&gt;
mkdir folder/subfolder&lt;br /&gt;
&lt;br /&gt;
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk&lt;br /&gt;
mkdir /tmp/folder&lt;br /&gt;
&lt;br /&gt;
# folder létrehozása a szülőkönyvtárban&lt;br /&gt;
mkdir ../folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtáron belül létrejön egy &#039;&#039;test&#039;&#039; könyvtár és azon belül jön létre a &#039;&#039;folder&#039;&#039; könyvtár.&lt;br /&gt;
mkdir /test/folder/ -p&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban jön létre egy &#039;&#039;test&#039;&#039; könyvtár és azon belül a &#039;&#039;folder&#039;&#039; könyvtár&lt;br /&gt;
mkdir -p test/folder&lt;br /&gt;
&lt;br /&gt;
# a jelenlegi könyvtárban létrejon a &#039;&#039;test&#039;&#039; könyvtár, &lt;br /&gt;
# azon belül létrejön egy &#039;&#039;folder1&#039;&#039; és egy &#039;&#039;folder2&#039;&#039; könyvtár, &lt;br /&gt;
# majd mind a kettőben létrejön a &#039;&#039;work&#039;&#039; könyvtár.&lt;br /&gt;
mkdir -p test/{folder1,folder2}/work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.&lt;br /&gt;
&lt;br /&gt;
==== rmdir ====&lt;br /&gt;
Az &#039;&#039;&#039;rmdir&#039;&#039;&#039; parancs segítségével üres könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figyelem&#039;&#039;&#039;! 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!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# relatív hivatkozással&lt;br /&gt;
rmdir test/folder&lt;br /&gt;
&lt;br /&gt;
# abszolút hivatkozással&lt;br /&gt;
rmdir /test/folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cp ====&lt;br /&gt;
A &#039;&#039;&#039;cp&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd ./file&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba&lt;br /&gt;
cp /etc/passwd /tmp/&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak másolása esetén a &#039;&#039;-r&#039;&#039; kapcsoló használata szükséges (&#039;&#039;recursive&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba&lt;br /&gt;
cp /etc/network /tmp/ -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mv ====&lt;br /&gt;
Az &#039;&#039;&#039;mv&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.&lt;br /&gt;
&lt;br /&gt;
 A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd állomány átnevezése file-ra&lt;br /&gt;
mv passwd file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány átnevezése file-ra&lt;br /&gt;
mv /etc/passwd /etc/file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be&lt;br /&gt;
mv /etc/passwd /tmp&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra&lt;br /&gt;
mv /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a &#039;&#039;recursive&#039;&#039; (&#039;&#039;-r&#039;&#039;) jelölésre.&lt;br /&gt;
&lt;br /&gt;
==== rm ====&lt;br /&gt;
Az &#039;&#039;&#039;rm&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: &#039;&#039;-r&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm folder -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== less ====&lt;br /&gt;
A &#039;&#039;&#039;less&#039;&#039;&#039; egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
less /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== more ====&lt;br /&gt;
A &#039;&#039;&#039;more&#039;&#039;&#039; szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
more /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== which ====&lt;br /&gt;
A &#039;&#039;&#039;which&#039;&#039; program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az ls parancs abszolút elérési útvonala&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# a which parancs abszolút elérési útvonala&lt;br /&gt;
which which&lt;br /&gt;
&lt;br /&gt;
# a man parancs elérési útvonala&lt;br /&gt;
which man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== file ====&lt;br /&gt;
A &#039;&#039;&#039;file&#039;&#039;&#039; utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file /etc/passwd&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== echo ====&lt;br /&gt;
Az &#039;&#039;&#039;echo&#039;&#039;&#039; mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hello World&amp;quot;&lt;br /&gt;
echo Hello World&lt;br /&gt;
echo Ez egy teszt üzenet&lt;br /&gt;
echo &amp;quot;Ez egy teszt üzenet&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;-n&amp;quot; kapcsoló segítségével kapcsolhatunk ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cat ====&lt;br /&gt;
A &#039;&#039;&#039;cat&#039;&#039;&#039; utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)&lt;br /&gt;
cat /etc/passwd /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a &amp;lt;semmi&amp;gt; összefűzése és megjelenítése a képernyőn&lt;br /&gt;
cat /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== head ====&lt;br /&gt;
A &#039;&#039;&#039;head&#039;&#039;&#039; 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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
head -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tail ====&lt;br /&gt;
A &#039;&#039;&#039;tail&#039;&#039;&#039; hasonlóan működik, mint a &#039;&#039;&#039;head&#039;&#039;&#039;, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
tail -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wc ====&lt;br /&gt;
A &#039;&#039;&#039;wc&#039;&#039;&#039; utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (&#039;&#039;word counter&#039;&#039;): sorok, szavak, karakterek és bájtok száma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Rövid kapcsoló !! Hosszú kapcsoló !! Leírás&lt;br /&gt;
|-&lt;br /&gt;
| -l || --lines || sorok számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -w || --words || szavak számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -c || --chars || karakterek számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
|  || --bytes || bájtok számát adja vissza&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# sorok számát írja ki&lt;br /&gt;
wc -l /etc/passwd&lt;br /&gt;
# szavak számát írja ki&lt;br /&gt;
wc -w /etc/passwd&lt;br /&gt;
# bájtok számát írja ki&lt;br /&gt;
wc --bytes /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# sorok és szavak számát írja ki a képernyőre&lt;br /&gt;
wc -l -w /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== find ====&lt;br /&gt;
A &#039;&#039;&#039;find&#039;&#039;&#039; utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd nevű fájl keresése a /etc könyvtárban&lt;br /&gt;
find /etc -name passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programok csatornái ===&lt;br /&gt;
==== STDIN ====&lt;br /&gt;
==== STDOUT ====&lt;br /&gt;
==== STDERR ====&lt;br /&gt;
&lt;br /&gt;
=== Pipeline ===&lt;br /&gt;
&lt;br /&gt;
=== Parancsbehelyettesítés ===&lt;br /&gt;
=== Feladatok ===&lt;br /&gt;
==== Szedjük ki a &#039;&#039;/etc/passwd&#039;&#039; állomány 20. sorát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvassuk az első 20 sort és levágjuk az utolsót&lt;br /&gt;
head -20 /etc/passwd | tail -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mondjuk meg egy keresett bináris típusát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# fájl elérési út lekérdezése&lt;br /&gt;
# STDOUT =&amp;gt; /bin/ls&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# fájl típusának lekérdezése&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze:&lt;br /&gt;
file `which ls`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
&lt;br /&gt;
==== mcedit ====&lt;br /&gt;
Az &#039;&#039;&#039;mcedit&#039;&#039;&#039; az &#039;&#039;&#039;mc&#039;&#039;&#039; (&#039;&#039;Midnight Commander&#039;&#039;) 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 &#039;&#039;&#039;mc&#039;&#039;&#039; utasítással, amit később az &#039;&#039;&#039;F10&#039;&#039;&#039; 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 &amp;quot;tálcára helyezés&amp;quot; is megoldott, így a &#039;&#039;&#039;Ctrl+O&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Az mcedit megnyitható az &#039;&#039;mc&#039;&#039;-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.&lt;br /&gt;
&lt;br /&gt;
Az egér az mcedit-ben is működik!&lt;br /&gt;
&lt;br /&gt;
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 (&#039;&#039;CTRL+O&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mcedit /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nano ====&lt;br /&gt;
A &#039;&#039;&#039;nano&#039;&#039;&#039; szintén egy szövegszerkesztő alkalmazás.&lt;br /&gt;
&lt;br /&gt;
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:&lt;br /&gt;
* 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)&lt;br /&gt;
* CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba&lt;br /&gt;
* CTRL+O Menti a változásokat&lt;br /&gt;
* CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== chmod ====&lt;br /&gt;
==== shift ====&lt;br /&gt;
==== cut ====&lt;br /&gt;
A &#039;&#039;&#039;cut&#039;&#039;&#039; 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 &#039;&#039;-f&#039;&#039; (&#039;&#039;field&#039;&#039;), ahol a megjelenítendő oszlopokat adhatjuk meg és a &#039;&#039;-d&#039;&#039; (&#039;&#039;delimiter&#039;&#039;), ahol az elválasztó karaktert állíthatjuk be.&lt;br /&gt;
&lt;br /&gt;
Általában a &#039;&#039;/etc/passwd&#039;&#039; állományon dolgozunk, mert ebben egy &#039;&#039;:&#039;&#039;-al elválasztott táblázat található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a fájl első oszlopát szedi ki :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet&lt;br /&gt;
cut -f1 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet és az id-ját&lt;br /&gt;
cut -f1,3 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,&lt;br /&gt;
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát&lt;br /&gt;
cut -f1-3,6 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sort ====&lt;br /&gt;
A &#039;&#039;&#039;sort&#039;&#039;&#039; utasítás segítségével rendezhetjük az adattömböt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a passwd állomány rendezése a felhasználónév szerint - ez van elől&lt;br /&gt;
sort /etc/passwd&lt;br /&gt;
# fordított sorrend - reverse&lt;br /&gt;
sort -r /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;-n&#039;&#039; opciót.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# file egy számokat tartalmazó fájl - egy sor egy fájl&lt;br /&gt;
sort -n file&lt;br /&gt;
# fordított sorrend&lt;br /&gt;
sort -r -n file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tr ====&lt;br /&gt;
A &#039;&#039;&#039;tr&#039;&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az e betűt o-ra, az o betűt e-re cseréli ki&lt;br /&gt;
echo &amp;quot;hello&amp;quot; | tr eo oe&lt;br /&gt;
&lt;br /&gt;
# A T betűt K-ra, az n betűt p-re cseréli ki&lt;br /&gt;
echo &amp;quot;Tanar&amp;quot; | tr Tn Kp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A fenti példák alapján nézzük meg, hogy mi történik:&lt;br /&gt;
# A tr két pozicionális paraméterrel lett meghívva&lt;br /&gt;
## Az első paraméter adja meg a lecserélendő karakterek halmazát&lt;br /&gt;
## A második paraméter adja meg az új karakterek halmazát&lt;br /&gt;
# A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben&lt;br /&gt;
## ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre&lt;br /&gt;
## ha nincs benne, akkor megy tovább&lt;br /&gt;
# a metodika miatt keresztbe is lehet cserélni (pl. &#039;&#039;o&#039;&#039;-t &#039;&#039;e&#039;&#039;-re, &#039;&#039;e&#039;&#039;-t &#039;&#039;o&#039;&#039;-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt &#039;&#039;e&#039;&#039; betűnek a végén &#039;&#039;o&#039;&#039; betűre kéne cserélődnie.&lt;br /&gt;
&lt;br /&gt;
==== if ====&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; 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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
else&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű &#039;&#039;&#039;if&#039;&#039;&#039; elágazást is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Egy olyan program, amelynek a visszatérési értéke hasznos információkat hordoz a futás eredményét tekintve. Ne feledjük el, hogy a &#039;&#039;&#039;return&#039;&#039;&#039; kulcsszóval tudunk ilyen értéket generálni C/C++ kódok esetében. Lássunk egy példát:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  if ( 10 % 2 == 0 ) return 0;&lt;br /&gt;
  else return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fenti program visszatérési értéke információval szolgál számunkra, hogy a 10 osztható-e kettővel, avagy sem. Ez az érték vizsgálható az &#039;&#039;&#039;if&#039;&#039;&#039; segítségével és a válasz függvényében más-más kódokat hajthatunk végre.&lt;br /&gt;
&lt;br /&gt;
A kiértékelés ellentétes a megszokott módszerhez képest (ahol minden igaz, aminek az értéke nem 0).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ha a KIFEJEZÉS 0 értéket ad vissza, akkor IGAZ az állítás, tehát az if-en belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; 0&lt;br /&gt;
then&lt;br /&gt;
  ....&lt;br /&gt;
else&lt;br /&gt;
  ....&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# ha a KIFEJEZÉS nem 0 értéket ad vissza, akkor HAMIS az állítás, tehát az else-n belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; != 0&lt;br /&gt;
then&lt;br /&gt;
    ...&lt;br /&gt;
else&lt;br /&gt;
    ...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programozási nyelvek tanításakor ezért térünk vissza 0-s értékkel (&#039;&#039;&#039;return 0;&#039;&#039;&#039;), a programunk végén, és hiba esetén 1, vagy annál nagyobb értékkel.&lt;br /&gt;
&lt;br /&gt;
==== test ====&lt;br /&gt;
A &#039;&#039;&#039;test&#039;&#039;&#039; parancs logikai függvényeket értékel ki és&lt;br /&gt;
* &#039;&#039;&#039;0&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;IGAZ&#039;&#039;&#039;,&lt;br /&gt;
* &#039;&#039;&#039;1&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;HAMIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; utasítással együtt szoktuk használni, de természetesen ettől független is meghívható.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# megtörténik a logikai kiértékelés, eldől, hogy a két string egyezik-e&lt;br /&gt;
test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
# kiírjuk a képernyőre a test utasítás visszatérési értékét&lt;br /&gt;
echo $?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if&#039;&#039;&#039; utasítással a következőképp használhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# hamis&lt;br /&gt;
if test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# igaz&lt;br /&gt;
if ! test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#igaz&lt;br /&gt;
if test &amp;quot;text1&amp;quot; != &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elérhető egy &#039;&#039;alias&#039;&#039;, aminek segítségével olvashatóbbá tehetjük a &#039;&#039;&#039;test&#039;&#039;&#039; utasítást. Ez a &#039;&#039;&#039;[ ]&#039;&#039;&#039; pár.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ügyeljünk rá, hogy a &#039;&#039;[&#039;&#039; és a &#039;&#039;]&#039;&#039; zárójelek mellett &#039;&#039;whitespace&#039;&#039; karakterek vannak. Ha ezeket kihagyjuk, akkor hibát fogunk kapni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A számok ellenőrzése BASH környezetben körülményesebb, mivel itt minden karakterláncnak számít. Emiatt a következő utasítás sorozat nem várt eredménnyel zárul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;1000&amp;quot; &amp;lt;= &amp;quot;20&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: igaz. De tudjuk, hogy ez az eredmény nem igaz, a BASH mégis így értékelte ki. Az oka, hogy az első karaktereket tekintve (&#039;&#039;1&#039;&#039; és &#039;&#039;2&#039;&#039;) elmondható, hogy az &#039;&#039;1&#039;&#039;-es hamarabb van az ABC-ben (kódtáblában), mint a &#039;&#039;2&#039;&#039;, így az &#039;&#039;1000&#039;&#039;-nek kisebbnek kell lennie (mintha a &amp;quot;alma&amp;quot; és &amp;quot;körte&amp;quot; lenne összehasonlítva, hogy melyik következik előbb az ABC-ben).&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy a &#039;&#039;&#039;test&#039;&#039;&#039; utasítás karakterek helyett számként dolgozza fel a paramétert, kapcsolót kell használnunk:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Kapcsoló !! Angol megnevezés !! Magyar megnevezés&lt;br /&gt;
|-&lt;br /&gt;
| -eq || Equals || Egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -ne ||  Not Equals || Nem egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -lt || Lower than || Kisebb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -le || Lower than or equals || Kisebb vagy egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -gt || Greather than || nagyobb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -ge || Greather than or equals || Nagyobb vagy egyenlő&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ 1000 -le 20 ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: Az elvártaknak megfelelően HAMIS.&lt;br /&gt;
&lt;br /&gt;
==== for ====&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; utasítás segítségével egy lista elemein mehetünk végig. Hasonlóan működik, mint a modern programozási nyelvekben a &#039;&#039;foreach&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Legegyszerűbben a következő utasítással tesztelhetjük, ahol a bemeneti listát soronként látjuk viszont a képernyőn:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in 1 2 3 4 5 6&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen van lehetőségünk a listát más program kimenetéből kinyerni a parancsbehelyettesítés segítségével:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `ls`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; gyakorlatilag a pozicionális paramétereken megy végig, tehát egy lista elem a $1, egy másik listaelem a $2. Tudjuk, hogy ha szóközök között adjuk meg, akkor szóközt is tartalmazhat a paraméterünk. Lássunk egy példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;1 2 3&amp;quot; &amp;quot;4 5 6&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben a képernyőn két sor jelenik meg: &#039;&#039;1 2 3&#039;&#039; és &#039;&#039;4 5 6&#039;&#039;. Azonban a parancsbehelyettesítés nem alkalmaz az idézőjelhez hasonló technikát, tehát azt alkalmazva minden szó (szóközökkel határolt karaktersorozat) új pozicionális paramétert jelent. Lássunk egy az előzőhöz hasonló példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `echo &amp;quot;1 2 3 4 5 6&amp;quot;`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben hat sor jelenik meg, benne egy-egy számmal, tehát az &#039;&#039;&#039;echo &amp;quot;1 2 3 4 5 6&amp;quot;&#039;&#039;&#039; kimenetét szóközönként vágta fel.&lt;br /&gt;
&lt;br /&gt;
==== while ====&lt;br /&gt;
A &#039;&#039;&#039;while&#039;&#039;&#039; utasítás, mint minden programozási nyelvben, itt is felfogható úgy, mint egy többször lefutó &#039;&#039;&#039;if&#039;&#039;&#039;. Éppen ezért a szintaktikájuk megegyezik, csupán a feltételek megírásával kell óvatosan bánnunk, hogy a ciklus mag akkor és addig fusson, ameddig mi azt szeretnénk. A &#039;&#039;&#039;while&#039;&#039;&#039; ciklusnál ugyanazokat az alkalmazásokat írhatjuk be a &#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039; helyére, mint az &#039;&#039;&#039;if&#039;&#039;&#039; esetében.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while KIFEJEZÉS&lt;br /&gt;
do&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például ha azt akarjuk, hogy egy ciklus addig fusson, amíg meg nem jelenik egy fájl a fájlrendszerben, akkor azt a következőképp vezethetjük le:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ellenőrzi, hogy a fájl elérhető-e&lt;br /&gt;
test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ez esetben egyetlen kísérletet teszünk, de nem várjuk meg, hogy oda kerüljön, amennyiben nincs ott&lt;br /&gt;
if test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;A fájl nem létezik&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# várakozunk, amíg a feltétel nem lesz igaz, tehát a fájl nem kerül oda&lt;br /&gt;
while ! test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozunk&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# test parancs helyettesítése []-el&lt;br /&gt;
while ! [ -f &amp;quot;file.txt&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A while ciklusnál érdemes megemlíteni a &#039;&#039;&#039;until&#039;&#039;&#039; utasítást, ami annyiban tér el, hogy a feltétel kiértékelését invertálni kell - tehát ami igaz a &#039;&#039;&#039;while&#039;&#039;&#039; esetében, az hamis az &#039;&#039;&#039;until&#039;&#039;&#039; esetében és fordítva. Így a fenti feladatot megvalósíthatjuk invertálás nélkül, az until utasítással is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
until test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
 echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== seq ====&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítás egy listát generál számunkra, amelyben a megadott lépésszámmal, a megadott legkisebb értéktől a megadott legnagyobb értékig szerepelnek a számok.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# számok 1-10-ig&lt;br /&gt;
seq 10&lt;br /&gt;
&lt;br /&gt;
# számok 5-10-ig&lt;br /&gt;
seq 5 10&lt;br /&gt;
&lt;br /&gt;
# számok 3-tól 10-ig 2-esével&lt;br /&gt;
seq 3 2 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást általában a &#039;&#039;&#039;for&#039;&#039;&#039; ciklus listájában használjuk, hogy elő tudjuk állítani az indexeket.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq 3 2 10`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== read ====&lt;br /&gt;
A &#039;&#039;&#039;read&#039;&#039;&#039; utasítás segítségével a STDIN-ről kérhetünk be információt változóba/változókba. Ha több változót sorolunk fel, akkor a bemenetet szóközöknél vágja el.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvasás var-ba&lt;br /&gt;
# STDIN =&amp;gt; teszt&lt;br /&gt;
#  var =&amp;gt; teszt&lt;br /&gt;
# STDIN =&amp;gt; teszt szöveg&lt;br /&gt;
#  var =&amp;gt; teszt szöveg&lt;br /&gt;
read var&lt;br /&gt;
&lt;br /&gt;
# beolvasás fname és lname változókba&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname = Farkas&lt;br /&gt;
# STDIN =&amp;gt; Attila&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas OPSYS&lt;br /&gt;
read fname lname&lt;br /&gt;
&lt;br /&gt;
# beolvasás három változóba. Ha a felhasználó az utasításokkal szemben több szót adott meg, akkor így biztosíthatjuk, hogy ne legyen szóköz az első két változóban&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS meg valami más&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; OPSYS meg valami más&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utóbbi esetben hibaüzenet is generálható, ha megvizsgáljuk, hogy a &#039;&#039;tmp&#039;&#039; változó értéke üres-e:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Adja meg a teljes nevét: &amp;quot;&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&lt;br /&gt;
# -n =&amp;gt; nem üres?&lt;br /&gt;
# -z =&amp;gt; üres?&lt;br /&gt;
if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Valamit elhibáztál&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk ellenőrzött bekérést végrehajtani:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmp=&amp;quot;start value&amp;quot;&lt;br /&gt;
while [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo -n &amp;quot;Adja meg a teljes nevét FNAME LNAME formátumban: &amp;quot;&lt;br /&gt;
  read fname lname tmp&lt;br /&gt;
  if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
  then&lt;br /&gt;
    echo &amp;quot;Valamit elrontottál!&amp;quot;&lt;br /&gt;
    # ez esetben nem lépünk ki, mert bekérjük újra&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expr ====&lt;br /&gt;
Az &#039;&#039;&#039;expr&#039;&#039;&#039; parancs segítségével tudunk matematikai műveleteket végrehajtani. Mivel a BASH-ben minden változó karakterlánc, így nem tudunk közöttük műveletet végezni. Az &#039;&#039;&#039;expr&#039;&#039;&#039; a paramétereket belül számként kezeli. &#039;&#039;&#039;Csak egész számokkal tud dolgozni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a képernyőre kerül az eredmény&lt;br /&gt;
expr 1 + 2&lt;br /&gt;
expr 4 * 4&lt;br /&gt;
&lt;br /&gt;
# csak egész számot ír ki&lt;br /&gt;
expr 3 / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha tört számokkal kell dolgoznunk, akkor a következőket tehetjük:&lt;br /&gt;
# eltávolítjuk a törtrészt&lt;br /&gt;
# felszorozzuk 10^n-nel, ahol n a törtrész számjegyeivel egyezik meg (pl. 10.02-t 100-al kell szorozni). Az egész térben elvégzett művelet eredményét később vissza osztjuk ugyanannyival, amennyivel korábban felszoroztuk. &#039;&#039;&#039;Ez nem egy egyszerű feladat, hiszen a tört számot egyáltalán nem kezeli az expr, tehát cut, wc és egyéb parancsokkal kell kialakítanunk a számot, ahogy utána szét is kell darabolnunk azt.&#039;&#039;&#039;&lt;br /&gt;
# Másik környezetet használunk, ahol tudunk számokat is kezelni - &#039;&#039;&#039;ez a ZH-n nem elfogadott&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A lehetőségek közül csak az elsőt, a ZH-n teljes mértékben elfogadott megoldást mutatom be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a 3.4-et és a 1.2-őt kell összeadnunk.&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 3&lt;br /&gt;
echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 1&lt;br /&gt;
echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
expr `echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1` + `echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok parancsokhoz ===&lt;br /&gt;
==== Írassuk ki a /etc/passwd több sorát ====&lt;br /&gt;
Több választási lehetőségünk van:&lt;br /&gt;
* ha a kiírandó sorszámok valamilyen logikát követnek (minden második, harmadik stb.), akkor használhatjuk a &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást&lt;br /&gt;
* ha nincs logika a sorszámokban, akkor kézzel kell elkészítenünk a listát&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki minden harmadik sor tartalmát&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# határozzuk meg a seq tartományát&lt;br /&gt;
# min: 1&lt;br /&gt;
# max: ahány sora van a fájlnak&lt;br /&gt;
&lt;br /&gt;
# max érték meghatározás&lt;br /&gt;
# a változó létrehozást lentebb tárgyaljuk&lt;br /&gt;
max=`cat /etc/passwd | wc -l`&lt;br /&gt;
&lt;br /&gt;
# lista meghatározása for ciklushoz&lt;br /&gt;
# 1-től $max-ig hármasával&lt;br /&gt;
seq 1 3 $max&lt;br /&gt;
&lt;br /&gt;
# Rakjuk össze&lt;br /&gt;
for i in `seq 1 3 $max`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát nem tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki a 2., 5., 10. és 11. sorokat&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `2 5 10 11`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fájlok ellenőrzése és másolása ====&lt;br /&gt;
Másoljuk át a /etc/passwd állományt egy könyvtárba (~/test/destination). Ha a célkönyvtár nem létezik, akkor hozzuk létre. Ha a célkönyvtár és a fájl is létezik, akkor írjunk ki hibaüzenetet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# forrás fájl létezésének vizsgálata&lt;br /&gt;
test -f /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# célfájl létezésének vizsgálata&lt;br /&gt;
test -f ~/test/destination/passwd&lt;br /&gt;
&lt;br /&gt;
# mappa létezésének vizsgálata&lt;br /&gt;
test -d ~/test/destination&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
&lt;br /&gt;
# ha a forrásfájl nem létezik&lt;br /&gt;
if ! test -f /etc/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A forrásfájl nem létezik&amp;quot;&lt;br /&gt;
# ha a célfájl létezik&lt;br /&gt;
elif test -f ~/test/destination/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A fájl már létezik&amp;quot;&lt;br /&gt;
# ha a cél mappa nem létezik&lt;br /&gt;
elif ! test -d ~/test/destination&lt;br /&gt;
then&lt;br /&gt;
   # mappa létrehozás - szülőkönyvtárakat is, ha nem léteznek&lt;br /&gt;
   mkdir -p ~/test/destination&lt;br /&gt;
   # fájl belemásolása&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
# ha a célfájl nem létezik, de a célmappa igen&lt;br /&gt;
else&lt;br /&gt;
   # a fájlt bemásoljuk a könyvtárba&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script létrehozása ===&lt;br /&gt;
* Script megírása&lt;br /&gt;
* Futási jog&lt;br /&gt;
&lt;br /&gt;
=== Pozicionális paraméterek ===&lt;br /&gt;
&lt;br /&gt;
=== Változók ===&lt;br /&gt;
&lt;br /&gt;
== 3. óra ==&lt;br /&gt;
 A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a &#039;&#039;grep&#039;&#039;-et foguk megvizsgálni.&lt;br /&gt;
&lt;br /&gt;
=== Reguláris kifejezés szerkezete ===&lt;br /&gt;
A reguláris nyelvek atomokból, lezártakból épül fel, amelynek az eredménye az úgynevezett „összetettek”.&lt;br /&gt;
&lt;br /&gt;
==== Atomok ====&lt;br /&gt;
 Az atomok egy karakterre illeszkednek a sorban.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Atom !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| betűk, számok || saját magukra illeszkednek&lt;br /&gt;
|-&lt;br /&gt;
| ^ || sor elejére illeszkedik (csak egyszer lehet a legelején)&lt;br /&gt;
|-&lt;br /&gt;
| $ || sor végére illeszkedik (csak egyszer lehet a legvégén)&lt;br /&gt;
|-&lt;br /&gt;
| [abc] || halmaz: minden benne lévő elemre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| [^abc] || inverz halmaz: egyetlen benne lévő elemre sem illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| . || mindenre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lezártak ====&lt;br /&gt;
 A lezártak ismétlődéseket fogalmaznak meg egy atomra vonatkozóan. &#039;&#039;&#039;Lezárt csak atom után helyezkedhet el!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Lezárt !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| * || az atomot 0 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| + || az atomot 1 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| ? || az atomot 0 és 1 között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n} || az atom pontosan n-szer fordul elő egymás mellett&lt;br /&gt;
|-&lt;br /&gt;
| {n,m} || az atomot n és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n,} || az atomot n és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {,m} || az atomot 0 és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Összefűzöttek ====&lt;br /&gt;
 Az atomok és a lezártak egymás után írt sorozata.&lt;br /&gt;
A lezártaknál fontos kitétel volt, hogy csak atom után lehet írni. &#039;&#039;&#039;Egy összefűzött újra atomizálható&#039;&#039;&#039; a ( ) karakterekkel.&lt;br /&gt;
Az összefűzöttek tartalmazhatnak uniót (|), ahol több szabály közül bármelyik megvalósulhat egy sikeres illesztéshez.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
 Ez egy teszt szöveg, amin próbálkozunk.&lt;br /&gt;
A fenti szöveget alapul véve, a következő reguláris kifejezéseket hozhatjuk létre:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Reguláris kifejezés !! Illeszkedik? || Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| E || Igen || Van a sorban E betű&lt;br /&gt;
|-&lt;br /&gt;
| a || Igen || Van a sorban a betű&lt;br /&gt;
|-&lt;br /&gt;
| b || Nem || Nincs a sorban b betű&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Igen || A sor elején van az E betű&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Nem || Nincs a sor elején A betű&lt;br /&gt;
|-&lt;br /&gt;
| ^e || Nem || nincs a sor elején e betű&lt;br /&gt;
|-&lt;br /&gt;
| .$ || Igen || Bármilyen karakter lehet a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| \. || Igen || . van a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| k$ || Nem || Nincs k a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| egy || igen || Van a sorban „egy” string&lt;br /&gt;
|-&lt;br /&gt;
| egység || Nem || Nincs a sorban egység string&lt;br /&gt;
|-&lt;br /&gt;
| egy* || Igen || eg kötelező, y 0 vagy végtelenszer lehet (egy, egyy, egyyy, egyyyy ...)&lt;br /&gt;
|-&lt;br /&gt;
| l*egy || Igen || l 0 vagy végtelen, eg kötelező (eg, leg, lleg, llleg, lllleg ...)&lt;br /&gt;
|-&lt;br /&gt;
| l+egy || Nem || Nincs a szövegben &amp;quot;l+egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| l\+egy || Nem || l 1 vagy végtelen hosszú, egy kötelező (legy, llegy, lllegy, llllegy ...)&lt;br /&gt;
|-&lt;br /&gt;
| (egy) || Nem || Nincs a sorban &amp;quot;(egy)&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\) || Igen || Van a sorban &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)* || Igen || Van a sorban legalább 0-szor &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\+ || Igen || Van a sorban legalább 1-szer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\{2\} || Nem || Nincs a sorban pontosan kétszer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| [a-z] || Igen || Vannak benne kisbetűk&lt;br /&gt;
|-&lt;br /&gt;
| [A-Z] || Igen || Van benne nagy betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-D] || Nem || Nincs a sor elején A-D tartományban betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z] || Igen || Nagy betű van a sor elején&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z].*\.$ || Igen || Nagybetűvel kezdőik, középen bármi lehet és ponttal végződik a sor.&lt;br /&gt;
|-&lt;br /&gt;
| [0-9] || Nem || Nincs számjegy a sorban&lt;br /&gt;
|-&lt;br /&gt;
| .* || Igen || Mindenre illeszkedik, bármilyen hosszan (üres sorra is)&lt;br /&gt;
|-&lt;br /&gt;
| ^$ || Nem || Csak az üres sorra illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| ^.\+$ || Igen || Mindenre illeszkedik, kivéve az üres sorra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A következő kifejezés szintén illeszkedik:&lt;br /&gt;
 ^[A-Z].*\(egy\)\|\(kettő\).*\.$ =&amp;gt; A sor elején nagybetűvel kezdődik, van a közepén valahol benne &amp;quot;egy&amp;quot; vagy &amp;quot;kettő&amp;quot; karakterlánc és ponttal végződik. A köztes karakterek értéke nincs megszabva.&lt;br /&gt;
&lt;br /&gt;
==== grep ====&lt;br /&gt;
A &#039;&#039;&#039;grep&#039;&#039;&#039; utasítás segítségével végezhetünk el reguláris kifejezés, tehát minta illesztést fájlokon. Amennyiben nem adunk meg fájl paramétert, a STDIN csatornát olvassa. Az eredmények a STDOUT-ra íródnak.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+ Fontosabb kapcsolók&lt;br /&gt;
|-&lt;br /&gt;
! Rövid név !! Hosszú név !! Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| -c || --count || Megszámolja az illeszkedő sorokat&lt;br /&gt;
|-&lt;br /&gt;
| -o || --only-matching || Csak a mintára illeszkedő részt írja ki (nem a teljes sort)&lt;br /&gt;
|-&lt;br /&gt;
| -n || --line-number || Megszámozza a sorokat (a fájl alapján, nem a megjelenítés szerint)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Példa =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# nologin környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;nologin&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;nologin&amp;quot; # STDIN-en érkező adatok szűrése&lt;br /&gt;
&lt;br /&gt;
# bash környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;bash&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;bash&amp;quot;    # STDIN-en érkező adatok szűrése&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Példa 2 =====&lt;br /&gt;
Írjunk egy scriptet, amely a /bin/bash futtatási környezetet kapó felhasználók nevét kiírja a képernyőre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# a fájl sorainak száma&lt;br /&gt;
lines=`cat $file | wc -l`&lt;br /&gt;
&lt;br /&gt;
# végig megyünk a fájl sorain&lt;br /&gt;
for i in `seq 1 $lines`; do&lt;br /&gt;
 # itt kapjuk meg az i. sort&lt;br /&gt;
 line=`head -$i $file | tail -1`&lt;br /&gt;
 # kiszedjük a shell környezetet&lt;br /&gt;
 shell=`echo $line | cut -f7 -d&#039;:&#039;`&lt;br /&gt;
 # ha ez &amp;quot;/bin/bash&amp;quot;, akkor kivágjuk a sor első oszlopát, ezt írhatjuk a képernyőre&lt;br /&gt;
 if test $shell == &amp;quot;/bin/bash&amp;quot;; then&lt;br /&gt;
  echo $line | cut -f1 -d&#039;:&#039;&lt;br /&gt;
 fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.227s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# szűrjük ki a sorokat, amelyeknek a végén a &amp;quot;/bin/bash&amp;quot; karakterlánc található &lt;br /&gt;
#  és a kapott eredményhalmaznak vágjuk ki az első oszlopát&lt;br /&gt;
# a kapott eredményhalmaz még mindig megfelel a /etc/passwd eredeti formátumának, &lt;br /&gt;
#  csak a sorok számát csökkentettük a szűrési feltételnek megfelelően!&lt;br /&gt;
grep &amp;quot;/bin/bash$&amp;quot; $file | cut -f1 -d&#039;:&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.003s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== MAC cím parser =====&lt;br /&gt;
Legyen egy MAC címeket tartalmazó fáljunk - mac-cimek.txt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:0C:42:AB:CD:EF&lt;br /&gt;
00:0c:42:ab:cd:ef&lt;br /&gt;
00-0C-42-AB-CD-EF&lt;br /&gt;
00-0c-42-ab-cd-ef&lt;br /&gt;
000c42abcdef&lt;br /&gt;
000C42ABCDEF&lt;br /&gt;
00:0C:42:AB:CD:EF:AB&lt;br /&gt;
00:0C:42:AB:CD:EF:&lt;br /&gt;
0G:0C:42:AB:CD:EF&lt;br /&gt;
00.0C.42.AB.CD.EF&lt;br /&gt;
00:0C:42:AB:CD:EG&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ebben a fájlban vannak megfelelő és hibás szintaktikájú címek is. A feladat, hogy készítsünk reguláris kifejezést, amely megjeleníti a helyeseket a képernyőn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;quot;^\([[:xdigit:]]\{2\}[-:]\?\)\{5\}[[:xdigit:]]\{2\}$&amp;quot; mac-cimek.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Érdekességképp beletehetünk a fájlba a MAC címek elé és/vagy után véletlenszerű (megjeleníthető) karaktereket. Mit tapasztalunk? Miért?&lt;br /&gt;
 Próbáljuk ki a -o kapcsolót? Mi változik?&lt;br /&gt;
&lt;br /&gt;
== 4. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
== 5. óra ==&lt;br /&gt;
 Az ötödik órán minta ZH feladatsort oldunk meg.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=820</id>
		<title>EDU::GAMF::Operációs rendszerek::Gyakorlatok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=820"/>
		<updated>2024-10-09T11:53:23Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Példa 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
==== man ====&lt;br /&gt;
A &#039;&#039;man&#039;&#039; 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.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Használata:&#039;&#039;&#039;&lt;br /&gt;
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 &#039;&#039;man&#039;&#039; parancs használati útmutatóját is a következő utasítás kiadásával:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a &#039;&#039;head&#039;&#039; utasítás dokumentációját az alábbi módon érhetjük el&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ls ====&lt;br /&gt;
 Érdemes megtekinteni a parancs dokumentációját a &#039;&#039;man ls&#039;&#039; utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.&lt;br /&gt;
Az &#039;&#039;&#039;ls&#039;&#039;&#039; parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a &#039;&#039;&#039;.&#039;&#039;&#039;, tehát a jelenlegi könyvtárat listázza.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# meghívás paraméter nélkül&lt;br /&gt;
ls&lt;br /&gt;
&lt;br /&gt;
# meghívás . paraméterrel - ugyanaz az eredmény&lt;br /&gt;
ls .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár listázása&lt;br /&gt;
ls /&lt;br /&gt;
&lt;br /&gt;
# a /usr/local/bin könyvtár listázása&lt;br /&gt;
ls /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait&lt;br /&gt;
ls -l&lt;br /&gt;
&lt;br /&gt;
# A /bin/ls fájl jogosultságainak lekérdezése&lt;br /&gt;
ls -l /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az &#039;&#039;&#039;ls&#039;&#039;&#039; megnyitja a könyvtárat és annak tartalmát listázza ki.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga&lt;br /&gt;
ls /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést&lt;br /&gt;
ls / -l&lt;br /&gt;
&lt;br /&gt;
# 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&lt;br /&gt;
# Ekkor a könyvtár listázódik, nem a tartalma&lt;br /&gt;
ls -d /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pwd ====&lt;br /&gt;
A &#039;&#039;&#039;pwd&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cd ====&lt;br /&gt;
A &#039;&#039;&#039;cd&#039;&#039;&#039; parancs segítségével könyvtárat válthatunk (&#039;&#039;changedir&#039;&#039;). A cél könyvtár nevét paraméterben kell megadnunk.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár megnyitása&lt;br /&gt;
cd /&lt;br /&gt;
&lt;br /&gt;
# HOME könyvtár megnyitása&lt;br /&gt;
# ~ egy alias&lt;br /&gt;
cd ~&lt;br /&gt;
&lt;br /&gt;
# /usr/bin megnyitása&lt;br /&gt;
cd /usr/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hivatkozásoknál, így a &#039;&#039;cd&#039;&#039; esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:&lt;br /&gt;
* Az abszolút hivatkozás / elérési út mindig &#039;&#039;/&#039;&#039; jellel kezdődik. pl.: &#039;&#039;cd /home/&#039;&#039;, &#039;&#039;cd /usr/bin&#039;&#039;&lt;br /&gt;
* A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: &#039;&#039;cd home&#039;&#039;, &#039;&#039;cd bin&#039;&#039;, vagy &#039;&#039;.&#039;&#039; illetve &#039;&#039;..&#039;&#039; karakterekkel kezdődnek.&lt;br /&gt;
** A &#039;&#039;.&#039;&#039; könyvtár jelenti az aktuális könyvtárat&lt;br /&gt;
** A &#039;&#039;..&#039;&#039; könyvtár jelenti a szülő könyvtárat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# szülő könyvtár megnyitása&lt;br /&gt;
cd ../&lt;br /&gt;
&lt;br /&gt;
# a szülőkönyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ../bin&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ./bin&lt;br /&gt;
cd bin      # vegyük észre: a ./ ez esetben elhagyható&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mkdir ====&lt;br /&gt;
Az &#039;&#039;&#039;mkdir&#039;&#039;&#039; parancs segítségével könyvtárakat hozhatunk létre (&#039;&#039;make directory&#039;&#039;). Alapértelmezetten a &#039;&#039;.&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# folder könyvtár létrehozása az aktuális könyvtárban&lt;br /&gt;
mkdir folder&lt;br /&gt;
mkdir ./folder2&lt;br /&gt;
# subfolder létrehozása a folder könyvtáron belül.&lt;br /&gt;
mkdir folder/subfolder&lt;br /&gt;
&lt;br /&gt;
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk&lt;br /&gt;
mkdir /tmp/folder&lt;br /&gt;
&lt;br /&gt;
# folder létrehozása a szülőkönyvtárban&lt;br /&gt;
mkdir ../folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtáron belül létrejön egy &#039;&#039;test&#039;&#039; könyvtár és azon belül jön létre a &#039;&#039;folder&#039;&#039; könyvtár.&lt;br /&gt;
mkdir /test/folder/ -p&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban jön létre egy &#039;&#039;test&#039;&#039; könyvtár és azon belül a &#039;&#039;folder&#039;&#039; könyvtár&lt;br /&gt;
mkdir -p test/folder&lt;br /&gt;
&lt;br /&gt;
# a jelenlegi könyvtárban létrejon a &#039;&#039;test&#039;&#039; könyvtár, &lt;br /&gt;
# azon belül létrejön egy &#039;&#039;folder1&#039;&#039; és egy &#039;&#039;folder2&#039;&#039; könyvtár, &lt;br /&gt;
# majd mind a kettőben létrejön a &#039;&#039;work&#039;&#039; könyvtár.&lt;br /&gt;
mkdir -p test/{folder1,folder2}/work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.&lt;br /&gt;
&lt;br /&gt;
==== rmdir ====&lt;br /&gt;
Az &#039;&#039;&#039;rmdir&#039;&#039;&#039; parancs segítségével üres könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figyelem&#039;&#039;&#039;! 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!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# relatív hivatkozással&lt;br /&gt;
rmdir test/folder&lt;br /&gt;
&lt;br /&gt;
# abszolút hivatkozással&lt;br /&gt;
rmdir /test/folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cp ====&lt;br /&gt;
A &#039;&#039;&#039;cp&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd ./file&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba&lt;br /&gt;
cp /etc/passwd /tmp/&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak másolása esetén a &#039;&#039;-r&#039;&#039; kapcsoló használata szükséges (&#039;&#039;recursive&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba&lt;br /&gt;
cp /etc/network /tmp/ -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mv ====&lt;br /&gt;
Az &#039;&#039;&#039;mv&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.&lt;br /&gt;
&lt;br /&gt;
 A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd állomány átnevezése file-ra&lt;br /&gt;
mv passwd file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány átnevezése file-ra&lt;br /&gt;
mv /etc/passwd /etc/file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be&lt;br /&gt;
mv /etc/passwd /tmp&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra&lt;br /&gt;
mv /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a &#039;&#039;recursive&#039;&#039; (&#039;&#039;-r&#039;&#039;) jelölésre.&lt;br /&gt;
&lt;br /&gt;
==== rm ====&lt;br /&gt;
Az &#039;&#039;&#039;rm&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: &#039;&#039;-r&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm folder -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== less ====&lt;br /&gt;
A &#039;&#039;&#039;less&#039;&#039;&#039; egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
less /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== more ====&lt;br /&gt;
A &#039;&#039;&#039;more&#039;&#039;&#039; szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
more /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== which ====&lt;br /&gt;
A &#039;&#039;&#039;which&#039;&#039; program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az ls parancs abszolút elérési útvonala&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# a which parancs abszolút elérési útvonala&lt;br /&gt;
which which&lt;br /&gt;
&lt;br /&gt;
# a man parancs elérési útvonala&lt;br /&gt;
which man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== file ====&lt;br /&gt;
A &#039;&#039;&#039;file&#039;&#039;&#039; utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file /etc/passwd&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== echo ====&lt;br /&gt;
Az &#039;&#039;&#039;echo&#039;&#039;&#039; mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hello World&amp;quot;&lt;br /&gt;
echo Hello World&lt;br /&gt;
echo Ez egy teszt üzenet&lt;br /&gt;
echo &amp;quot;Ez egy teszt üzenet&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;-n&amp;quot; kapcsoló segítségével kapcsolhatunk ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cat ====&lt;br /&gt;
A &#039;&#039;&#039;cat&#039;&#039;&#039; utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)&lt;br /&gt;
cat /etc/passwd /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a &amp;lt;semmi&amp;gt; összefűzése és megjelenítése a képernyőn&lt;br /&gt;
cat /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== head ====&lt;br /&gt;
A &#039;&#039;&#039;head&#039;&#039;&#039; 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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
head -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tail ====&lt;br /&gt;
A &#039;&#039;&#039;tail&#039;&#039;&#039; hasonlóan működik, mint a &#039;&#039;&#039;head&#039;&#039;&#039;, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
tail -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wc ====&lt;br /&gt;
A &#039;&#039;&#039;wc&#039;&#039;&#039; utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (&#039;&#039;word counter&#039;&#039;): sorok, szavak, karakterek és bájtok száma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Rövid kapcsoló !! Hosszú kapcsoló !! Leírás&lt;br /&gt;
|-&lt;br /&gt;
| -l || --lines || sorok számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -w || --words || szavak számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -c || --chars || karakterek számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
|  || --bytes || bájtok számát adja vissza&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# sorok számát írja ki&lt;br /&gt;
wc -l /etc/passwd&lt;br /&gt;
# szavak számát írja ki&lt;br /&gt;
wc -w /etc/passwd&lt;br /&gt;
# bájtok számát írja ki&lt;br /&gt;
wc --bytes /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# sorok és szavak számát írja ki a képernyőre&lt;br /&gt;
wc -l -w /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== find ====&lt;br /&gt;
A &#039;&#039;&#039;find&#039;&#039;&#039; utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd nevű fájl keresése a /etc könyvtárban&lt;br /&gt;
find /etc -name passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programok csatornái ===&lt;br /&gt;
==== STDIN ====&lt;br /&gt;
==== STDOUT ====&lt;br /&gt;
==== STDERR ====&lt;br /&gt;
&lt;br /&gt;
=== Pipeline ===&lt;br /&gt;
&lt;br /&gt;
=== Parancsbehelyettesítés ===&lt;br /&gt;
=== Feladatok ===&lt;br /&gt;
==== Szedjük ki a &#039;&#039;/etc/passwd&#039;&#039; állomány 20. sorát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvassuk az első 20 sort és levágjuk az utolsót&lt;br /&gt;
head -20 /etc/passwd | tail -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mondjuk meg egy keresett bináris típusát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# fájl elérési út lekérdezése&lt;br /&gt;
# STDOUT =&amp;gt; /bin/ls&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# fájl típusának lekérdezése&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze:&lt;br /&gt;
file `which ls`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
&lt;br /&gt;
==== mcedit ====&lt;br /&gt;
Az &#039;&#039;&#039;mcedit&#039;&#039;&#039; az &#039;&#039;&#039;mc&#039;&#039;&#039; (&#039;&#039;Midnight Commander&#039;&#039;) 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 &#039;&#039;&#039;mc&#039;&#039;&#039; utasítással, amit később az &#039;&#039;&#039;F10&#039;&#039;&#039; 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 &amp;quot;tálcára helyezés&amp;quot; is megoldott, így a &#039;&#039;&#039;Ctrl+O&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Az mcedit megnyitható az &#039;&#039;mc&#039;&#039;-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.&lt;br /&gt;
&lt;br /&gt;
Az egér az mcedit-ben is működik!&lt;br /&gt;
&lt;br /&gt;
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 (&#039;&#039;CTRL+O&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mcedit /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nano ====&lt;br /&gt;
A &#039;&#039;&#039;nano&#039;&#039;&#039; szintén egy szövegszerkesztő alkalmazás.&lt;br /&gt;
&lt;br /&gt;
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:&lt;br /&gt;
* 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)&lt;br /&gt;
* CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba&lt;br /&gt;
* CTRL+O Menti a változásokat&lt;br /&gt;
* CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== chmod ====&lt;br /&gt;
==== shift ====&lt;br /&gt;
==== cut ====&lt;br /&gt;
A &#039;&#039;&#039;cut&#039;&#039;&#039; 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 &#039;&#039;-f&#039;&#039; (&#039;&#039;field&#039;&#039;), ahol a megjelenítendő oszlopokat adhatjuk meg és a &#039;&#039;-d&#039;&#039; (&#039;&#039;delimiter&#039;&#039;), ahol az elválasztó karaktert állíthatjuk be.&lt;br /&gt;
&lt;br /&gt;
Általában a &#039;&#039;/etc/passwd&#039;&#039; állományon dolgozunk, mert ebben egy &#039;&#039;:&#039;&#039;-al elválasztott táblázat található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a fájl első oszlopát szedi ki :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet&lt;br /&gt;
cut -f1 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet és az id-ját&lt;br /&gt;
cut -f1,3 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,&lt;br /&gt;
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát&lt;br /&gt;
cut -f1-3,6 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sort ====&lt;br /&gt;
A &#039;&#039;&#039;sort&#039;&#039;&#039; utasítás segítségével rendezhetjük az adattömböt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a passwd állomány rendezése a felhasználónév szerint - ez van elől&lt;br /&gt;
sort /etc/passwd&lt;br /&gt;
# fordított sorrend - reverse&lt;br /&gt;
sort -r /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;-n&#039;&#039; opciót.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# file egy számokat tartalmazó fájl - egy sor egy fájl&lt;br /&gt;
sort -n file&lt;br /&gt;
# fordított sorrend&lt;br /&gt;
sort -r -n file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tr ====&lt;br /&gt;
A &#039;&#039;&#039;tr&#039;&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az e betűt o-ra, az o betűt e-re cseréli ki&lt;br /&gt;
echo &amp;quot;hello&amp;quot; | tr eo oe&lt;br /&gt;
&lt;br /&gt;
# A T betűt K-ra, az n betűt p-re cseréli ki&lt;br /&gt;
echo &amp;quot;Tanar&amp;quot; | tr Tn Kp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A fenti példák alapján nézzük meg, hogy mi történik:&lt;br /&gt;
# A tr két pozicionális paraméterrel lett meghívva&lt;br /&gt;
## Az első paraméter adja meg a lecserélendő karakterek halmazát&lt;br /&gt;
## A második paraméter adja meg az új karakterek halmazát&lt;br /&gt;
# A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben&lt;br /&gt;
## ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre&lt;br /&gt;
## ha nincs benne, akkor megy tovább&lt;br /&gt;
# a metodika miatt keresztbe is lehet cserélni (pl. &#039;&#039;o&#039;&#039;-t &#039;&#039;e&#039;&#039;-re, &#039;&#039;e&#039;&#039;-t &#039;&#039;o&#039;&#039;-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt &#039;&#039;e&#039;&#039; betűnek a végén &#039;&#039;o&#039;&#039; betűre kéne cserélődnie.&lt;br /&gt;
&lt;br /&gt;
==== if ====&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; 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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
else&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű &#039;&#039;&#039;if&#039;&#039;&#039; elágazást is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Egy olyan program, amelynek a visszatérési értéke hasznos információkat hordoz a futás eredményét tekintve. Ne feledjük el, hogy a &#039;&#039;&#039;return&#039;&#039;&#039; kulcsszóval tudunk ilyen értéket generálni C/C++ kódok esetében. Lássunk egy példát:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  if ( 10 % 2 == 0 ) return 0;&lt;br /&gt;
  else return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fenti program visszatérési értéke információval szolgál számunkra, hogy a 10 osztható-e kettővel, avagy sem. Ez az érték vizsgálható az &#039;&#039;&#039;if&#039;&#039;&#039; segítségével és a válasz függvényében más-más kódokat hajthatunk végre.&lt;br /&gt;
&lt;br /&gt;
A kiértékelés ellentétes a megszokott módszerhez képest (ahol minden igaz, aminek az értéke nem 0).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ha a KIFEJEZÉS 0 értéket ad vissza, akkor IGAZ az állítás, tehát az if-en belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; 0&lt;br /&gt;
then&lt;br /&gt;
  ....&lt;br /&gt;
else&lt;br /&gt;
  ....&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# ha a KIFEJEZÉS nem 0 értéket ad vissza, akkor HAMIS az állítás, tehát az else-n belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; != 0&lt;br /&gt;
then&lt;br /&gt;
    ...&lt;br /&gt;
else&lt;br /&gt;
    ...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programozási nyelvek tanításakor ezért térünk vissza 0-s értékkel (&#039;&#039;&#039;return 0;&#039;&#039;&#039;), a programunk végén, és hiba esetén 1, vagy annál nagyobb értékkel.&lt;br /&gt;
&lt;br /&gt;
==== test ====&lt;br /&gt;
A &#039;&#039;&#039;test&#039;&#039;&#039; parancs logikai függvényeket értékel ki és&lt;br /&gt;
* &#039;&#039;&#039;0&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;IGAZ&#039;&#039;&#039;,&lt;br /&gt;
* &#039;&#039;&#039;1&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;HAMIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; utasítással együtt szoktuk használni, de természetesen ettől független is meghívható.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# megtörténik a logikai kiértékelés, eldől, hogy a két string egyezik-e&lt;br /&gt;
test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
# kiírjuk a képernyőre a test utasítás visszatérési értékét&lt;br /&gt;
echo $?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if&#039;&#039;&#039; utasítással a következőképp használhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# hamis&lt;br /&gt;
if test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# igaz&lt;br /&gt;
if ! test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#igaz&lt;br /&gt;
if test &amp;quot;text1&amp;quot; != &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elérhető egy &#039;&#039;alias&#039;&#039;, aminek segítségével olvashatóbbá tehetjük a &#039;&#039;&#039;test&#039;&#039;&#039; utasítást. Ez a &#039;&#039;&#039;[ ]&#039;&#039;&#039; pár.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ügyeljünk rá, hogy a &#039;&#039;[&#039;&#039; és a &#039;&#039;]&#039;&#039; zárójelek mellett &#039;&#039;whitespace&#039;&#039; karakterek vannak. Ha ezeket kihagyjuk, akkor hibát fogunk kapni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A számok ellenőrzése BASH környezetben körülményesebb, mivel itt minden karakterláncnak számít. Emiatt a következő utasítás sorozat nem várt eredménnyel zárul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;1000&amp;quot; &amp;lt;= &amp;quot;20&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: igaz. De tudjuk, hogy ez az eredmény nem igaz, a BASH mégis így értékelte ki. Az oka, hogy az első karaktereket tekintve (&#039;&#039;1&#039;&#039; és &#039;&#039;2&#039;&#039;) elmondható, hogy az &#039;&#039;1&#039;&#039;-es hamarabb van az ABC-ben (kódtáblában), mint a &#039;&#039;2&#039;&#039;, így az &#039;&#039;1000&#039;&#039;-nek kisebbnek kell lennie (mintha a &amp;quot;alma&amp;quot; és &amp;quot;körte&amp;quot; lenne összehasonlítva, hogy melyik következik előbb az ABC-ben).&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy a &#039;&#039;&#039;test&#039;&#039;&#039; utasítás karakterek helyett számként dolgozza fel a paramétert, kapcsolót kell használnunk:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Kapcsoló !! Angol megnevezés !! Magyar megnevezés&lt;br /&gt;
|-&lt;br /&gt;
| -eq || Equals || Egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -ne ||  Not Equals || Nem egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -lt || Lower than || Kisebb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -le || Lower than or equals || Kisebb vagy egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -gt || Greather than || nagyobb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -ge || Greather than or equals || Nagyobb vagy egyenlő&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ 1000 -le 20 ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: Az elvártaknak megfelelően HAMIS.&lt;br /&gt;
&lt;br /&gt;
==== for ====&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; utasítás segítségével egy lista elemein mehetünk végig. Hasonlóan működik, mint a modern programozási nyelvekben a &#039;&#039;foreach&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Legegyszerűbben a következő utasítással tesztelhetjük, ahol a bemeneti listát soronként látjuk viszont a képernyőn:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in 1 2 3 4 5 6&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen van lehetőségünk a listát más program kimenetéből kinyerni a parancsbehelyettesítés segítségével:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `ls`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; gyakorlatilag a pozicionális paramétereken megy végig, tehát egy lista elem a $1, egy másik listaelem a $2. Tudjuk, hogy ha szóközök között adjuk meg, akkor szóközt is tartalmazhat a paraméterünk. Lássunk egy példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;1 2 3&amp;quot; &amp;quot;4 5 6&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben a képernyőn két sor jelenik meg: &#039;&#039;1 2 3&#039;&#039; és &#039;&#039;4 5 6&#039;&#039;. Azonban a parancsbehelyettesítés nem alkalmaz az idézőjelhez hasonló technikát, tehát azt alkalmazva minden szó (szóközökkel határolt karaktersorozat) új pozicionális paramétert jelent. Lássunk egy az előzőhöz hasonló példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `echo &amp;quot;1 2 3 4 5 6&amp;quot;`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben hat sor jelenik meg, benne egy-egy számmal, tehát az &#039;&#039;&#039;echo &amp;quot;1 2 3 4 5 6&amp;quot;&#039;&#039;&#039; kimenetét szóközönként vágta fel.&lt;br /&gt;
&lt;br /&gt;
==== while ====&lt;br /&gt;
A &#039;&#039;&#039;while&#039;&#039;&#039; utasítás, mint minden programozási nyelvben, itt is felfogható úgy, mint egy többször lefutó &#039;&#039;&#039;if&#039;&#039;&#039;. Éppen ezért a szintaktikájuk megegyezik, csupán a feltételek megírásával kell óvatosan bánnunk, hogy a ciklus mag akkor és addig fusson, ameddig mi azt szeretnénk. A &#039;&#039;&#039;while&#039;&#039;&#039; ciklusnál ugyanazokat az alkalmazásokat írhatjuk be a &#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039; helyére, mint az &#039;&#039;&#039;if&#039;&#039;&#039; esetében.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while KIFEJEZÉS&lt;br /&gt;
do&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például ha azt akarjuk, hogy egy ciklus addig fusson, amíg meg nem jelenik egy fájl a fájlrendszerben, akkor azt a következőképp vezethetjük le:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ellenőrzi, hogy a fájl elérhető-e&lt;br /&gt;
test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ez esetben egyetlen kísérletet teszünk, de nem várjuk meg, hogy oda kerüljön, amennyiben nincs ott&lt;br /&gt;
if test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;A fájl nem létezik&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# várakozunk, amíg a feltétel nem lesz igaz, tehát a fájl nem kerül oda&lt;br /&gt;
while ! test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozunk&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# test parancs helyettesítése []-el&lt;br /&gt;
while ! [ -f &amp;quot;file.txt&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A while ciklusnál érdemes megemlíteni a &#039;&#039;&#039;until&#039;&#039;&#039; utasítást, ami annyiban tér el, hogy a feltétel kiértékelését invertálni kell - tehát ami igaz a &#039;&#039;&#039;while&#039;&#039;&#039; esetében, az hamis az &#039;&#039;&#039;until&#039;&#039;&#039; esetében és fordítva. Így a fenti feladatot megvalósíthatjuk invertálás nélkül, az until utasítással is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
until test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
 echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== seq ====&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítás egy listát generál számunkra, amelyben a megadott lépésszámmal, a megadott legkisebb értéktől a megadott legnagyobb értékig szerepelnek a számok.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# számok 1-10-ig&lt;br /&gt;
seq 10&lt;br /&gt;
&lt;br /&gt;
# számok 5-10-ig&lt;br /&gt;
seq 5 10&lt;br /&gt;
&lt;br /&gt;
# számok 3-tól 10-ig 2-esével&lt;br /&gt;
seq 3 2 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást általában a &#039;&#039;&#039;for&#039;&#039;&#039; ciklus listájában használjuk, hogy elő tudjuk állítani az indexeket.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq 3 2 10`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== read ====&lt;br /&gt;
A &#039;&#039;&#039;read&#039;&#039;&#039; utasítás segítségével a STDIN-ről kérhetünk be információt változóba/változókba. Ha több változót sorolunk fel, akkor a bemenetet szóközöknél vágja el.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvasás var-ba&lt;br /&gt;
# STDIN =&amp;gt; teszt&lt;br /&gt;
#  var =&amp;gt; teszt&lt;br /&gt;
# STDIN =&amp;gt; teszt szöveg&lt;br /&gt;
#  var =&amp;gt; teszt szöveg&lt;br /&gt;
read var&lt;br /&gt;
&lt;br /&gt;
# beolvasás fname és lname változókba&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname = Farkas&lt;br /&gt;
# STDIN =&amp;gt; Attila&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas OPSYS&lt;br /&gt;
read fname lname&lt;br /&gt;
&lt;br /&gt;
# beolvasás három változóba. Ha a felhasználó az utasításokkal szemben több szót adott meg, akkor így biztosíthatjuk, hogy ne legyen szóköz az első két változóban&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS meg valami más&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; OPSYS meg valami más&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utóbbi esetben hibaüzenet is generálható, ha megvizsgáljuk, hogy a &#039;&#039;tmp&#039;&#039; változó értéke üres-e:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Adja meg a teljes nevét: &amp;quot;&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&lt;br /&gt;
# -n =&amp;gt; nem üres?&lt;br /&gt;
# -z =&amp;gt; üres?&lt;br /&gt;
if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Valamit elhibáztál&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk ellenőrzött bekérést végrehajtani:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmp=&amp;quot;start value&amp;quot;&lt;br /&gt;
while [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo -n &amp;quot;Adja meg a teljes nevét FNAME LNAME formátumban: &amp;quot;&lt;br /&gt;
  read fname lname tmp&lt;br /&gt;
  if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
  then&lt;br /&gt;
    echo &amp;quot;Valamit elrontottál!&amp;quot;&lt;br /&gt;
    # ez esetben nem lépünk ki, mert bekérjük újra&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expr ====&lt;br /&gt;
Az &#039;&#039;&#039;expr&#039;&#039;&#039; parancs segítségével tudunk matematikai műveleteket végrehajtani. Mivel a BASH-ben minden változó karakterlánc, így nem tudunk közöttük műveletet végezni. Az &#039;&#039;&#039;expr&#039;&#039;&#039; a paramétereket belül számként kezeli. &#039;&#039;&#039;Csak egész számokkal tud dolgozni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a képernyőre kerül az eredmény&lt;br /&gt;
expr 1 + 2&lt;br /&gt;
expr 4 * 4&lt;br /&gt;
&lt;br /&gt;
# csak egész számot ír ki&lt;br /&gt;
expr 3 / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha tört számokkal kell dolgoznunk, akkor a következőket tehetjük:&lt;br /&gt;
# eltávolítjuk a törtrészt&lt;br /&gt;
# felszorozzuk 10^n-nel, ahol n a törtrész számjegyeivel egyezik meg (pl. 10.02-t 100-al kell szorozni). Az egész térben elvégzett művelet eredményét később vissza osztjuk ugyanannyival, amennyivel korábban felszoroztuk. &#039;&#039;&#039;Ez nem egy egyszerű feladat, hiszen a tört számot egyáltalán nem kezeli az expr, tehát cut, wc és egyéb parancsokkal kell kialakítanunk a számot, ahogy utána szét is kell darabolnunk azt.&#039;&#039;&#039;&lt;br /&gt;
# Másik környezetet használunk, ahol tudunk számokat is kezelni - &#039;&#039;&#039;ez a ZH-n nem elfogadott&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A lehetőségek közül csak az elsőt, a ZH-n teljes mértékben elfogadott megoldást mutatom be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a 3.4-et és a 1.2-őt kell összeadnunk.&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 3&lt;br /&gt;
echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 1&lt;br /&gt;
echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
expr `echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1` + `echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok parancsokhoz ===&lt;br /&gt;
==== Írassuk ki a /etc/passwd több sorát ====&lt;br /&gt;
Több választási lehetőségünk van:&lt;br /&gt;
* ha a kiírandó sorszámok valamilyen logikát követnek (minden második, harmadik stb.), akkor használhatjuk a &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást&lt;br /&gt;
* ha nincs logika a sorszámokban, akkor kézzel kell elkészítenünk a listát&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki minden harmadik sor tartalmát&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# határozzuk meg a seq tartományát&lt;br /&gt;
# min: 1&lt;br /&gt;
# max: ahány sora van a fájlnak&lt;br /&gt;
&lt;br /&gt;
# max érték meghatározás&lt;br /&gt;
# a változó létrehozást lentebb tárgyaljuk&lt;br /&gt;
max=`cat /etc/passwd | wc -l`&lt;br /&gt;
&lt;br /&gt;
# lista meghatározása for ciklushoz&lt;br /&gt;
# 1-től $max-ig hármasával&lt;br /&gt;
seq 1 3 $max&lt;br /&gt;
&lt;br /&gt;
# Rakjuk össze&lt;br /&gt;
for i in `seq 1 3 $max`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát nem tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki a 2., 5., 10. és 11. sorokat&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `2 5 10 11`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fájlok ellenőrzése és másolása ====&lt;br /&gt;
Másoljuk át a /etc/passwd állományt egy könyvtárba (~/test/destination). Ha a célkönyvtár nem létezik, akkor hozzuk létre. Ha a célkönyvtár és a fájl is létezik, akkor írjunk ki hibaüzenetet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# forrás fájl létezésének vizsgálata&lt;br /&gt;
test -f /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# célfájl létezésének vizsgálata&lt;br /&gt;
test -f ~/test/destination/passwd&lt;br /&gt;
&lt;br /&gt;
# mappa létezésének vizsgálata&lt;br /&gt;
test -d ~/test/destination&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
&lt;br /&gt;
# ha a forrásfájl nem létezik&lt;br /&gt;
if ! test -f /etc/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A forrásfájl nem létezik&amp;quot;&lt;br /&gt;
# ha a célfájl létezik&lt;br /&gt;
elif test -f ~/test/destination/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A fájl már létezik&amp;quot;&lt;br /&gt;
# ha a cél mappa nem létezik&lt;br /&gt;
elif ! test -d ~/test/destination&lt;br /&gt;
then&lt;br /&gt;
   # mappa létrehozás - szülőkönyvtárakat is, ha nem léteznek&lt;br /&gt;
   mkdir -p ~/test/destination&lt;br /&gt;
   # fájl belemásolása&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
# ha a célfájl nem létezik, de a célmappa igen&lt;br /&gt;
else&lt;br /&gt;
   # a fájlt bemásoljuk a könyvtárba&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script létrehozása ===&lt;br /&gt;
* Script megírása&lt;br /&gt;
* Futási jog&lt;br /&gt;
&lt;br /&gt;
=== Pozicionális paraméterek ===&lt;br /&gt;
&lt;br /&gt;
=== Változók ===&lt;br /&gt;
&lt;br /&gt;
== 3. óra ==&lt;br /&gt;
 A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a &#039;&#039;grep&#039;&#039;-et foguk megvizsgálni.&lt;br /&gt;
&lt;br /&gt;
=== Reguláris kifejezés szerkezete ===&lt;br /&gt;
A reguláris nyelvek atomokból, lezártakból épül fel, amelynek az eredménye az úgynevezett „összetettek”.&lt;br /&gt;
&lt;br /&gt;
==== Atomok ====&lt;br /&gt;
 Az atomok egy karakterre illeszkednek a sorban.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Atom !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| betűk, számok || saját magukra illeszkednek&lt;br /&gt;
|-&lt;br /&gt;
| ^ || sor elejére illeszkedik (csak egyszer lehet a legelején)&lt;br /&gt;
|-&lt;br /&gt;
| $ || sor végére illeszkedik (csak egyszer lehet a legvégén)&lt;br /&gt;
|-&lt;br /&gt;
| [abc] || halmaz: minden benne lévő elemre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| [^abc] || inverz halmaz: egyetlen benne lévő elemre sem illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| . || mindenre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lezártak ====&lt;br /&gt;
 A lezártak ismétlődéseket fogalmaznak meg egy atomra vonatkozóan. &#039;&#039;&#039;Lezárt csak atom után helyezkedhet el!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Lezárt !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| * || az atomot 0 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| + || az atomot 1 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| ? || az atomot 0 és 1 között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n} || az atom pontosan n-szer fordul elő egymás mellett&lt;br /&gt;
|-&lt;br /&gt;
| {n,m} || az atomot n és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n,} || az atomot n és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {,m} || az atomot 0 és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Összefűzöttek ====&lt;br /&gt;
 Az atomok és a lezártak egymás után írt sorozata.&lt;br /&gt;
A lezártaknál fontos kitétel volt, hogy csak atom után lehet írni. &#039;&#039;&#039;Egy összefűzött újra atomizálható&#039;&#039;&#039; a ( ) karakterekkel.&lt;br /&gt;
Az összefűzöttek tartalmazhatnak uniót (|), ahol több szabály közül bármelyik megvalósulhat egy sikeres illesztéshez.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
 Ez egy teszt szöveg, amin próbálkozunk.&lt;br /&gt;
A fenti szöveget alapul véve, a következő reguláris kifejezéseket hozhatjuk létre:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Reguláris kifejezés !! Illeszkedik? || Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| E || Igen || Van a sorban E betű&lt;br /&gt;
|-&lt;br /&gt;
| a || Igen || Van a sorban a betű&lt;br /&gt;
|-&lt;br /&gt;
| b || Nem || Nincs a sorban b betű&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Igen || A sor elején van az E betű&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Nem || Nincs a sor elején A betű&lt;br /&gt;
|-&lt;br /&gt;
| ^e || Nem || nincs a sor elején e betű&lt;br /&gt;
|-&lt;br /&gt;
| .$ || Igen || Bármilyen karakter lehet a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| \. || Igen || . van a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| k$ || Nem || Nincs k a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| egy || igen || Van a sorban „egy” string&lt;br /&gt;
|-&lt;br /&gt;
| egység || Nem || Nincs a sorban egység string&lt;br /&gt;
|-&lt;br /&gt;
| egy* || Igen || eg kötelező, y 0 vagy végtelenszer lehet (egy, egyy, egyyy, egyyyy ...)&lt;br /&gt;
|-&lt;br /&gt;
| l*egy || Igen || l 0 vagy végtelen, eg kötelező (eg, leg, lleg, llleg, lllleg ...)&lt;br /&gt;
|-&lt;br /&gt;
| l+egy || Nem || Nincs a szövegben &amp;quot;l+egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| l\+egy || Nem || l 1 vagy végtelen hosszú, egy kötelező (legy, llegy, lllegy, llllegy ...)&lt;br /&gt;
|-&lt;br /&gt;
| (egy) || Nem || Nincs a sorban &amp;quot;(egy)&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\) || Igen || Van a sorban &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)* || Igen || Van a sorban legalább 0-szor &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\+ || Igen || Van a sorban legalább 1-szer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\{2\} || Nem || Nincs a sorban pontosan kétszer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| [a-z] || Igen || Vannak benne kisbetűk&lt;br /&gt;
|-&lt;br /&gt;
| [A-Z] || Igen || Van benne nagy betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-D] || Nem || Nincs a sor elején A-D tartományban betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z] || Igen || Nagy betű van a sor elején&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z].*\.$ || Igen || Nagybetűvel kezdőik, középen bármi lehet és ponttal végződik a sor.&lt;br /&gt;
|-&lt;br /&gt;
| [0-9] || Nem || Nincs számjegy a sorban&lt;br /&gt;
|-&lt;br /&gt;
| .* || Igen || Mindenre illeszkedik, bármilyen hosszan (üres sorra is)&lt;br /&gt;
|-&lt;br /&gt;
| ^$ || Nem || Csak az üres sorra illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| ^.\+$ || Igen || Mindenre illeszkedik, kivéve az üres sorra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A következő kifejezés szintén illeszkedik:&lt;br /&gt;
 ^[A-Z].*\(egy\)\|\(kettő\).*\.$ =&amp;gt; A sor elején nagybetűvel kezdődik, van a közepén valahol benne &amp;quot;egy&amp;quot; vagy &amp;quot;kettő&amp;quot; karakterlánc és ponttal végződik. A köztes karakterek értéke nincs megszabva.&lt;br /&gt;
&lt;br /&gt;
==== grep ====&lt;br /&gt;
A &#039;&#039;&#039;grep&#039;&#039;&#039; utasítás segítségével végezhetünk el reguláris kifejezés, tehát minta illesztést fájlokon. Amennyiben nem adunk meg fájl paramétert, a STDIN csatornát olvassa. Az eredmények a STDOUT-ra íródnak.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+ Fontosabb kapcsolók&lt;br /&gt;
|-&lt;br /&gt;
! Rövid név !! Hosszú név !! Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| -c || --count || Megszámolja az illeszkedő sorokat&lt;br /&gt;
|-&lt;br /&gt;
| -o || --only-matching || Csak a mintára illeszkedő részt írja ki (nem a teljes sort)&lt;br /&gt;
|-&lt;br /&gt;
| -n || --line-number || Megszámozza a sorokat (a fájl alapján, nem a megjelenítés szerint)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Példa =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# nologin környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;nologin&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;nologin&amp;quot; # STDIN-en érkező adatok szűrése&lt;br /&gt;
&lt;br /&gt;
# bash környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;bash&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;bash&amp;quot;    # STDIN-en érkező adatok szűrése&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Példa 2 =====&lt;br /&gt;
Írjunk egy scriptet, amely a /bin/bash futtatási környezetet kapó felhasználók nevét kiírja a képernyőre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# a fájl sorainak száma&lt;br /&gt;
lines=`cat $file | wc -l`&lt;br /&gt;
&lt;br /&gt;
# végig megyünk a fájl sorain&lt;br /&gt;
for i in `seq 1 $lines`; do&lt;br /&gt;
 # itt kapjuk meg az i. sort&lt;br /&gt;
 line=`head -$i $file | tail -1`&lt;br /&gt;
 # kiszedjük a shell környezetet&lt;br /&gt;
 shell=`echo $line | cut -f7 -d&#039;:&#039;`&lt;br /&gt;
 # ha ez &amp;quot;/bin/bash&amp;quot;, akkor kivágjuk a sor első oszlopát, ezt írhatjuk a képernyőre&lt;br /&gt;
 if test $shell == &amp;quot;/bin/bash&amp;quot;; then&lt;br /&gt;
  echo $line | cut -f1 -d&#039;:&#039;&lt;br /&gt;
 fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.227s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# szűrjük ki a sorokat, amelyeknek a végén a &amp;quot;/bin/bash&amp;quot; karakterlánc található &lt;br /&gt;
#  és a kapott eredményhalmaznak vágjuk ki az első oszlopát&lt;br /&gt;
# a kapott eredményhalmaz még mindig megfelel a /etc/passwd eredeti formátumának, &lt;br /&gt;
#  csak a sorok számát csökkentettük a szűrési feltételnek megfelelően!&lt;br /&gt;
grep &amp;quot;/bin/bash$&amp;quot; $file | cut -f1 -d&#039;:&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.003s&lt;br /&gt;
&lt;br /&gt;
== 4. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
== 5. óra ==&lt;br /&gt;
 Az ötödik órán minta ZH feladatsort oldunk meg.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=819</id>
		<title>EDU::GAMF::Operációs rendszerek::Gyakorlatok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Oper%C3%A1ci%C3%B3s_rendszerek::Gyakorlatok&amp;diff=819"/>
		<updated>2024-10-09T11:51:18Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Példa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
==== man ====&lt;br /&gt;
A &#039;&#039;man&#039;&#039; 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.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Használata:&#039;&#039;&#039;&lt;br /&gt;
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 &#039;&#039;man&#039;&#039; parancs használati útmutatóját is a következő utasítás kiadásával:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hasonló módon alkalmazhatjuk bármelyik parancsra, amelyek ezen a weboldalon felsorolásra kerültek. Pl. a &#039;&#039;head&#039;&#039; utasítás dokumentációját az alábbi módon érhetjük el&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ls ====&lt;br /&gt;
 Érdemes megtekinteni a parancs dokumentációját a &#039;&#039;man ls&#039;&#039; utasítás kiadásával, tisztában legyünk ez elérhető kapcsolókkal és funkciókkal.&lt;br /&gt;
Az &#039;&#039;&#039;ls&#039;&#039;&#039; parancs segítségével listázhatjuk a mappa tartalmát. Alapértelmezetten a &#039;&#039;&#039;.&#039;&#039;&#039;, tehát a jelenlegi könyvtárat listázza.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# meghívás paraméter nélkül&lt;br /&gt;
ls&lt;br /&gt;
&lt;br /&gt;
# meghívás . paraméterrel - ugyanaz az eredmény&lt;br /&gt;
ls .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A listázni kívánt könyvtár nevét megadhatjuk paraméterben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár listázása&lt;br /&gt;
ls /&lt;br /&gt;
&lt;br /&gt;
# a /usr/local/bin könyvtár listázása&lt;br /&gt;
ls /usr/local/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jelenlegi könyvtárban listáz minden elemet és azok tulajdonságait&lt;br /&gt;
ls -l&lt;br /&gt;
&lt;br /&gt;
# A /bin/ls fájl jogosultságainak lekérdezése&lt;br /&gt;
ls -l /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbáljuk ki, hogy ha egy mappa nevével futtatjuk le a parancsot, akkor az &#039;&#039;&#039;ls&#039;&#039;&#039; megnyitja a könyvtárat és annak tartalmát listázza ki.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a /bin könyvtár tartalma listázódik, nem a /bin könyvtár maga&lt;br /&gt;
ls /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# A felette lévő könyvtárat listázzuk és kikeressük a megfelelő bejegyzést&lt;br /&gt;
ls / -l&lt;br /&gt;
&lt;br /&gt;
# 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&lt;br /&gt;
# Ekkor a könyvtár listázódik, nem a tartalma&lt;br /&gt;
ls -d /bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pwd ====&lt;br /&gt;
A &#039;&#039;&#039;pwd&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cd ====&lt;br /&gt;
A &#039;&#039;&#039;cd&#039;&#039;&#039; parancs segítségével könyvtárat válthatunk (&#039;&#039;changedir&#039;&#039;). A cél könyvtár nevét paraméterben kell megadnunk.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtár megnyitása&lt;br /&gt;
cd /&lt;br /&gt;
&lt;br /&gt;
# HOME könyvtár megnyitása&lt;br /&gt;
# ~ egy alias&lt;br /&gt;
cd ~&lt;br /&gt;
&lt;br /&gt;
# /usr/bin megnyitása&lt;br /&gt;
cd /usr/bin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hivatkozásoknál, így a &#039;&#039;cd&#039;&#039; esetében is lehetőségünk van relatív és abszolút hivatkozásokat használni:&lt;br /&gt;
* Az abszolút hivatkozás / elérési út mindig &#039;&#039;/&#039;&#039; jellel kezdődik. pl.: &#039;&#039;cd /home/&#039;&#039;, &#039;&#039;cd /usr/bin&#039;&#039;&lt;br /&gt;
* A relatív hivatkozás vagy nem rendelkezik kezdőkarakterrel: &#039;&#039;cd home&#039;&#039;, &#039;&#039;cd bin&#039;&#039;, vagy &#039;&#039;.&#039;&#039; illetve &#039;&#039;..&#039;&#039; karakterekkel kezdődnek.&lt;br /&gt;
** A &#039;&#039;.&#039;&#039; könyvtár jelenti az aktuális könyvtárat&lt;br /&gt;
** A &#039;&#039;..&#039;&#039; könyvtár jelenti a szülő könyvtárat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# szülő könyvtár megnyitása&lt;br /&gt;
cd ../&lt;br /&gt;
&lt;br /&gt;
# a szülőkönyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ../bin&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban található bin könyvtár megnyitása&lt;br /&gt;
cd ./bin&lt;br /&gt;
cd bin      # vegyük észre: a ./ ez esetben elhagyható&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mkdir ====&lt;br /&gt;
Az &#039;&#039;&#039;mkdir&#039;&#039;&#039; parancs segítségével könyvtárakat hozhatunk létre (&#039;&#039;make directory&#039;&#039;). Alapértelmezetten a &#039;&#039;.&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# folder könyvtár létrehozása az aktuális könyvtárban&lt;br /&gt;
mkdir folder&lt;br /&gt;
mkdir ./folder2&lt;br /&gt;
# subfolder létrehozása a folder könyvtáron belül.&lt;br /&gt;
mkdir folder/subfolder&lt;br /&gt;
&lt;br /&gt;
# létrehozás a /tmp könyvtáron belül, akárhol is vagyunk&lt;br /&gt;
mkdir /tmp/folder&lt;br /&gt;
&lt;br /&gt;
# folder létrehozása a szülőkönyvtárban&lt;br /&gt;
mkdir ../folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# root könyvtáron belül létrejön egy &#039;&#039;test&#039;&#039; könyvtár és azon belül jön létre a &#039;&#039;folder&#039;&#039; könyvtár.&lt;br /&gt;
mkdir /test/folder/ -p&lt;br /&gt;
&lt;br /&gt;
# az aktuális könyvtárban jön létre egy &#039;&#039;test&#039;&#039; könyvtár és azon belül a &#039;&#039;folder&#039;&#039; könyvtár&lt;br /&gt;
mkdir -p test/folder&lt;br /&gt;
&lt;br /&gt;
# a jelenlegi könyvtárban létrejon a &#039;&#039;test&#039;&#039; könyvtár, &lt;br /&gt;
# azon belül létrejön egy &#039;&#039;folder1&#039;&#039; és egy &#039;&#039;folder2&#039;&#039; könyvtár, &lt;br /&gt;
# majd mind a kettőben létrejön a &#039;&#039;work&#039;&#039; könyvtár.&lt;br /&gt;
mkdir -p test/{folder1,folder2}/work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen ahhoz, hogy egy könyvtárban további fájlokat vagy könyvtárakat hozzunk létre jogosultság szükséges.&lt;br /&gt;
&lt;br /&gt;
==== rmdir ====&lt;br /&gt;
Az &#039;&#039;&#039;rmdir&#039;&#039;&#039; parancs segítségével üres könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figyelem&#039;&#039;&#039;! 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!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# relatív hivatkozással&lt;br /&gt;
rmdir test/folder&lt;br /&gt;
&lt;br /&gt;
# abszolút hivatkozással&lt;br /&gt;
rmdir /test/folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cp ====&lt;br /&gt;
A &#039;&#039;&#039;cp&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat másolhatunk a fájlrendszer egy pontjáról a másikra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd fájl lemásolása a jelenlegi könyvtárba - ls paranccsal ellenőrízhető&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a jelenlegi könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd ./file&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba&lt;br /&gt;
cp /etc/passwd /tmp/&lt;br /&gt;
&lt;br /&gt;
# /etc/passwd lemásolása a /tmp könyvtárba és közben átnevezés file-ra&lt;br /&gt;
cp /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak másolása esetén a &#039;&#039;-r&#039;&#039; kapcsoló használata szükséges (&#039;&#039;recursive&#039;&#039;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/network könyvtár és annak tartalmát másolja a /tmp könyvtárba&lt;br /&gt;
cp /etc/network /tmp/ -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== mv ====&lt;br /&gt;
Az &#039;&#039;&#039;mv&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat mozgathatunk. Ezzel a paranccsal nevezhetjük át a fájlrendszer elemeit.&lt;br /&gt;
&lt;br /&gt;
 A próbálkozáshoz másoljuk le a /etc/passwd állományt, ha eddig nem tettük meg!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/passwd ./&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd állomány átnevezése file-ra&lt;br /&gt;
mv passwd file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány átnevezése file-ra&lt;br /&gt;
mv /etc/passwd /etc/file&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be&lt;br /&gt;
mv /etc/passwd /tmp&lt;br /&gt;
&lt;br /&gt;
# nem fut le!&lt;br /&gt;
# /etc/passwd állomány áthelyezése /tmp-be és közben átnevezés file-ra&lt;br /&gt;
mv /etc/passwd /tmp/file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A könyvtárak áthelyezéséhez (vagy átnevezéséhez) ez esetben nincs szükségünk a &#039;&#039;recursive&#039;&#039; (&#039;&#039;-r&#039;&#039;) jelölésre.&lt;br /&gt;
&lt;br /&gt;
==== rm ====&lt;br /&gt;
Az &#039;&#039;&#039;rm&#039;&#039;&#039; parancs segítségével fájlokat és könyvtárakat törölhetünk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Könyvtárak törléséhez alkalmaznunk kell a rekurzív jelölést: &#039;&#039;-r&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm folder -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== less ====&lt;br /&gt;
A &#039;&#039;&#039;less&#039;&#039;&#039; egy fájlnézegető, amelynek segítségével lapozhatunk billentyűzet segítségével a fájlokban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
less /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== more ====&lt;br /&gt;
A &#039;&#039;&#039;more&#039;&#039;&#039; szintén egy fájlnézegető, de ennek segítségével csak előre lapozhatunk, visszafelé nem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
more /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== which ====&lt;br /&gt;
A &#039;&#039;&#039;which&#039;&#039; program segítségével lekérdezhetjük, hogy az adott utasításhoz tartozó állomány melyik mappában található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az ls parancs abszolút elérési útvonala&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# a which parancs abszolút elérési útvonala&lt;br /&gt;
which which&lt;br /&gt;
&lt;br /&gt;
# a man parancs elérési útvonala&lt;br /&gt;
which man&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== file ====&lt;br /&gt;
A &#039;&#039;&#039;file&#039;&#039;&#039; utasítás segítségével lekérdezhetjük, hogy egy adott állomány milyen típusú: futtatható állomány (ELF), ASCII stb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file /etc/passwd&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== echo ====&lt;br /&gt;
Az &#039;&#039;&#039;echo&#039;&#039;&#039; mindent kiír a képernyőre, amit parancssori argumentumként adunk át neki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hello World&amp;quot;&lt;br /&gt;
echo Hello World&lt;br /&gt;
echo Ez egy teszt üzenet&lt;br /&gt;
echo &amp;quot;Ez egy teszt üzenet&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;-n&amp;quot; kapcsoló segítségével kapcsolhatunk ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== cat ====&lt;br /&gt;
A &#039;&#039;&#039;cat&#039;&#039;&#039; utasítás fájlokat képes összefűzni és az eredményt a képernyőre írja ki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a /etc/profile fájlok összefűzése a képernyőn (ebben a sorrendben)&lt;br /&gt;
cat /etc/passwd /etc/profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/passwd és a &amp;lt;semmi&amp;gt; összefűzése és megjelenítése a képernyőn&lt;br /&gt;
cat /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== head ====&lt;br /&gt;
A &#039;&#039;&#039;head&#039;&#039;&#039; 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).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
head -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
head -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tail ====&lt;br /&gt;
A &#039;&#039;&#039;tail&#039;&#039;&#039; hasonlóan működik, mint a &#039;&#039;&#039;head&#039;&#039;&#039;, de ez esetben nem a fájl elejéről ír ki N sort, hanem a végéről.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezett N=10 értéket a &#039;&#039;-n&#039;&#039; kapcsoló segítségével módosíthatjuk&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tail -n 5 /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a -n a dokumentáció elhagyható, ha a - után szám található&lt;br /&gt;
tail -5 /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== wc ====&lt;br /&gt;
A &#039;&#039;&#039;wc&#039;&#039;&#039; utasítás segítségével statisztikai adatokat nyerhetünk ki egy fájlból (&#039;&#039;word counter&#039;&#039;): sorok, szavak, karakterek és bájtok száma.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Van lehetőségünk szűkíteni a visszaadott adatokat kapcsolók segítségével:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Rövid kapcsoló !! Hosszú kapcsoló !! Leírás&lt;br /&gt;
|-&lt;br /&gt;
| -l || --lines || sorok számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -w || --words || szavak számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
| -c || --chars || karakterek számát adja vissza&lt;br /&gt;
|-&lt;br /&gt;
|  || --bytes || bájtok számát adja vissza&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# sorok számát írja ki&lt;br /&gt;
wc -l /etc/passwd&lt;br /&gt;
# szavak számát írja ki&lt;br /&gt;
wc -w /etc/passwd&lt;br /&gt;
# bájtok számát írja ki&lt;br /&gt;
wc --bytes /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# sorok és szavak számát írja ki a képernyőre&lt;br /&gt;
wc -l -w /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== find ====&lt;br /&gt;
A &#039;&#039;&#039;find&#039;&#039;&#039; utasítás segítségével kereshetünk a fájlrendszerben különböző attribútumok alapján.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# passwd nevű fájl keresése a /etc könyvtárban&lt;br /&gt;
find /etc -name passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programok csatornái ===&lt;br /&gt;
==== STDIN ====&lt;br /&gt;
==== STDOUT ====&lt;br /&gt;
==== STDERR ====&lt;br /&gt;
&lt;br /&gt;
=== Pipeline ===&lt;br /&gt;
&lt;br /&gt;
=== Parancsbehelyettesítés ===&lt;br /&gt;
=== Feladatok ===&lt;br /&gt;
==== Szedjük ki a &#039;&#039;/etc/passwd&#039;&#039; állomány 20. sorát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvassuk az első 20 sort és levágjuk az utolsót&lt;br /&gt;
head -20 /etc/passwd | tail -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mondjuk meg egy keresett bináris típusát ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# fájl elérési út lekérdezése&lt;br /&gt;
# STDOUT =&amp;gt; /bin/ls&lt;br /&gt;
which ls&lt;br /&gt;
&lt;br /&gt;
# fájl típusának lekérdezése&lt;br /&gt;
file /bin/ls&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze:&lt;br /&gt;
file `which ls`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
&lt;br /&gt;
==== mcedit ====&lt;br /&gt;
Az &#039;&#039;&#039;mcedit&#039;&#039;&#039; az &#039;&#039;&#039;mc&#039;&#039;&#039; (&#039;&#039;Midnight Commander&#039;&#039;) 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 &#039;&#039;&#039;mc&#039;&#039;&#039; utasítással, amit később az &#039;&#039;&#039;F10&#039;&#039;&#039; 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 &amp;quot;tálcára helyezés&amp;quot; is megoldott, így a &#039;&#039;&#039;Ctrl+O&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Az mcedit megnyitható az &#039;&#039;mc&#039;&#039;-ből is, a szokásos F4-es billentyűvel - vagy az arra való kattintással.&lt;br /&gt;
&lt;br /&gt;
Az egér az mcedit-ben is működik!&lt;br /&gt;
&lt;br /&gt;
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 (&#039;&#039;CTRL+O&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mcedit /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nano ====&lt;br /&gt;
A &#039;&#039;&#039;nano&#039;&#039;&#039; szintén egy szövegszerkesztő alkalmazás.&lt;br /&gt;
&lt;br /&gt;
Alul láthatjuk a segédletet, hogy milyen kombinációkkal milyen funkcionalitás érhető el. A szükségesebbek:&lt;br /&gt;
* 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)&lt;br /&gt;
* CTRL+U Beilleszti a vágólap tartalmát az aktuális sorba&lt;br /&gt;
* CTRL+O Menti a változásokat&lt;br /&gt;
* CTRL+X Kilép, de megkérdezi, hogy menteni akarunk-e, ha vannak mentetlen változások&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== chmod ====&lt;br /&gt;
==== shift ====&lt;br /&gt;
==== cut ====&lt;br /&gt;
A &#039;&#039;&#039;cut&#039;&#039;&#039; 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 &#039;&#039;-f&#039;&#039; (&#039;&#039;field&#039;&#039;), ahol a megjelenítendő oszlopokat adhatjuk meg és a &#039;&#039;-d&#039;&#039; (&#039;&#039;delimiter&#039;&#039;), ahol az elválasztó karaktert állíthatjuk be.&lt;br /&gt;
&lt;br /&gt;
Általában a &#039;&#039;/etc/passwd&#039;&#039; állományon dolgozunk, mert ebben egy &#039;&#039;:&#039;&#039;-al elválasztott táblázat található.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a fájl első oszlopát szedi ki :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet&lt;br /&gt;
cut -f1 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első és harmadik oszlopát adja vissza :-nál elválasztva, &lt;br /&gt;
# tehát a felhasználónevet és az id-ját&lt;br /&gt;
cut -f1,3 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# a fájl első három és hatodik oszlopát adja vissza :-nál elválasztva,&lt;br /&gt;
# tehát a felhasználónevet, jelszót és a felhasználó id-ját, valamint a home könyvtárát&lt;br /&gt;
cut -f1-3,6 -d&#039;:&#039; /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sort ====&lt;br /&gt;
A &#039;&#039;&#039;sort&#039;&#039;&#039; utasítás segítségével rendezhetjük az adattömböt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a passwd állomány rendezése a felhasználónév szerint - ez van elől&lt;br /&gt;
sort /etc/passwd&lt;br /&gt;
# fordított sorrend - reverse&lt;br /&gt;
sort -r /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;-n&#039;&#039; opciót.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# file egy számokat tartalmazó fájl - egy sor egy fájl&lt;br /&gt;
sort -n file&lt;br /&gt;
# fordított sorrend&lt;br /&gt;
sort -r -n file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tr ====&lt;br /&gt;
A &#039;&#039;&#039;tr&#039;&#039;&#039; 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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# az e betűt o-ra, az o betűt e-re cseréli ki&lt;br /&gt;
echo &amp;quot;hello&amp;quot; | tr eo oe&lt;br /&gt;
&lt;br /&gt;
# A T betűt K-ra, az n betűt p-re cseréli ki&lt;br /&gt;
echo &amp;quot;Tanar&amp;quot; | tr Tn Kp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A fenti példák alapján nézzük meg, hogy mi történik:&lt;br /&gt;
# A tr két pozicionális paraméterrel lett meghívva&lt;br /&gt;
## Az első paraméter adja meg a lecserélendő karakterek halmazát&lt;br /&gt;
## A második paraméter adja meg az új karakterek halmazát&lt;br /&gt;
# A program végig megy a bemeneten és közben megvizsgálja, hogy az adott karakter megtalálható-e az első paraméterben&lt;br /&gt;
## ha megtalálható, akkor lecseréli a karakterrel azonos pozícióban álló második paraméterben található értékre&lt;br /&gt;
## ha nincs benne, akkor megy tovább&lt;br /&gt;
# a metodika miatt keresztbe is lehet cserélni (pl. &#039;&#039;o&#039;&#039;-t &#039;&#039;e&#039;&#039;-re, &#039;&#039;e&#039;&#039;-t &#039;&#039;o&#039;&#039;-ra, mint az első példában). Gondoljuk végig, hogy ha nem így lenne, akkor az először lecserélt &#039;&#039;e&#039;&#039; betűnek a végén &#039;&#039;o&#039;&#039; betűre kéne cserélődnie.&lt;br /&gt;
&lt;br /&gt;
==== if ====&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; 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:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
elif KIFEJEZÉS&lt;br /&gt;
else&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen az egyes feltételek kihagyhatók, így készíthetünk egy egyszerű &#039;&#039;&#039;if&#039;&#039;&#039; elágazást is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS&lt;br /&gt;
then&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha egy sorban szeretnénk leírni (nem scriptben), akkor a következőképpen tehetjük meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; elif KIFEJEZÉS; then UTASÍTÁS1; UTASÍTÁS2; else UTASÍTÁS; fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Egy olyan program, amelynek a visszatérési értéke hasznos információkat hordoz a futás eredményét tekintve. Ne feledjük el, hogy a &#039;&#039;&#039;return&#039;&#039;&#039; kulcsszóval tudunk ilyen értéket generálni C/C++ kódok esetében. Lássunk egy példát:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  if ( 10 % 2 == 0 ) return 0;&lt;br /&gt;
  else return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fenti program visszatérési értéke információval szolgál számunkra, hogy a 10 osztható-e kettővel, avagy sem. Ez az érték vizsgálható az &#039;&#039;&#039;if&#039;&#039;&#039; segítségével és a válasz függvényében más-más kódokat hajthatunk végre.&lt;br /&gt;
&lt;br /&gt;
A kiértékelés ellentétes a megszokott módszerhez képest (ahol minden igaz, aminek az értéke nem 0).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ha a KIFEJEZÉS 0 értéket ad vissza, akkor IGAZ az állítás, tehát az if-en belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; 0&lt;br /&gt;
then&lt;br /&gt;
  ....&lt;br /&gt;
else&lt;br /&gt;
  ....&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# ha a KIFEJEZÉS nem 0 értéket ad vissza, akkor HAMIS az állítás, tehát az else-n belüli kód fut&lt;br /&gt;
if KIFEJEZÉS =&amp;gt; != 0&lt;br /&gt;
then&lt;br /&gt;
    ...&lt;br /&gt;
else&lt;br /&gt;
    ...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programozási nyelvek tanításakor ezért térünk vissza 0-s értékkel (&#039;&#039;&#039;return 0;&#039;&#039;&#039;), a programunk végén, és hiba esetén 1, vagy annál nagyobb értékkel.&lt;br /&gt;
&lt;br /&gt;
==== test ====&lt;br /&gt;
A &#039;&#039;&#039;test&#039;&#039;&#039; parancs logikai függvényeket értékel ki és&lt;br /&gt;
* &#039;&#039;&#039;0&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;IGAZ&#039;&#039;&#039;,&lt;br /&gt;
* &#039;&#039;&#039;1&#039;&#039;&#039; értéket ad vissza, ha az eredmény &#039;&#039;&#039;HAMIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;if&#039;&#039;&#039; utasítással együtt szoktuk használni, de természetesen ettől független is meghívható.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# megtörténik a logikai kiértékelés, eldől, hogy a két string egyezik-e&lt;br /&gt;
test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
# kiírjuk a képernyőre a test utasítás visszatérési értékét&lt;br /&gt;
echo $?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if&#039;&#039;&#039; utasítással a következőképp használhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# hamis&lt;br /&gt;
if test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# igaz&lt;br /&gt;
if ! test &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#igaz&lt;br /&gt;
if test &amp;quot;text1&amp;quot; != &amp;quot;text2&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
   echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
   echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elérhető egy &#039;&#039;alias&#039;&#039;, aminek segítségével olvashatóbbá tehetjük a &#039;&#039;&#039;test&#039;&#039;&#039; utasítást. Ez a &#039;&#039;&#039;[ ]&#039;&#039;&#039; pár.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;text1&amp;quot; == &amp;quot;text2&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ügyeljünk rá, hogy a &#039;&#039;[&#039;&#039; és a &#039;&#039;]&#039;&#039; zárójelek mellett &#039;&#039;whitespace&#039;&#039; karakterek vannak. Ha ezeket kihagyjuk, akkor hibát fogunk kapni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A számok ellenőrzése BASH környezetben körülményesebb, mivel itt minden karakterláncnak számít. Emiatt a következő utasítás sorozat nem várt eredménnyel zárul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ &amp;quot;1000&amp;quot; &amp;lt;= &amp;quot;20&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: igaz. De tudjuk, hogy ez az eredmény nem igaz, a BASH mégis így értékelte ki. Az oka, hogy az első karaktereket tekintve (&#039;&#039;1&#039;&#039; és &#039;&#039;2&#039;&#039;) elmondható, hogy az &#039;&#039;1&#039;&#039;-es hamarabb van az ABC-ben (kódtáblában), mint a &#039;&#039;2&#039;&#039;, így az &#039;&#039;1000&#039;&#039;-nek kisebbnek kell lennie (mintha a &amp;quot;alma&amp;quot; és &amp;quot;körte&amp;quot; lenne összehasonlítva, hogy melyik következik előbb az ABC-ben).&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy a &#039;&#039;&#039;test&#039;&#039;&#039; utasítás karakterek helyett számként dolgozza fel a paramétert, kapcsolót kell használnunk:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
! Kapcsoló !! Angol megnevezés !! Magyar megnevezés&lt;br /&gt;
|-&lt;br /&gt;
| -eq || Equals || Egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -ne ||  Not Equals || Nem egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -lt || Lower than || Kisebb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -le || Lower than or equals || Kisebb vagy egyenlő&lt;br /&gt;
|-&lt;br /&gt;
| -gt || Greather than || nagyobb, mint&lt;br /&gt;
|-&lt;br /&gt;
| -ge || Greather than or equals || Nagyobb vagy egyenlő&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ 1000 -le 20 ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;igaz&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;hamis&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Az eredmény&#039;&#039;&#039;: Az elvártaknak megfelelően HAMIS.&lt;br /&gt;
&lt;br /&gt;
==== for ====&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; utasítás segítségével egy lista elemein mehetünk végig. Hasonlóan működik, mint a modern programozási nyelvekben a &#039;&#039;foreach&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Legegyszerűbben a következő utasítással tesztelhetjük, ahol a bemeneti listát soronként látjuk viszont a képernyőn:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in 1 2 3 4 5 6&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Természetesen van lehetőségünk a listát más program kimenetéből kinyerni a parancsbehelyettesítés segítségével:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `ls`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;for&#039;&#039;&#039; gyakorlatilag a pozicionális paramétereken megy végig, tehát egy lista elem a $1, egy másik listaelem a $2. Tudjuk, hogy ha szóközök között adjuk meg, akkor szóközt is tartalmazhat a paraméterünk. Lássunk egy példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in &amp;quot;1 2 3&amp;quot; &amp;quot;4 5 6&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben a képernyőn két sor jelenik meg: &#039;&#039;1 2 3&#039;&#039; és &#039;&#039;4 5 6&#039;&#039;. Azonban a parancsbehelyettesítés nem alkalmaz az idézőjelhez hasonló technikát, tehát azt alkalmazva minden szó (szóközökkel határolt karaktersorozat) új pozicionális paramétert jelent. Lássunk egy az előzőhöz hasonló példát:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `echo &amp;quot;1 2 3 4 5 6&amp;quot;`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ez esetben hat sor jelenik meg, benne egy-egy számmal, tehát az &#039;&#039;&#039;echo &amp;quot;1 2 3 4 5 6&amp;quot;&#039;&#039;&#039; kimenetét szóközönként vágta fel.&lt;br /&gt;
&lt;br /&gt;
==== while ====&lt;br /&gt;
A &#039;&#039;&#039;while&#039;&#039;&#039; utasítás, mint minden programozási nyelvben, itt is felfogható úgy, mint egy többször lefutó &#039;&#039;&#039;if&#039;&#039;&#039;. Éppen ezért a szintaktikájuk megegyezik, csupán a feltételek megírásával kell óvatosan bánnunk, hogy a ciklus mag akkor és addig fusson, ameddig mi azt szeretnénk. A &#039;&#039;&#039;while&#039;&#039;&#039; ciklusnál ugyanazokat az alkalmazásokat írhatjuk be a &#039;&#039;&#039;KIFEJEZÉS&#039;&#039;&#039; helyére, mint az &#039;&#039;&#039;if&#039;&#039;&#039; esetében.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while KIFEJEZÉS&lt;br /&gt;
do&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például ha azt akarjuk, hogy egy ciklus addig fusson, amíg meg nem jelenik egy fájl a fájlrendszerben, akkor azt a következőképp vezethetjük le:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ellenőrzi, hogy a fájl elérhető-e&lt;br /&gt;
test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ez esetben egyetlen kísérletet teszünk, de nem várjuk meg, hogy oda kerüljön, amennyiben nincs ott&lt;br /&gt;
if test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;A fájl nem létezik&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# várakozunk, amíg a feltétel nem lesz igaz, tehát a fájl nem kerül oda&lt;br /&gt;
while ! test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozunk&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# test parancs helyettesítése []-el&lt;br /&gt;
while ! [ -f &amp;quot;file.txt&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A while ciklusnál érdemes megemlíteni a &#039;&#039;&#039;until&#039;&#039;&#039; utasítást, ami annyiban tér el, hogy a feltétel kiértékelését invertálni kell - tehát ami igaz a &#039;&#039;&#039;while&#039;&#039;&#039; esetében, az hamis az &#039;&#039;&#039;until&#039;&#039;&#039; esetében és fordítva. Így a fenti feladatot megvalósíthatjuk invertálás nélkül, az until utasítással is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
until test -f &amp;quot;file.txt&amp;quot;&lt;br /&gt;
do&lt;br /&gt;
 echo &amp;quot;várakozás&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
echo &amp;quot;a fájl létezik&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== seq ====&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítás egy listát generál számunkra, amelyben a megadott lépésszámmal, a megadott legkisebb értéktől a megadott legnagyobb értékig szerepelnek a számok.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# számok 1-10-ig&lt;br /&gt;
seq 10&lt;br /&gt;
&lt;br /&gt;
# számok 5-10-ig&lt;br /&gt;
seq 5 10&lt;br /&gt;
&lt;br /&gt;
# számok 3-tól 10-ig 2-esével&lt;br /&gt;
seq 3 2 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást általában a &#039;&#039;&#039;for&#039;&#039;&#039; ciklus listájában használjuk, hogy elő tudjuk állítani az indexeket.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq 3 2 10`&lt;br /&gt;
do&lt;br /&gt;
  echo $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== read ====&lt;br /&gt;
A &#039;&#039;&#039;read&#039;&#039;&#039; utasítás segítségével a STDIN-ről kérhetünk be információt változóba/változókba. Ha több változót sorolunk fel, akkor a bemenetet szóközöknél vágja el.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# beolvasás var-ba&lt;br /&gt;
# STDIN =&amp;gt; teszt&lt;br /&gt;
#  var =&amp;gt; teszt&lt;br /&gt;
# STDIN =&amp;gt; teszt szöveg&lt;br /&gt;
#  var =&amp;gt; teszt szöveg&lt;br /&gt;
read var&lt;br /&gt;
&lt;br /&gt;
# beolvasás fname és lname változókba&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname = Farkas&lt;br /&gt;
# STDIN =&amp;gt; Attila&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas OPSYS&lt;br /&gt;
read fname lname&lt;br /&gt;
&lt;br /&gt;
# beolvasás három változóba. Ha a felhasználó az utasításokkal szemben több szót adott meg, akkor így biztosíthatjuk, hogy ne legyen szóköz az első két változóban&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; &amp;lt;üres&amp;gt;&lt;br /&gt;
# STDIN =&amp;gt; Attila Farkas OPSYS meg valami más&lt;br /&gt;
#  fname =&amp;gt; Attila&lt;br /&gt;
#  lname =&amp;gt; Farkas&lt;br /&gt;
#  tmp =&amp;gt; OPSYS meg valami más&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utóbbi esetben hibaüzenet is generálható, ha megvizsgáljuk, hogy a &#039;&#039;tmp&#039;&#039; változó értéke üres-e:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Adja meg a teljes nevét: &amp;quot;&lt;br /&gt;
read fname lname tmp&lt;br /&gt;
&lt;br /&gt;
# -n =&amp;gt; nem üres?&lt;br /&gt;
# -z =&amp;gt; üres?&lt;br /&gt;
if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;Valamit elhibáztál&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk ellenőrzött bekérést végrehajtani:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmp=&amp;quot;start value&amp;quot;&lt;br /&gt;
while [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
do&lt;br /&gt;
  echo -n &amp;quot;Adja meg a teljes nevét FNAME LNAME formátumban: &amp;quot;&lt;br /&gt;
  read fname lname tmp&lt;br /&gt;
  if [ -n &amp;quot;$tmp&amp;quot; ]&lt;br /&gt;
  then&lt;br /&gt;
    echo &amp;quot;Valamit elrontottál!&amp;quot;&lt;br /&gt;
    # ez esetben nem lépünk ki, mert bekérjük újra&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expr ====&lt;br /&gt;
Az &#039;&#039;&#039;expr&#039;&#039;&#039; parancs segítségével tudunk matematikai műveleteket végrehajtani. Mivel a BASH-ben minden változó karakterlánc, így nem tudunk közöttük műveletet végezni. Az &#039;&#039;&#039;expr&#039;&#039;&#039; a paramétereket belül számként kezeli. &#039;&#039;&#039;Csak egész számokkal tud dolgozni!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a képernyőre kerül az eredmény&lt;br /&gt;
expr 1 + 2&lt;br /&gt;
expr 4 * 4&lt;br /&gt;
&lt;br /&gt;
# csak egész számot ír ki&lt;br /&gt;
expr 3 / 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha tört számokkal kell dolgoznunk, akkor a következőket tehetjük:&lt;br /&gt;
# eltávolítjuk a törtrészt&lt;br /&gt;
# felszorozzuk 10^n-nel, ahol n a törtrész számjegyeivel egyezik meg (pl. 10.02-t 100-al kell szorozni). Az egész térben elvégzett művelet eredményét később vissza osztjuk ugyanannyival, amennyivel korábban felszoroztuk. &#039;&#039;&#039;Ez nem egy egyszerű feladat, hiszen a tört számot egyáltalán nem kezeli az expr, tehát cut, wc és egyéb parancsokkal kell kialakítanunk a számot, ahogy utána szét is kell darabolnunk azt.&#039;&#039;&#039;&lt;br /&gt;
# Másik környezetet használunk, ahol tudunk számokat is kezelni - &#039;&#039;&#039;ez a ZH-n nem elfogadott&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A lehetőségek közül csak az elsőt, a ZH-n teljes mértékben elfogadott megoldást mutatom be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# a 3.4-et és a 1.2-őt kell összeadnunk.&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 3&lt;br /&gt;
echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# ennek eredménye 1&lt;br /&gt;
echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
expr `echo &amp;quot;3.4&amp;quot; | cut -d&#039;.&#039; -f1` + `echo &amp;quot;1.2&amp;quot; | cut -d&#039;.&#039; -f1`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok parancsokhoz ===&lt;br /&gt;
==== Írassuk ki a /etc/passwd több sorát ====&lt;br /&gt;
Több választási lehetőségünk van:&lt;br /&gt;
* ha a kiírandó sorszámok valamilyen logikát követnek (minden második, harmadik stb.), akkor használhatjuk a &#039;&#039;&#039;seq&#039;&#039;&#039; utasítást&lt;br /&gt;
* ha nincs logika a sorszámokban, akkor kézzel kell elkészítenünk a listát&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki minden harmadik sor tartalmát&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# határozzuk meg a seq tartományát&lt;br /&gt;
# min: 1&lt;br /&gt;
# max: ahány sora van a fájlnak&lt;br /&gt;
&lt;br /&gt;
# max érték meghatározás&lt;br /&gt;
# a változó létrehozást lentebb tárgyaljuk&lt;br /&gt;
max=`cat /etc/passwd | wc -l`&lt;br /&gt;
&lt;br /&gt;
# lista meghatározása for ciklushoz&lt;br /&gt;
# 1-től $max-ig hármasával&lt;br /&gt;
seq 1 3 $max&lt;br /&gt;
&lt;br /&gt;
# Rakjuk össze&lt;br /&gt;
for i in `seq 1 3 $max`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Logikát nem tartalmazó sorszámok&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Írassuk ki a 2., 5., 10. és 11. sorokat&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `2 5 10 11`&lt;br /&gt;
do&lt;br /&gt;
  head -$i /etc/passwd | tail -1&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fájlok ellenőrzése és másolása ====&lt;br /&gt;
Másoljuk át a /etc/passwd állományt egy könyvtárba (~/test/destination). Ha a célkönyvtár nem létezik, akkor hozzuk létre. Ha a célkönyvtár és a fájl is létezik, akkor írjunk ki hibaüzenetet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# forrás fájl létezésének vizsgálata&lt;br /&gt;
test -f /etc/passwd&lt;br /&gt;
&lt;br /&gt;
# célfájl létezésének vizsgálata&lt;br /&gt;
test -f ~/test/destination/passwd&lt;br /&gt;
&lt;br /&gt;
# mappa létezésének vizsgálata&lt;br /&gt;
test -d ~/test/destination&lt;br /&gt;
&lt;br /&gt;
# rakjuk össze&lt;br /&gt;
&lt;br /&gt;
# ha a forrásfájl nem létezik&lt;br /&gt;
if ! test -f /etc/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A forrásfájl nem létezik&amp;quot;&lt;br /&gt;
# ha a célfájl létezik&lt;br /&gt;
elif test -f ~/test/destination/passwd&lt;br /&gt;
then&lt;br /&gt;
  echo &amp;quot;A fájl már létezik&amp;quot;&lt;br /&gt;
# ha a cél mappa nem létezik&lt;br /&gt;
elif ! test -d ~/test/destination&lt;br /&gt;
then&lt;br /&gt;
   # mappa létrehozás - szülőkönyvtárakat is, ha nem léteznek&lt;br /&gt;
   mkdir -p ~/test/destination&lt;br /&gt;
   # fájl belemásolása&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
# ha a célfájl nem létezik, de a célmappa igen&lt;br /&gt;
else&lt;br /&gt;
   # a fájlt bemásoljuk a könyvtárba&lt;br /&gt;
   cp /etc/passwd ~/test/destination&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script létrehozása ===&lt;br /&gt;
* Script megírása&lt;br /&gt;
* Futási jog&lt;br /&gt;
&lt;br /&gt;
=== Pozicionális paraméterek ===&lt;br /&gt;
&lt;br /&gt;
=== Változók ===&lt;br /&gt;
&lt;br /&gt;
== 3. óra ==&lt;br /&gt;
 A harmadik órán reguláris nyelvekkel foglalkozunk. A nyelv szintaktikai elemzése után a BASH-ben erre alkalmas szoftvert, a &#039;&#039;grep&#039;&#039;-et foguk megvizsgálni.&lt;br /&gt;
&lt;br /&gt;
=== Reguláris kifejezés szerkezete ===&lt;br /&gt;
A reguláris nyelvek atomokból, lezártakból épül fel, amelynek az eredménye az úgynevezett „összetettek”.&lt;br /&gt;
&lt;br /&gt;
==== Atomok ====&lt;br /&gt;
 Az atomok egy karakterre illeszkednek a sorban.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Atom !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| betűk, számok || saját magukra illeszkednek&lt;br /&gt;
|-&lt;br /&gt;
| ^ || sor elejére illeszkedik (csak egyszer lehet a legelején)&lt;br /&gt;
|-&lt;br /&gt;
| $ || sor végére illeszkedik (csak egyszer lehet a legvégén)&lt;br /&gt;
|-&lt;br /&gt;
| [abc] || halmaz: minden benne lévő elemre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| [^abc] || inverz halmaz: egyetlen benne lévő elemre sem illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| . || mindenre illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Lezártak ====&lt;br /&gt;
 A lezártak ismétlődéseket fogalmaznak meg egy atomra vonatkozóan. &#039;&#039;&#039;Lezárt csak atom után helyezkedhet el!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Lezárt !! jelentés&lt;br /&gt;
|-&lt;br /&gt;
| * || az atomot 0 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| + || az atomot 1 és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| ? || az atomot 0 és 1 között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n} || az atom pontosan n-szer fordul elő egymás mellett&lt;br /&gt;
|-&lt;br /&gt;
| {n,m} || az atomot n és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {n,} || az atomot n és végtelen között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
| {,m} || az atomot 0 és m között akárhányszor ismételheti&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Összefűzöttek ====&lt;br /&gt;
 Az atomok és a lezártak egymás után írt sorozata.&lt;br /&gt;
A lezártaknál fontos kitétel volt, hogy csak atom után lehet írni. &#039;&#039;&#039;Egy összefűzött újra atomizálható&#039;&#039;&#039; a ( ) karakterekkel.&lt;br /&gt;
Az összefűzöttek tartalmazhatnak uniót (|), ahol több szabály közül bármelyik megvalósulhat egy sikeres illesztéshez.&lt;br /&gt;
&lt;br /&gt;
=== Parancsok és példák ===&lt;br /&gt;
 Ez egy teszt szöveg, amin próbálkozunk.&lt;br /&gt;
A fenti szöveget alapul véve, a következő reguláris kifejezéseket hozhatjuk létre:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Reguláris kifejezés !! Illeszkedik? || Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| E || Igen || Van a sorban E betű&lt;br /&gt;
|-&lt;br /&gt;
| a || Igen || Van a sorban a betű&lt;br /&gt;
|-&lt;br /&gt;
| b || Nem || Nincs a sorban b betű&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Igen || A sor elején van az E betű&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Nem || Nincs a sor elején A betű&lt;br /&gt;
|-&lt;br /&gt;
| ^e || Nem || nincs a sor elején e betű&lt;br /&gt;
|-&lt;br /&gt;
| .$ || Igen || Bármilyen karakter lehet a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| \. || Igen || . van a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| k$ || Nem || Nincs k a sor végén&lt;br /&gt;
|-&lt;br /&gt;
| egy || igen || Van a sorban „egy” string&lt;br /&gt;
|-&lt;br /&gt;
| egység || Nem || Nincs a sorban egység string&lt;br /&gt;
|-&lt;br /&gt;
| egy* || Igen || eg kötelező, y 0 vagy végtelenszer lehet (egy, egyy, egyyy, egyyyy ...)&lt;br /&gt;
|-&lt;br /&gt;
| l*egy || Igen || l 0 vagy végtelen, eg kötelező (eg, leg, lleg, llleg, lllleg ...)&lt;br /&gt;
|-&lt;br /&gt;
| l+egy || Nem || Nincs a szövegben &amp;quot;l+egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| l\+egy || Nem || l 1 vagy végtelen hosszú, egy kötelező (legy, llegy, lllegy, llllegy ...)&lt;br /&gt;
|-&lt;br /&gt;
| (egy) || Nem || Nincs a sorban &amp;quot;(egy)&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\) || Igen || Van a sorban &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)* || Igen || Van a sorban legalább 0-szor &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\+ || Igen || Van a sorban legalább 1-szer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| \(egy\)\{2\} || Nem || Nincs a sorban pontosan kétszer &amp;quot;egy&amp;quot; string&lt;br /&gt;
|-&lt;br /&gt;
| [a-z] || Igen || Vannak benne kisbetűk&lt;br /&gt;
|-&lt;br /&gt;
| [A-Z] || Igen || Van benne nagy betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-D] || Nem || Nincs a sor elején A-D tartományban betű&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z] || Igen || Nagy betű van a sor elején&lt;br /&gt;
|-&lt;br /&gt;
| ^[A-Z].*\.$ || Igen || Nagybetűvel kezdőik, középen bármi lehet és ponttal végződik a sor.&lt;br /&gt;
|-&lt;br /&gt;
| [0-9] || Nem || Nincs számjegy a sorban&lt;br /&gt;
|-&lt;br /&gt;
| .* || Igen || Mindenre illeszkedik, bármilyen hosszan (üres sorra is)&lt;br /&gt;
|-&lt;br /&gt;
| ^$ || Nem || Csak az üres sorra illeszkedik&lt;br /&gt;
|-&lt;br /&gt;
| ^.\+$ || Igen || Mindenre illeszkedik, kivéve az üres sorra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A következő kifejezés szintén illeszkedik:&lt;br /&gt;
 ^[A-Z].*\(egy\)\|\(kettő\).*\.$ =&amp;gt; A sor elején nagybetűvel kezdődik, van a közepén valahol benne &amp;quot;egy&amp;quot; vagy &amp;quot;kettő&amp;quot; karakterlánc és ponttal végződik. A köztes karakterek értéke nincs megszabva.&lt;br /&gt;
&lt;br /&gt;
==== grep ====&lt;br /&gt;
A &#039;&#039;&#039;grep&#039;&#039;&#039; utasítás segítségével végezhetünk el reguláris kifejezés, tehát minta illesztést fájlokon. Amennyiben nem adunk meg fájl paramétert, a STDIN csatornát olvassa. Az eredmények a STDOUT-ra íródnak.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto&amp;quot;&lt;br /&gt;
|+ Fontosabb kapcsolók&lt;br /&gt;
|-&lt;br /&gt;
! Rövid név !! Hosszú név !! Magyarázat&lt;br /&gt;
|-&lt;br /&gt;
| -c || --count || Megszámolja az illeszkedő sorokat&lt;br /&gt;
|-&lt;br /&gt;
| -o || --only-matching || Csak a mintára illeszkedő részt írja ki (nem a teljes sort)&lt;br /&gt;
|-&lt;br /&gt;
| -n || --line-number || Megszámozza a sorokat (a fájl alapján, nem a megjelenítés szerint)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Példa =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# nologin környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;nologin&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;nologin&amp;quot; # STDIN-en érkező adatok szűrése&lt;br /&gt;
&lt;br /&gt;
# bash környezetet futtató felhasználók listája a rendszerben&lt;br /&gt;
grep &amp;quot;bash&amp;quot; /etc/passwd&lt;br /&gt;
cat /etc/passwd | grep &amp;quot;bash&amp;quot;    # STDIN-en érkező adatok szűrése&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Példa 2 =====&lt;br /&gt;
Írjunk egy scriptet, amely a /bin/bash futtatási környezetet kapó felhasználók nevét kiírja a képernyőre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# a fájl sorainak száma&lt;br /&gt;
lines=`cat $file | wc -l`&lt;br /&gt;
&lt;br /&gt;
# végig megyünk a fájl sorain&lt;br /&gt;
for i in `seq 1 $lines`; do&lt;br /&gt;
 # itt kapjuk meg az i. sort&lt;br /&gt;
 line=`head -$i $file | tail -1`&lt;br /&gt;
 # kiszedjük a shell környezetet&lt;br /&gt;
 shell=`echo $line | cut -f7 -d&#039;:&#039;`&lt;br /&gt;
 # ha ez &amp;quot;/bin/bash&amp;quot;, akkor kivágjuk a sor első oszlopát, ezt írhatjuk a képernyőre&lt;br /&gt;
 if test $shell == &amp;quot;/bin/bash&amp;quot;; then&lt;br /&gt;
  echo $line | cut -f1 -d&#039;:&#039;&lt;br /&gt;
 fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.227s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# a fájl, amin dolgozunk&lt;br /&gt;
file=&amp;quot;/etc/passwd&amp;quot;&lt;br /&gt;
# szűrjük ki a sorokat, amelyeknek a végén a &amp;quot;/bin/bash&amp;quot; karakterlánc található és a kapott eredményhalmaznak vágjuk ki az első oszlopát&lt;br /&gt;
# a kapott eredményhalmaz még mindig megfelel a /etc/passwd eredeti formátumának, csak a sorok számát csökkentettük a szűrési feltételnek megfelelően!&lt;br /&gt;
grep &amp;quot;/bin/bash$&amp;quot; $file | cut -f1 -d&#039;:&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A fenti script futási ideje: 0.003s&lt;br /&gt;
&lt;br /&gt;
== 4. óra ==&lt;br /&gt;
 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.&lt;br /&gt;
&lt;br /&gt;
== 5. óra ==&lt;br /&gt;
 Az ötödik órán minta ZH feladatsort oldunk meg.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=818</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=818"/>
		<updated>2024-10-08T11:52:26Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* API indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.1 php8.1 php8.1-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip -y&lt;br /&gt;
pip3 install flask mysql-connector-python --break-system-packages&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=817</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=817"/>
		<updated>2024-10-08T11:50:50Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* API indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.1 php8.1 php8.1-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip -y&lt;br /&gt;
python3-flask python3-mysql.connector --break-system-packages&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=816</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::AWS</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::AWS&amp;diff=816"/>
		<updated>2024-10-01T07:22:35Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* API indítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
[[category:GAMF AWS|AWS]]&lt;br /&gt;
== Amazon Web Services regisztráció ==&lt;br /&gt;
Az AWS mindenki számára biztosít 1 év ingyenes próbaverziót. Ehhez regisztrálnunk kell a rendszerbe, amihez szükségünk lesz egy email címre, egy telefonszámra a megerősítéshez és egy netes vásárlásra alkalmas bankkártyára. A regisztráció során az AWS 1$-ral meg terheli a számlát, de később erre nem tart igény, így a tranzakció lejáratakor jóváíródik a számlán.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes verzióban nem minden érhető el és ami mégis, az sem korlátlan ideig (750 óra EC2 futási idő például), amit ha átlépünk, akkor fizetési kötelezettségünk jelentkezik a szolgáltató felé. Igyekezzünk mindent leállítani az órai munka illetve az otthoni gyakorlás után, hogy lehetőleg ne kerüljön pénzbe a féléves munkánk. A hallgatók által elszenvedett károkért sem az iskola sem Én nem tudunk felelősséget vállalni, de azt meg tudjuk ígérni, hogy fizetős szolgáltatást nem használunk és nem is kérünk számon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AWS alapok ==&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az iskolai hálózatból csak az eu-west-1 és az eu-central-1, azaz Írország és Frankfurt IP címei vannak engedélyezve, ezekre fogunk tudni SSH kapcsolaton keresztül csatlakozni.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Próbaidőszak alatt minden szolgáltatás mellett keressük a &#039;&#039;Free tier eligible&#039;&#039; megjegyzést, különben fizetési kötelezettségünk adódhat!&lt;br /&gt;
&lt;br /&gt;
=== EC2 szolgáltatásai ===&lt;br /&gt;
 Az &#039;&#039;EC2&#039;&#039; gyakorlatilag egy VPS-nek feleltethető meg és nem is tévedünk vele hatalmasat. A neve az &#039;&#039;Elastic Cloud Compute&#039;&#039; szavak kezdőbetűiből kialakuló &#039;&#039;ECC&#039;&#039;-ből fakad, a &#039;&#039;2&#039;&#039;-es a végén jelzi, hogy a &#039;&#039;C&#039;&#039; betűből kettő van.&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez az EC2 futási ideje okozza: bár nem feltétlen, de meg van a lehetősége, hogy egyik napról a másikra megszűnjön egy EC2 úgy, hogy az alkalmazásunk mégis működőképes marad. E tulajdonsága miatt kapta az &#039;&#039;Elastic&#039;&#039; nevet, amit körültekintően kell kezelni: semmilyen adatot nem tárolhatunk úgy egy alkalmazáson belül, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájok) egy EC2 csere esetén elvesznek, így ezeket nem helyben fogjuk tárolni.&lt;br /&gt;
&lt;br /&gt;
Az EC2 szolgáltatásait a keresőmezőbe írt &#039;&#039;„EC2”&#039;&#039; kulcsszóval és az eredményekben megjelenő &#039;&#039;EC2&#039;&#039;-re való kattintással érhetjük el.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS search EC2.png.png]]&lt;br /&gt;
&lt;br /&gt;
Az alapértelmezetten megjelenő menüpont a &#039;&#039;Dashboard&#039;&#039;, ahol információkat találhatunk az &#039;&#039;EC2&#039;&#039; köré felhúzható szolgáltatásokról, melyeknek egy részét a továbbiakban tárgyalni is fogunk. Az összefoglaló táblázat az alább látható módon jelenik meg. &#039;&#039;&#039;Figyelem&#039;&#039;&#039;, a táblázat csak az adott régióban elindított/elérhető szolgáltatásokat mutatja, régió váltása előtt érdemes az esetlegesen létrehozott, régió függő elemeket leállítani, hogy később ne jelenjen meg fizetési kötelezettség.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
==== EC2 telepítése és beállítása ====&lt;br /&gt;
EC2 létrehozásához meg kell nyomnunk a &#039;&#039;Launch instance&#039;&#039; gombot, melyet több helyen is elérhetünk:&lt;br /&gt;
* A Dashboardon&lt;br /&gt;
* A bal oldali menüben található &#039;&#039;Intances&#039;&#039; menüpont megnyitása után jobb felül&lt;br /&gt;
A gomb minden esetben a következőképp néz ki: [[Fájl:GAMFAWS ec2 launch instance button.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlap jelenik meg, amely segítségével elvégezhetjük a szükséges beállításokat:&amp;lt;br&amp;gt;&lt;br /&gt;
======Név és tag beállítok======&lt;br /&gt;
 Megadása nem kötelező, de több szerver futtatása esetén könnyebben azonosíthatjuk be őket ezek segítségével&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup name and tags.png]]&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;Add additional tags&#039;&#039; gombra kattintva további kulcs=érték párokat adhatunk hozzá, amivel dinamikusan csatolhatjuk össze egyéb szolgáltatásokkal, amelyek egy-egy kulcsot keresve döntik el, hogy melyik szolgáltatásokkal kell együttműködniük (például monitorozás bekapcsolása &#039;monitoring=true&#039; kulcs=érték pár alapján.&lt;br /&gt;
&lt;br /&gt;
======Kezdeti képfájl kiválasztása======&lt;br /&gt;
  Az Amazon többféle indítóképpel is rendelkezik, így nagy valószínűséggel meg fogjuk találni a hozzánk közelálló operációs rendszert. Új hozzáadására nincs lehetőségünk, de készíthetünk az alapképfájlokból olyan verziót, ami már  tartalmazza a saját konfigurációnkat (lásd [[GAMF :: Felhőalapú-szolgáltatások :: AWS#AMI_létrehozása|itt]]).&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup AMI choose2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 Az órákon az Ubuntu legújabb verzióját használjuk, mivel ennek a Desktop változata az egyik legelterjedtebb a Linux felhasználók körében, így nem kell más környezetet megszoknia egy átlag hallgatónak. Érdemes lehet azonban egyéb disztribúciók kipróbálása is, különösen a &#039;&#039;&#039;Debian&#039;&#039;&#039;-t, &#039;&#039;&#039;Suse&#039;&#039;&#039;-t/&#039;&#039;&#039;OpenSuse&#039;&#039;&#039;-t, &#039;&#039;&#039;ReadHat&#039;&#039;&#039;-et és annak ingyenes változatait (&#039;&#039;&#039;AlmaLinux&#039;&#039;&#039;, &#039;&#039;&#039;RockyLinux&amp;lt;sup&amp;gt;tm&amp;lt;/sup&amp;gt;&#039;&#039;&#039;, amelyek az egykori &#039;&#039;&#039;CentOS&#039;&#039;&#039;-t hivatottak váltani), mivel céges környezetben ezek sűrűbben előfordulnak: némelyik a kisebb erőforrásigénye, míg másik az Enterprise szolgáltatásai miatt.&lt;br /&gt;
&lt;br /&gt;
======Szerver típusának meghatározása======&lt;br /&gt;
 Különböző erősségű szerverkonfigurációk közül választhatunk, de természetesen nem mindegyik érhető el az ingyenes verzióban. A számítógépek ára a konfiguráció függvényében változik, de csak azért az időért kell fizetni, amíg a szerver &#039;&#039;Running&#039;&#039; állapotban volt. Az órán az alapértelmezett &#039;&#039;t2.micro&#039;&#039;-t használjuk.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
======Kulcspár hozzárendelése======&lt;br /&gt;
 Az Amazonon belüli szolgáltatásokat felhasználónév/jelszó páros helyett SSH kulcspárok segítségével érjük el. Minden felhasználó számára készíthetünk egyet és jogosultságok segítségével korlátozhatjuk, hogy mihez férhet hozzá (IAM).&amp;lt;br&amp;gt;&lt;br /&gt;
 Ebben a szekcióban ki kell választanunk, hogy a telepíteni kívánt EC2-höz milyen kulcspárral lehet majd hozzáférni. Amennyiben nem rendelkezünk még kulcspárral, úgy van lehetőségünk helyben elkészíteni a &#039;&#039;Create new keypair&#039;&#039; gomb segítségével, amelynek lépési megegyeznek az [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Kulcspár_létrehozása|itt]] leírtakkal.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
======Hálózati és biztonsági beállítások======&lt;br /&gt;
 Az EC2-k közötti kommunikációs csatornák kialakításához definiálnunk kell, hogy melyik virtuális hálózatba akarjuk elhelyezni és milyen alkalmazásokat szeretnénk elérhetővé tenni. Ezt a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#VPC_beállításai|VPC]] és a [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Security_Group|Security Group]] beállításával tehetjük meg. Előbbi a virtuális hálózatnak felel meg, míg utóbbi hasonlóan egy tűzfalhoz, meghatározza, hogy a szerveren milyen portokat érhetünk el. Érdemes az SSH-t engedélyezni és ha webes alkalmazást szeretnénk rajta futtatni a későbbiekben, akkor a HTTP és/vagy HTTPS szolgáltatást/szolgáltatásokat is, így később nem kell szerkeszteni ezeket a beállításokat.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup networking.png]]&lt;br /&gt;
&lt;br /&gt;
======Tárhely beállítások======&lt;br /&gt;
 Ebben a részben adhatjuk meg, hogy a szerverünk mekkora tárhellyel rendelkezzen. Egy Linux alapú operációs rendszernek nem kell 8GB-nél több, így az alapértéken hagyhatjuk. Az itt megadott érték inkább csak egy korlát, valójában csak akkora tárhelyet vesz igénybe, amennyire ténylegesen szüksége van a rendszernek. Ez az érték alatt látható figyelmeztetés miatt lényeges, hiszen a 30GB-t elhagyva fizetőssé válik a tárterület is, ám ez nem jelenti, hogy csak 4 szervert tudnánk elindítani az ingyenes keretek között.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup ebs.png]]&lt;br /&gt;
&lt;br /&gt;
 Ezt a szolgáltatást EBS-nek nevezik (&#039;&#039;Elastic Block Store&#039;&#039;) és az EC2 megszűnésekor minden erre mentett adat elveszik, így általában az OS-t és az applikáció kódját tároljuk ezen - semmi dinamikus adatot.&lt;br /&gt;
&lt;br /&gt;
======Haladó beállítások======&lt;br /&gt;
 Ebben a szekcióban különböző beállításokat végezhetünk el, ám ezeket az órán nem módosítjuk. Érdekes lehet azonban a menüt lenyitva legalul található &#039;&#039;User data&#039;&#039; opció, amivel parancsokat adhatunk meg az új operációs rendszer számára, hogy miket futtasson le. Ennek segítségével lehetőségünk nyílik applikációk telepítésére - pl. git - és a kód letöltésére egy másik szerverről, amennyiben a kiválasztott képfájl nem tartalmazta azt.&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Az órai keretek között ezt a funkciót nem használjuk ki, de érdemes lehet kipróbálni, mivel valós alkalmazások üzemeltetésekor jól jöhet.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup userdata.png]]&lt;br /&gt;
&lt;br /&gt;
======Összefoglaló======&lt;br /&gt;
 A beállító panel mellett jobbra találhatjuk az összefoglaló ablakot, amelyben megtalálható a &#039;&#039;Launch Instance&#039;&#039; gomb. Ennek segítségével kezdhetjük meg a végleges telepítést, ha erre rá nyomunk, akkor a rendszer megkezdi a kiválasztott konfiguráció telepítését. Ha ebben az ablakban pénzösszegeket látunk, akkor az egészen biztosan fizetési kötelezettséget vonz magával, legyünk körültekintőek.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 setup summary.png]]&lt;br /&gt;
&lt;br /&gt;
======Az elkészült instance tulajdonságai======&lt;br /&gt;
 A futó szerverek az &#039;&#039;Instances&#039;&#039; menüpontban érhetők el. Az egyes sorokra kattintva alul megtekinthetjük a beállításait, amely tartalmazza az AWS által kiosztott publikus és privát IP címeket és domain neveket. Ezeken keresztül tudunk kommunikálni szerverünkkel.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 properties.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
 &#039;&#039;Jelen példában a külső IP címünk: 3.252.168.207, amit a mellette található ikonnal egyszerűen a vágólapra másolhatunk.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Linux terminálból======&lt;br /&gt;
 A csatlakozáshoz nyissunk meg egy terminált a CTRL+T billentyűkombinációval, majd navigáljunk a &#039;&#039;cd&#039;&#039; parancs segítségével a letöltött kulcsfájl mappájába. Az SSH megköveteli, hogy a csatlakozáshoz használt kulcsfájlhoz csak a tulajdonos felhasználó férjen hozzá, így a következő parancsot futtassuk le rajta: &#039;&#039;chmod 600 test.pem&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A következő paranccsal tudunk kapcsolódni: &#039;&#039;ssh -i test.pem ubuntu@3.252.168.207&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
 Ha a fenti parancs kéri, fogadjuk el a tanúsítványt. Amennyiben &#039;&#039;Permission error&#039;&#039; hibát kapunk, akkor a fenti &#039;&#039;chmod&#039;&#039; parancsra van szükségünk, vagy nem mi vagyunk a kulcsfájl tulajdonosai (&#039;&#039;ls -l&#039;&#039; segíthet).&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;test.pem&#039;&#039; az AWS rendszerből letöltött .pem formátumú kulcsfájl, az &#039;&#039;ubuntu&#039;&#039; a szerveren elérhető felhasználó. A különböző disztribúcióknál használt felhasználónevekről [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html ezen] a linken tájékozódhatsz.&amp;lt;br&amp;gt;&lt;br /&gt;
 [[Fájl:GAMFAWS ec2 connect linux.png]]&lt;br /&gt;
&lt;br /&gt;
======Csatlakozás Putty használatával======&lt;br /&gt;
 Amennyiben a .pem kiterjesztésű állományt töltöttük le az AWS rendszeréből, akkor a &#039;&#039;&#039;puttygen&#039;&#039;&#039; eszköz segítségével ki kell exportálni belőle a privát kulcsot. [https://www.ssh.com/academy/ssh/putty/windows/puttygen Ezen a linken] részletes segédlet található a programcsomaghoz, ahol további funkciók is bemutatásra kerülnek (pl. kulcsgenerálás).&lt;br /&gt;
&lt;br /&gt;
==== Kulcspár létrehozása ====&lt;br /&gt;
A kulcspárok kezeléséhez a &#039;&#039;Key Pairs&#039;&#039; linket nyissuk meg a bal oldali menüből. Újat a jobb oldalon látható &#039;&#039;Create key pair&#039;&#039; gomb segítségével készíthetünk. [[Fájl:GAMFAWS ec2 keypair create.png]]&lt;br /&gt;
&lt;br /&gt;
A gombra kattintva egy űrlapot kapunk, amely végig vezet minket a létrehozás lépésein.&lt;br /&gt;
# Név megadása&lt;br /&gt;
# Típus kiválasztása - &#039;&#039;RSA-val dolgozunk az órán&#039;&#039;&lt;br /&gt;
# Letöltendő kulcs típusa - &#039;&#039;Linux terminálból való csatlakozáshoz a .pem fájlra lesz szükségünk&#039;&#039;&lt;br /&gt;
# Esetleges tag-ek hozzárendelése&lt;br /&gt;
# A &#039;&#039;Create key pair&#039;&#039; gombra kattintva letölthetjük a kulcspárt&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS ec2 keypair setup.png|Kulcspár létrehozása]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A kulcspár csak a létrehozás után tölthető le &#039;&#039;&#039;egyetlen egyszer&#039;&#039;&#039;, az elvesztett fájlok nem reprodukálhatók! Amennyiben egy EC2 csak az elhagyott kulcspárral érhető el, úgy annak (EC2) törlése és újrakonfigurálása szükséges egy új kulccsal.&lt;br /&gt;
&lt;br /&gt;
==== Security Group ====&lt;br /&gt;
A Security Group-ok segítségével kontrollálhatjuk, hogy a szervereinkhez milyen portokon férhetnek hozzá, tehát mintegy tűzfal működik. Egy Security Group több gépre is ráhúzható és függetlenül működik, azaz a megadott szabályokat nem másolja át az operációs rendszer konfigurációs állományaiba, mintegy a szerver elé telepített eszköz működik. Ennek köszönhetően futási időben változtathatjuk a szabályokat, életbelépésükhöz nem kell újracsinálni az EC2-ket.&lt;br /&gt;
&lt;br /&gt;
 A bal oldali sávban, a &#039;&#039;Network &amp;amp; Security&#039;&#039; csoportban érhető el.&lt;br /&gt;
&lt;br /&gt;
===== Security Group hozzáadása =====&lt;br /&gt;
 Egy új szabályrendszer felvételét kezdeményezhetjük az EC2 telepítésekor, ahogyan azt [[GAMF :: Felhőalapú-szolgáltatások :: AWS#Hálózati_és_biztonsági_beállítások|itt]] is láthattuk, de készíthetünk előre meghatározottakat is.&lt;br /&gt;
&lt;br /&gt;
Az előre definiált csoportokat a &#039;&#039;Create Security Group&#039;&#039; gomb segítségével hozhatjuk létre, amelyet a jobb felső sarokban találhatunk meg.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg new button.png|bélyeg]sdfsad]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomását követően egy űrlapot kapunk, melynek 3 fő része van:&lt;br /&gt;
# Általános adatok [[Fájl:GAMFAWS ec2 secg new basic.png|bélyeg|Általános adatok]]&lt;br /&gt;
#* &#039;&#039;&#039;A név és a leírás mező megadása is kötelező&#039;&#039;&#039;&lt;br /&gt;
#* Itt választhatjuk ki, hogy mely VPC-ben szeretnénk elérhetővé tenni.&lt;br /&gt;
# Bejövő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg inbound.png|bélyegkép|Inbound rules]]&lt;br /&gt;
#* &#039;&#039;&#039;Az itt megjelenő szabályok lesznek engedélyezve a szerverünk felé, minden más csomag eldobásra kerül&#039;&#039;&#039;&lt;br /&gt;
#* Háromféle szabályból választhatunk:&lt;br /&gt;
#** &#039;&#039;&#039;Anywhere&#039;&#039;&#039; (IPv4, IPv6): A megadott IP típusból mindenhonnan elfogadjuk a csomagokat&lt;br /&gt;
#** &#039;&#039;&#039;Custom&#039;&#039;&#039;: Csak a megadott IP címekről/IP tartományokból érjük el az adott portot&lt;br /&gt;
#** &#039;&#039;&#039;MyIP&#039;&#039;&#039;: automatikusan beillesztésre kerül az felhasználó aktuális IP címe (hasonló a custom lehetőséghez)&lt;br /&gt;
# Kimenő csomagok szabályozása [[Fájl:GAMFAWS ec2 secg outbound.png|bélyegkép|Outbound rules]]&lt;br /&gt;
#* A kimenő forgalom szabályozása biztonsági szempontból megfontolandó, de természetesen a publikus alkalmazások esetében (pl. web) nem tudunk ilyen szűrést alkalmazni.&lt;br /&gt;
#* Alkalmazhatjuk például SSH-ra, hogy megszüntessük annak a lehetőségét, hogy egy esetleges fertőzésből kifolyólag SSH-t hackelgető botnetté változzunk (volt már hasonló tapasztalat).&lt;br /&gt;
#* Az órán ezzel bővebben nem foglalkozunk, de éles környezetben ne felejtsünk el ezen szabályok definiálására időt szánni.&lt;br /&gt;
# Tag-ek megadása&lt;br /&gt;
&lt;br /&gt;
===== Security Group szerkesztése =====&lt;br /&gt;
A szerkeszteni kívánt soron kattintsunk jobb gombbal és válasszuk ki a szerkeszteni kívánt szabályok csoportját:&lt;br /&gt;
* &#039;&#039;&#039;Edit inbound rules&#039;&#039;&#039;, ha a bejövő csomagok szűrését szeretnénk módosítani,&lt;br /&gt;
* &#039;&#039;&#039; Edit outbound rules&#039;&#039;&#039;, ha a kimenő forgalmat szeretnénk szűrni.&lt;br /&gt;
A megnyíló ablakban ugyanazon a módon vehetünk fel szabályokat, ahogyan a létrehozásnál. A módosítások mentés után életbe lépnek.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 secg context menu.png]]&lt;br /&gt;
&lt;br /&gt;
==== Terheléselosztás vázlat ====&lt;br /&gt;
[[Fájl:EC2LoadBalancingRequirements.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AMI ====&lt;br /&gt;
Az AMI gyakorlatilag egy bitről-bitre lemásolt HDD képfájl, amely tömörítve lett. Így tárolja az összes elmentett adat- és konfigurációs állományt. Ha egy alkalmazást készítünk, akkor a következő okokból készítünk ilyen képfájlt:&lt;br /&gt;
# Biztonsági mentés a telepített szolgáltatásokról, így később nem kell egy esetleges hiba miatt újrakonfigurálni az egészet&lt;br /&gt;
# AutoScaling group-ba szeretnénk rendezni az alkalmazásunkat, annak pedig meg kell mondani, hogy melyik képfájlt indítsa el&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A képfájlok úgynevezett snapshot-okat hoznak létre, amelyek tárolásáért fizetni kell, ha az összméret meghaladja a 8GB-ot. (A snapshotok az éppen futó rendszer miatt készülnek: minden írási műveletet lezár, majd a snapshot készítés után elindított írási műveletek már a háttértár egyéb területeire történik, amelyet a mentés nem fog tartalmazni, így garantálható, hogy nem lesznek félig lezárt fájlok a mentésben. Lásd bővebben: BTRFS (linux) és NTFS support). A pillanatképek nem törölhetők, amíg a belőlük készült AMI létezik!&lt;br /&gt;
&lt;br /&gt;
===== AMI létrehozás lépései =====&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk az Instances menüpontra, ahol láthatjuk, hogy milyen EC2 szolgáltatások vannak a rendszerünkben.&#039;&#039;&#039;&lt;br /&gt;
# Kattintsunk jobb gombbal azon az elemen, amelyet menteni szeretnénk&lt;br /&gt;
# Nyissuk ki az &#039;&#039;Image and templates&#039;&#039; menüpontot&lt;br /&gt;
# Kattintsunk a &#039;&#039;Create image&#039;&#039; lehetőségre&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami create.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nevezzük el a képfájlt tetszés szerint&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami setup.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigáljunk a bal oldalon található menüben az &#039;&#039;Images&#039;&#039; szekcióhoz és válasszuk ki az &#039;&#039;AMIs&#039;&#039; elemet. Itt megtekinthetjük és törölhetjük a létrehozott képfájljainkat.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 ami list.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ha a mentés sikeresen elkészült, akkor az EC2 létrehozásánál kiválaszthatjuk azt.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 setup own ami select.png]]&lt;br /&gt;
&lt;br /&gt;
==== Indítási konfigurációk elkészítése ====&lt;br /&gt;
Az indítási konfigurációk mind egy célt szolgálnak: egységes profilba rendezi az EC2-ről készült képfájlokat. Míg az AMI nem tárolt információt a mentett gép erőforrásáról, egy indítási konfigurációban megadhatjuk ezeket. Később ezek felhasználásával egyszerűbben indíthatunk újabb szervereket és vannak olyan esetek is, amikor a rendszer megköveteli, hogy a képfájl megadása helyett konkrét, hardverinformációkat is tároló konfigurációs sablonokat adjunk meg.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Az Auto Scaling Group például megköveteli, hogy a következő kettő elem közül az egyiket megadjuk, ebből fogja tudni, hogy milyen típusú EC2-t, mekkora tárhellyel és milyen VPC-ben indítson el.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch configuration =====&lt;br /&gt;
 &#039;&#039;&#039;Egy kifutóban lévő konfigurációs séma, amely 2022. December 31-e után nem kapja meg a frissítéseket. Az AWS javaslata szerint érdemes ezeket a beállításokat a következőkben tárgyalt &#039;&#039;Launch template&#039;&#039; alá migrálni.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Launch configuration&#039;-nek nevezett séma egy egyszerűsített változata a sablonoknak. Jóval kevesebb beállítási lehetőséget tartalmaz, mint a párja, de tökéletesen elegendőt az &#039;&#039;Auto Scaling Group&#039;&#039;hoz.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Auto Scaling group&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch Configuration&#039;&#039; menüpontot. A jobb felső sarokban található &#039;&#039;Create launch configuration&#039;&#039; gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Név megadása&#039;&#039;&#039;, aminek segítségével később hivatkozhatunk erre az elemre. Kitöltése kötelező!&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AMI kiválasztása&#039;&#039;, tehát azok képfájl megadása, amit a kiválasztott EC2 konfiguráció futtatni fog. Lehetőségünk van a saját készítésű (&#039;&#039;My AMIs&#039;&#039;) és a közösségi képfájlok közül választani (&#039;&#039;Marketplace&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance típus&#039;&#039;&#039; alatt megadhatjuk, hogy a konfiguráció milyen teljesítményű legyen.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy a t2.micro az ingyenes, a többi használata után fizetési kötelezettségünk jelenhet meg.&#039;&#039;&#039;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup instance type.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional configruation&#039;&#039;&#039; részben megadhatunk különböző paramétereket, amelyeket az EC2 fog felvenni - pl. mindenképp kapjon IP címet, a subnet beállításaitól függetlenül, vagy éppen ne kapjon; itt adhatjuk meg a telepítéskor lefuttatott scripteket (User data).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen lemezek és milyen méretűek legyenek a rendszerhez csatolva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Security Group&#039;&#039;&#039; részben kiválaszthatunk egy már meglévő szabályrendszert, vagy készíthetünk újat.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key pairs&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen privát kulccsal léphetnek be a szerverekre. Ennek meglétét jóvá kell hagyni az alul található checkbox-szal.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch conf setup keypair.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a &#039;&#039;Create launch confgiration&#039;&#039; gombra a létrehozáshoz.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Launch template =====&lt;br /&gt;
A Launch template jóval gazdagabb a beállítási lehetőségekben, mint párja. A konfigurációs adatlap tartalmaz segédletet az AutoScaling Group-pal történő használathoz, amely &#039;&#039;required&#039;&#039;, azaz kötelező mezőként jelöli meg azokat az adatbeviteli elemeket, amelyeket az automata skálázó rendszer használ. Érdemes ezt bekapcsolni, amennyiben ilyen célzattal készítjük el a sablonunkat.&lt;br /&gt;
&lt;br /&gt;
====== A beállítás menete ======&lt;br /&gt;
Keressük meg a bal oldali menüben az &#039;&#039;Instances&#039;&#039; szekciót és válasszuk ki a &#039;&#039;Launch template&#039;&#039; menüpontot. Az oldal közepén vagy a jobb felső sarokban található Create launch configuration gombra kattintva egy űrlapot kapunk, ami végig vezet minket a telepítés menetén.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A sablon neve és leírása&#039;&#039;&#039; blokkban megadhatjuk a nevet és a leírást, de ugyanakkor itt választhatjuk ki azt a checkboxot is, ami később a segítségünkre lesz a konfigurációs sablon AutoScaling Group-hoz való illesztését is (&#039;&#039;Auto Scaling guidence&#039;&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Application and OS images&#039;&#039;&#039; szekcióban megadhatjuk, hogy milyen AMI-val települjön az EC2. Itt választhatunk a sajátunkból, vagy az EC2-nél is megtalálható egyebekből.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup ami.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Instance type&#039;&#039;&#039; csoportban megadhatjuk, hogy milyen teljesítményű gépet szeretnénk indítani.&lt;br /&gt;
 &#039;&#039;&#039;Ne feledjük el, hogy az ingyenes változatban a t2.micro érhető el, másik lehetőség választása esetén fizetési kötelezettségek léphetnek fel!&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup instancetype.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Key Pair&#039;&#039;&#039; blokkban megadhatjuk, hogy a gépek milyen kulcspárral engedélyezzék a belépést.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup key pair.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Network Confguration&#039;&#039;&#039; részben definiálhatjuk, hogy milyen VPC-be szeretnénk lerakni az EC2-ket, milyen security group legyen rajtuk. Természetesen utóbbi helyben is létrehozható, ha korábban ezt nem készítettük volna el.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 launch templ setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Storage&#039;&#039;&#039;-nél megadhatjuk, hogy milyen kötetek, milyen méretben legyenek hozzácsatolva a rendszerhez.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Tags&#039;&#039;&#039; blokkban felvehetjük a kívánt &#039;&#039;kulcs=érték&#039;&#039; párokat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Az Additional Configuration&#039;&#039;&#039; szekcióban különböző haladó beállításokat eszközölhetünk a sablon által létrehozott EC2-n, többet között itt adhatjuk meg az indításkor lefuttatandó parancsok listáját (&#039;&#039;User data&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Végül kattintsunk a Create launch template nyomógombra a mentéshez!&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Target Group ====&lt;br /&gt;
 A target group EC2-k azon csoportja, amelyeken valamilyen &#039;&#039;health check&#039;&#039; algoritmust futtatunk, ezzel meghatározva, hogy az adott csoportban hány használható, működő szerver fut. Ezt az információt elsőként a Load balancer használja ki.&lt;br /&gt;
&lt;br /&gt;
A Target Group a bal oldali menüben, a &#039;&#039;Load Balancing&#039;&#039; szekcióban érhető el &#039;&#039;Target Groups&#039;&#039; néven.&lt;br /&gt;
&lt;br /&gt;
Létrehozhatunk új csoportot, de meg kell adnunk, hogy milyen módon kerüljenek bele az EC2-k. Erre a következő metódusokat ajánlja fel az Amazon:&lt;br /&gt;
# Konkrét EC2 (Instance) kiválasztása&lt;br /&gt;
# EC2-k definiálása IP tartománnyal&lt;br /&gt;
# Lambda függvény hozzáadása&lt;br /&gt;
# Alkalmazás LoadBalancer, amely egy teljes VPC tartalmát magába foglalja.&lt;br /&gt;
&lt;br /&gt;
Az űrlap alján megadhatjuk, hogy milyen életjel ellenőrzés történjen.&lt;br /&gt;
&lt;br /&gt;
Általában nem mi vesszük fel egyesével az Instancokat ebbe a csoportba, hanem az AutoScaling group regisztrálja őket bele. &#039;&#039;&#039;Ezért ezt az űrlapot nem használjuk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Load Balancer ====&lt;br /&gt;
A Load Balancer terheléselosztást jelent, tehát a bejövő forgalmat több gép között osztjuk el. Ezzel növekszik a felhasználói élmény, ráadásul a rendszer megállítása (egy hacker által) nehezebbé válik: ha kettő t2.micro teljesítményű szerver fut, amelyek között elosztjuk a bejövő forgalmat, akkor a rendszerünk valójában 2xt2.micro teljesítményű.&lt;br /&gt;
&lt;br /&gt;
Terheléselosztót a bal oldali menü &#039;&#039;Load Balancing&#039;&#039; szekciójának &#039;&#039;Load Balancers&#039;&#039; menüpontjában hozhatunk létre.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A támogatott szolgáltatási szintek:&#039;&#039;&#039;&lt;br /&gt;
# Alkalmazás terheléselosztás (HTTP, HTTPS)&lt;br /&gt;
# Hálózati terheléselosztás (TCP, UDP)&lt;br /&gt;
# Átjáró terheléselosztása (GW)&lt;br /&gt;
&lt;br /&gt;
===== Alkalmazás terheléselosztása =====&lt;br /&gt;
Ebben a formában konfigurálhatjuk az eszközt úgy, hogy az internet felől elérhető legyen (internet-facing) és úgy, hogy csak belső hálózaton működjön (internal). A belső hálózatot mindig az aktuális VPC-re kell érteni, tehát annak minden alhálózatából elérhető alapértelmezetten.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup basic.png]]&lt;br /&gt;
&lt;br /&gt;
A hálózati beállításoknál választhatunk, hogy mely alhálózatokban szeretnénk végrehajtani a terheléselosztást, így csak az azokban futó EC2-k kaphatnak ezen keresztül csomagokat. Arra kell ügyelnünk, hogy legalább kettő különböző zónában lévő alhálózatot kell kiválasztanunk (pl. eu-west-1a, eu-west-1b stb.).&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup network.png]]&lt;br /&gt;
&lt;br /&gt;
Természetesen a LoadBalancer internetfelőli végpontján létrehozhatunk &#039;&#039;Security Group&#039;&#039;okat, amelyet szabályozzák, hogy milyen IP címről fogadunk el csomagokat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup secg.png]]&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Listeners and routing&#039;&#039; résznél megadhatjuk, hogy melyik target group fogja a terhelést fogadni, tehát hogy mely EC2-k között tudunk ténylegesen terhelést elosztani. Amennyiben a target group egy darab EC2-t tartalmaz, akkor a terheléselosztás gyakorlatilag nem valósul meg, csak az elméleti esélyét adtuk meg, hogy &#039;&#039;„amennyiben lenne még egy EC2 a target group-ban, akkor a terhelés egy részét az vinné el”&#039;&#039;.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 loadbalancer setup routing.png]]&lt;br /&gt;
&lt;br /&gt;
 Végül kattintsunk a &#039;&#039;Create load balancer&#039;&#039; gombra, amennyiben a kívánt tag-eket is rögzítettük.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling Group ====&lt;br /&gt;
A szolgáltatás segítségével automatikusan skálázott rendszereket építhetünk ki, ahol a szerverek által nyújtott elérhető erőforrásokat minél közelebb tartja a bejövő terhelés által meghatározott erőforrásigényhez. Természetesen mindez akkor igaz, ha az &#039;&#039;Auto Scaling Group&#039;&#039; be regisztrálja az általa létrehozott &#039;&#039;EC2&#039;&#039;-ket egy &#039;&#039;Target Group&#039;&#039;-ba, ami felett &#039;&#039;Load Balancing&#039;&#039; van definiálva.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Előnyei&#039;&#039;&#039;:&lt;br /&gt;
* Amikor nincs bejövő terhelés, akkor nincsenek nagy költségek&lt;br /&gt;
* Amikor nagy a bejövő terhelés, akkor a költségek megugranak ugyan, de az ügyfeleket ki tudtuk szolgálni úgy, hogy elégedettek voltak a rendszer teljesítményével.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hátrányai&#039;&#039;&#039;:&lt;br /&gt;
* Kaotikus számlák, nem előre tervezhető költségek&lt;br /&gt;
* Megnövekedett költségek DDoS és egyéb támadások esetén&lt;br /&gt;
&lt;br /&gt;
===== A beállítás lépései =====&lt;br /&gt;
A szolgáltatást a bal oldali menü &#039;&#039;Auto Scaling Group&#039;&#039; szekciójában érjük el, az &#039;&#039;Auto Scaling Group&#039;&#039; menüpontban. A képernyő közepén vagy a képernyő jobb felső sarkában megjelenő &#039;&#039;Create auto scaling group&#039;&#039; gombra kattintva egy űrlap jelenik meg, ami végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Name&#039;&#039;&#039; szekcióban elnevezzük az új group-ot.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup name.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A következő szekcióban&#039;&#039;&#039; két választási lehetőségünk van:&lt;br /&gt;
* Launch Template-tel telepítjük az új group-ot, ez esetben csak ki kell választanunk a korábban létrehozott sablont, vagy az alatta található link segítségével készíthetünk újat. &#039;&#039;Amennyiben újat készítünk, a sablon létrehozása új ablakban nyílik meg, így a befejezést követően vissza kéne térnünk erre és a frissítést gombot megnyomva látni fogjuk az új lehetősége(ke)t.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lt.png]]&lt;br /&gt;
&lt;br /&gt;
* Launch Configuration-nel telepítjük az új group-ot, ez esetben át kell váltatnunk a &#039;&#039;Switch to launch configuration&#039;&#039; link segítségével a blokkot. A váltást követően hasonlóan az előzőekhez: vagy kiválasztjuk a már meglévő konfigurációs sémát, vagy hozhatunk létre újat.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lc.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a hálózati beállítások&#039;&#039;&#039; szekcióhoz érünk, ahol megadhatjuk, hogy az indított EC2 milyen VPC-be kerüljön és azon belül milyen alhálózatokba. VPC-ből egy, alhálózatból több is kiválasztható. Ügyeljünk rá, hogy ha később erre Load Balancer szolgáltatás is kerül, akkor legalább kettő zónát jelöljünk ki!&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A zóna nem egyezik meg az alhálózattal!&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup network.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a Load Balancing beállítások&#039;&#039;&#039; következnek, ahol választhatunk:&lt;br /&gt;
* Nincs terheléselosztás opciót,&lt;br /&gt;
* Létező Load Balancer hozzáillesztését,&lt;br /&gt;
* Új Load Balancer létrehozását.&lt;br /&gt;
&lt;br /&gt;
Utóbbi esetében a Load Balancer konfigurálásánál leírt módon ki kell töltenünk a Load Balancer űrlapját is helyben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup lb setup.png]]&lt;br /&gt;
&lt;br /&gt;
Hasonlóan a &#039;&#039;Target Group&#039;&#039;-ot is létrehozhatjuk helyben, amennyiben ezt nem tettük meg korábban.&lt;br /&gt;
[[Fájl:GAMFAWS ece autoscaling setup new lb new tg.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A Next gombra kattintva a csoport méretét definiálhatjuk&#039;&#039;&#039;, azaz megszabhatjuk, hogy hány darab szervertől, hány darab szerverig engedélyezzük az automatikus skálázást. Ez egy hasznos funkció, hiszen ezzel korlátok közé szoríthatjuk a költségeinket, miközben a legkisebb terhelés esetén is előkészülhetünk egy hirtelen bejövő nagyobb terhelésre (ha a minimum nem 1).&lt;br /&gt;
* Desired capacity: ennyi szervert fog elindítani az ASG mentés után&lt;br /&gt;
* Minimum capacity: ennyi szerver esetén már nem állít le semmit az ASG&lt;br /&gt;
* Maximum capacity: ennyi szerver esetén már nem indít el újabbat az ASG&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup group.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alatta a Scaling Policy&#039;&#039;&#039; blokkban megadhatjuk, hogy milyen paraméterek mentén indítson vagy épp állítson le szervereket az ASG. Ehhez aktiválnunk kell a szolgáltatást és a &#039;&#039;Metric type&#039;&#039; listából ki kell választani az számunkra megfelelőt. Mi általában CPU terhelés alapján döntünk az órán.&lt;br /&gt;
[[Fájl:GAMFAWS ec2 autoscaling setup scaling.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;A Next gombokkal lépkedve hozhatunk létre Tag-eket, majd végül létrehozhatjuk az ASG-t is és az &#039;&#039;Instances&#039;&#039; menüpontban ellenőrizhetjük, hogy ténylegesen elindult a kívánt darabszámú szerver.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== RDS szolgáltatások ===&lt;br /&gt;
A &#039;&#039;Relational Database Service&#039;&#039; foglalja magában a különböző adatbázisokat:&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MySQL&lt;br /&gt;
* Aurora&lt;br /&gt;
* Oracle&lt;br /&gt;
* PostgreSQL&lt;br /&gt;
* MSSQL&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az itt felsorolt szerverek között lehetnek fizetősek is. Mindig járjunk el figyelmesen, kövessük a költségeket. Az RDS az amazon egyik legdrágább szolgáltatása.&lt;br /&gt;
&lt;br /&gt;
==== MySQL adatbázis telepítése ====&lt;br /&gt;
==== Csatlakozás MySQL adatbázishoz CLI-ből ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install mysql-client -y&lt;br /&gt;
# mysql -h&amp;lt;rds_endpoint&amp;gt; -u&amp;lt;rds_user&amp;gt; -p&amp;lt;rds_password&amp;gt;&lt;br /&gt;
mysql -hwebshop-989.rds.amazon.com -uadmin -p123456789&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A megnyíló &#039;&#039;&#039;mysql&amp;gt;&#039;&#039;&#039; PROMPT-ot tartalmazó sor azt jelenti, hogy sikeresen csatlakoztunk az SQL szerverhez. Amennyiben a csatlakozás sikertelen, akkor valószínűleg az RDS-hez kapcsolt Security Group beállításai nem engedik az EC2-ről a kapcsolódást - tipikusan a mi saját publikus IP címünk kerül bele az engedélyezett tartományba (pl. iskolai IP vagy otthoni) és ez nem került átírásra az amazonos tartománynak megfelelően.&lt;br /&gt;
&lt;br /&gt;
A konzolra be kell illeszteni a &#039;&#039;networks.sql&#039;&#039; fájl tartalmát. A végén &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal léphetünk vissza a BASH környezetbe.&lt;br /&gt;
&lt;br /&gt;
=== VPC ===&lt;br /&gt;
A &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;P&#039;&#039;&#039;rivate &#039;&#039;&#039;C&#039;&#039;&#039;loud egy szolgáltatás, melynek segítségével össze köthetjük az összetartozó komponenseket, alkalmazásokat. A VPC-t modellezhetjük hétköznapibb értelemben, mint egy routert, amelynek vannak alhálózatai, route táblája és valamilyen gateway címe, amin keresztül a kliensei az internet más résztvevőivel tudnak kommunikálni.&lt;br /&gt;
&lt;br /&gt;
 A VPC szolgáltatásait a keresőbe írt &#039;&#039;VPC&#039;&#039; kulccsal érhetjük el.&lt;br /&gt;
==== VPC létrehozása ====&lt;br /&gt;
Navigáljunk a &#039;Your VPCs&#039; menüpontra a bal oldali menüben és kattintsunk a jobb felső sarokban látható &#039;&#039;Create VPC&#039; gombra. Ezután megnyílik egy űrlap, amely végig vezet minket a telepítés lépésein.&lt;br /&gt;
&lt;br /&gt;
Az űrlap elején választhatunk, hogy &#039;&#039;VPC only&#039;&#039; vagy &#039;&#039;VPC and more&#039;&#039; módban szeretnénk folytatni. Előbbi csak a VPC-t hozza létre nevéből is adódóan, míg a másik opcióval létrehozhatjuk az alhálózatokat is, igaz, a tervezés szabadságáról le kell ilyenkor mondanunk, cserébe grafikán láthatjuk az eredményt. Számunkra az órán utóbbi nem lesz megfelelő, hiszen szükségünk lesz a &#039;&#039;tervezés szabadságára&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc setup.png]]&lt;br /&gt;
&lt;br /&gt;
 A VPC beállításainál mindig a teljes hálózatot átfogó IP/MASZK párost kell megadnunk, később az alhálózatok nem lóghatnak ki az itt megadott tartományból.&lt;br /&gt;
&lt;br /&gt;
==== Alhálózatok ====&lt;br /&gt;
Az alhálózatok lehetőséget biztosítanak arra, hogy az egyes komponenseket el is szigeteljük egymástól, meg engedélyezzünk is közöttük bizonyos kommunikációt.&lt;br /&gt;
&lt;br /&gt;
Alhálózatok típusai:&lt;br /&gt;
* Publikus: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten kapnak publikus IP címet&lt;br /&gt;
* Privát: az alhálózatban létrehozott EC2-k és egyéb szolgáltatások alapértelmezetten nem kapnak publikus IP címet&lt;br /&gt;
&lt;br /&gt;
===== Alhálózatok létrehozása =====&lt;br /&gt;
Navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. A képernyő jobb felső sarkában kattintsunk a &#039;&#039;Create subnet&#039;&#039; gombra, így megkapjuk a létrehozási űrlapot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Először&#039;&#039;&#039; a VPC-t kell kiválasztanunk, aminek eredményeképp kiírja segítségképp annak tartományát. Ezen a tartományon kívül nem léphetünk.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A VPC kiválasztása után aktívvá válik az alhálózatok űrlap, ahol megadhatjuk annak nevét, hálózati címét és maszkját.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet setup new.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A rendszer csak hálózati címet fogad el! Minden más esetben hibát ír ki.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Remove&#039;&#039; gombbal eltávolíthatjuk az aktuális konfigurációt a listából, míg a lentebb található &#039;&#039;Add new subnet&#039;&#039; segítségével újabbat vehetünk fel.&lt;br /&gt;
&lt;br /&gt;
 Befejezésül nyomjuk meg a &#039;&#039;Create subnet&#039;&#039; gombot, így az összes definiált alhálózat létrejön a kiválasztott VPC-hez.&lt;br /&gt;
&lt;br /&gt;
===== Publikus/Privát alhálózat beállítása =====&lt;br /&gt;
Az alhálózat típusának átállításához navigáljunk a &#039;&#039;Subnets&#039;&#039; menüpontra. Kattintsunk jobb gombbal a kívánt alhálózat során és válasszuk ki az &#039;&#039;Edit subnet settings&#039;&#039; opciót.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit s settings.png]]&lt;br /&gt;
&lt;br /&gt;
Az űrlapon keressük meg az &#039;&#039;Auto-assign IP settings&#039;&#039; blokkot és a kívánt típusnak megfelelően módosítsuk azt.&lt;br /&gt;
[[Fájl:GAMFAWS vpc subnet edit type.png]]&lt;br /&gt;
&lt;br /&gt;
===== Különböző route tábla minden alhálózaton =====&lt;br /&gt;
A VPC támogatja, hogy minden subnet saját route táblával rendelkezzen. Ez lehet akár egy biztonsági funkció is, hogy ne ismerje minden EC2 az útvonalat egy adott szerverhez, de egyes esetekben kötelezően létre kell hoznunk. A route táblákat a &#039;&#039;Route tables&#039;&#039; menüpontban hozhatjuk létre és a &#039;&#039;Subnets&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Edit route table association&#039;&#039; opciót kiválasztva szerkeszthetjük.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A route táblák cseréje okozhat internetelérési problémákat szerver oldalon, aminek következtében a futó szolgáltatások számunkra is elérhetetlenekké válnak (pl. SSH és/vagy HTTP/HTTPS stb.), így legyünk körültekintőek.&lt;br /&gt;
&lt;br /&gt;
==== Internet Gateway ====&lt;br /&gt;
Ahhoz, hogy a VPC-n belül legyen internet, ahhoz egy IGW-t kell hozzá csatolnunk. Ezt megelőzően azonban létre kell hoznunk egyet.&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A VPC-hez nem kapcsolt IGW-k pénzbe kerülhetnek, mivel feleslegesen foglalnak le egy publikus IPv4 címet.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw setup.png|bélyegkép|Internet Gateway létrehozás]]&lt;br /&gt;
Az IGW az &#039;&#039;Internet Gateways&#039;&#039; menüpont alatt érhető el és a jobb felső sarokban található &#039;&#039;Create internet gateway&#039;&#039; gombbal hozhatunk létre újat. Csupán egy nevet kell megadnunk, illetve rakhatunk rá tag-eket igény szerint.&lt;br /&gt;
&lt;br /&gt;
A létrehozást követően hozzá kell rendelnünk egy létező VPC-hez, amit az &#039;&#039;Internet Gateways&#039;&#039; menüben, a módosítani kívánt soron jobb gombbal kattintva és az &#039;&#039;Attach to VPC&#039;&#039; opciót kiválasztva tudunk megtenni. Amennyiben a soron az &#039;&#039;Attached&#039;&#039; (zöld színű) felirat jelenik meg a (szürke színű) &#039;&#039;Detached&#039;&#039; helyett, akkor nem tudjuk VPC-hez csatolni (ilyenkor először a &#039;&#039;Detach from VPC&#039;&#039; opciót kell választanunk).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw attach.png]]&lt;br /&gt;
&lt;br /&gt;
Az IGW VPC-hez rendelése után a kívánt route táblákba fel kell vennünk, hogy minden csomagot arra irányítson.&lt;br /&gt;
[[Fájl:GAMFAWS vpc igw route setup.png]]&lt;br /&gt;
&lt;br /&gt;
==== NAT Gateway ====&lt;br /&gt;
Lehetőség van Internet Gateway helyett NAT Gateway létrehozására is, de ez egy fizetős szolgáltatás. A nevének megfelelően ez lehetőséget biztosít, hogy azok az EC2-k, amelyek privát alhálózatba kerültek, kilássanak az internet felé (pl. frissítések keresése, telepítése), miközben védve vannak a kívülről érkező támadásoktól.&lt;br /&gt;
 &#039;&#039;&#039;Ez egy lehetséges oka lehet, hogy külön válasszuk a route táblákat az alhálózatokon, hiszen az egyiknek minden csomagot az IGW felé, míg a másiknak minden csomagot a NAT Gateway felé kell továbbítania.&#039;&#039;&#039; &#039;&#039;Ha nem használunk NAT Gatewayt, akkor is érdemes lehet leválasztani az IGW-ről a privát alhálózatokat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== AWSCLI ===&lt;br /&gt;
Az AWSCLI egy konzolos alkalmazás, amelynek segítségével menedzselhetjük környezetünket: hozhatunk létre új EC2-t akár, vagy kapcsolhatunk hozzá egyéb szolgáltatásokat (Security Group, ASG, LB stb.).&lt;br /&gt;
&lt;br /&gt;
 Az awscli program elérhető linux és windows környezetben egyaránt.&lt;br /&gt;
&lt;br /&gt;
==== AWSCLI telepítése ====&lt;br /&gt;
A program telepítéséhez a következő parancsot kell futtatnunk: &#039;&#039;&#039;apt install awscli&#039;&#039;&#039;.&lt;br /&gt;
==== Access Key management ====&lt;br /&gt;
Az &#039;&#039;awscli&#039;&#039; hozzáférési kulcsokon keresztül kap jogosultságot a szolgáltatások adataihoz, így használata előtt készítenünk kell egy újat. Ez a nevünkre kattintva (jobb felül), majd a &#039;&#039;Security credentials&#039;&#039; menüpontot kiválasztva tehetjük meg, az &#039;&#039;Access keys&#039;&#039; szekcióban. Nyissuk ezt le és kattintsunk a &#039;&#039;Create New Access Key&#039;&#039; gombra.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fájl:GAMFAWS UserMenu.png|150px|keretnélküli]] || [[Fájl:GAMFAWS SecurityCredentials.png|keretnélküli]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A gomb megnyomása után egy felugró ablak fogad, amelyben megtalálható az &#039;&#039;Access Key&#039;&#039; és a &#039;&#039;Security Access Key&#039;&#039; értéke. Érdemes a fájlt letölteni, hogy később is elérhetők legyenek ezek az adatok, &#039;&#039;&#039;az AWS többet nem fogja engedélyezni ezek megjelenítését!&#039;&#039;&#039; Ha az adatokat később nem tudjuk megadni, akkor újat kell készíteni.&lt;br /&gt;
[[Fájl:GAMFAWS SecurityCredentials ShowData.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== AWS CLI konfigurálás autentikációs adatokkal ====&lt;br /&gt;
Az eszköz telepítése annak konfigurálásával ér véget: meg kell adnunk az autentikációs tokeneket.&amp;lt;br&amp;gt;&lt;br /&gt;
Ezt az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancs kiadásával tehetjük meg, ahol egyesével bekéri a szükséges adatokat. Ahol nem szeretnénk változtatni az előző értéken (szögletes zárójelek között láthatjuk ezt), ott hagyjuk üresen a sort és csupán entert nyomjunk.&lt;br /&gt;
[[Fájl:GAMFAWS AWSCLI config.png|középre]]&lt;br /&gt;
&lt;br /&gt;
 Az adatok megadása után menedzselhetjük az aws parancsokkal a környezetünket. Az aws parancsairól az &#039;&#039;&#039;aws help&#039;&#039;&#039; szolgáltat információt.&lt;br /&gt;
&lt;br /&gt;
=== S3 ===&lt;br /&gt;
Ez a szolgáltatás fájlok tárolására alkalmas.&lt;br /&gt;
&lt;br /&gt;
Több típusa is elérhető:&lt;br /&gt;
* Standard:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban sűrűn használt objektumok tárolására alkalmas&lt;br /&gt;
** A régiók közötti szinkronizáció megoldott&lt;br /&gt;
* Instant Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi (99.99%)&lt;br /&gt;
** Az alkalmazásban ritkábban használt, hosszú élettartamú, de azonnali hozzáférést igénylő objektumok tárolására alkalmas&lt;br /&gt;
* Flexible Glacier:&lt;br /&gt;
** Magas rendelkezésre állás jellemzi&lt;br /&gt;
** Az alkalmazásban ritkán használt (évente 1x-2x), a mérettől független költséggel rendelkező megoldás&lt;br /&gt;
* Deep Archive Glacier:&lt;br /&gt;
** 7-10 évig tárolt adatokhoz optimalizált költségvonzat&lt;br /&gt;
** Előnyös a backup adatok tárolásához&lt;br /&gt;
&lt;br /&gt;
 A szolgáltatás a keresőben &#039;&#039;S3&#039;&#039; füzérrel kereshető.&lt;br /&gt;
&lt;br /&gt;
==== Bucket létrehozása ====&lt;br /&gt;
Új tárolót a &#039;&#039;Create bucket&#039;&#039; gomb segítségével hozhatunk létre. A megjelenő űrlapon a nevet kell kitölteni és érdemes egy pillantást vetni a publikusság beállításaira is, hogy ez ténylegesen a célunknak megfelelő legyen.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; A névnek nem csupán a mi környezetünkön belül kell egyedinek lennie, hanem a teljes AWS-en belül.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
| [[Fájl:GAMFAWS S3 new name.png|bélyegkép]] || [[Fájl:GAMFAWS S3 new public.png|bélyegkép]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése &#039;&#039;awscli&#039;&#039; programmal ====&lt;br /&gt;
 Az &#039;&#039;&#039;aws s3 help&#039;&#039;&#039; parancs segítségével további információt szerezhetünk az egyes utasításokról.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bucket tartalmának listázása&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 ls [bucket_name]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 CLI LS.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása Bucket-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* LOCAL_PATH a lokális fájlrendszeren belüli elérési útvonala a forrásfájlnak (vagy könyvtárnak)&lt;br /&gt;
* REMOTE_PATH a cél helye az S3-ban&lt;br /&gt;
** Az s3:// jelzi, hogy a cél az S3-ban van (S3Uri)&lt;br /&gt;
** A mappák helyett PREFIX-ek vannak (/folder/to/my/file esetében /folder/to/my a PREFIX)&lt;br /&gt;
** A mappákat nem kell S3-ban létrehoznunk (az előző pontból következik), a fájlnév előtti prefix dönti el a hova tartozását&lt;br /&gt;
** A PREFIX-eket az &#039;&#039;&#039;ls&#039;&#039;&#039; úgy kezeli, mint egy mappát&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ba&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive LOCAL_PATH s3://REMOTE_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ahol:&lt;br /&gt;
* --recursive jelzi, hogy a LOCAL_PATH alatt minden bejegyzést töltsön fel&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI copy recursive2s3.png|középre]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Adatok másolása rekurzívan S3-ból helyi fájlrendszerbe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp --recursive s3://REMOTE_PATH LOCAL_PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Fájl:GAMFAWS S3 AWSCLI cp2local.png|középre]]&lt;br /&gt;
&lt;br /&gt;
==== Bucket kezelése grafikus felületen keresztül ====&lt;br /&gt;
Az S3 tartalmát elérhetjük az AWS grafikus felületén keresztül is, így tölthetünk fel, törölhetünk és módosíthatunk fájlokat anélkül, hogy saját számítógépünkre telepítenénk az &#039;&#039;awscli&#039;&#039; programot.&lt;br /&gt;
&lt;br /&gt;
# Nyissuk meg az S3 szolgáltatás vezérlőpultját&lt;br /&gt;
# Kattintsunk a szerkeszteni kívánt tárhely nevére&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3f list.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# A vezérlőgombok segítségével végezzük el a kívánt műveletet (feltöltés, törlés), vagy válasszunk ki egy PREFIX-et az „almappák” tartalmának megtekintéséhez.&amp;lt;br&amp;gt;[[Fájl:GAMFAWS S3 control.png|középre]]&lt;br /&gt;
&lt;br /&gt;
= Alkalmazások telepítése =&lt;br /&gt;
== UI ==&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
= Indítást gyorsító scriptek =&lt;br /&gt;
== UI indítás ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;           # your neptun code &lt;br /&gt;
API_LB_DOMAIN=&amp;quot;localhost&amp;quot; # api server IP&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip apache2 libapache2-mod-php8.1 php8.1 php8.1-curl -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui.php&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$API_LB_DOMAIN/g&amp;quot; ui_newproduct.php&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv ui.php /srv/$NEPTUN/index.php&lt;br /&gt;
mv ui_newproduct.php /srv/$NEPTUN/newproduct.php&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
	#ServerName www.example.com&lt;br /&gt;
&lt;br /&gt;
	ServerAdmin webmaster@localhost&lt;br /&gt;
	DocumentRoot /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Directory /srv/$NEPTUN/&amp;gt;&lt;br /&gt;
		Options Indexes FollowSymLinks&lt;br /&gt;
		AllowOverride None&lt;br /&gt;
		Require all granted&lt;br /&gt;
	&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
	CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API indítás ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# variables&lt;br /&gt;
NEPTUN=&amp;quot;neptun&amp;quot;          # your neptun&lt;br /&gt;
MYSQL_DOMAIN=&amp;quot;localhost&amp;quot; # RDS mysql domain&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install wget unzip python3 python3-pip python3-flask python3-mysql.connector -y&lt;br /&gt;
&lt;br /&gt;
# get code&lt;br /&gt;
mkdir /tmp/code&lt;br /&gt;
cd /tmp/code&lt;br /&gt;
wget https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
unzip Weboldal.zip&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# change &amp;lt;ip&amp;gt; tag in code&lt;br /&gt;
sed -i &amp;quot;s/&amp;lt;ip&amp;gt;/$MYSQL_DOMAIN/g&amp;quot; api.py&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# create directory for server&lt;br /&gt;
mkdir -p /srv/$NEPTUN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mv api.py /srv/$NEPTUN/&lt;br /&gt;
&lt;br /&gt;
# remove tmp directory&lt;br /&gt;
cd /&lt;br /&gt;
rm /tmp/code&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;@reboot root sleep 10s &amp;amp;&amp;amp; python3 /srv/$NEPTUN/api.py &amp;amp;&amp;quot; &amp;gt;&amp;gt; /etc/crontab&lt;br /&gt;
cd /srv/$NEPTUN &amp;amp;&amp;amp; python3 api.py &amp;amp;&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=815</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=815"/>
		<updated>2024-09-16T07:14:35Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tantárgy követelményei - nem hivatalos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írják meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MediaWiki:Sidebar&amp;diff=814</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MediaWiki:Sidebar&amp;diff=814"/>
		<updated>2024-09-16T07:13:33Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
* SEARCH&lt;br /&gt;
&lt;br /&gt;
* GAMF&lt;br /&gt;
** EDU::GAMF::Felhőalapú-szolgáltatások|Felhőalapú-szolgáltatások&lt;br /&gt;
** EDU::GAMF::Operációs rendszerek|Operációs rendszerek&lt;br /&gt;
** EDU::GAMF::MikroTik-szabvál|MikroTik (SZ)&lt;br /&gt;
&lt;br /&gt;
* MikroTik&lt;br /&gt;
** MikroTik::Scripting|Script&lt;br /&gt;
&lt;br /&gt;
* Cégek&lt;br /&gt;
** OmegaByte&lt;br /&gt;
*** COMP::OmegaByte|OmegaByte&lt;br /&gt;
&lt;br /&gt;
* Egyéb&lt;br /&gt;
** Hálózatok: fraktál|Hálózatok: fraktál&lt;br /&gt;
** ISP csatlakozási típusok|ISP csatlakozási típusok&lt;br /&gt;
** Hálózat rendelkezésreállás számítás|Hálózat rendelkezésreállás számítás&lt;br /&gt;
** Tipikus vállalati hálózati struktúra|Tipikus vállalati hálózati struktúra&lt;br /&gt;
** BGP protokoll|BGP protokoll&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=813</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=813"/>
		<updated>2024-09-04T11:24:52Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Forrás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írnak meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;5.6.40&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=812</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=812"/>
		<updated>2024-09-04T11:17:27Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Forrás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írnak meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;6.0.0&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 6-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=811</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=811"/>
		<updated>2024-09-04T11:17:04Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Docker beadandó leírása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írnak meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&#039;&#039;&#039;PHP5&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;6.0.0&#039;, &#039;&amp;gt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl magas! Használj mamximum 5-ös verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP7&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;php&#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (version_compare(phpversion(), &#039;7.0.0&#039;, &#039;&amp;lt;&#039;)) {&lt;br /&gt;
   printf(&amp;quot;Az általad használt PHP verzió túl alacsony! Használj minimum 7-es verziót!&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   printf(&amp;quot;OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=810</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=810"/>
		<updated>2024-09-04T11:12:35Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Docker beadandó leírása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írnak meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000-1.000.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=809</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=809"/>
		<updated>2024-09-04T11:11:28Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Docker beadandó leírása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írnak meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
A feladat célja, hogy a hallgatók találkozzanak azokkal a pozitívumokkal, amelyeket a Docker környezet nyújt számunkra. Ezt olyan két - igen egyszerű - alkalmazáson keresztül szeretném szemléltetni, amelyek nem azonos PHP verzióval működnek, de azokat egy szerveren szeretnénk telepíteni.&lt;br /&gt;
&lt;br /&gt;
 Bár a PHP nyelv a nagy hangok szerint kihaló félben van, a régi alkalmazások üzemeltetése ma is elvárható feladat, ráadásul a hangokkal ellentétben ma is készülnek új alkalmazások a környezetben.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!!&#039;&#039;&#039; A példában egy egyszerű kód szerepel, de a feladat hétköznapi problémát dolgoz fel!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok docker nélküli megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziók integrálása a kiszolgálóba&lt;br /&gt;
# Kód telepítése a kiszolgálónak megfelelő helyre&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kell mutatnia&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feladatpontok dockerrel történő megoldáshoz&#039;&#039;&#039;&lt;br /&gt;
# Apache2 / Nginx kiszolgáló telepítése&lt;br /&gt;
# Különböző PHP verziójú Docker image keresése / telepítése&lt;br /&gt;
# Kód injektálása a megfelelő könyvtárba a konténeren belül&lt;br /&gt;
# Reverse Proxy konfigurálása kiszolgálón&lt;br /&gt;
# Mindkét alkalmazásnak „OK” üzenetet kel mutatnia&lt;br /&gt;
&lt;br /&gt;
 A forráskódban egyszerűen elérhető, hogy mindkét kód „OK” üzenetet mutasson, de annak módosításával történő megoldás azonos a bonyoultabb (több 1000, akár több 10.000) soros kódok migrálásával az új PHP verziónak megfelelően, így amikor ezt a lépést választjuk, akkor gondoljuk át, hogy ez mennyire lehet egyszerű feladat!&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=808</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok&amp;diff=808"/>
		<updated>2024-09-04T10:53:19Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Kiselőadás témák */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:GAMF]]&lt;br /&gt;
[[category:GAMF tantárgyak|Tantárgyak]]&lt;br /&gt;
== A tantárgy leírása - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy során alkalmazások felhőben történő üzemeltetéséről tanulhatnak a hallgatók. A piacon elérhető összes szolgáltatót nincs lehetőségünk tanulmányozni, de az Amazon Web Services (AWS) világában mélyebben elmerülünk és egy alkalmazást telepítünk bele.&lt;br /&gt;
A tárgy során a hallgatónak el kell sajátítania azt a készséget, hogy egy jól dokumentált alkalmazást (a csomag szükségletek közel teljes egészében meg vannak adva a fejlesztők által) elhelyezzenek amazonos környezetben, ismernie kell az elérhető eszközöket és a biztonsági funkciókat.&lt;br /&gt;
&lt;br /&gt;
A félév második felében a Docker kapja a főszerepet, mivel manapság a legtöbb alkalmazás ebben készül. Ennek oka, hogy a fejlesztői környezet és a végleges környezet egyezősége garantálható. A hallgatók a tárgy teljesítése után képesek lesznek egy jól dokumentált alkalmazás telepítésére Docker környezetben, ami magában foglalja a képfájlok létrehozását és a futási környezetének kialakítását is.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy előfeltételei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy épít a következő tantárgyakon tanultakra:&lt;br /&gt;
* &#039;&#039;&#039;Hálózati alapismeretek&#039;&#039;&#039;&lt;br /&gt;
** IP címek típusai (publikus, privát)&lt;br /&gt;
** Alhálózatok kialakítása&lt;br /&gt;
** Kis mértékben packet flow ismeretek&lt;br /&gt;
* &#039;&#039;&#039;Operációs rendszerek&#039;&#039;&#039;&lt;br /&gt;
** Linux CLI ismeretek&lt;br /&gt;
** BASH parancsok&lt;br /&gt;
** &#039;&#039;man&#039;&#039; készségszintű használata&lt;br /&gt;
** Konfigurációs állományok szerkesztésére alkalmas eszközök ismerete (vi, nano, mcedit stb.)&lt;br /&gt;
** LOG fájlok olvasása, tartalmuk szűrése&lt;br /&gt;
* &#039;&#039;&#039;Webes alkalmazásfejlesztés&#039;&#039;&#039;&lt;br /&gt;
** Webes applikációk forráskódjának értelmezése&lt;br /&gt;
** Infrastruktúra függő értékek felismerése és aktualizálása&lt;br /&gt;
* &#039;&#039;&#039;Haladó programozás&#039;&#039;&#039;&lt;br /&gt;
** python szintaktika&lt;br /&gt;
** Forráskód értelmezése&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei - &#039;&#039;&#039;nem hivatalos&#039;&#039;&#039; ==&lt;br /&gt;
A tantárgy &#039;&#039;&#039;1db 70 pontos&#039;&#039;&#039; ZH-t és egy &#039;&#039;&#039;30 pontos kiselőadást&#039;&#039;&#039; foglal magában. A ZH-t a 11. vagy a 12. héten írnak meg a hallgatók annak függvényében, hogy melyik héten van kevesebb ZH-juk az előzetes egyeztetések alapján.&lt;br /&gt;
A dolgozat során a hallgatók egyedi IP tartományt kapnak, amelyben egy VPC-t kell működtetniük AWS környezetben. Megkapják az alkalmazás kódját, az alkalmazás leírását - milyen komponensekből kell állnia - és az alhálózatok sorrendjét, amennyiben az értelmezhető a kiadott feladatban. A feladat megoldására a teljes óra rendelkezésre áll, segítségként a lentebb megjelölt források használhatók, minden más tiltott. A hallgatók a dolgozat során word-ben dokumentálják a lépéseket, a végén csak ezt kell beadni.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A kiselőadásból és a ZH-ból 50-50% el kell érni a félév sikeres teljesítéséhez.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A tantárgy értékelése szigorú, a mérnöki gondolkozást megköveteli (ha az alkalmazás nem működik, akkor a hallgató nem teljesítette az elvárásokat), ezért a működő alkalmazás is pontot ér (20-25p), amit képpel tud bizonyítani. Kivételt képez ez alól, amikor az AWS valamilyen hibája miatt (általában LoadBalancernél tud ez a hiba jelentkezni) nem működik. Ekkor a megelőző lépések alapján járhat a pont.&lt;br /&gt;
&lt;br /&gt;
== A tárgy teljesítéséhez szükséges idő ==&lt;br /&gt;
Az állami elvárás szerint minden kredit megszerzése egy átlagos hallgató számára 30 óra ráfordítást vesz igénybe - beleértve a tanórákat, ZH és vizsgaalkalmakat, valamint az otthoni önálló tanulást is. Ez a tárgy 5 kreditet ér, tehát a félév során összesen 150 órát kell a hallgatóknak ezzel foglalkozniuk, ami sokszor a pótZH-ban (és manapság a pót-pót ZH-ban) csapódik le.&lt;br /&gt;
Mivel a félév során 13 hét áll rendelkezésünkre és mind az előadás, mind a gyakorlat 1,5 óra időtartamú, így összesen 39 órát ölel fel a tanórai képzés (ZH-val együtt). Rossz hír, hogy ez esetben egy gyakorlati jegyes tárgyról van szó, így a maradék időt legkésőbb a 13. hét végéig kell eltölteni otthoni tanulással, nem lehet a vizsgaidőszakra csúsztatni azt. Ez alapján heti 8.5, azaz valamivel több, mint napi 1,5 órát (heti 5 nappal számolva) a tárggyal kapcsolatos ismeretanyagok gyűjtésével és megértésével kellene a hallgatónak foglalkoznia. Mivel ezen számítás alapján a hallgatóknak napi 13,5 órát kellene 30 kredit felvétele esetén tanulással tölteni, így természetesen ez egy irreális elvárásnak bizonyul. Azonban kreditarányosan számolva, ezen tárgy esetében &#039;&#039;&#039;heti 2 óra&#039;&#039;&#039; ráfordítással éri el a hallgató a napi 8 órás munkaidőt (tanórák közötti szüneteket pihenőidőként kezelve) 30 kredit esetén, ami a normális szint. Ez tehát &#039;&#039;&#039;elvárhatónak és számon kérhetőnek bizonyul&#039;&#039;&#039; nappali tagozaton annak érdekében, hogy a hallgatók a lehető legnagyobb felkészültségben üljenek az órákon.&lt;br /&gt;
&lt;br /&gt;
== A tárgy során használt dokumentumok ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Elérési útvonal || Fájlnév !! cél alkalmazás || Cél fájlnév&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 | [[file:weboldal.zip|weboldal.zip]]&lt;br /&gt;
| ui.php || Felhasználói felület (UI) || index.php&lt;br /&gt;
|-&lt;br /&gt;
| ui_newproduct.php || Felhasználói felület (UI) || newproduct.php&lt;br /&gt;
|-&lt;br /&gt;
| api.py || API || api.py&lt;br /&gt;
|-&lt;br /&gt;
| networks.sql || MySQL import || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Zhminta.pdf|Minta feladatsor]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Gamf-aws-docker-buil.zip|Docker fájlok]] || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ajánlott irodalom lista ==&lt;br /&gt;
* Tanenbaum - Operációs rendszerek&lt;br /&gt;
* Tanenbaum - Számítógépes hálózatok&lt;br /&gt;
* Emett Dulaney - Linux All in One&lt;br /&gt;
* Kónya László - Számítógépes hálózatok&lt;br /&gt;
* Petrényi József&lt;br /&gt;
** TCP/IP 1 óra alatt&lt;br /&gt;
** TCP/IP alapok I. kötet&lt;br /&gt;
** TCP/IP alapok II. kötet&lt;br /&gt;
* Dr. Guta Gábor - Szoftverfejlesztés okosan Pythonnal&lt;br /&gt;
* Brad Dayley - Python zsebkönyv&lt;br /&gt;
* Kozmayer Viktor - PHP és MySQL az alapoktól&lt;br /&gt;
* Richard Blum - PHP, MySQL &amp;amp; Javascript 7 könyv az 1-ben&lt;br /&gt;
* Bódy Bence - Az SQL példákon keresztül (&amp;lt;small&amp;gt;MSSQL&amp;lt;/small&amp;gt;)&lt;br /&gt;
* Dan C. Marinescu - Cloud Computing (Theory and Practice)&lt;br /&gt;
&lt;br /&gt;
== Ajánlott online források, hivatkozások ==&lt;br /&gt;
* PHP dokumentáció: [https://php.net php.net]&lt;br /&gt;
* MySQL dokumentáció: [https://dev.mysql.com dev.mysql.com]&lt;br /&gt;
* Python dokumentáció: [https://python.org python.org]&lt;br /&gt;
* AWS dokumentáció: [https://docs.aws.amazon.com docs.aws.amazon.com]&lt;br /&gt;
* Ubuntu Segédlet: [https://help.ubuntu.com help.ubuntu.com]&lt;br /&gt;
* Ubuntu Tutorial: [https://ubuntu.com/tutorials ubuntu.com/tutorials]&lt;br /&gt;
&lt;br /&gt;
== Az előadás menete ==&lt;br /&gt;
# összetett:&lt;br /&gt;
#* Regisztráció AWS felületen&lt;br /&gt;
#* követelmények ismertetése&lt;br /&gt;
#* bérelt szervertől (VPS) a felhő megoldásokig&lt;br /&gt;
# Felhő ökoszisztéma&lt;br /&gt;
# Adatközpontok belső hálózata&lt;br /&gt;
# Erőforrás virtualizálás&lt;br /&gt;
# Adattárolás a felhőben&lt;br /&gt;
# Felhőbiztonság&lt;br /&gt;
# Docker&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
# Kiselőadások&lt;br /&gt;
&lt;br /&gt;
Az előadás menete a &#039;&#039;Dan C. Marinescu - Cloud Computing (Theory and Practice)&#039;&#039; című könyv alapján került kidolgozásra, mely a könyvtárban megtekinthető / kölcsönözhető. Az általunk érintett témakörök nagyjából 150 oldalnyi terjedelemben jelennek meg a könyvben. Az oldalszámok az előadásjegyzetek oldalon találhatók.&lt;br /&gt;
&lt;br /&gt;
== A gyakorlat menete ==&lt;br /&gt;
# Regisztráció az AWS rendszerében [https://portal.aws.amazon.com/billing/signup#/start/email]&lt;br /&gt;
# EC2 létrehozása, szolgáltatások áttekintése, Linux alapismeretek ismétlése&lt;br /&gt;
# EC2 létrehozása, alkalmazások telepítése és konfigurálása, apache2 kiszolgáló, PHP környezet&lt;br /&gt;
# UI felület élesztése: AMI létrehozás, Auto Scaling Group, Load Balancer&lt;br /&gt;
# Teljes alkalmazás élesztése: MySQL adatbázis (RDS), Python környezet telepítés&lt;br /&gt;
# Teljes alkalmazás élesztése: VPC-be szervezés, eszközök kommunikációjának szabályozása&lt;br /&gt;
# Docker telepítés, első konténerek elindítása, Dockerfile felépítése, docker.io regisztráció, image feltöltés&lt;br /&gt;
# Dockerfile felépítése, alkalmazások létrehozása, indítása&lt;br /&gt;
# Docker Compose felépítés, networking, debuggolás&lt;br /&gt;
# Teljes alkalmazás élesztése Docker Compose segítségével&lt;br /&gt;
# Készülés ZH-ra, kérdések megbeszélése&lt;br /&gt;
# ZH&lt;br /&gt;
# PótZH&lt;br /&gt;
&lt;br /&gt;
== Kiselőadás témák ==&lt;br /&gt;
&lt;br /&gt;
== Docker beadandó leírása ==&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&lt;br /&gt;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]]&lt;br /&gt;
* Gyakorlat&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS|AWS]]&lt;br /&gt;
** [[EDU::GAMF::Felhőalapú-szolgáltatások::Docker|Docker]]&lt;br /&gt;
* [[EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések|Rövidítések]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=807</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=807"/>
		<updated>2024-05-18T18:40:50Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Backup küldés emailben és SFTP szerverre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:MikroTik]]&lt;br /&gt;
= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
[[category:Backup]]&lt;br /&gt;
[[category:Biztonsági mentés]]&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot; \&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
/file remove [find where type=&amp;quot;script&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
/export show-sensitive file=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;).($backup-&amp;gt;&amp;quot;fileName&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
:delay 10000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;.&amp;quot;.rsc&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;script&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk. A plain text alapú RSC fájlt csak az SFTP szerverre töltjük fel. Meg kell jegyezni, hogy ha az Identity paraméter szóközöket tartalmaz, akkor az RSC fájl feltöltésével problémák adódhatnak - ez esetben érdemes a $backup-&amp;gt;fileName paramétert úgy előállítani, hogy ne legyen benne szóköz.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=806</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=806"/>
		<updated>2024-05-18T17:07:06Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:MikroTik]]&lt;br /&gt;
= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
[[category:Backup]]&lt;br /&gt;
[[category:Biztonsági mentés]]&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot; \&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=805</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=805"/>
		<updated>2024-05-18T17:03:30Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Komplex scriptek */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:MikroTik]]&lt;br /&gt;
= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
[[category:Backup]]&lt;br /&gt;
[[category:Biztonsági mentés]]&lt;br /&gt;
[[tag:backup]]&lt;br /&gt;
[[MikroTik]]&lt;br /&gt;
[[scripting]]&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot; \&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=804</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=804"/>
		<updated>2024-05-18T17:03:00Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:MikroTik]]&lt;br /&gt;
= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
[[category:Backup]]&lt;br /&gt;
[[category:Biztonsági mentés]]&lt;br /&gt;
#backup&lt;br /&gt;
#MikroTik&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot; \&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=803</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=803"/>
		<updated>2024-05-18T16:59:21Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Backup küldés emailben és SFTP szerverre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot; \&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=802</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=802"/>
		<updated>2024-05-18T16:57:10Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Backup küldés emailben és SFTP szerverre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot; \&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=801</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=801"/>
		<updated>2024-05-18T16:56:37Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Backup küldés emailben és SFTP szerverre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (\&lt;br /&gt;
            &amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; \&lt;br /&gt;
            . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot;\&lt;br /&gt;
     )&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes \&lt;br /&gt;
                 address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) \&lt;br /&gt;
                 user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
                 src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=800</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=800"/>
		<updated>2024-05-18T16:55:11Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Backup küldés emailben és SFTP szerverre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
     {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (&amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot;)&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=799</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=799"/>
		<updated>2024-05-18T16:54:06Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Komplex scriptek */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;br /&gt;
== Backup küldés emailben és SFTP szerverre ==&lt;br /&gt;
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:local sendEmail {\&lt;br /&gt;
        &amp;quot;address&amp;quot;=&amp;quot;email@provider.hu&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local smtp {\&lt;br /&gt;
       &amp;quot;server&amp;quot;=&amp;quot;smtp.provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;port&amp;quot;=465;\&lt;br /&gt;
       &amp;quot;tls&amp;quot;=&amp;quot;yes&amp;quot;;\&lt;br /&gt;
       &amp;quot;user&amp;quot;=&amp;quot;user@provider.hu&amp;quot;;\&lt;br /&gt;
       &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local toEmails {\&lt;br /&gt;
             &amp;quot;email1@provider.hu&amp;quot;;\&lt;br /&gt;
             &amp;quot;email2@provider.com&amp;quot;\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local backup {\&lt;br /&gt;
        &amp;quot;prefix&amp;quot;=&amp;quot;&amp;quot;;\&lt;br /&gt;
        &amp;quot;key&amp;quot;=&amp;quot;VERYSTRONGKEY&amp;quot;;\&lt;br /&gt;
        &amp;quot;fileName&amp;quot;=([/system identity get name ] . &amp;quot;_&amp;quot; . \&lt;br /&gt;
                 [:pick [/system clock get date] 0 4] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 5 7] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get date] 8 10] .&amp;quot;-&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 0 2] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 3 5] .&amp;quot;_&amp;quot;. \&lt;br /&gt;
                 [:pick [/system clock get time] 6 8] \&lt;br /&gt;
                 .&amp;quot;.backup&amp;quot;\&lt;br /&gt;
       )\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:local sftpServers {\&lt;br /&gt;
      {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv1.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;username&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     };\&lt;br /&gt;
    {\&lt;br /&gt;
            &amp;quot;address&amp;quot;=&amp;quot;srv2.hu&amp;quot;;\&lt;br /&gt;
            &amp;quot;port&amp;quot;=&amp;quot;22&amp;quot;;\&lt;br /&gt;
            &amp;quot;dst-path&amp;quot;=&amp;quot;/destination/path/&amp;quot;;\&lt;br /&gt;
            &amp;quot;user&amp;quot;=&amp;quot;user&amp;quot;;\&lt;br /&gt;
            &amp;quot;password&amp;quot;=&amp;quot;password&amp;quot;\&lt;br /&gt;
     }\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# sendMail function&lt;br /&gt;
:local sendMail do={&lt;br /&gt;
  :local toEmails &amp;quot;&amp;quot;&lt;br /&gt;
  :foreach i in $emails do={&lt;br /&gt;
    :if ( $toEmails != &amp;quot;&amp;quot; ) do={&lt;br /&gt;
       :set toEmails ($toEmails . &amp;quot;,&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    :set toEmails ($toEmails . $i)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /tool/e-mail/send server=($smtp-&amp;gt;&amp;quot;server&amp;quot;) port=($smtp-&amp;gt;&amp;quot;port&amp;quot;) tls=($smtp-&amp;gt;&amp;quot;tls&amp;quot;) \&lt;br /&gt;
        user=($smtp-&amp;gt;&amp;quot;user&amp;quot;) password=($smtp-&amp;gt;&amp;quot;password&amp;quot;) \&lt;br /&gt;
        subject=&amp;quot;$subject&amp;quot; to=&amp;quot;$toEmails&amp;quot; from=($sender-&amp;gt;&amp;quot;address&amp;quot;) \&lt;br /&gt;
        body=&amp;quot;$text&amp;quot; file=&amp;quot;$file&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
# end of sendMail function&lt;br /&gt;
&lt;br /&gt;
# uploadSftp function&lt;br /&gt;
:local uploadSftp do={&lt;br /&gt;
  :foreach i in $servers do={&lt;br /&gt;
     :put (&amp;quot;Upload &amp;quot;. $file . &amp;quot; to &amp;quot; . $i-&amp;gt;&amp;quot;address&amp;quot; .&amp;quot;:&amp;quot;. $i-&amp;gt;&amp;quot;port&amp;quot; . &amp;quot;, into &amp;quot; . $i-&amp;gt;&amp;quot;dst-path&amp;quot; . &amp;quot; folder with user: &amp;quot;. $i-&amp;gt;&amp;quot;user&amp;quot;)&lt;br /&gt;
     /tool/fetch mode=sftp upload=yes address=($i-&amp;gt;&amp;quot;address&amp;quot;) port=($i-&amp;gt;&amp;quot;port&amp;quot;) user=($i-&amp;gt;&amp;quot;user&amp;quot;) password=($i-&amp;gt;&amp;quot;password&amp;quot;) src-path=&amp;quot;$file&amp;quot; dst-path=($i-&amp;gt;&amp;quot;dst-path&amp;quot;.$file)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#end of uploadSftp function&lt;br /&gt;
&lt;br /&gt;
/file remove [find where type=&amp;quot;backup&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
/system backup save name=(($backup-&amp;gt;&amp;quot;prefix&amp;quot;) . ($backup-&amp;gt;&amp;quot;fileName&amp;quot;)) password=($backup-&amp;gt;&amp;quot;key&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:delay 5000ms&lt;br /&gt;
&lt;br /&gt;
$sendMail  emails=$toEmails sender=$email smtp=$smtp file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;) \&lt;br /&gt;
      subject=([/system identity get name] .&amp;quot; &amp;quot;. [/system clock get date] . &amp;quot; &amp;quot; . [/system clock get time] . &amp;quot; backup file&amp;quot;) \&lt;br /&gt;
      text=&amp;quot;Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$uploadSftp servers=$sftpServers file=($backup-&amp;gt;&amp;quot;prefix&amp;quot; . $backup-&amp;gt;&amp;quot;fileName&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=798</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=798"/>
		<updated>2024-05-18T15:34:56Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A terminál használata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=797</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=797"/>
		<updated>2024-05-18T15:34:41Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A terminál használata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretezett|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=796</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=796"/>
		<updated>2024-05-18T15:34:20Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A terminál használata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
[[Fájl:MikroTik terminál.png|keretnélküli|középre|alt=MikroTik terminál|MikroTik terminál]]&lt;br /&gt;
&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:MikroTik_termin%C3%A1l.png&amp;diff=795</id>
		<title>Fájl:MikroTik terminál.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:MikroTik_termin%C3%A1l.png&amp;diff=795"/>
		<updated>2024-05-18T15:33:48Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MikroTik terminál kezdőlapja&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=794</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=794"/>
		<updated>2024-05-18T15:23:53Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Scriptelési lehetőségek */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scripting /system/script]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Scheduler /system/scheduler]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=793</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=793"/>
		<updated>2024-05-18T15:22:44Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Terminál alapvető eszközei */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* /system/script&lt;br /&gt;
* /system/scheduler&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=792</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=792"/>
		<updated>2024-05-18T15:21:48Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Nyelvi alap elemek */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
== Változók ==&lt;br /&gt;
* Lokális változók&lt;br /&gt;
* Globális változók&lt;br /&gt;
* Tömbök&lt;br /&gt;
== Elágazás ==&lt;br /&gt;
== Ciklusok ==&lt;br /&gt;
* for&lt;br /&gt;
* foreach&lt;br /&gt;
* do-while&lt;br /&gt;
==Terminál alapvető eszközei==&lt;br /&gt;
&lt;br /&gt;
* :put&lt;br /&gt;
* :set&lt;br /&gt;
* :pick&lt;br /&gt;
* :delay&lt;br /&gt;
* :resolv&lt;br /&gt;
&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* /system/script&lt;br /&gt;
* /system/scheduler&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=791</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=791"/>
		<updated>2024-05-18T15:09:24Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Bevezetés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
A script nyelv dokumentációját a MikroTik hivatalos oldalán [https://help.mikrotik.com/docs/display/ROS/Scripting itt] találod.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* /system/script&lt;br /&gt;
* /system/scheduler&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=790</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=790"/>
		<updated>2024-05-18T15:08:05Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Bevezetés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
*** routing protokollok (ospf, bgp) alap beállítások&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* /system/script&lt;br /&gt;
* /system/scheduler&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=789</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=789"/>
		<updated>2024-05-18T15:07:03Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bevezetés =&lt;br /&gt;
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* /system/script&lt;br /&gt;
* /system/scheduler&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=788</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=788"/>
		<updated>2024-05-18T15:06:31Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Új oldal, tartalma: „A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk: * Alap konfigurációk előállítása ** L1-L2 konfiguráció *** bridge *** wireless mód (station, ap stb.) *** VPN szerver / kliens aktiválás és alap konfiguráció *** VLAN interfészek ** L3 konfiguráció *** IP címek *** statikus route szabályok * Ütemezett feladatok végrehajtása ** Backup kü…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:&lt;br /&gt;
* Alap konfigurációk előállítása&lt;br /&gt;
** L1-L2 konfiguráció&lt;br /&gt;
*** bridge&lt;br /&gt;
*** wireless mód (station, ap stb.)&lt;br /&gt;
*** VPN szerver / kliens aktiválás és alap konfiguráció&lt;br /&gt;
*** VLAN interfészek&lt;br /&gt;
** L3 konfiguráció&lt;br /&gt;
*** IP címek&lt;br /&gt;
*** statikus route szabályok&lt;br /&gt;
* Ütemezett feladatok végrehajtása&lt;br /&gt;
** Backup küldése emailben&lt;br /&gt;
** Watchdog / Netwatch&lt;br /&gt;
** Paraméterek monitorozása&lt;br /&gt;
&lt;br /&gt;
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.&lt;br /&gt;
&lt;br /&gt;
= A terminál használata =&lt;br /&gt;
= Nyelvi alap elemek =&lt;br /&gt;
= Scriptelési lehetőségek =&lt;br /&gt;
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:&lt;br /&gt;
* /system/script&lt;br /&gt;
* /system/scheduler&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Client#Properties /ip/dhcp-client]&lt;br /&gt;
** bound&lt;br /&gt;
** $&amp;quot;server-address&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-address&amp;quot;&lt;br /&gt;
** $interface&lt;br /&gt;
** $&amp;quot;gateway-address&amp;quot;&lt;br /&gt;
** $&amp;quot;vendor-specific&amp;quot;&lt;br /&gt;
** $&amp;quot;lease-options&amp;quot;&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:IP/DHCP_Server#General /ip/dhcp-server]&lt;br /&gt;
** $leaseBound&lt;br /&gt;
** $leaseServerName&lt;br /&gt;
** $leaseActMAC&lt;br /&gt;
** $leaseActIP&lt;br /&gt;
** $lease-hostname&lt;br /&gt;
** $lease-options&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Netwatch#Netwatch-Properties /tool/netwatch]&lt;br /&gt;
*# up-script&lt;br /&gt;
*# down-script&lt;br /&gt;
*# test-script&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/PPP+AAA /ppp/profile]&lt;br /&gt;
*# on-up&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
*# on-down&lt;br /&gt;
*#* $user&lt;br /&gt;
*#* $&amp;quot;local-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;remote-address&amp;quot;&lt;br /&gt;
*#* $&amp;quot;caller-id&amp;quot;&lt;br /&gt;
*#* $&amp;quot;called-id&amp;quot;&lt;br /&gt;
*#* $interface&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/MQTT#MQTT-Subscriptions /iot/mqtt/subscriptions]&lt;br /&gt;
** $msgData &lt;br /&gt;
** $msgTopic&lt;br /&gt;
= Komplex scriptek =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MediaWiki:Sidebar&amp;diff=787</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MediaWiki:Sidebar&amp;diff=787"/>
		<updated>2024-05-11T14:45:00Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
* SEARCH&lt;br /&gt;
&lt;br /&gt;
* GAMF&lt;br /&gt;
** EDU::GAMF::Felhőalapú-szolgáltatások|Felhőalapú-szolgáltatások&lt;br /&gt;
** EDU::GAMF::Operációs rendszerek|Operációs rendszerek&lt;br /&gt;
** EDU::GAMF::MikroTik-szabvál|MikroTik (szabadon választható)&lt;br /&gt;
&lt;br /&gt;
* MikroTik&lt;br /&gt;
** MikroTik::Scripting|Script&lt;br /&gt;
&lt;br /&gt;
* Cégek&lt;br /&gt;
** OmegaByte&lt;br /&gt;
*** COMP::OmegaByte|OmegaByte&lt;br /&gt;
&lt;br /&gt;
* Egyéb&lt;br /&gt;
** Hálózatok: fraktál|Hálózatok: fraktál&lt;br /&gt;
** ISP csatlakozási típusok|ISP csatlakozási típusok&lt;br /&gt;
** Hálózat rendelkezésreállás számítás|Hálózat rendelkezésreállás számítás&lt;br /&gt;
** Tipikus vállalati hálózati struktúra|Tipikus vállalati hálózati struktúra&lt;br /&gt;
** BGP protokoll|BGP protokoll&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik-szabv%C3%A1l&amp;diff=786</id>
		<title>EDU::GAMF::MikroTik-szabvál</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik-szabv%C3%A1l&amp;diff=786"/>
		<updated>2024-03-06T09:17:23Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Téma javaslatok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A tantárgy leírása ==&lt;br /&gt;
A hallgatók ezen az órán közelebb kerülhetnek a MikroTik routerek világához. A gyártó eszközeivel KKV környezetben szinte biztosan találkoznak majd.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei ==&lt;br /&gt;
Az órákon alap konfigurációkat tekintünk meg. A félév értékelése egy csapatmunka keretein belül megvalósított, egyéni preferenciák szerint választott projekt alapján történik, amelyet a félév végén egy konferencián elő kell adniuk.&lt;br /&gt;
&lt;br /&gt;
== Téma javaslatok ==&lt;br /&gt;
A téma kiválasztásánál vegyék figyelembe, hogy a GNS3 nem ad lehetőséget a Wireless funkciók programozására, így ezeket legyenek szívesek mellőzni. Két eszközt tudok biztosítani, ha valaki ebbe az irányba szeretne menni, de ez egy csapatnak elegendő.&lt;br /&gt;
&lt;br /&gt;
* Otthoni hálózat kialakítása MikroTik eszközökkel&lt;br /&gt;
* Vállalati Wifi kialakítása CAPsMAN funkcióval&lt;br /&gt;
* Vállalati környezet kialakítása VPN funkciókkal&lt;br /&gt;
* Clos network szimuláció&lt;br /&gt;
&lt;br /&gt;
== Gyakorlatok menete ==&lt;br /&gt;
# Hivatalos oldal bemutatása&lt;br /&gt;
#* Eszköz adatlap&lt;br /&gt;
#* Block diagram&lt;br /&gt;
#* Szoftverek&lt;br /&gt;
# Eszközök resetelése&lt;br /&gt;
#* Fizikai gombbal&lt;br /&gt;
#* Netinstall&lt;br /&gt;
#* Grafikus felületen&lt;br /&gt;
# Tipikus otthoni hálózat kialakítása&lt;br /&gt;
#* Bridge&lt;br /&gt;
#* DHCP-szerver&lt;br /&gt;
#* DHCP-client&lt;br /&gt;
#* DNS szerver&lt;br /&gt;
#* NAT&lt;br /&gt;
# Egy informatikus otthoni hálózata&lt;br /&gt;
#* Switch képességek figyelembevétele &lt;br /&gt;
#* VLAN&lt;br /&gt;
#** Otthoni hálózat&lt;br /&gt;
#** Vendég hálózat&lt;br /&gt;
#** IoT hálózat&lt;br /&gt;
# Tűzfal konfiguráció&lt;br /&gt;
#* Connection tracking&lt;br /&gt;
#* Fastpath/Fasttrack&lt;br /&gt;
#* Filter tábla&lt;br /&gt;
#* Nat tábla&lt;br /&gt;
#* Raw tábla&lt;br /&gt;
# Vállalati környezet&lt;br /&gt;
#* VPN konfiguráció&lt;br /&gt;
#** Wireguard konfiguráció&lt;br /&gt;
#** SSTP konfiguráció&lt;br /&gt;
#** L2TP+IPSec konfiguráció&lt;br /&gt;
# Routing alapok (itt kezdenek elbonyolódni a konfigurációk, meglátjuk hogy haladunk)&lt;br /&gt;
#* RIP&lt;br /&gt;
#* OSPF&lt;br /&gt;
#* BGP&lt;br /&gt;
# VRF&lt;br /&gt;
&lt;br /&gt;
== Hasznos linkek ==&lt;br /&gt;
* [https://mikrotik.com MikroTik hivatalos oldala]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:Switch_Chip_Features MikroTik Switch képességek]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Switch+Chip+Features MikroTik Switch képességek - új]&lt;br /&gt;
* [https://www.gns3.com GNS3 hivatalos oldala]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik-szabv%C3%A1l&amp;diff=785</id>
		<title>EDU::GAMF::MikroTik-szabvál</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik-szabv%C3%A1l&amp;diff=785"/>
		<updated>2024-03-06T09:15:36Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tantárgy követelményei */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A tantárgy leírása ==&lt;br /&gt;
A hallgatók ezen az órán közelebb kerülhetnek a MikroTik routerek világához. A gyártó eszközeivel KKV környezetben szinte biztosan találkoznak majd.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei ==&lt;br /&gt;
Az órákon alap konfigurációkat tekintünk meg. A félév értékelése egy csapatmunka keretein belül megvalósított, egyéni preferenciák szerint választott projekt alapján történik, amelyet a félév végén egy konferencián elő kell adniuk.&lt;br /&gt;
&lt;br /&gt;
== Téma javaslatok ==&lt;br /&gt;
* Otthoni hálózat kialakítása MikroTik eszközökkel&lt;br /&gt;
* Vállalati Wifi kialakítása CAPsMAN funkcióval&lt;br /&gt;
* Vállalati környezet kialakítása VPN funkciókkal&lt;br /&gt;
* Clos network szimuláció&lt;br /&gt;
&lt;br /&gt;
== Gyakorlatok menete ==&lt;br /&gt;
# Hivatalos oldal bemutatása&lt;br /&gt;
#* Eszköz adatlap&lt;br /&gt;
#* Block diagram&lt;br /&gt;
#* Szoftverek&lt;br /&gt;
# Eszközök resetelése&lt;br /&gt;
#* Fizikai gombbal&lt;br /&gt;
#* Netinstall&lt;br /&gt;
#* Grafikus felületen&lt;br /&gt;
# Tipikus otthoni hálózat kialakítása&lt;br /&gt;
#* Bridge&lt;br /&gt;
#* DHCP-szerver&lt;br /&gt;
#* DHCP-client&lt;br /&gt;
#* DNS szerver&lt;br /&gt;
#* NAT&lt;br /&gt;
# Egy informatikus otthoni hálózata&lt;br /&gt;
#* Switch képességek figyelembevétele &lt;br /&gt;
#* VLAN&lt;br /&gt;
#** Otthoni hálózat&lt;br /&gt;
#** Vendég hálózat&lt;br /&gt;
#** IoT hálózat&lt;br /&gt;
# Tűzfal konfiguráció&lt;br /&gt;
#* Connection tracking&lt;br /&gt;
#* Fastpath/Fasttrack&lt;br /&gt;
#* Filter tábla&lt;br /&gt;
#* Nat tábla&lt;br /&gt;
#* Raw tábla&lt;br /&gt;
# Vállalati környezet&lt;br /&gt;
#* VPN konfiguráció&lt;br /&gt;
#** Wireguard konfiguráció&lt;br /&gt;
#** SSTP konfiguráció&lt;br /&gt;
#** L2TP+IPSec konfiguráció&lt;br /&gt;
# Routing alapok (itt kezdenek elbonyolódni a konfigurációk, meglátjuk hogy haladunk)&lt;br /&gt;
#* RIP&lt;br /&gt;
#* OSPF&lt;br /&gt;
#* BGP&lt;br /&gt;
# VRF&lt;br /&gt;
&lt;br /&gt;
== Hasznos linkek ==&lt;br /&gt;
* [https://mikrotik.com MikroTik hivatalos oldala]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:Switch_Chip_Features MikroTik Switch képességek]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Switch+Chip+Features MikroTik Switch képességek - új]&lt;br /&gt;
* [https://www.gns3.com GNS3 hivatalos oldala]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik-szabv%C3%A1l&amp;diff=784</id>
		<title>EDU::GAMF::MikroTik-szabvál</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik-szabv%C3%A1l&amp;diff=784"/>
		<updated>2024-03-06T09:15:04Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tantárgy leírása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A tantárgy leírása ==&lt;br /&gt;
A hallgatók ezen az órán közelebb kerülhetnek a MikroTik routerek világához. A gyártó eszközeivel KKV környezetben szinte biztosan találkoznak majd.&lt;br /&gt;
&lt;br /&gt;
== A tantárgy követelményei ==&lt;br /&gt;
Az órákon alap konfigurációkat tekintünk meg. A félév értékelése egy csapatmunka keretein belül megvalósított, egyéni preferenciák szerint választott projekt megvalósítása alapján történik, amelyet a félév végén egy konferencián elő kell adniuk.&lt;br /&gt;
&lt;br /&gt;
== Téma javaslatok ==&lt;br /&gt;
* Otthoni hálózat kialakítása MikroTik eszközökkel&lt;br /&gt;
* Vállalati Wifi kialakítása CAPsMAN funkcióval&lt;br /&gt;
* Vállalati környezet kialakítása VPN funkciókkal&lt;br /&gt;
* Clos network szimuláció&lt;br /&gt;
&lt;br /&gt;
== Gyakorlatok menete ==&lt;br /&gt;
# Hivatalos oldal bemutatása&lt;br /&gt;
#* Eszköz adatlap&lt;br /&gt;
#* Block diagram&lt;br /&gt;
#* Szoftverek&lt;br /&gt;
# Eszközök resetelése&lt;br /&gt;
#* Fizikai gombbal&lt;br /&gt;
#* Netinstall&lt;br /&gt;
#* Grafikus felületen&lt;br /&gt;
# Tipikus otthoni hálózat kialakítása&lt;br /&gt;
#* Bridge&lt;br /&gt;
#* DHCP-szerver&lt;br /&gt;
#* DHCP-client&lt;br /&gt;
#* DNS szerver&lt;br /&gt;
#* NAT&lt;br /&gt;
# Egy informatikus otthoni hálózata&lt;br /&gt;
#* Switch képességek figyelembevétele &lt;br /&gt;
#* VLAN&lt;br /&gt;
#** Otthoni hálózat&lt;br /&gt;
#** Vendég hálózat&lt;br /&gt;
#** IoT hálózat&lt;br /&gt;
# Tűzfal konfiguráció&lt;br /&gt;
#* Connection tracking&lt;br /&gt;
#* Fastpath/Fasttrack&lt;br /&gt;
#* Filter tábla&lt;br /&gt;
#* Nat tábla&lt;br /&gt;
#* Raw tábla&lt;br /&gt;
# Vállalati környezet&lt;br /&gt;
#* VPN konfiguráció&lt;br /&gt;
#** Wireguard konfiguráció&lt;br /&gt;
#** SSTP konfiguráció&lt;br /&gt;
#** L2TP+IPSec konfiguráció&lt;br /&gt;
# Routing alapok (itt kezdenek elbonyolódni a konfigurációk, meglátjuk hogy haladunk)&lt;br /&gt;
#* RIP&lt;br /&gt;
#* OSPF&lt;br /&gt;
#* BGP&lt;br /&gt;
# VRF&lt;br /&gt;
&lt;br /&gt;
== Hasznos linkek ==&lt;br /&gt;
* [https://mikrotik.com MikroTik hivatalos oldala]&lt;br /&gt;
* [https://wiki.mikrotik.com/wiki/Manual:Switch_Chip_Features MikroTik Switch képességek]&lt;br /&gt;
* [https://help.mikrotik.com/docs/display/ROS/Switch+Chip+Features MikroTik Switch képességek - új]&lt;br /&gt;
* [https://www.gns3.com GNS3 hivatalos oldala]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
</feed>