<?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-09-21T03:04:33Z</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&amp;diff=863</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=863"/>
		<updated>2026-09-20T09:35:27Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: A 2. órai diasor belinkelve a felsorolás 2. pontjához&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 projektfeladatbó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 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: ([[Fájl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf|diasor]])&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 ([[Fájl:Felhoalapu-szolgaltatasok-2-ora-diak.pdf|diasor]])&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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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 maximum 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::IaC|IaC]]&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=F%C3%A1jl:Felhoalapu-szolgaltatasok-2-ora-diak.pdf&amp;diff=862</id>
		<title>Fájl:Felhoalapu-szolgaltatasok-2-ora-diak.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:Felhoalapu-szolgaltatasok-2-ora-diak.pdf&amp;diff=862"/>
		<updated>2026-09-20T09:35:04Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: A 2. órai előadás diasora: Felhő ökoszisztéma (szolgáltatási modellek, megosztott felelősség, AWS régiók/zónák és automatikus redundancia)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A 2. órai előadás diasora: Felhő ökoszisztéma (szolgáltatási modellek, megosztott felelősség, AWS régiók/zónák és automatikus redundancia)&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf&amp;diff=861</id>
		<title>Fájl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf&amp;diff=861"/>
		<updated>2026-09-14T10:08:09Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: ApelPro Fájl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf új verzióját töltötte fel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az 1. órai bevezető előadás diasora a [[EDU::GAMF::Felhőalapú-szolgáltatások]] tárgyhoz.&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=860</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=860"/>
		<updated>2026-09-14T10:05:25Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Diasor link áthelyezve a felsorolás 1. pontjához (diasor) formában, külön bekezdés eltávolítva&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 projektfeladatbó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 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: ([[Fájl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf|diasor]])&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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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 maximum 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::IaC|IaC]]&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=859</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=859"/>
		<updated>2026-09-14T10:03:27Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Az 1. órai bevezető előadás PDF diasora felöltve és belinkelve az Az előadás menete résznél&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 projektfeladatbó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 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;
&#039;&#039;&#039;Az 1. órai bevezető előadás diasora:&#039;&#039;&#039; [[Fájl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf|1. órai diasor (PDF)]]&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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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 maximum 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::IaC|IaC]]&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=F%C3%A1jl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf&amp;diff=858</id>
		<title>Fájl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:Felhoalapu-szolgaltatasok-1-ora-diak.pdf&amp;diff=858"/>
		<updated>2026-09-14T10:02:59Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Az 1. órai bevezető előadás diasora (tárgy felépítése, AWS regisztráció/bankkártya tanács, időbeosztás, követelmények)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az 1. órai bevezető előadás diasora a [[EDU::GAMF::Felhőalapú-szolgáltatások]] tárgyhoz.&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=857</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=857"/>
		<updated>2026-09-14T08:35:59Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: &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 projektfeladatbó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 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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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 maximum 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::IaC|IaC]]&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=856</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=856"/>
		<updated>2026-09-14T08:26:12Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Új IaC gyakorlat oldal belinkelve a Jegyzetek szekcióban&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 projektfeladatbó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 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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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 maximum 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::IaC|IaC (Terraform, Ansible, Jenkins)]]&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::IaC&amp;diff=855</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::IaC</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::IaC&amp;diff=855"/>
		<updated>2026-09-14T08:25:43Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Új IaC gyakorlat oldal létrehozása: Terraform, Ansible, Jenkins (a Docker/AWS oldalak struktúrájához illesztve)&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;
== Mi az az Infrastructure as Code (IaC)? ==&lt;br /&gt;
Eddig a gyakorlatok során mindent kézzel, a grafikus felületen keresztül hoztunk létre - EC2 példányt, VPC-t, RDS-t, Security Groupot stb. Ez tanulási célra kiváló, mert látjuk, hogy pontosan mi történik, de éles környezetben rengeteg problémát okoz:&lt;br /&gt;
* Nem reprodukálható megbízhatóan (két ember, két kattintgatás - könnyen eltérő eredmény)&lt;br /&gt;
* Nincs verziókezelve, nem látszik a történet, ki mit miért módosított&lt;br /&gt;
* Nincs automatikusan dokumentálva - a konfiguráció &amp;quot;a fejekben&amp;quot; és a felületen él&lt;br /&gt;
* Nehéz gyorsan, azonos módon többször újra felépíteni (pl. teszt- és éles környezet)&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;Infrastructure as Code&#039;&#039;&#039; lényege, hogy az infrastruktúrát (és sokszor a rajta futó szolgáltatások konfigurációját is) szöveges, verziókezelhető fájlokban írjuk le, amit aztán eszközök automatikusan alkalmaznak. Ezen a gyakorlaton három, egymást kiegészítő - és a piacon igen elterjedt - eszközzel ismerkedünk meg:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Eszköz !! Feladata !! Egy mondatban&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Terraform&#039;&#039;&#039; || Infrastruktúra &#039;&#039;&#039;létrehozása&#039;&#039;&#039; (provisioning) || &amp;quot;Milyen gépek/hálózatok/szolgáltatások legyenek?&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ansible&#039;&#039;&#039; || Már létező szerverek &#039;&#039;&#039;konfigurálása&#039;&#039;&#039; || &amp;quot;Mi fusson/legyen telepítve a gépeken?&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Jenkins&#039;&#039;&#039; || A folyamat &#039;&#039;&#039;automatizálása&#039;&#039;&#039; (CI/CD) || &amp;quot;Mikor és hogyan fusson le mindez magától?&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A három eszköz tipikusan egy láncban dolgozik együtt: &#039;&#039;&#039;Jenkins&#039;&#039;&#039; elindítja a folyamatot (pl. egy git push hatására), ami meghívja a &#039;&#039;&#039;Terraform&#039;&#039;&#039;-ot, hogy felépítse/frissítse az infrastruktúrát, majd az &#039;&#039;&#039;Ansible&#039;&#039;&#039; konfigurálja fel és telepíti az alkalmazást a friss szerverekre.&lt;br /&gt;
&lt;br /&gt;
== Terraform ==&lt;br /&gt;
=== Mi az a Terraform? ===&lt;br /&gt;
A HashiCorp által fejlesztett, nyílt forráskódú IaC eszköz. Deklaratív nyelven (HCL - HashiCorp Configuration Language) írjuk le a &#039;&#039;&#039;kívánt végállapotot&#039;&#039;&#039; (&amp;quot;legyen egy ilyen EC2 példányom, ekkora Security Grouppal&amp;quot;), és a Terraform kitalálja, milyen API-hívásokkal éri ezt el - beleértve azt is, ha valamit módosítani vagy törölni kell egy korábbiállapothoz képest.&lt;br /&gt;
&lt;br /&gt;
=== Telepítés ===&lt;br /&gt;
A Terraform nincs benne az alapértelmezett Ubuntu/Debian csomagtárolókban, a HashiCorp hivatalos tárolóját kell hozzáadnunk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install -y gnupg software-properties-common curl&lt;br /&gt;
curl -fsSL https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg&lt;br /&gt;
echo &amp;quot;deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main&amp;quot; \&lt;br /&gt;
  | tee /etc/apt/sources.list.d/hashicorp.list&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install terraform -y&lt;br /&gt;
terraform -version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AWS hitelesítés ===&lt;br /&gt;
A Terraformnak ugyanazokra a hozzáférési kulcsokra van szüksége, mint korábban az AWSCLI-nek (lásd az [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS#Access_Key_management|AWS oldalon]]). Két lehetőségünk van:&lt;br /&gt;
* Ha már lefuttattuk az &#039;&#039;&#039;aws configure&#039;&#039;&#039; parancsot, a Terraform automatikusan megtalálja azt&lt;br /&gt;
* Vagy környezeti változóként is megadhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export AWS_ACCESS_KEY_ID=&amp;quot;ide_jön_az_access_key&amp;quot;&lt;br /&gt;
export AWS_SECRET_ACCESS_KEY=&amp;quot;ide_jön_a_secret_key&amp;quot;&lt;br /&gt;
export AWS_DEFAULT_REGION=&amp;quot;eu-west-1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Soha ne írjuk a hozzáférési kulcsokat közvetlenül a .tf fájlokba, és ne kerüljenek verziókezelőbe (git)! Használjunk környezeti változót, vagy az AWS CLI által létrehozott hitelesítési fájlt.&lt;br /&gt;
&lt;br /&gt;
=== Alapfogalmak ===&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039;: melyik szolgáltatóval (AWS, Azure, GCP stb.) és hogyan kommunikáljon a Terraform&lt;br /&gt;
* &#039;&#039;&#039;Resource&#039;&#039;&#039;: egy konkrét, létrehozandó/kezelendő erőforrás (pl. egy EC2 példány)&lt;br /&gt;
* &#039;&#039;&#039;Variable&#039;&#039;&#039;: paraméterezhető bemeneti érték (pl. instance típusa, régió)&lt;br /&gt;
* &#039;&#039;&#039;Output&#039;&#039;&#039;: a végrehajtás után visszaadott érték (pl. a létrehozott szerver publikus IP-je)&lt;br /&gt;
* &#039;&#039;&#039;State&#039;&#039;&#039;: a Terraform saját nyilvántartása arról, hogy legutóbb milyen állapotot hozott létre - ez alapján tudja kiszámolni, hogy legközelebb mit kell módosítania&lt;br /&gt;
&lt;br /&gt;
=== Gyakorlati példa: EC2 + Security Group ===&lt;br /&gt;
Hozzunk létre egy &#039;&#039;main.tf&#039;&#039; fájlt, ami a korábban már megismert módon (lásd [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS#EC2_szolgáltatásai|EC2 gyakorlat]]) indít egy t2.micro szervert, rajta egy Security Grouppal, ami engedi a SSH és HTTP forgalmat:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;hcl&amp;quot;&amp;gt;&lt;br /&gt;
terraform {&lt;br /&gt;
  required_providers {&lt;br /&gt;
    aws = {&lt;br /&gt;
      source  = &amp;quot;hashicorp/aws&amp;quot;&lt;br /&gt;
      version = &amp;quot;~&amp;gt; 5.0&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
provider &amp;quot;aws&amp;quot; {&lt;br /&gt;
  region = &amp;quot;eu-west-1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
variable &amp;quot;neptun&amp;quot; {&lt;br /&gt;
  description = &amp;quot;Neptun kód, az erőforrások elnevezéséhez&amp;quot;&lt;br /&gt;
  type        = string&lt;br /&gt;
  default     = &amp;quot;neptun&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resource &amp;quot;aws_security_group&amp;quot; &amp;quot;web&amp;quot; {&lt;br /&gt;
  name        = &amp;quot;${var.neptun}-sg&amp;quot;&lt;br /&gt;
  description = &amp;quot;SSH + HTTP engedelyezese&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  ingress {&lt;br /&gt;
    description = &amp;quot;SSH&amp;quot;&lt;br /&gt;
    from_port   = 22&lt;br /&gt;
    to_port     = 22&lt;br /&gt;
    protocol    = &amp;quot;tcp&amp;quot;&lt;br /&gt;
    cidr_blocks = [&amp;quot;0.0.0.0/0&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  ingress {&lt;br /&gt;
    description = &amp;quot;HTTP&amp;quot;&lt;br /&gt;
    from_port   = 80&lt;br /&gt;
    to_port     = 80&lt;br /&gt;
    protocol    = &amp;quot;tcp&amp;quot;&lt;br /&gt;
    cidr_blocks = [&amp;quot;0.0.0.0/0&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  egress {&lt;br /&gt;
    from_port   = 0&lt;br /&gt;
    to_port     = 0&lt;br /&gt;
    protocol    = &amp;quot;-1&amp;quot;&lt;br /&gt;
    cidr_blocks = [&amp;quot;0.0.0.0/0&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  tags = {&lt;br /&gt;
    Name = &amp;quot;${var.neptun}-sg&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resource &amp;quot;aws_instance&amp;quot; &amp;quot;web&amp;quot; {&lt;br /&gt;
  ami                    = &amp;quot;ami-0c1c30571d2dae5c9&amp;quot; # Ubuntu 22.04 LTS, eu-west-1&lt;br /&gt;
  instance_type          = &amp;quot;t2.micro&amp;quot;&lt;br /&gt;
  key_name               = &amp;quot;test&amp;quot; # a korabban letrehozott kulcspar neve&lt;br /&gt;
  vpc_security_group_ids = [aws_security_group.web.id]&lt;br /&gt;
&lt;br /&gt;
  tags = {&lt;br /&gt;
    Name = &amp;quot;${var.neptun}-web&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
output &amp;quot;public_ip&amp;quot; {&lt;br /&gt;
  value = aws_instance.web.public_ip&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az AMI azonosító régiónként és időszakonként változik - mindig ellenőrizzük a konzolon (EC2 → Launch instance → AMI kiválasztás), hogy az adott régióban érvényes-e még az azonosító, mielőtt bemásoljuk.&lt;br /&gt;
&lt;br /&gt;
=== A munkafolyamat: init / plan / apply / destroy ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
terraform init      # letölti a szükséges providereket, előkészíti a munkakönyvtárat - csak egyszer kell (vagy provider váltáskor)&lt;br /&gt;
terraform plan       # megmutatja, MIT fog csinálni, anélkül hogy bármit is végrehajtana - mindig nézzük át!&lt;br /&gt;
terraform apply       # végrehajtja a terveket - rákérdez, hogy biztosan folytassuk-e (yes-szel hagyjuk jóvá)&lt;br /&gt;
terraform destroy     # törli az összes, ebben a konfigurációban létrehozott erőforrást&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;Figyelem, ez a legfontosabb szabály a féléves munkához!&#039;&#039;&#039; Amikor végeztünk egy gyakorlattal, futtassunk &#039;&#039;terraform destroy&#039;&#039;-t, különben a létrehozott erőforrások tovább futnak és fizetési kötelezettséget okozhatnak a free tier keretein túl.&lt;br /&gt;
&lt;br /&gt;
=== A state fájl ===&lt;br /&gt;
A &#039;&#039;terraform apply&#039;&#039; lefuttatása után megjelenik egy &#039;&#039;terraform.tfstate&#039;&#039; nevű fájl a könyvtárban - ez tárolja, hogy pontosan mit hozott létre a Terraform. &#039;&#039;&#039;Ez a fájl bizalmas adatokat is tartalmazhat&#039;&#039;&#039; (pl. jelszavakat, ha voltak a konfigurációban), ezért:&lt;br /&gt;
* Soha ne kerüljön git-be (vegyük fel a &#039;&#039;.gitignore&#039;&#039;-ba)&lt;br /&gt;
* Csapatmunkánál érdemes távoli tárolást használni (pl. S3 bucket, amit korábban már megismertünk), hogy mindenki ugyanazt az állapotot lássa&lt;br /&gt;
&lt;br /&gt;
== Ansible ==&lt;br /&gt;
=== Mi az az Ansible, és miben más, mint a Terraform? ===&lt;br /&gt;
Amíg a Terraform azzal foglalkozik, hogy &#039;&#039;&#039;milyen gépek létezzenek&#039;&#039;&#039;, addig az Ansible azzal, hogy &#039;&#039;&#039;mi legyen rajtuk telepítve/beállítva&#039;&#039;&#039;. Az Ansible &#039;&#039;&#039;agentless&#039;&#039;&#039;: nem kell külön ügynök-szoftvert telepíteni a célgépekre, elég, ha van rajtuk SSH szerver (amit eddig is használtunk a gépekhez való csatlakozáshoz) és Python.&lt;br /&gt;
&lt;br /&gt;
=== Telepítés ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install ansible -y&lt;br /&gt;
ansible --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory - kikhez csatlakozzon? ===&lt;br /&gt;
Az Ansible egy úgynevezett &#039;&#039;inventory&#039;&#039; fájlból tudja, mely szerverekkel dolgozzon. Hozzunk létre egy &#039;&#039;inventory.ini&#039;&#039; fájlt, a korábban megismert SSH kulcsot és felhasználónevet felhasználva (lásd [[EDU::GAMF::Felhőalapú-szolgáltatások::AWS#Csatlakozás_Linux_terminálból|itt]]):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[webservers]&lt;br /&gt;
web1 ansible_host=3.252.168.207 ansible_user=ubuntu ansible_ssh_private_key_file=~/test.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ellenőrizzük, hogy elérjük-e a gépet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ansible -i inventory.ini webservers -m ping&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ad-hoc parancsok ===&lt;br /&gt;
Egyszeri feladatokhoz nem kell playbookot írnunk, elég egy modult megneveznünk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# csomaglista frissítése minden webservers csoportba tartozó gépen&lt;br /&gt;
ansible -i inventory.ini webservers -m apt -a &amp;quot;update_cache=yes&amp;quot; --become&lt;br /&gt;
&lt;br /&gt;
# egy adott parancs lefuttatása&lt;br /&gt;
ansible -i inventory.ini webservers -m shell -a &amp;quot;uptime&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A &#039;&#039;--become&#039;&#039; kapcsoló jelenti a sudo-s (root) jogosultsággal történő végrehajtást, hasonlóan ahhoz, mintha &#039;&#039;sudo&#039;&#039;-t írnánk a parancs elé.&lt;br /&gt;
&lt;br /&gt;
=== Playbook - a korábbi telepítő script Ansible-lel ===&lt;br /&gt;
Emlékezzünk vissza: a gyakorlat elején egy bash scripttel (&#039;&#039;UI indítás&#039;&#039;, lásd az AWS oldalon) telepítettük fel a weboldalunkat egy EC2-re. Ennek &#039;&#039;&#039;két nagy hátránya&#039;&#039;&#039; volt: csak egyszer, az EC2 indításakor futott le (User data), és nem volt idempotens - ha kétszer lefuttatnánk, hibákat okozna (pl. már létező mappa létrehozása). Nézzük meg, hogyan váltja ki ugyanezt egy Ansible playbook, amit &#039;&#039;&#039;bármikor, bármennyiszer&#039;&#039;&#039; újra lefuttathatunk anélkül, hogy kárt tenne:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: Weboldal UI telepítése&lt;br /&gt;
  hosts: webservers&lt;br /&gt;
  become: yes&lt;br /&gt;
  vars:&lt;br /&gt;
    neptun: &amp;quot;neptun&amp;quot;&lt;br /&gt;
    api_lb_domain: &amp;quot;localhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Csomaglista frissítése&lt;br /&gt;
      apt:&lt;br /&gt;
        update_cache: yes&lt;br /&gt;
&lt;br /&gt;
    - name: Szükséges csomagok telepítése&lt;br /&gt;
      apt:&lt;br /&gt;
        name:&lt;br /&gt;
          - apache2&lt;br /&gt;
          - libapache2-mod-php8.3&lt;br /&gt;
          - php8.3&lt;br /&gt;
          - php8.3-curl&lt;br /&gt;
          - unzip&lt;br /&gt;
        state: present&lt;br /&gt;
&lt;br /&gt;
    - name: Weboldal letöltése és kicsomagolása&lt;br /&gt;
      unarchive:&lt;br /&gt;
        src: https://wiki.farkas-attila.hu/images/c/c7/Weboldal.zip&lt;br /&gt;
        dest: /tmp/&lt;br /&gt;
        remote_src: yes&lt;br /&gt;
&lt;br /&gt;
    - name: Célkönyvtár létrehozása&lt;br /&gt;
      file:&lt;br /&gt;
        path: &amp;quot;/srv/{{ neptun }}&amp;quot;&lt;br /&gt;
        state: directory&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;lt;ip&amp;gt; csere a tényleges API domain-re és fájlok elhelyezése&lt;br /&gt;
      copy:&lt;br /&gt;
        src: &amp;quot;/tmp/{{ item.src }}&amp;quot;&lt;br /&gt;
        dest: &amp;quot;/srv/{{ neptun }}/{{ item.dest }}&amp;quot;&lt;br /&gt;
        remote_src: yes&lt;br /&gt;
      loop:&lt;br /&gt;
        - { src: &amp;quot;ui.php&amp;quot;, dest: &amp;quot;index.php&amp;quot; }&lt;br /&gt;
        - { src: &amp;quot;ui_newproduct.php&amp;quot;, dest: &amp;quot;newproduct.php&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;lt;ip&amp;gt; tag lecserélése a tényleges API domain-re&lt;br /&gt;
      replace:&lt;br /&gt;
        path: &amp;quot;/srv/{{ neptun }}/{{ item }}&amp;quot;&lt;br /&gt;
        regexp: &amp;quot;&amp;lt;ip&amp;gt;&amp;quot;&lt;br /&gt;
        replace: &amp;quot;{{ api_lb_domain }}&amp;quot;&lt;br /&gt;
      loop:&lt;br /&gt;
        - index.php&lt;br /&gt;
        - newproduct.php&lt;br /&gt;
&lt;br /&gt;
    - name: Apache virtualhost beállítása&lt;br /&gt;
      template:&lt;br /&gt;
        src: templates/000-default.conf.j2&lt;br /&gt;
        dest: /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
      notify: Apache ujraindul&lt;br /&gt;
&lt;br /&gt;
  handlers:&lt;br /&gt;
    - name: Apache ujraindul&lt;br /&gt;
      service:&lt;br /&gt;
        name: apache2&lt;br /&gt;
        state: restarted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Figyeljük meg az &#039;&#039;&#039;idempotencia&#039;&#039;&#039; elvét minden lépésnél: az &#039;&#039;apt&#039;&#039; modul csak akkor telepít, ha a csomag még nincs fent; a &#039;&#039;file&#039;&#039; modul csak akkor hoz létre könyvtárat, ha az még nem létezik. Ha kétszer futtatjuk le a playbookot, a második futás nem fog hibázni, csak megállapítja, hogy &amp;quot;már minden rendben van&amp;quot; (ez az úgynevezett &#039;&#039;changed=0&#039;&#039; állapot).&lt;br /&gt;
&lt;br /&gt;
A playbook futtatása:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ansible-playbook -i inventory.ini deploy-ui.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jenkins ==&lt;br /&gt;
=== Mi az a Jenkins? ===&lt;br /&gt;
A Jenkins egy nyílt forráskódú CI/CD (Continuous Integration / Continuous Deployment) automatizáló szerver: az ő feladata, hogy a fejlesztői munka (pl. egy git push) hatására automatikusan lefuttassa a szükséges lépéseket - tesztelés, build, majd akár a Terraform és Ansible meghívása is, hogy a legfrissebb kód éles környezetbe kerüljön emberi beavatkozás nélkül.&lt;br /&gt;
&lt;br /&gt;
=== Telepítés Docker konténerben ===&lt;br /&gt;
Mivel a félév második fele a Dockerről szól, a Jenkins telepítését is ezen keresztül végezzük el - így nem szennyezzük a hoszt rendszert, és könnyen el is távolítható:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker volume create jenkins_home&lt;br /&gt;
docker run -d --name jenkins \&lt;br /&gt;
  -p 8080:8080 -p 50000:50000 \&lt;br /&gt;
  -v jenkins_home:/var/jenkins_home \&lt;br /&gt;
  jenkins/jenkins:lts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A &#039;&#039;&#039;8080&#039;&#039;&#039;-as port a webes admin felület, az &#039;&#039;&#039;50000&#039;&#039;&#039;-es port pedig azoknak az esetleges elosztott build-ügynököknek (agent) van fenntartva, amik egy másik gépről csatlakoznának a Jenkins szerverhez.&lt;br /&gt;
&lt;br /&gt;
A kezdeti admin jelszót a konténer belsejéből kell kiolvasnunk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ezt beillesztve a &#039;&#039;http://&amp;lt;szerver_ip&amp;gt;:8080&#039;&#039; címen elérhető telepítő varázslóba, majd a javasolt beépülők (plugins) telepítésével elkészül az alapkonfiguráció.&lt;br /&gt;
&lt;br /&gt;
=== Pipeline alapfogalmak ===&lt;br /&gt;
A Jenkins munkafolyamatait &#039;&#039;Jenkinsfile&#039;&#039; néven, a projekt gyökerében elhelyezett, Groovy szintaxisú fájlban írjuk le (tehát ez a fájl is git-be kerül a projekt kódjával együtt - önmagában is egyfajta &amp;quot;code&amp;quot; a CI/CD folyamatból):&lt;br /&gt;
* &#039;&#039;&#039;pipeline&#039;&#039;&#039;: a teljes folyamatot összefogó blokk&lt;br /&gt;
* &#039;&#039;&#039;stage&#039;&#039;&#039;: egy-egy logikai szakasz (pl. &amp;quot;Build&amp;quot;, &amp;quot;Terraform Apply&amp;quot;, &amp;quot;Ansible Deploy&amp;quot;) - ezek jelennek meg névvel a Jenkins felületén&lt;br /&gt;
* &#039;&#039;&#039;steps&#039;&#039;&#039;: az adott szakaszban ténylegesen végrehajtandó parancsok&lt;br /&gt;
&lt;br /&gt;
=== Gyakorlati példa: Terraform + Ansible pipeline ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;groovy&amp;quot;&amp;gt;&lt;br /&gt;
pipeline {&lt;br /&gt;
    agent any&lt;br /&gt;
&lt;br /&gt;
    stages {&lt;br /&gt;
        stage(&#039;Checkout&#039;) {&lt;br /&gt;
            steps {&lt;br /&gt;
                git branch: &#039;main&#039;, url: &#039;https://github.com/pelda/gamf-projekt.git&#039;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        stage(&#039;Terraform Init&#039;) {&lt;br /&gt;
            steps {&lt;br /&gt;
                sh &#039;terraform init&#039;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        stage(&#039;Terraform Apply&#039;) {&lt;br /&gt;
            steps {&lt;br /&gt;
                sh &#039;terraform apply -auto-approve&#039;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        stage(&#039;Ansible Deploy&#039;) {&lt;br /&gt;
            steps {&lt;br /&gt;
                sh &#039;ansible-playbook -i inventory.ini deploy-ui.yml&#039;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    post {&lt;br /&gt;
        failure {&lt;br /&gt;
            echo &#039;A pipeline elszállt - ellenőrizzük a logokat!&#039;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Ahhoz, hogy a fenti &#039;&#039;sh&#039;&#039; lépések ténylegesen működjenek, a Terraform-ot és az Ansible-t is telepíteni kell magába a Jenkins konténerbe (vagy egy erre felkészített, saját &#039;&#039;Dockerfile&#039;&#039;-ból épített Jenkins image-be - gondoljunk vissza a Docker fejezetre, pontosan ez a &#039;&#039;image készítés&#039;&#039; egyik tipikus, valós felhasználási módja).&lt;br /&gt;
&lt;br /&gt;
== Összefoglalás - hogyan áll össze a lánc? ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:0px auto&amp;quot;&lt;br /&gt;
! Lépés !! Eszköz !! Mit csinál&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Fejlesztő || &#039;&#039;git push&#039;&#039; a kódra&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Jenkins || Észleli a változást, elindítja a pipeline-t&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Terraform || Felépíti/frissíti az infrastruktúrát (VPC, EC2, Security Group, RDS stb.)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Ansible || Feltelepíti és konfigurálja az alkalmazást a friss szervereken&lt;br /&gt;
|-&lt;br /&gt;
| 5 || - || Az alkalmazás elérhetővé válik, emberi kattintgatás nélkül&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ez a minta közvetlenül kapcsolódik a féléves projektfeladat követelményeihez is: a Terraformmal létrehozott VPC, EC2, ASG/LB, RDS mind beleszámít a projektkövetelmény-listába (lásd a [[EDU::GAMF::Felhőalapú-szolgáltatások|főoldalon]]), csak éppen automatizált, verziókezelt, újra futtatható formában - ami jóval közelebb áll ahhoz, ahogy ma egy valós cégnél is üzemeltetik a felhős infrastruktúrát.&lt;br /&gt;
&lt;br /&gt;
== Jegyzetek ==&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;
* [[GAMF::Felhőalapú-szolgáltatások::Előadás|Előadás]] - lásd a Felhő ökoszisztéma fejezet IaC alfejezetét az elméleti háttérhez&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=854</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=854"/>
		<updated>2026-09-14T08:21:20Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* Alkalmazások telepítése */&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 regisztrációhoz 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 jellemzően egy jelképes összeggel (kb. 1$ vagy annak megfelelő) meg terheli a számlát a kártya ellenőrzéséhez, 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;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; 2024 közepe óta az AWS megváltoztatta az ingyenes csomag felépítését: az újonnan regisztráló fiókok már &#039;&#039;&#039;nem&#039;&#039;&#039; a régi, klasszikus &amp;quot;12 hónapig minden Free tier eligible szolgáltatás ingyenes&amp;quot; modellt kapják, hanem egy kredit alapú, rövidebb (jellemzően kb. fél éves) ingyenes időszakot induló jóváírással. A korábban regisztrált fiókok a régi, 12 hónapos feltételeket tarthatják meg. Regisztráció előtt mindenképp nézzük meg az aktuális [https://aws.amazon.com/free/ AWS Free Tier] feltételeit, mert idővel ezek is változhatnak.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes csomagban nem minden érhető el és ami mégis, az sem korlátlan ideig (a klasszikus modellben pl. 750 óra EC2 futási idő havonta, az új kredit alapú modellben pedig a jóváírt összeg elfogyásáig), 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 hivatalos neve &#039;&#039;Elastic Compute Cloud&#039;&#039;, innen az &#039;&#039;EC2&#039;&#039; rövidítés: a &#039;&#039;2&#039;&#039;-es a végén azt jelzi, hogy a névben két &#039;&#039;C&#039;&#039; kezdőbetűs szó van (&#039;&#039;Compute&#039;&#039; és &#039;&#039;Cloud&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez elsősorban a rugalmas (&#039;&#039;elastic&#039;&#039;) skálázhatóság okozza: az EC2 példányokat gyorsan tudjuk indítani, leállítani, típust váltani rajtuk, illetve automatikusan is skálázhatjuk a darabszámukat (lásd később: Auto Scaling Group). Emiatt architekturálisan úgy érdemes tervezni, mintha bármikor cserélődhetne egy adott példány - ez alap (On-Demand) EC2 esetén a gyakorlatban ritkán, hardverhiba vagy saját leállítás esetén fordul csak elő, de a olcsóbb &#039;&#039;Spot&#039;&#039; típusú példányoknál az AWS bármikor, rövid (kb. 2 perces) előzetes figyelmeztetéssel visszavonhatja a gépet. Emiatt körültekintően kell eljárnunk: semmilyen adatot nem érdemes úgy egy alkalmazáson belül tárolni, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájlok) 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;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az &#039;&#039;apt install awscli&#039;&#039; a legtöbb Debian/Ubuntu rendszeren a régebbi, 1-es főverziójú AWS CLI-t telepíti a disztribúció saját tárolójából, amit az AWS már csak fenntartási (maintenance) módban frissít. Az AWS hivatalosan a 2-es főverzió telepítését ajánlja, amit a következő paranccsal tehetünk meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&amp;quot; -o &amp;quot;awscliv2.zip&amp;quot;&lt;br /&gt;
unzip awscliv2.zip&lt;br /&gt;
sudo ./aws/install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Órai/gyakorlási célra az &#039;&#039;apt install awscli&#039;&#039; is elegendő lehet, de érdemes tudni, hogy nem ez a hivatalosan ajánlott telepítési mód.&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;
= 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=H%C3%A1l%C3%B3zat_rendelkez%C3%A9sre%C3%A1ll%C3%A1s_sz%C3%A1m%C3%ADt%C3%A1s&amp;diff=853</id>
		<title>Hálózat rendelkezésreállás számítás</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=H%C3%A1l%C3%B3zat_rendelkez%C3%A9sre%C3%A1ll%C3%A1s_sz%C3%A1m%C3%ADt%C3%A1s&amp;diff=853"/>
		<updated>2026-09-14T08:18:21Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Az ábra időközben javítva lett (újragenerálva helyes végeredménnyel), a &amp;#039;hibás ábra&amp;#039; figyelmeztetés eltávolítva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amennyiben magas rendelkezésreállású hálózatot tervezünk, akkor redundanciát kell kialakítanunk. Ezen az [[ISP csatlakozási típusok|oldalon]] összegyűjtöttem milyen módon csatlakozhatunk a szolgáltatókkal, ám ott nem esett szó számszerű értékekről a hiba lehetőségét tekintve. A következőkben felsorolok pár kapcsolást a hozzá tartozó hiba valószínűséggel.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A hibák valószínűségét mindenhol 1%-nak vettem, de ez messze nem igaz a hálózat minden elemére!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= 1 router - N router kapcsolat =&lt;br /&gt;
Ebben a fejezetben a kapcsolat egyik oldalán fixen egy router lesz, a másik oldalon pedig maximum kettő. A közöttük lévő vezetékek száma szintén maximum kettő.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router kapcsolat ==&lt;br /&gt;
[[Fájl:Fail 1-1 router.png|1000px|keretnélküli|középre]]&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben hibát okozhat, ha a bal oldali router megy tönkre (1%), a vezeték megy tönkre (1%) vagy jobb oldali router megy tönkre (1%). A vagy kapcsolat miatt az értékek összeadódnak, így összesen 3% valószínűséggel nem fogja tudni a csomagot továbbítani ez a kapcsolattípus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Fail Dual Homed.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben a routerek között két vezeték található, amelyek 1-1% valószínűséggel mehetnek tönkre. A kapcsolat csak akkor szakad meg, ha a bal oldali router (1%) vagy mind a két vezeték, vagy a jobb oldali router (1%) megy tönkre. Az előbbiek alapján láthattuk, hogy a vagy kapcsolat miatt az értékek összeadódnak, ám a vezeték esetében ÉS kapcsolat van, tehát azok hiba valószínűségét szorozni kell: 0.01*0.01 = 0.0001, azaz 0.01% valószínűséggel fog mindkét kábel tönkremenni. Ebből adódóan a teljes kapcsolás 2.01% valószínűséggel nem fogja továbbítani a csomagokat.&lt;br /&gt;
&lt;br /&gt;
== 1-2 router kapcsolat ==&lt;br /&gt;
[[Fájl:Fail 1-2 router.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben egyértelműen bajba kerülünk, ha a bal oldalon lévő egyetlen router tönkremegy (1%). Azonban mindkét vezetéknek vagy mindkét routernek tönkre kell mennie (ezt előző számításból tudjuk, hogy 0.01% eséllyel megy tönkre mind a kettő), vagy az egyik vezetéknek és a másik jobb oldali routernek (0.01% eséllyel megy ilyen formában tönkre, de 2 kombinációban teheti ezt meg). A képletünk tehát 1% + 0.01% (két vezeték) + 0.01% (két router) + 0.01% * 2 (egyik vezeték másik router), tehát összesen 1.04% eséllyel nem fogja ez a kapcsolás a csomagjainkat továbbítani. Jól látható, hogy a +1 router nagyobb mértékben csökkentette a hiba lehetőségét.&lt;br /&gt;
&lt;br /&gt;
= 2 router - 2 router kapcsolat =&lt;br /&gt;
&lt;br /&gt;
== 1-1 router csak 1 másik routerrel áll kapcsolatban egy vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-1 router 1-1 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben két ág keletkezik, bármelyiken lehetséges az információk továbbítása. A rendszer akkor válik elérhetetlenné, ha mind a két ág kiesik. Egy ág akkor esik ki, ha valamelyik router kiesik (vagy kapcsolat) vagy a vezeték közöttük meghibásodik. Ezt korábban kiszámoltuk, hogy 3% valószínűséggel okoz problémát. A két ágnak együtt kell meghibásodnia, hogy a rendszer működésképtelen legyen (és kapcsolat), tehát összességében 0.09% eséllyel nem fogunk tudni információt továbbítani egy ilyen hálózaton.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router csak 1 másik routerrel áll kapcsolatban két vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-1 router, 2-2 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ez az eset hasonló az előzőhöz, azonban két-két vezetékkel kötöttük össze a routereket. Ezt az előzőek alapján tudjuk, hogy az egyes ágak hibalehetősége 2.01%-ra változik. A teljes rendszer szintén akkor lesz működésképtelen, ha mind a két ágon hiba történik (és kapcsolat), tehát 0.0404% esély adódik arra, hogy egy ilyen  hálózat nem fog működni.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router 2 másikkal áll kapcsolatban, egy vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-2 router, 1-1 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ez egy igen kis hibalehetőséggel működő kapcsolás. Az előzőekhez képest óriási előnye, hogy az egyes ágak nem külön-külön működnek, tehát egy vezeték tönkremenetele esetén továbbra is elérhető mind a négy router. A kapcsolás hibavalószínűségét úgy a legegyszerűbb kiszámolni, ha visszavezetjük az 1 router - 2 router kapcsolatra (fentebb) és annak a valószínűségét négyzetre emeljük. Így 0.011% az eredmény, tehát ekkora eséllyel nem fog működni a hálózatunk.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router 2 másikkal áll kapcsolatban, két vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:2-2 router, 2-2 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Az előző kapcsolást fejleszthetjük tovább oly módon, hogy két kapcsolatot létesítünk minden router között. A csatolt ábra pontos (nem közelítő) számítása szerint egy-egy ág - tehát egy router, amely két vezetékkel kapcsolódik mindkét másik routerhez - hibavalószínűsége 1,0103%-ra adódik. Mivel a teljes kapcsolat csak akkor válik működésképtelenné, ha mindkét ág egyszerre hibásodik meg (ÉS kapcsolat), a végeredmény: 0,010103 × 0,010103 × 100 ≈ &#039;&#039;&#039;0,0102%&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:2-2_router,_2-2_link.png&amp;diff=852</id>
		<title>Fájl:2-2 router, 2-2 link.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=F%C3%A1jl:2-2_router,_2-2_link.png&amp;diff=852"/>
		<updated>2026-09-14T08:17:49Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: ApelPro Fájl:2-2 router, 2-2 link.png új verzióját töltötte fel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2-2 router, 2-2 link&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=H%C3%A1l%C3%B3zat_rendelkez%C3%A9sre%C3%A1ll%C3%A1s_sz%C3%A1m%C3%ADt%C3%A1s&amp;diff=851</id>
		<title>Hálózat rendelkezésreállás számítás</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=H%C3%A1l%C3%B3zat_rendelkez%C3%A9sre%C3%A1ll%C3%A1s_sz%C3%A1m%C3%ADt%C3%A1s&amp;diff=851"/>
		<updated>2026-09-14T08:12:35Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Utolsó számítás javítva a csatolt ábra alapján (1.0103%/ág, végeredmény kb. 0.0102%, nem 0.0001%) - az ábrán 100x-os számolási/kiírási hiba van, ami külön javítást igényel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amennyiben magas rendelkezésreállású hálózatot tervezünk, akkor redundanciát kell kialakítanunk. Ezen az [[ISP csatlakozási típusok|oldalon]] összegyűjtöttem milyen módon csatlakozhatunk a szolgáltatókkal, ám ott nem esett szó számszerű értékekről a hiba lehetőségét tekintve. A következőkben felsorolok pár kapcsolást a hozzá tartozó hiba valószínűséggel.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A hibák valószínűségét mindenhol 1%-nak vettem, de ez messze nem igaz a hálózat minden elemére!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= 1 router - N router kapcsolat =&lt;br /&gt;
Ebben a fejezetben a kapcsolat egyik oldalán fixen egy router lesz, a másik oldalon pedig maximum kettő. A közöttük lévő vezetékek száma szintén maximum kettő.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router kapcsolat ==&lt;br /&gt;
[[Fájl:Fail 1-1 router.png|1000px|keretnélküli|középre]]&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben hibát okozhat, ha a bal oldali router megy tönkre (1%), a vezeték megy tönkre (1%) vagy jobb oldali router megy tönkre (1%). A vagy kapcsolat miatt az értékek összeadódnak, így összesen 3% valószínűséggel nem fogja tudni a csomagot továbbítani ez a kapcsolattípus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Fail Dual Homed.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben a routerek között két vezeték található, amelyek 1-1% valószínűséggel mehetnek tönkre. A kapcsolat csak akkor szakad meg, ha a bal oldali router (1%) vagy mind a két vezeték, vagy a jobb oldali router (1%) megy tönkre. Az előbbiek alapján láthattuk, hogy a vagy kapcsolat miatt az értékek összeadódnak, ám a vezeték esetében ÉS kapcsolat van, tehát azok hiba valószínűségét szorozni kell: 0.01*0.01 = 0.0001, azaz 0.01% valószínűséggel fog mindkét kábel tönkremenni. Ebből adódóan a teljes kapcsolás 2.01% valószínűséggel nem fogja továbbítani a csomagokat.&lt;br /&gt;
&lt;br /&gt;
== 1-2 router kapcsolat ==&lt;br /&gt;
[[Fájl:Fail 1-2 router.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben egyértelműen bajba kerülünk, ha a bal oldalon lévő egyetlen router tönkremegy (1%). Azonban mindkét vezetéknek vagy mindkét routernek tönkre kell mennie (ezt előző számításból tudjuk, hogy 0.01% eséllyel megy tönkre mind a kettő), vagy az egyik vezetéknek és a másik jobb oldali routernek (0.01% eséllyel megy ilyen formában tönkre, de 2 kombinációban teheti ezt meg). A képletünk tehát 1% + 0.01% (két vezeték) + 0.01% (két router) + 0.01% * 2 (egyik vezeték másik router), tehát összesen 1.04% eséllyel nem fogja ez a kapcsolás a csomagjainkat továbbítani. Jól látható, hogy a +1 router nagyobb mértékben csökkentette a hiba lehetőségét.&lt;br /&gt;
&lt;br /&gt;
= 2 router - 2 router kapcsolat =&lt;br /&gt;
&lt;br /&gt;
== 1-1 router csak 1 másik routerrel áll kapcsolatban egy vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-1 router 1-1 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben két ág keletkezik, bármelyiken lehetséges az információk továbbítása. A rendszer akkor válik elérhetetlenné, ha mind a két ág kiesik. Egy ág akkor esik ki, ha valamelyik router kiesik (vagy kapcsolat) vagy a vezeték közöttük meghibásodik. Ezt korábban kiszámoltuk, hogy 3% valószínűséggel okoz problémát. A két ágnak együtt kell meghibásodnia, hogy a rendszer működésképtelen legyen (és kapcsolat), tehát összességében 0.09% eséllyel nem fogunk tudni információt továbbítani egy ilyen hálózaton.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router csak 1 másik routerrel áll kapcsolatban két vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-1 router, 2-2 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ez az eset hasonló az előzőhöz, azonban két-két vezetékkel kötöttük össze a routereket. Ezt az előzőek alapján tudjuk, hogy az egyes ágak hibalehetősége 2.01%-ra változik. A teljes rendszer szintén akkor lesz működésképtelen, ha mind a két ágon hiba történik (és kapcsolat), tehát 0.0404% esély adódik arra, hogy egy ilyen  hálózat nem fog működni.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router 2 másikkal áll kapcsolatban, egy vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-2 router, 1-1 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ez egy igen kis hibalehetőséggel működő kapcsolás. Az előzőekhez képest óriási előnye, hogy az egyes ágak nem külön-külön működnek, tehát egy vezeték tönkremenetele esetén továbbra is elérhető mind a négy router. A kapcsolás hibavalószínűségét úgy a legegyszerűbb kiszámolni, ha visszavezetjük az 1 router - 2 router kapcsolatra (fentebb) és annak a valószínűségét négyzetre emeljük. Így 0.011% az eredmény, tehát ekkora eséllyel nem fog működni a hálózatunk.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router 2 másikkal áll kapcsolatban, két vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:2-2 router, 2-2 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Az előző kapcsolást fejleszthetjük tovább oly módon, hogy két kapcsolatot létesítünk minden router között. A csatolt ábra pontos (nem közelítő) számítása szerint egy-egy ág - tehát egy router, amely két vezetékkel kapcsolódik mindkét másik routerhez - hibavalószínűsége 1,0103%-ra adódik. Mivel a teljes kapcsolat csak akkor válik működésképtelenné, ha mindkét ág egyszerre hibásodik meg (ÉS kapcsolat), a végeredmény: 0,010103 × 0,010103 × 100 ≈ &#039;&#039;&#039;0,0102%&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem, számolási hiba az ábrán!&#039;&#039;&#039; A csatolt ábrán feltüntetett &amp;quot;0,000102070609%&amp;quot; végeredmény hibás: az ábra saját képlete helyesen tartalmazza a százalékra váltáshoz szükséges ×100-as szorzást, de ez a szorzás nincs érvényesítve a kiírt végeredményben - emiatt az ábrán szereplő szám 100-szor kisebb a helyesnél. A helyes érték a fenti, kb. 0,0102%, nem 0,0001%. Az ábra frissítése (újragenerálása) még hátravan.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=BGP_protokoll&amp;diff=850</id>
		<title>BGP protokoll</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=BGP_protokoll&amp;diff=850"/>
		<updated>2026-09-14T08:11:46Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: RIPE NCC / IANA viszony pontosítva (nem szervezeti alárendelt); elavult BGP tábla méret (880k route, 2021-es adat) frissítve/általánosítva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nem túlzás azt állítani, hogy a BGP-nek (Border Gateway Protocol) köszönhetően tudunk ma internetezni, hiszen ez az egyetlen EGP (Exterior Gateway Protocol) protokoll.&lt;br /&gt;
&lt;br /&gt;
== IGP / EGP ==&lt;br /&gt;
Megkülönböztetünk belső (Interior) és külső (Exterior) útvonal megosztó protokollokat. Előbbibe tartoznak a:&lt;br /&gt;
* RIP (Routing Information Protocol)&lt;br /&gt;
* OSPF (Open Shortest Path First)&lt;br /&gt;
* iBGP (Internal BGP)&lt;br /&gt;
* stb.&lt;br /&gt;
&lt;br /&gt;
 Egy protokoll akkor oszt meg belül információkat, ha egy AS-en (Autonomous System) belül működik és akkor külső, ha AS-ek között oszt meg információt.&lt;br /&gt;
&lt;br /&gt;
=== Autonomous System ===&lt;br /&gt;
Az internet sok-sok kis hálózatból épül fel. A kisebb hálózatokat más-más cég tartja karban, tehát más és más szabályok vonatkoznak rájuk - sokszor jogi kérdésekben is különböznek a válaszok területtől függően. Egy ilyen &#039;&#039;„kis”&#039;&#039; hálózaton belül mindig a helyi főnök hozza a szabályokat: ő felel azért, hogy a csomagok sikeresen keresztül jussanak az ő hálózatán a cél felé, de hogy pontosan milyen útvonalat követnek, abba senki nem szólhat bele. Az egyszerűség kedvéért tekintsük úgy, hogy egy AS egy internetszolgáltatót jelent - később árnyaljuk ezt a képet. Az internetszolgáltatók vagy kiépítik saját hálózatukat - általában a helyi kis szolgáltatók wireless technológiát használnak (WISP - Wireless Internet Service Provider). A nagyobb szolgáltatók saját optikai vezetékeket húznak manapság (Telekom, Digi stb.), és vannak állami fennhatóság alá tartozó vonalak is, amelyek karbantartására pályáznak a szolgáltatók. A magyarázat kedvéért nézzük meg nagy vonalakban, hogy hogyan lehetséges egy internetszolgáltatót létrehozni:&lt;br /&gt;
# Cég regisztrálása a cégjegyzékben&lt;br /&gt;
# AS azonosító, úgynevezett ASN (Autonomous System Number) igénylése (vásárlása) a RIPE-től&lt;br /&gt;
# IP cím tartomány igénylése (vásárlása) a RIPE-től&lt;br /&gt;
# Helyi internetszolgáltatótól vonal bérlés (esetleg földrajzilag több ponton is, több szolgáltatótól is)&lt;br /&gt;
# ASN+IP tartomány hirdetése &#039;&#039;&#039;BGP protokollon keresztül&#039;&#039;&#039; a szolgáltatóval és a RIPE-vel egyeztetett cél számára&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Fontos&#039;&#039;&#039;: Publikus AS nem csak egy internetszolgáltató lehet. Egy egyszerű vállalkozás is vásárolhat IP tartományt, amihez szüksége lesz egy ASN-re is. Ez pl. multihomed kapcsolatok esetén történik meg - emiatt tudják kívülről a céget két internetszolgáltatón keresztül is elérni és így lehetséges, hogy mind a két szolgáltató ugyanazon az IP címen regisztrálja. Léteznek privát ASN-ek is, amelyeket nem kell beregisztrálnunk, ezeket általában a helyi hálózaton belül alkalmazzák (64512-65534). Ezek segítségével lehetőség nyílik arra is, hogy egy publikus AS több kisebb privát AS-ből épüljön fel. Az internetszolgáltatók a saját hálózatukon belül általában valamilyen IGP szolgáltatást használnak - pl. OSPF-et.&lt;br /&gt;
&lt;br /&gt;
 A BGP útvonalak mára jelentős méretet foglalnak el (nagyságrendileg százas MB-tól akár GB-os nagyságrendig, a tábla folyamatosan, évről évre nő). Ezt az Edge eszköz a memóriájában tartja, tehát egyrészt megfelelő eszközt kell választanunk erre a célra memóriaszempontból, de természetesen a rekordokat frissíteni is kell (a globális IPv4 BGP tábla mérete 2024-re már meghaladta az 1 millió útvonalat, és ehhez jön még az IPv6 tábla is), amihez CPU időt kell biztosítanunk. Egy kisebb eszköz ekkora teher alatt lefagy és működésképtelenné válik! &#039;&#039;(A pontos, aktuális méretet érdemes közvetlenül a lentebb linkelt bgp.potaroo.net oldalon ellenőrizni, mert ez folyamatosan változik.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Hasznos linkek ====&lt;br /&gt;
* [https://bgp.potaroo.net/ BGP tábla megtekintés és statisztikai adatok]&lt;br /&gt;
* [https://bgpview.io/ BGP információk ASN, IP cím alapján]&lt;br /&gt;
&lt;br /&gt;
==== RIPE ====&lt;br /&gt;
A RIPE NCC névre hallgató szervezet egy önálló, tagjai (internetszolgáltatók, cégek) által fenntartott, nonprofit regionális szervezet - nem az IANA szervezeti alárendeltje, hanem attól függetlenül működik, azzal együttműködve. Az IANA (amit ma az ICANN felügyel) osztja ki a nagy IP-tartományokat a régiónkénti regisztrátoroknak, a RIPE NCC pedig ebből allokál tovább ASN-eket és IP-tartományokat az európai/közel-keleti régió szolgáltatóinak, cégeinek. A szakirodalom RIR (Regional Internet Registry) módon említi.&lt;br /&gt;
 Az IANA tartja számon a világon eladott összes IP címtartományt és a hozzájuk tartozó ASN-eket.&lt;br /&gt;
&lt;br /&gt;
== BGP működése ==&lt;br /&gt;
A BGP peer-to-peer alapú, tehát nem frissíti a tábla tartalmát időről-időre, hanem jelez minden olyan esetben, amikor a szabályok módosultak - pl. bedugunk egy kábelt vagy éppen kihúzzuk. A fő hátránya, hogy emiatt minden eszközt össze kell kapcsolni egymással, ami összesen x*(x-1) konfigurációs lépést igényel x router esetén. A sok konfiguráció elkerülése érdekében több kisebb méretű AS-t hoznak létre, így csökkenthető a kapcsolatok száma. Másik módszer lehet, hogy úgynevezett Route Reflector eszközöket definiálnak, amelyek begyűjtik és továbbítják az információt minden peer-nek, így elegendő ezzel összekapcsolni minden routert. &lt;br /&gt;
&lt;br /&gt;
A peer-ek között L3 kapcsolat kialakítása szükséges (nem kell fizikai és L2).&lt;br /&gt;
&lt;br /&gt;
=== BGP az internetszolgáltatóknál ===&lt;br /&gt;
Érezzük, hogy egy internetszolgáltató nem ússza meg a szabályok továbbítását: egyes ügyfelek rendelkeznek saját tartománnyal, ráadásul ezek esetleg más szolgáltatókhoz is be vannak kapcsolva; mások minél alacsonyabb szinten szeretnének VPN kapcsolatot kialakítani és ehhez az szolgáltató segítségét kérik - intranet. Azonban látjuk azt is, hogy a Route Reflector használata lassítja az információk terjedését - nem közvetlen kapcsolaton keresztül jut el az információ, hanem egy köztes eszköz segítségével és a szükséges routerek teljesítményéről nem is szóltunk (CPU a frissítések miatt, memória a útvonalak tárolása miatt). Ha végig gondoljuk, hogy egy szolgáltató hány eszközből épül fel és hogy a csomagunk célba juttatásához minden eszköznek tisztában kell lennie azzal, hogy merre kell irányítani a csomagot (tehát minden eszköznek tárolnia kell azt az 1GB-nyi útvonalat), akkor hirtelen elszörnyedünk és talán csodálkozunk is, hogy az ilyen eszközök költségei mellett hogyan éri meg olyan áron a szolgáltatás, amennyiért kapjuk?&lt;br /&gt;
&lt;br /&gt;
A válasz az lehet, hogy nem minden eszköz tudja a route szabályokat. Ha végig gondoljuk, akkor nagyon kevés eszköznek kell azokat ismernie: a felhasználó alapértelmezett átjárójaként használt eszköznek és a szolgáltató peremterületén, tehát ahol más szolgáltatókhoz kapcsolódik (uplink). Az összes többi router switchként funkcionál és ezek között az eszközök között továbbítják az adatforgalmat. Ez az úgynevezett MPLS (Multi Protocol Label Switching) segítségével valósul meg, amely egy 2.5-ös rétegbeli (tehát a 2-es és a 3-as réteg közötti) technológia. Segítségével a csomagok kapnak útvonalirányításkor egy label-t, hogy melyik routerhez kell irányítani a csomagot. A köztes eszközök csak eddig bontják le a fejlécet és azt keresik meg, hogy nekik merre kell továbbítani az adott címkét. Ha a csomag célba ért, akkor újra IP alapon történik a továbbítás. Ez a technológia úgy alakítja át a routerekből felépülő hálózatot, mintha az egy nagy switch lenne és a sebességet is megnöveli. Egy így kialakított hálózatban definiálhatunk 2.5 rétegbeli VPN kapcsolatot (VPLS: Virtual Private Lan Service), aminek segítségével két klienst kapcsolhatunk össze úgy, hogy a csomagjaik a szolgáltató switchnek látszó hálózatán keresztül haladnak, ezzel növelve a sávszélességet. &lt;br /&gt;
 Ha két ügyfél azonos szolgáltatónál van, akkor is L3 csomóponthoz kell jutnia ahhoz, hogy a másik ügyfelet elérje (pl. SSTP, L2TP stb.). A VPLS valójában ezt a felesleges lépést hagyja ki és az L3 csomóponttól független útvonalon juttatja el a csomagokat A-ból B-be.&lt;br /&gt;
A technológiának köszönhetően feloldható a BGP konfigurációs problémája: csökkenthető a routerként működő eszközök száma, amelyeknek a BGP routing táblát alkalmazniuk kell - ezáltal a peer-to-peer kapcsolatban részt kell venniük.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=GAMF&amp;diff=849</id>
		<title>GAMF</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=GAMF&amp;diff=849"/>
		<updated>2026-09-14T08:05:35Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Törött AWS/Docker linkek javítva a helyes oldalcímekre + hibás listaformázás javítva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GAMF órai tantárgyak, segédletek ==&lt;br /&gt;
==== Felhőszolgáltatások ====&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;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=848</id>
		<title>MikroTik::Scripting</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=MikroTik::Scripting&amp;diff=848"/>
		<updated>2026-09-14T08:05:24Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Script hiba javítva: sender=$email (nem létező változó) -&amp;gt; sender=$sendEmail&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=$sendEmail 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=EDU::GAMF::MikroTik&amp;diff=847</id>
		<title>EDU::GAMF::MikroTik</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::MikroTik&amp;diff=847"/>
		<updated>2026-09-14T08:05:15Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Pontosítva, hogy pfSense BSD pf-et használ (nem iptables-t), és a MikroTik RouterOS saját tűzfalmotorral rendelkezik&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ha új dolgokkal találkozunk, akkor a fizikai megjelenés az első, amit a leghamarabb felismerünk, ám a hálózatok világában ez az egyik legkevésbé lényeges tulajdonság. Sokkal fontosabb, hogy a benne rejlő titkokat felfedjük, a működési elvét megértsük, hiszen ezek tudatában bírjuk a rendeltetési helyének megfelelően alkalmazni.&lt;br /&gt;
&lt;br /&gt;
A MikroTik lelke egy szoftver, amit RouterOS-nek neveznek. A ma elérhető legtöbb modellre igaz, hogy a forgalmat ezen szoftver segítségével igyekszik megvalósítani - tehát hardveres támogatás nélkül, úgymond mindent „izomból” hajt végre. Sok helyen pont erre van szükségünk: célhardverek helyett a teljes packetflow nyitott és ott nyúlunk bele, ahol mi szeretnénk, nem ahol a célhardver azt lehetővé teszi. Természetesen ami előny, az hátrány is: a nagy sebességek eléréséhez olyan erős hardver kéne alá, amit költségei miatt nem érne meg megvásárolni. Manapság a 25G/40G/100G világában ez a gyártó is alkalmaz L3 szintű hardveres támogatással, ám ez még nagyon kezdetleges fázisban van.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hasonló megoldások:&#039;&#039;&#039;&lt;br /&gt;
* pfSense&lt;br /&gt;
* VyOS&lt;br /&gt;
* OpenWRT&lt;br /&gt;
* Debian/Ubuntu/Fedora stb.&lt;br /&gt;
&lt;br /&gt;
 A fent felsoroltak mind-mind Linux (vagy BSD) alapú rendszerek, amelyek képesek router funkciókat ellátni. A tűzfal-motorjuk azonban nem egységes: a Linux alapú megoldások (VyOS, OpenWRT, Debian/Ubuntu/Fedora) a Linux kernel netfilter alrendszerére, tehát az &#039;&#039;iptables&#039;&#039;/&#039;&#039;nftables&#039;&#039; családra épülnek, a FreeBSD alapú pfSense viszont a BSD-k saját, ezektől független csomagszűrőjét, a &#039;&#039;pf&#039;&#039;-et (Packet Filter) használja - a kettő nem kompatibilis egymással. A MikroTik RouterOS is Linux kernelt használ, de a tűzfala nem a szabványos iptables/nftables, hanem egy saját fejlesztésű, azokéhoz hasonló (lánc alapú) motor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Linkek:&#039;&#039;&#039;&lt;br /&gt;
* [[EDU::GAMF::IPTABLES|iptables alapok]]&lt;br /&gt;
* Képzés:&lt;br /&gt;
** [[EDU::GAMF::MikroTik::MTCNA|Alapok]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::IPTABLES&amp;diff=846</id>
		<title>EDU::GAMF::IPTABLES</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=EDU::GAMF::IPTABLES&amp;diff=846"/>
		<updated>2026-09-14T08:05:05Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Hibás &amp;#039;main iptables-extensions&amp;#039; parancs javítva &amp;#039;man&amp;#039;-ra; ufw zóna-állítás pontosítva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az iptables általában alapból telepítve van Linux alapú operációs rendszereken. A legtöbb ember ennek ellenére igen ritkán találkozik vele, de sokszor a szakemberek is a ráépülő eszközöket használják, mint például az &#039;&#039;ufw&#039;&#039; és a &#039;&#039;firewalld&#039;&#039;. Utóbbiak rendelkeznek egy nagy előnnyel: az iptables utódjaként szolgáló &#039;&#039;nft&#039;&#039;-t is képesek kezelni, így nem kell más programot megtanulni a fejlődéshez.&lt;br /&gt;
&lt;br /&gt;
Az iptables egy szabálylánc alapú tűzfalrendszer, amelyeket különböző táblákba rendeznek (az nft szintén láncokkal dolgozik; a firewalld ezekkel ellentétben zónákba rendezi a szabályokat, az ufw pedig még ennél is egyszerűbb, lineáris szabálylistával dolgozik, zóna fogalom nélkül. Ne feledjük el azonban, hogy minden ufw és firewalld programokkal felvett szabály végül az iptables/nft láncokba kerülnek be, amiből levonható az a következtetés, hogy az alapvetően szabályláncokkal operáló alkalmazásban is tudunk zóna szerű, átlátható struktúrát kialakítani). Vannak alapértelmezetten létező láncok, amelyeket le sem tudunk törölni: ezeket a netfilter kernelmodul hívja meg, amikor a csomag életútjának megadott fázisában jár. A láncok meghívási sorrendjét &#039;&#039;packetflow&#039;&#039;-nak nevezzük. Érdemes a tűzfal tervezésekor figyelembe venni, hogy minél hamarabb szabadulunk meg egy nem kívánt csomagtól, annál kevesebb CPU időt igényel. Az eldobás akcióval ellentétben az elfogadás sokkal körülményesebb: ezek a csomagok a létező összes alapértelmezett láncon át kell menjenek és elfogadásra kell kerüljenek (nagyon könnyen belátható, hogy ha egy láncban az adott csomagot tovább engedjük, akkor a csomag életútjának következő fázisában a netfilter meg fogja hívni a következő láncot, ahol egy &#039;&#039;eldobás&#039;&#039; művelet a feldolgozás megszakítását jelenti, tehát a csomag nem fog célba érkezni).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Témakörök:&#039;&#039;&#039;&lt;br /&gt;
* Alapértelmezett -&lt;br /&gt;
** táblák,&lt;br /&gt;
** láncok&lt;br /&gt;
* Packetflow&lt;br /&gt;
* Szabályok létrehozása&lt;br /&gt;
* Láncok létrehozása&lt;br /&gt;
* Váltás a láncok között&lt;br /&gt;
* &amp;quot;Zóna szerű&amp;quot;, átlátható struktúra kialakítása&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fontosabb teendők&#039;&#039;&#039;&lt;br /&gt;
* Érdemes áttekinteni a kézikönyvet! Ezáltal lesz fogalmunk arról, hogy milyen funkciók vannak és később könnyebben keresünk benne.&lt;br /&gt;
 man iptables               # az iptables parancs kapcsolóit dokumentálja&lt;br /&gt;
 man iptables-extensions    # az iptables parancs -m kapcsolója után megadható kiterjesztéseket és kapcsolóit írja le&lt;br /&gt;
* Érdemes megjegyezni, hogy hogyan tudjuk a szabályainkat kilistázni, menteni és visszaállítani.&lt;br /&gt;
 iptables [-t table] --list # ez a hosszú formátum, de alapértelmezetten a &#039;&#039;filter&#039;&#039; tábla tartalmát listázza és használhatjuk a rövidebb, -L kapcsolót is a --list helyett.&lt;br /&gt;
 &lt;br /&gt;
 iptables -L                # ez tehát a számunkra legfontosabb &#039;&#039;filter&#039;&#039; tábla tartalmát listázza ki&lt;br /&gt;
 &lt;br /&gt;
 iptables-save              # ez a parancs minden szabályt kiír a képernyőre - ha menteni akarjuk, irányítsuk át egy fájlba!&lt;br /&gt;
 &lt;br /&gt;
 iptables-restore           # ez a parancs visszaállítja a szabályrendszert a STANDARD INPUT-ról. Ha nem billentyűzettel szeretnénk beírni a szabályokat, akkor irányítsuk át egy korábbi mentésünket a bemenetre (&amp;lt; saved_rules)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Teszt környezet&#039;&#039;&#039;&lt;br /&gt;
Mielőtt belekezdünk a próbálkozásba, érdemes megtekinteni a szabályokat, mik vannak befecskendezve. Könnyen lehet, hogy az internet elérésünk is megszűnik egy hibása létrehozott szabály miatt, így mindig érdemes magunknál tartani egy olyan mentést, amit visszaállítva minden megfelelően működik. Ezt megtehetjük az említett &#039;&#039;iptables-save&#039;&#039; és &#039;&#039;iptables-restore&#039;&#039; kiegészítők segítségével.&lt;br /&gt;
&lt;br /&gt;
Sokkal szerencsésebb azonban, ha nem a saját gépünkön próbálkozunk, hanem egy virtuális gépben például. Így semmilyen változtatást nem hajtunk végre a mindennapokban használt rendszeren: ha a próbálkozások közepette elfáradunk, nem kell azzal időt tölteni, hogy mindent visszaállítsunk alapra, hanem csak bezárjuk a virtuális környezetet és nincs több teendő.&lt;br /&gt;
&lt;br /&gt;
Manapság a docker környezetet sokan használják „sandbox” üzemmódban is. Természetesen az iptables program is feltelepíthető, csupán egy kisebb trükköt kell végrehajtanunk. Ennek előnye a virtuális környezethez képest, hogy gyengébb, KVM-mel nem rendelkező gépeken is kellő gyorsasággal fut. Ennek beüzemeléséhez a következő parancsokat kell lefuttatnunk a &#039;&#039;&#039;host&#039;&#039;&#039; számítógépen:&lt;br /&gt;
 docker run -ti --cap-add=NET_ADMIN --cap-add=NET_RAW ubuntu bash&lt;br /&gt;
A képfájl (ubuntu) bátran cserélhető másra is, de ez a legelterjedtebb disztribúció, ezért ezt választottam.&lt;br /&gt;
A következőket kell végrehajtanunk a konténeren belül:&lt;br /&gt;
 apt update&lt;br /&gt;
 apt install iptables&lt;br /&gt;
 apt install iproute2&lt;br /&gt;
Az utóbbi (&#039;&#039;iproute2&#039;&#039;) csomagnak köszönhetően futtathatjuk a megszokott &#039;&#039;ip addr&#039;&#039; illetve &#039;&#039;ip link&#039;&#039; parancsokat.&lt;br /&gt;
A telepítés után kiadhatjuk a &#039;&#039;iptables -L&#039;&#039; parancsot, aminek az eredménye egy üres tűzfal lesz, benne az alapértelmezett &#039;&#039;INPUT&#039;&#039;, &#039;&#039;FORWARD&#039;&#039; és &#039;&#039;OUTPUT&#039;&#039; láncokkal.&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=ISP_csatlakoz%C3%A1si_t%C3%ADpusok&amp;diff=845</id>
		<title>ISP csatlakozási típusok</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=ISP_csatlakoz%C3%A1si_t%C3%ADpusok&amp;diff=845"/>
		<updated>2026-09-14T08:04:55Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: EGP hibás kifejtése javítva (External -&amp;gt; Exterior Gateway Protocol)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Egy átlag ember általában nem gondolkozik sokat azon, hogy milyen lehetőségei vannak az internetelérésre, esetleg szerverek üzemeltetésére: a jól bevált módszer, hogy kérünk egy publikus IP címet az egyik környékünkön elérhető szolgáltatótól, a szolgáltatással együtt kapott kábel végét bedugják a routerünkbe és meg is van oldva a problémánk. Ennél azonban jóval több lehetőségünk akad.&lt;br /&gt;
&lt;br /&gt;
Az internet kis hálózatokból - úgymond felhőkből - felépülő halmaz. Az egyes felhőket más-más szervezetek tartják karban és teljes autonómiájuk van azzal kapcsolatban, hogy mit csinálnak, milyen routing protokollokat (BGP, OSPF, RIP stb.) alkalmaznak. Ezeket angolul &#039;&#039;Autonomous System&#039;&#039;-nek nevezik (röviden AS) és minden ilyen kis hálózat rendelkezik egy úgynevezett &#039;&#039;AS Number&#039;&#039;-rel (röviden ASN), ami azonosítja. Az ASN-t és a hozzátartozó, belül elérhető IP címeket BGP (Border Gateway Protocol) protokollon keresztül kell hirdetni, ami jelenleg az egyetlen elérhető EGP (Exterior Gateway Protocol) protokoll (figyelem, korábban mint IGP protokoll szerepelt a listában, amelyből több is létezik). A BGP protokoll működéséhez Peer-eket kell felvennünk, kapcsolatot kell felépítenünk egy olyan eszközzel, aki már részese az &#039;&#039;internet&#039;&#039; hálózatának és továbbítani tudja a szabályainkat (mindkét oldalon konfigurálni kell, ez biztosítja, hogy nem léphet be bárki ebbe a „zárt” hálózatba).&lt;br /&gt;
&lt;br /&gt;
Egy ilyen AS lehet az otthoni hálózatunk is: teljes mértékben mi döntünk a belső felépítéséről, a szolgáltató nem szólhat bele. Az egyetlen eltérés, hogy nekünk nem kell az ASN-t hirdetni a szolgáltató felé - de Ő hirdetni fogja a mi publikus IP címünket a világon működő egyéb AS-ek felé. Mi általában a részévé válunk az Ő hálózatának, csúnyán szólva az Ő AS-ének. Ezeket az otthoni hálózatokat a szakirodalom &#039;&#039;stub network&#039;&#039;-nek nevezi - mintegy sziget az óceánon, amelyre egyetlen híd vezet a szárazföldről. Léteznek &#039;&#039;non-stub network&#039;&#039; megoldások is, amihez a szolgáltató (vagy szolgáltatókkal) való szoros együttműködés keretein belül lehet létrehozni és természetesen magasabb költségekkel kell számolnunk.&lt;br /&gt;
&lt;br /&gt;
= Stub / non-stub network =&lt;br /&gt;
Ahogy korábban említettem, ez egy olyan hálózat, amelybe egyetlen úton lehet bejutni illetve onnan egyetlen útvonalon lehet kijutni. A megfogalmazásnak annyi problémája van - látjuk a későbbiekben -, hogy a hálózatunk több szolgáltatóhoz is be lehet kötve - ekkor a hálózatból több kijárat is adódik -, de mégis konfigurálható elszigetelt hálózatként. A kulcs az, hogy a &#039;&#039;stub network&#039;&#039; esetében a szolgáltató(k) felé többnyire a teljes tartományunk hirdetjük. Ehhez a típushoz szorosan kötődik a belsőhálózaton az alapértelmezett átjáró (0.0.0.0/0) fogalma. A &#039;&#039;non-stub&#039;&#039; esetében a hálózatunkon belül elérhető nagyobb csomópontok is hirdetésre kerülnek - emiatt elképzelhető, hogy az egyik eszközt &#039;&#039;A&#039;&#039;, míg a másik eszközt &#039;&#039;B&#039;&#039; szolgáltatón keresztül érjük el. Az útvonalak dinamikusan, a szolgáltató route táblájában található költségek alapján változhatnak. Az egy szolgáltatóval kötött szerződés keretein belül &#039;&#039;non-stub&#039;&#039; hálózatot létesíteni nem értelmezhető, hiszen semmilyen optimalizálást nem érünk el vele: mindenképp ugyanazon a kapcsolaton keresztül fogunk kommunikálni.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
! Stub network || Non-stub network&lt;br /&gt;
|-&lt;br /&gt;
| [[Fájl:Single Multihomed Stub Network.png|keretnélküli|500px|nyújtás|alt=Stub Network|Stub network]] || &lt;br /&gt;
[[Fájl:Single Multihomed Non Stub Network.png|keretnélküli|500px|középre|Non-Stub network]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Redundancia =&lt;br /&gt;
A fent említett két típus az útvonal optimalizálásra van hatással, de van lehetőségünk a redundanciát szem előtt tartva különböző kapcsolattípusok kialakítására. Fontos megemlíteni, hogy a hálózatunk vagy &#039;&#039;stub network&#039;&#039; vagy &#039;&#039;non-stub network&#039;&#039; kategóriába esik mindettől függetlenül!&lt;br /&gt;
&lt;br /&gt;
== Single Homed (Stub Network) ==&lt;br /&gt;
A tipikus szolgáltató-ügyfél kapcsolat mind ebbe a kategóriába esik: egy router és egy vezeték a szolgáltató felé. Ennek a kapcsolattípusnak a legrosszabb a rendelkezésreállása, mivel nem rendelkezik semmilyen redundanciával.&lt;br /&gt;
[[Fájl:Single Homed.png|keretnélküli|középre]]&lt;br /&gt;
&lt;br /&gt;
== Dual Homed ==&lt;br /&gt;
Ez a kapcsolattípus több módon is létrejöhet. Az egyik megjelenési forma, amikor a vásárlói oldalon egy routerbe két vezetéken keresztül kapcsolódik a szolgáltató, de megvalósítható a vásárlói oldalon két routerrel, amelybe ugyanaz a szolgáltató kapcsolódik.&lt;br /&gt;
[[Fájl:Dual Homed version 1.png|keretezett|középre|Egy router, két vezeték a szolgáltatóhoz]]&lt;br /&gt;
[[Fájl:Dual Homed version 2.png|keretezett|középre|Két router ugyanahhoz a szolgáltatóhoz kötve]]&lt;br /&gt;
&lt;br /&gt;
== Multihomed kapcsolatok ==&lt;br /&gt;
Ezek esetében több (legalább kettő) szolgáltatónál vásárolunk hálózati hozzáférést.&lt;br /&gt;
&lt;br /&gt;
=== Single Multihomed ===&lt;br /&gt;
Egy routeren építünk fel a szolgáltatóval 1-1 kapcsolatot, vagy két routeren 1-1 kapcsolatot alakítunk ki a két szolgáltató felé. Itt valójában a Single kifejezés arra utal, hogy egy-egy szolgáltató felé egy vezetéken tudunk kommunikálni.&lt;br /&gt;
[[Fájl:Signle Multihomed version 1.png|keretezett|középre]]&lt;br /&gt;
[[Fájl:Single Multihomed version 2.png|keretezett|középre|2 router, 2 szolgáltató, 1-1 kapcsolat]]&lt;br /&gt;
&lt;br /&gt;
=== Dual Multihomed ===&lt;br /&gt;
Ebben az esetben a szolgáltatókhoz több vezetéken keresztül építünk fel kapcsolatot. Több formában is létrehozható: a vásárlói oldalon egy vagy két routerrel. Ezek a megoldások igen költségesek tudnak lenni, de a hiba lehetőségét közel nullára csökkentik.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Dual Multihomed version 1.png|keretezett|középre|1 router, két szolgáltató, 2-2 kapcsolat]]&lt;br /&gt;
[[Fájl:Dual Multihomed version 2.png|keretezett|középre|2 router, 2 szolgáltató, 2 kapcsolat]]&lt;br /&gt;
&lt;br /&gt;
A legjobb rendelezésreállást biztosító elrendezés, ám a legköltségesebb is egyben.&lt;br /&gt;
[[Fájl:Dual Multihomed version 3.png|keretezett|középre|2 router, 2 szolgáltató, 2 kapcsolat (X)]]&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=H%C3%A1l%C3%B3zat_rendelkez%C3%A9sre%C3%A1ll%C3%A1s_sz%C3%A1m%C3%ADt%C3%A1s&amp;diff=844</id>
		<title>Hálózat rendelkezésreállás számítás</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=H%C3%A1l%C3%B3zat_rendelkez%C3%A9sre%C3%A1ll%C3%A1s_sz%C3%A1m%C3%ADt%C3%A1s&amp;diff=844"/>
		<updated>2026-09-14T08:04:46Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Számolási elgépelés javítása (0.1% -&amp;gt; 0.01%, konzisztens a végösszeggel)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amennyiben magas rendelkezésreállású hálózatot tervezünk, akkor redundanciát kell kialakítanunk. Ezen az [[ISP csatlakozási típusok|oldalon]] összegyűjtöttem milyen módon csatlakozhatunk a szolgáltatókkal, ám ott nem esett szó számszerű értékekről a hiba lehetőségét tekintve. A következőkben felsorolok pár kapcsolást a hozzá tartozó hiba valószínűséggel.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A hibák valószínűségét mindenhol 1%-nak vettem, de ez messze nem igaz a hálózat minden elemére!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= 1 router - N router kapcsolat =&lt;br /&gt;
Ebben a fejezetben a kapcsolat egyik oldalán fixen egy router lesz, a másik oldalon pedig maximum kettő. A közöttük lévő vezetékek száma szintén maximum kettő.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router kapcsolat ==&lt;br /&gt;
[[Fájl:Fail 1-1 router.png|1000px|keretnélküli|középre]]&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben hibát okozhat, ha a bal oldali router megy tönkre (1%), a vezeték megy tönkre (1%) vagy jobb oldali router megy tönkre (1%). A vagy kapcsolat miatt az értékek összeadódnak, így összesen 3% valószínűséggel nem fogja tudni a csomagot továbbítani ez a kapcsolattípus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Fail Dual Homed.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben a routerek között két vezeték található, amelyek 1-1% valószínűséggel mehetnek tönkre. A kapcsolat csak akkor szakad meg, ha a bal oldali router (1%) vagy mind a két vezeték, vagy a jobb oldali router (1%) megy tönkre. Az előbbiek alapján láthattuk, hogy a vagy kapcsolat miatt az értékek összeadódnak, ám a vezeték esetében ÉS kapcsolat van, tehát azok hiba valószínűségét szorozni kell: 0.01*0.01 = 0.0001, azaz 0.01% valószínűséggel fog mindkét kábel tönkremenni. Ebből adódóan a teljes kapcsolás 2.01% valószínűséggel nem fogja továbbítani a csomagokat.&lt;br /&gt;
&lt;br /&gt;
== 1-2 router kapcsolat ==&lt;br /&gt;
[[Fájl:Fail 1-2 router.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben egyértelműen bajba kerülünk, ha a bal oldalon lévő egyetlen router tönkremegy (1%). Azonban mindkét vezetéknek vagy mindkét routernek tönkre kell mennie (ezt előző számításból tudjuk, hogy 0.01% eséllyel megy tönkre mind a kettő), vagy az egyik vezetéknek és a másik jobb oldali routernek (0.01% eséllyel megy ilyen formában tönkre, de 2 kombinációban teheti ezt meg). A képletünk tehát 1% + 0.01% (két vezeték) + 0.01% (két router) + 0.01% * 2 (egyik vezeték másik router), tehát összesen 1.04% eséllyel nem fogja ez a kapcsolás a csomagjainkat továbbítani. Jól látható, hogy a +1 router nagyobb mértékben csökkentette a hiba lehetőségét.&lt;br /&gt;
&lt;br /&gt;
= 2 router - 2 router kapcsolat =&lt;br /&gt;
&lt;br /&gt;
== 1-1 router csak 1 másik routerrel áll kapcsolatban egy vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-1 router 1-1 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ebben az esetben két ág keletkezik, bármelyiken lehetséges az információk továbbítása. A rendszer akkor válik elérhetetlenné, ha mind a két ág kiesik. Egy ág akkor esik ki, ha valamelyik router kiesik (vagy kapcsolat) vagy a vezeték közöttük meghibásodik. Ezt korábban kiszámoltuk, hogy 3% valószínűséggel okoz problémát. A két ágnak együtt kell meghibásodnia, hogy a rendszer működésképtelen legyen (és kapcsolat), tehát összességében 0.09% eséllyel nem fogunk tudni információt továbbítani egy ilyen hálózaton.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router csak 1 másik routerrel áll kapcsolatban két vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-1 router, 2-2 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ez az eset hasonló az előzőhöz, azonban két-két vezetékkel kötöttük össze a routereket. Ezt az előzőek alapján tudjuk, hogy az egyes ágak hibalehetősége 2.01%-ra változik. A teljes rendszer szintén akkor lesz működésképtelen, ha mind a két ágon hiba történik (és kapcsolat), tehát 0.0404% esély adódik arra, hogy egy ilyen  hálózat nem fog működni.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router 2 másikkal áll kapcsolatban, egy vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:1-2 router, 1-1 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Ez egy igen kis hibalehetőséggel működő kapcsolás. Az előzőekhez képest óriási előnye, hogy az egyes ágak nem külön-külön működnek, tehát egy vezeték tönkremenetele esetén továbbra is elérhető mind a négy router. A kapcsolás hibavalószínűségét úgy a legegyszerűbb kiszámolni, ha visszavezetjük az 1 router - 2 router kapcsolatra (fentebb) és annak a valószínűségét négyzetre emeljük. Így 0.011% az eredmény, tehát ekkora eséllyel nem fog működni a hálózatunk.&lt;br /&gt;
&lt;br /&gt;
== 1-1 router 2 másikkal áll kapcsolatban, két vezetékkel összekapcsolva ==&lt;br /&gt;
[[Fájl:2-2 router, 2-2 link.png|1000px|keretnélküli|középre]]&lt;br /&gt;
Az előző kapcsolást fejleszthetjük tovább oly módon, hogy két kapcsolatot létesítünk minden router között. Azt már tudjuk, hogy ez esetben a kapcsolat működésképtelensége 0.01%-ra csökken az eredeti 1%-kal számolva vezetékenként. A számítási mód ugyanaz, mint az előző esetben, csak a vezeték meghibásodásának valószínűségét kell az új értékre cserélnünk. Így tehát 0.0001% valószínűségűre tudjuk szorítani a hibát.&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=843</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=843"/>
		<updated>2026-09-14T07:56:10Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Elgépelés javítása a PHP5 kódpéldában (mamximum -&amp;gt; maximum)&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 projektfeladatbó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 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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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 maximum 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=GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::El%C5%91ad%C3%A1s&amp;diff=842</id>
		<title>GAMF::Felhőalapú-szolgáltatások::Előadás</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::El%C5%91ad%C3%A1s&amp;diff=842"/>
		<updated>2026-09-14T07:55:48Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Felhőbiztonság fejezet megírása (IAM, hálózati biztonság, titkosítás, monitorozás, DDoS/WAF, tipikus hibák, megfelelőség)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bérelt szervertől (VPS) a felhő megoldásokig =&lt;br /&gt;
A legalapvetőbb feladat, amit egy szerverre szeretnénk bízni, hogy szolgálja ki a weboldalunkat. Szerencsére ehhez ingyenesen elérhető tárhelyek is rendelkezésünkre állnak, mint például a [https://nethely.hu nethely]. Az ingyenes változatok gyakran reklámokkal tűzdelik tele weboldalunkat és/vagy olyan tárhely korlátokkal vehetjük igénybe, amelyekkel egy komolyabb alkalmazás esetén nem ússzuk meg a fizetős változatok megrendelését. Azonban jó ha tudjuk, hogy ezek a szolgáltatások főleg PHP alkalmazások futtatására alkalmasak, a ma népszerű NodeJS kódokat nem tudják futtatni.&lt;br /&gt;
&lt;br /&gt;
== VPS ==&lt;br /&gt;
Ha nem csupán egy tárhelyet szeretnénk bérelni - ennek oka lehet, hogy nem tudja a tárhely szolgáltató futtatni alkalmazásunkat (pl. NodeJS), vagy annyira komplikált/bonyolult az üzemeltetése, hogy nem fér bele a sablonos keretekbe -, akkor bérelhetünk virtuális szervereket is: VPS-t (Virtual Private Server). Ekkor egy virtuális „vasat” kapunk, amire korlátozott, de széles választékból telepíthetünk operációs rendszert és kedvünk szerint konfigurálhatjuk azt. Ez a legelterjedtebb megoldás, azonban ezen szolgáltatásoknak is meg vannak a szintjei:&lt;br /&gt;
# VPS bérlés - a fent említett módon, virtuális környezetben létezik szerverünk&lt;br /&gt;
# Dedikált szerver - Egy komplett szerverhez kapunk hozzáférést. Többnyire igen drága szolgáltatás.&lt;br /&gt;
&lt;br /&gt;
A szolgáltató ezeket a rendszereket általában monitorozzák, illetve webes felületet biztosítanak, hogy újra tudjuk indítani/telepíteni, távoli asztallal rá tudjunk csatlakozni stb. A rendszert azonban nekünk kell karbantartanunk, így a vírusok, támadások ellen többségében nekünk kell kivédenünk (természetesen egy valamirevaló szolgáltató rendelkezik IDS/IPS rendszerekkel, de ügyeljünk rá, hogy ezek nem adnak százszázalékos védelmet). Ilyenkor mi telepítjük fel és frissítjük a webkiszolgálót, az adatbáziskezelőt, amennyiben szükségünk van rá és az alkalmazáshoz szükséges minden csomagot nekünk kell naprakészen tartanunk.&lt;br /&gt;
&lt;br /&gt;
== Saját globális hálózat ==&lt;br /&gt;
Míg egy kis cégnek elegendő egyetlen VPS, amelyen fut a webkiszolgáló és az SQL szerver is, egy nagyobb cégnek, gyakrabban látogatott alkalmazásoknak célszerű szét darabolni az elemeit - külön SQL szerver, külön fájl szerver és külön kiszolgáló. Ennek a háromnak folyamatosan kommunikálni kell egymással (lényeges a közöttük kialakított hálózat minősége), de egy támadás a webkiszolgáló felé valószínűleg nem fogja elérhetetlenné tenni a fájlszerverünket és az adatbázisunkat, ezzel együtt pedig az adatokat is megvédtük a behatolók elől. Ezzel le is írtunk egy mini felhőt.&lt;br /&gt;
Sok alkalmazás esetében azonban ez sem volt elegendő: hol adatvédelmi okból, hol a rendelkezésreállás javítása miatt clustereket hoztak létre, esetleg datacentereket létesítettek a világ több pontján. Ezek gyakorlatilag egyeznek a ma privát felhőként emlegetett megoldással, komplexitásuk megközelíti a ma igénybevehető szolgáltatások mögött található rendszerek bonyolultságát.&lt;br /&gt;
&lt;br /&gt;
== Felhőszolgáltatás ==&lt;br /&gt;
A fentebb említett cluster illetve datacenter kialakítások igen költségesek. Mivel a szolgáltatók ezeket már kiépítették világszerte, így célszerű ebbe bekapcsolódni ahelyett, hogy a sajátunkat kezdenénk el megtervezni. Egy szolgáltatás igénybevételével hozzáférhetünk a teljes hálózathoz, így például nagyon egyszerűen biztosíthatjuk, hogy Amerikában ugyanolyan gyorsan töltsön be weboldalunk, mint Magyarországon - természetesen nem ugyanarról a szerverről. Emlékezzünk vissza, hogy ezekkel a tulajdonságokkal régebben nagyon kevés cég (Google, Microsoft) rendelkezett és csakis azért kezdtek el adatközpontokat létesíteni a világ más pontjain, hogy ne kelljen az óceán fenekén húzódó optikai kábeleken keresztül, nagy távolságon és sok hálózati ugráson át elérnünk a szolgáltatást (ami jelentős késleltetést (latency) okozna), amikor például Európából akarjuk böngészni a weboldalukat. Ha ma megnézzük az elérhető felhőszolgáltatókat, akkor pontosan ezeket a „mamut cégeket” fogjuk megtalálni a piacon.&lt;br /&gt;
&lt;br /&gt;
Ritka ugyan, de manapság is előfordul, hogy saját felhőt alakítanak ki maguknak cégek: például az Instagram eleinte az Amazon Web Services hálózatát használta fel, hogy a világ minden táján elérhető legyen, majd a Facebook általi felvásárlása (2012) után fokozatosan átköltöztették a Facebook saját infrastruktúrájára.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A felhőszolgáltatások előnyei egyben hátrányként is szolgálnak:&#039;&#039;&#039;&lt;br /&gt;
* A felhőben általában csak az elhasznált erőforrásokért fizetünk (gyakran idő alapon) - ez gyakorlatilag nagyon nehézzé teszi a költségtervezést&lt;br /&gt;
* A felhő biztosítja számunkra, hogy az adataink mindig elérhetők legyenek - a nagy szolgáltatók (pl. AWS) ma már régió szintjén garantálják, hogy az általunk kiválasztott adatközpont-régión belül maradnak az adatok (pl. van kifejezetten EU-s régió is), de érdemes tudni, hogy egyes globális/menedzselt szolgáltatásaik alapértelmezetten több régió között replikálhatnak, ha ezt nem konfiguráljuk explicit módon régióhoz kötötten. Emiatt egy bizalmas adatokat kezelő cégnek (pl. bank) az EU-s adatvédelmi (GDPR) elvárások miatt mindig tudatosan, szerződéses garanciákkal (Data Processing Agreement, adott régióra korlátozás) kell konfigurálnia a felhős környezetét, nem elég csak &amp;quot;belefutni&amp;quot; az alapértelmezett beállításokba.&lt;br /&gt;
&lt;br /&gt;
Érdemes azt is megjegyezni, hogy az alacsony költségek igen relatívak. Sok cég még ma sem engedheti meg magának, a felhőbe költöztesse az alkalmazásait. Ennek egyik oka az említett adatbiztonsági szabályozás az EU tagjaként, de benne lehet a bizalmatlanság és a vélt forgalomhoz becsült árak és a szintén említett kiszámíthatatlanság. Sok cégnek még ma is jobban megéri egy VPS szolgáltatást igénybe venni, főleg ha nem akar a határokon kívülieket megszólítani. Az alacsony költségek főleg ott értelmezhetők, ahol speciális eszközök (TensorCore, GPU) kellenek rövid időre, illetve a cég felhőszolgáltató hiányában saját globális hálózatot építene ki magának a Google-höz és a Microsoft-hoz hasonlóan.&lt;br /&gt;
&lt;br /&gt;
== Ajánlott VPS szolgáltatók ==&lt;br /&gt;
A szolgáltatás árak egy cég számára talán nem magasak, ám egy tanuló informatikus számára, aki csupán azért szeretne bérelni egy szervert, hogy kipróbálja az iskolában tanultakat (esetleg máshol olvasottakat), neki minden fillér számítani fog. Amennyiben az egy éves próbaidőszakon túl is szeretnél szerverekkel, azok konfigurációjával foglalkozni, akkor a következő szolgáltatókat ajánlom figyelmedbe:&lt;br /&gt;
* [https://contabo.com/en/ Contabo] - egy német cég, igen alacsony bérleti árakkal (évi 20.000HUF kb., természetesen Euróban). Hátránya, hogy Németországban lesz a szervered, ami földrajzilag távol esik, főleg ha VPN szerű alkalmazásokkal is próbálkozni szeretnél. Hozzá kell tenni, hogy a BIX (&#039;&#039;Budapest Internet Exchange&#039;&#039;), ami Magyarország fő kilépési pontja a világháló felé, Frankfurtból kapja szolgáltatását. Innen nézve Németország nincs is olyan messze...&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások, amelyek segítségével felügyelhetjük a szerverünket ==&lt;br /&gt;
&#039;&#039;Az alkalmazások a felhőben létrehozott IaaS szolgáltatásokra is telepíthetők&#039;&#039;&lt;br /&gt;
* [https://zabbix.com Zabbix] - Telemetria rendszer, amely alkalmas konténerek és alkalmazások monitorozására a szerver alapvető (CPU, RAM, HDD) tulajdonságain túl.&lt;br /&gt;
* [https://www.nagios.org Nagios] - a Zabbixhoz hasonló Telemetria rendszer&lt;br /&gt;
* [https://openvas.org OpenVAS] - A szerveren futó alkalmazások verziószámát összeveti a CVE adatbázissal (pl. [https://cve.mitre.org cve.mitre.org] és naplózza a talált hibákat. Segítségével értesülhetünk a hibákat tartalmazó szoftvereinkről és még idejében frissíthetjük, lecserélhetjük azokat, mielőtt egy hacker találna rá. Nagyon fontos, hogy az információkat bejelentkezés nélkül szedi össze, tehát csupán a publikum számára is elérhető információk alapján keres. További információkért keresd fel az [https://nmap.org/book/man-nse.html nmap scripts] oldalt.&lt;br /&gt;
&lt;br /&gt;
= Felhő ökoszisztéma =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 13-40.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A skálázásnak mélyreható következményei vannak a menedzsmentet tekintve: egyik oldalon a rendszernek rugalmasnak kell lennie, tudnia kell kezelni a hirtelen megnövekvő terhelést is; míg a másik oldalon optimalizálnia kell az energiafelhasználást. Természetesen ezeket a nehézségeket el kell rejteni a felhasználó elől egy jól átlátható, könnyen használható felület mögé.&lt;br /&gt;
&lt;br /&gt;
== Szolgáltatási szintek ==&lt;br /&gt;
&lt;br /&gt;
==== IaaS, azaz Infrastructure as a Service ====&lt;br /&gt;
Ez a szolgáltatásszint a tárhelyet, hálózatot és egyéb alapvető számítási erőforrásokat foglal magában. Ez esetben a bérlő természetesen nem fér hozzá a felhő belső infrastruktúrájához, de testreszabhatja a vásárolt virtuális gép erőforrásait: tárhelyméret, CPU, memória, operációs rendszer, terhelés elosztás (...) és saját virtuális hálózatot, internet kilépési pontot konfigurálhat köré. Ez a szolgáltatásszint hasonlít a korábban tárgyalt VPS-hez.&lt;br /&gt;
A modell akkor lehet hasznos, ha egy induló vállalkozásnak számítási kapacitásra van szüksége, de nem akar saját szervereket karbantartani, vagy ha a szervezet gyorsan növekszik.&lt;br /&gt;
&lt;br /&gt;
==== PaaS, azaz Platform as a Service ====&lt;br /&gt;
Lehetővé teszi, hogy a bérlő saját alkalmazásokat futtasson a felhőben, természetesen azzal a megkötéssel, hogy a szolgáltató támogatja az adott programkészletet. Ebben az esetben a bérlőnek nem kell üzemeltetési kérdésekkel foglalkoznia - operációs rendszer, CPU, memória, tárhely, hálózat (...) - csupán a saját programjára és az ahhoz kapcsolódó konfigurációs lehetőségekre kell koncentrálnia.&lt;br /&gt;
Ez a szolgáltatásszint nem ésszerű választás, ha az alkalmazásnak hordozhatónak kell lennie, ha szabadalom alatt álló programozási nyelvet használunk vagy ha az alkalmazás erőforrásait konfigurálni szeretnénk. Gyakran szoftverfejlesztők használják, amikor több fejlesztő dolgozik együtt és mind a fejlesztési mind a tesztelési szolgáltatásokat automatizálni kell.&lt;br /&gt;
&lt;br /&gt;
==== SaaS, azaz Software as a Service ====&lt;br /&gt;
A szolgáltatások ezen szintjén sem az alkalmazás kódját, sem az alatta futó infrastruktúrát nem ismerjük. Tipikus példa az email vagy a keresés, ahol használjuk az alkalmazást, esetleg testreszabhatjuk (kinézet, logó, név stb.), de többnyire nem rendelkezünk információkkal (vagy teljesen lényegtelen a használat szempontjából), hogy milyen programnyelven készültek és milyen közegben működnek. Lehetnek ilyen alkalmazások továbbá asztali / telefonos alkalmazások, de például számlázó végpontok is. Fontos figyelembe venni, hogy a felhőbe érkező kérések nem valósidőben kerülnek feldolgozásra, így csak azon programok esetén használható, amelyek ezt nem követelik meg.&lt;br /&gt;
&lt;br /&gt;
==== DBaaS, azaz Database as a Service ====&lt;br /&gt;
Ez a szolgáltatás garanciát ad azonnali skálázhatóságra, teljesítményre; a legújabb technológiákat használja és rendelkezik hibakezeléssel. A legfontosabb tulajdonságai:&lt;br /&gt;
# Self-service: különösebb konfigurálás nélkül elindítható. Nem csökkentett teljesítménnyel rendelkezik és nincs telepítési díj.&lt;br /&gt;
# Eszköz és helyfüggetlen adatbázis erőforrás&lt;br /&gt;
# Rugalmasság és skálázhatóság&lt;br /&gt;
# Annyit fizetsz, amennyit használsz&lt;br /&gt;
# Zökkenőmentes váltás a verziók / technológiák között&lt;br /&gt;
&lt;br /&gt;
A szolgáltatás réteges architektúrát alkalmaz:&lt;br /&gt;
* UI réteg: interneten keresztül elérhetővé teszi a szolgáltatást&lt;br /&gt;
* Alkalmazás réteg: A szoftver szolgáltatásait és a tároló réteget is eléri&lt;br /&gt;
* Adatbázis réteg: hatékony és megbízható szolgáltatást nyújt - például menti az utolsó lekérdezéseket, hogy ismétlődés esetén ne kelljen újra lefuttatnia azokat&lt;br /&gt;
* Adat tároló réteg: adatok titkosítása, biztonsági mentések és lemezfigyelők találhatók itt&lt;br /&gt;
&lt;br /&gt;
==== IaC, azaz Infrastructure as Code ====&lt;br /&gt;
Az infrastruktúra vezérlése magas szintű leírónyelv (deklaratív konfigurációs fájlok) segítségével, kézi kattintgatás helyett. Fontos leszögezni, hogy az IaC önmagában &#039;&#039;&#039;nem&#039;&#039;&#039; követeli meg sem a mikroszolgáltatás-architektúrát, sem a konténerek használatát - ugyanígy leírható vele akár egyetlen monolitikus alkalmazáshoz tartozó hagyományos virtuális gép, hálózat vagy adatbázis is. Az IaC segítségével megadhatjuk, hogy milyen erőforrásokat (EC2, VPC, RDS stb.) szeretnénk elindítani, milyen kapcsolatban álljanak egymással, és ez a leírt állapot verziókezelhető, újrafelhasználható és automatizáltan alkalmazható a felhőben. A legsűrűbben használt eszköz az &#039;&#039;Ansible&#039;&#039; és a &#039;&#039;Terraform&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Összefoglalás ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Megosztott biztonsági felelősség (SSR) modell a szolgáltató (félkövér) és az ügyfelek között&lt;br /&gt;
|-&lt;br /&gt;
! SaaS !! PaaS !! IaaS&lt;br /&gt;
|-&lt;br /&gt;
| Felhaszálói hozzáférés || Felhaszálói hozzáférés || Felhaszálói hozzáférés&lt;br /&gt;
|-&lt;br /&gt;
| Adatok || Adatok || Adatok&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Alkalmazások&#039;&#039;&#039; || Alkalmazások || Alkalmazások&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Operációs rendszer&#039;&#039;&#039; || &#039;&#039;&#039;Operációs rendszer&#039;&#039;&#039; || Operációs rendszer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hálózati forgalom&#039;&#039;&#039; || &#039;&#039;&#039;Hálózati forgalom&#039;&#039;&#039; || Hálózati forgalom&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hypervisor&#039;&#039;&#039; || &#039;&#039;&#039;Hypervisor&#039;&#039;&#039; || &#039;&#039;&#039;Hypervisor&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Infrastruktúra&#039;&#039;&#039; || &#039;&#039;&#039;Infrastruktúra&#039;&#039;&#039; || &#039;&#039;&#039;Infrastruktúra&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Felhők típusai ==&lt;br /&gt;
==== Privát felhő ====&lt;br /&gt;
Az adatok nincsenek megosztva harmadik féllel, a kontrollt teljes egészében a struktúrát kialakító rendszergazda kezében van. Természetesen nem korlátozódik a cég helyszínén üzemeltetett szerverekre a fogalom, szóba jöhetnek harmadik féltől bérelt VPS, VDS, de komplett bérelt szerverek is, de általában az eszközök VPN alagúton keresztül cserélnek információt, ezzel védve az adatokat.&lt;br /&gt;
&lt;br /&gt;
==== Publikus felhő ====&lt;br /&gt;
Az adatokat egy harmadik fél által kialakított hálózaton keresztül használjuk, ami a csomagokat a publikus IP hálózaton keresztül továbbítják egymás között. Óriási előnye, hogy nincs üzemeltetési költsége a szolgáltatást igénybe vevőnek, általában a CPU idő után kell fizetni, tehát flexibilis költséget hoz magával.&lt;br /&gt;
&lt;br /&gt;
==== Hibrid felhő ====&lt;br /&gt;
A publikus és a privát felhő kombinációja, így a kiemelt biztonságot igénylő adatok nem kerülnek ki az internetre, míg a kevésbé érzékeny adatok továbbíthatók a publikus felhő segítségével, ezzel kihasználva annak minden előnyét.&lt;br /&gt;
&lt;br /&gt;
== AWS szolgáltatásai ==&lt;br /&gt;
Az AWS első körben IaaS szolgáltatásokat nyújt, nagy sebességű hálózaton összekötött feldolgozóegységet és tárolóegységeket tartalmazó infrastruktúrát és az ezeket támogató szolgáltatáshalmazt kínál.&lt;br /&gt;
&lt;br /&gt;
=== Feldolgozás, adattárolás és kommunikációs szolgáltatások ===&lt;br /&gt;
==== Elastic Compute Cloud (EC2) ====&lt;br /&gt;
Egy szolgáltatás, amely egyszerű felület segítségével teszi lehetővé, hogy szerver példányokat futtassunk a felhőben. Létrehozáskor meg kell adnunk az operációs rendszert, amely lehet Linux alapú, OpenSolaris, FreeBSD, NetBSD, de akár a Windows Server különböző verziói közül is választhatunk. Szintén ki kell választanunk, hogy melyik régióban és melyik rendelkezésreállási zónában szeretnénk futtatni, ahogy az erőforrásigény szerint létrehozott különböző típusok közül is választatnunk kell. A nagyobb teljesítmény magasabb költségekkel rendelkezik.&lt;br /&gt;
&lt;br /&gt;
A létrehozott szerver rendelkezik belső és külső IP címekkel és a hozzájuk tartozó domain nevekkel is. Ezeket a címeket leállításkor elveszíti és újraindításkor kap újat. A címek tehát dinamikusak, ami egy szerver esetében ritka jelenség. Van lehetőségünk azonban statikus IP címek (Elastic IP) igénylésére is. &#039;&#039;&#039;Figyelem, 2024 februárja óta megváltozott az árazási modell:&#039;&#039;&#039; korábban csak a nem használt (egyetlen futó szerverhez sem csatolt) statikus IP-kért kellett fizetni, ma viszont az AWS &#039;&#039;&#039;minden&#039;&#039;&#039; publikus IPv4 címért számláz óránként, függetlenül attól, hogy csatolva van-e egy futó szerverhez. Az IP címtartományok zónánként változnak.&lt;br /&gt;
&lt;br /&gt;
A szerver példányok létrehozhatók előre definiált képfájlokból - &#039;&#039;Amazon Machine Image&#039;&#039; (AMI) -, vagy egy a felhasználó által létrehozott készletből. Az AMI képfájlok másolatot készítenek egy meglévő rendszerről - könyvtárak, applikációk, amelyeket a felhasználó saját maga telepített fel - kivéve a alsóbb szintű konfigurációs paramétereket, mint például a &#039;&#039;hostname&#039;&#039; vagy a MAC címek.&lt;br /&gt;
&lt;br /&gt;
Egy EC2-ben létrehozott szerver interakcióba léphet egyéb más szolgáltatásokkal is, mint például S3, EBS, DynamoDB stb.&lt;br /&gt;
&lt;br /&gt;
==== Simple Storage Service (S3) ====&lt;br /&gt;
Nagy objektumok tárolására alkalmas szolgáltatás. A minimálisan szükséges funkciókkal rendelkezik: írás, olvasás és törlés. A szolgáltatás lehetővé teszi egy alkalmazás számára, hogy korlátlan mennyiségű objektumot kezeljen 1 bájt mérettől egészen 5 terabájtig. Az objektumok úgynevezett &#039;&#039;bucket&#039;&#039;-ban tárolódnak, amelynek egyedi azonosítója van és a felhasználó által kiválasztott régióban helyezkedik el. Az objektumokhoz állíthatunk be hozzáférési listát (ACL), amellyel kontrollálhatjuk, hogy ki milyen fájlokhoz, milyen módon férhet hozzá. Elérését egy REST illetve egy SOAP API biztosítja, alapvetően HTTP(S) alapon. &#039;&#039;(Régebben BitTorrent protokollon keresztüli hozzáférés is elérhető volt, de ezt az AWS 2021-ben megszüntette.)&#039;&#039; Az egyes fájlokhoz MD5 hash (ETag) készül, így letöltés után ellenőrizhető a fájlok helyessége.&lt;br /&gt;
&lt;br /&gt;
==== Elastic Block Store (EBS) ====&lt;br /&gt;
Tartós tár, amelyet az EC2-höz csatolva használunk: egy fizikai lemezként megjelenő meghajtó. Mérete kötettípustól függően akár 16 tebibájtig (gp3, io1/io2) is terjedhet. A meghajtók a rendelkezésreállási zónán belül csoportosításra kerülnek, majd replikációkat hoznak létre az egyéb zónákban. Egy EC2 több EBS-t is használhat, és jellemzően egy EBS is csak egy EC2-höz lehet aktívan hozzárendelve (kivétel az io1/io2 Multi-Attach funkció, ami korlátozott esetekben több példányhoz is engedi csatolni ugyanazt a kötetet). Használható pillanatképek létrehozására egy szerverpéldányból, hogy később ezt felhasználva új EC2 példányt indíthassunk belőle.&lt;br /&gt;
&lt;br /&gt;
==== DynamoDB ====&lt;br /&gt;
Az AWS natív NoSQL (kulcs-érték és dokumentum modellű) adatbázis szolgáltatása, amely web szolgáltatásokon keresztül teszi lehetővé a fejlesztők számára az adatok manipulálását. A szolgáltatás több, földrajzilag távol eső helyeken is képes másolatot készíteni (globális táblák). Támogatja a nagy teljesítményigényű alkalmazásokat, automatikusan skálázza a használat alapján az erőforrásokat, a táblában található indexeket és kezeli az adatbázis replikációkat. &#039;&#039;(Az AWS korábbi, hasonló célú szolgáltatása a SimpleDB volt, ezt azonban évek óta nem ajánlják új projektekhez, helyette a DynamoDB használata javasolt.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Simple Queue Service (SQS) ====&lt;br /&gt;
Szolgáltatások szinkronizációjára szolgáló üzenetsor, amelybe bejelentkezés nélkül lehet adatokat küldeni. Az üzenetsorok megoszthatók különböző regisztrációk között is. Az egyes üzenetek feldolgozás alatt zárolásra kerülnek, hogy elkerüljék azok többszöri feldolgozását. Amennyiben az üzenet feldolgozása valamilyen okból kifolyólag sikertelen eredménnyel zárul, akkor feloldják, ezáltal újra kivehető a sorból. A hozzáférés IP és idő alapon is tiltható.&lt;br /&gt;
&lt;br /&gt;
==== CloudWatch ====&lt;br /&gt;
Egy monitorozó rendszer, amely telemetria adatokat gyűjt. Segítségével optimalizálható az alkalmazás. Anélkül, hogy a felhasználó bármit telepítene, tucatnyi metrika közül választhat, majd megtekintheti a hozzájuk tartozó grafikonokat. Az alap monitorozás ingyenes, amely 5 percenként gyűjt adatot, de készíthetünk bővebb, 1 perces mintavételezéssel is jelentést. A szolgáltatás monitorozza a az EBS elérésének idejét, az adatbázis hozzáférés idejét és az SQS-ben tárolt adatokat is és természetesen még sok egyéb paramétert.&lt;br /&gt;
&lt;br /&gt;
==== Virtual Private Cloud ====&lt;br /&gt;
A VPC egy saját, elkülönített, logikailag izolált virtuális hálózat az AWS felhőjén belül: hétköznapibb értelemben modellezhetjük egy routerként, amelynek vannak alhálózatai, route táblája és egy internet kilépési pontja (Internet Gateway), amin keresztül a benne futó erőforrások (EC2 stb.) kommunikálnak egymással és a külvilággal. A VPC-n belül tűzfalként funkcionáló Security Groupokat és hálózati ACL-eket is definiálhatunk. Nem kötelező eleme egy VPC-nek, hogy egy meglévő céges hálózathoz kapcsolódjon - ha viszont erre is szükség van, arra külön szolgáltatás áll rendelkezésre: a VPN-alapú Site-to-Site VPN, illetve a dedikált vonalas Direct Connect köti össze a VPC-t egy meglévő, helyi infrastruktúrával.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling ====&lt;br /&gt;
Az Auto Scaling segítségével megadhatunk olyan szabályokat, amelyek segítségével az erőforrásaink dinamikusan változnak. Csoportokat hozhatunk létre, amelyben monitorozhatjuk az EC2 példányainkat, majd triggerek segítségével újabb és újabb példányokat indíthatunk el vagy éppen állíthatunk le, annak függvényében, hogy a csoportban megszabott szabályok szerint az erőforrás kevés vagy sok. A csoportban szereplő EC2 példányokra állíthatunk be teszteket, aminek segítségével információt nyújthatunk a terheléselosztást végző &#039;&#039;Load Balancer&#039;&#039; szolgáltatásnak: így biztosíthatjuk, hogy csak olyan gépek szerepeljenek annak listájában, amelyek elérhetők. A leggyakoribb trigger a CPU: ha a csoport CPU kihasználtsága magas, akkor újabb EC2 példány indul, ami egyúttal csökkenti a csoport CPU terhelését. Ha a csoport CPU terhelése nagyon alacsony (pl. 0%), akkor kevesebb EC2 példány is képes kiszolgálni az aktuális forgalmat, tehát leállít egyet. A létrehozáskor megadhatjuk, hogy milyen értékek között változhat a példányok darabszáma.&lt;br /&gt;
&lt;br /&gt;
==== Cloud Formation ====&lt;br /&gt;
Segítségével JSON fájlban írhatjuk le az alkalmazás futtatásához szükséges infrastruktúrát. Benne leírhatjuk a szükséges erőforrások paramétereit, mint például az instance típusa, az SQL portja vagy mérete.&lt;br /&gt;
&lt;br /&gt;
==== Elastic Beanstalk ====&lt;br /&gt;
Ez a szolgáltatás automatikusan skálázza az erőforrásokat az alkalmazás igényeihez igazítva. Ezt úgy éri el, hogy az Amazon egyéb szolgáltatásait automatikusan paraméterezi: EC2, S3, SNS, Load Balancer, Auto Scaling Group stb.&lt;br /&gt;
&lt;br /&gt;
==== Lambda Service ====&lt;br /&gt;
Egy esemény alapú számítási erőforrás. &#039;&#039;Serverless&#039;&#039;-nek is nevezik a megvalósítást. Ez esetben egy-egy függvényt írunk meg, amit a Lambda egy erősen izolált, könnyűsúlyú mikro-virtuális gépben (AWS Firecracker) futtat le. 2020 óta lehetőség van a függvényt Docker (OCI) image formájában is csomagolni és feltölteni, de ez csak a csomagolás/terjesztés módja - maga a futtatókörnyezet ekkor sem egy hagyományos Docker daemon, hanem ugyanaz a Firecracker alapú izolált környezet. A függvény egy esemény hatására elindul és végrehajtja a benne lévő kódot, majd le is áll - ezért serverless, mert nem kell, hogy folyamatosan fusson egy szerver. Az eredmény általában adatbázisba kerül, de használhat egyéb szolgáltatásokat is, mint például az SQS, SNS stb. Egy alkalmazás több Lambda kifejezésből épül fel általában. Ez esetben a fizetés idő alapú: amennyi ideig használjuk az erőforrást, annyi idő után fogunk fizetni.&lt;br /&gt;
&lt;br /&gt;
=== Régiók és rendelkezésre állási zónák ===&lt;br /&gt;
Az Amazon mára több száz adatközponttal rendelkezik szerte a világban, ezekből épülnek fel a rendelkezésre állási zónák (availability zone) - egy zóna jellemzően egy vagy több, egymáshoz nagyon közeli adatközpontot takar, amelyben nagyságrendileg tízezres nagyságrendű szerver található. (A pontos szerver- és adatközpont-számokat az AWS nem publikálja, ezek becslések.) Minden AWS régió minimum három rendelkezésre állási zónával rendelkezik (ez már évek óta az AWS hivatalos vállalása új régiók indításakor), melyek nagy sebességű hálózaton vannak összekapcsolva. A régiók nem osztanak meg erőforrásokat és nem kommunikálnak az interneten keresztül. A tárhelyek esetében automatikus replikáció jön létre a régiókon belül: az S3 a rendelkezésre állási zónák között, az EBS csak az adott rendelkezésre állási zónán belül. A kritikus alkalmazásokat célszerű több régióban definiálni biztonság szempontból. Az egyes régiók között lehet különbség számlázás (árak) és az elérhető szolgáltatások tekintetében.&lt;br /&gt;
&lt;br /&gt;
=== AWS hálózatok ===&lt;br /&gt;
Minden régió redundáns kapcsolaton keresztül lett összekapcsolva a többi régióval. Ezen kívül privát link kerül kiépítésre a &#039;&#039;Direct Connect&#039;&#039; ügyfelek számára. A legtöbb főbb régió privát linken keresztül került összekötésre, aminek segítségével minimalizálható a szakadások lehetősége.&lt;br /&gt;
&lt;br /&gt;
A rendelkezésre állási zónákon belül akár 25Tbps sebességgel képesek kommunikálni egymással a szolgáltatások, miközben a késleltetés 1-2 ms.&lt;br /&gt;
&lt;br /&gt;
== Átjárhatóság a felhőszolgáltatók között ==&lt;br /&gt;
Miközben a legtöbb szolgáltató arra törekszik, hogy minél több ügyfelet szólítson meg, minden szolgáltatónak vannak erősségei és gyengeségei. Emiatt könnyedén bekövetkezhet, hogy egy cégnek, amelynek addig megfelelő volt XY szolgáltató, hirtelen annak gyengébb minőségű szolgáltatásaival kellene dolgoznia, így a váltás, esetleg az újdonságok más szolgáltatónál történő elhelyezését helyezi kilátásba. Ekkor használjuk a &#039;&#039;vendor lock-in&#039;&#039; kifejezést, ami arra utal, hogy csak rengeteg idő és energia befektetéssel oldhatjuk fel a problémát, ráadásul elképzelhető, hogy épp olyan kellemetlenségekkel jár az új szolgáltatóhoz költöztetés más (régebbi) funkciók esetében, mintha az addigi szolgáltatónál helyeztük volna el az újításokat.&lt;br /&gt;
&lt;br /&gt;
Egy tervezet szerint a szolgáltatók lehetőséget biztosítanak az egymást közötti átjárásra. A problémát messze nem egyszerű feloldani, hiszen nincs szabvány az adattárolásra, kommunikációs megoldásokra - sőt, az egyes szolgáltatók vonakodnak ezeket az információkat egymás között megosztani, hiszen egy hatékonyabb algoritmus sok pénzt spórolhat meg a gazdájának, ami előnybe is hozza a piacon. A szolgáltatók között úgynevezett &#039;&#039;Intercloud exchange&#039;&#039; interfészen keresztül lehetne kommunikálni.&lt;br /&gt;
&lt;br /&gt;
= Adatközpontok belső hálózata =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 175-212.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ennek a fejezetnek a tanulmányozása előtt érdemes átolvasni a következő oldalakat is:&lt;br /&gt;
* [[Tipikus vállalati hálózati struktúra]]&lt;br /&gt;
* [[Hálózat rendelkezésreállás számítás]]&lt;br /&gt;
* [[BGP protokoll]]&lt;br /&gt;
&lt;br /&gt;
== CLOS hálózati topológia elmélete ==&lt;br /&gt;
A clos hálózati topológiát Charles Clos írta le 1953-ban (&amp;quot;A Study of Non-Blocking Switching Networks&amp;quot;, Bell System Technical Journal). A vezetékes telefonokhoz készült, hogy két végpont minden esetben tudjon egymással kommunikálni, független attól, hogy hány ügyfél telefonál egyszerre.&lt;br /&gt;
[[Fájl:Clos topológia.png|középre]]&lt;br /&gt;
A fenti képen látható a használt modell: van egy bemeneti ág (inbound) és egy kimeneti ág (outbound). Mind a Spine (gerinc), mind a Leaf (a fa levelei) switchek. A szabály szerint a Spine esetlegesen üresen maradt portjaira NEM köthetünk semmilyen végponti eszközt, csak és kizárólag a Leaf szintre. A hálózati topológia blokkolásmentes, ha a Spine-Leaf között több vagy egyenlő link van, mint a Leaf-ek és a rájuk kötött végponti eszközök között.&lt;br /&gt;
&lt;br /&gt;
A példában 3 fokozatú (3-stage clos) hálózat látható. Minden ennél nagyobb fokozat elérhető, ha a középső (Spine) switcheket egy 3 fokozatú clos hálózattal helyettesítjük. Független a fokozatok számától mindig igaz, hogy a hálózaton a forrás és a cél között pontosan a fokozatok számával megegyező távolság alakul ki (jelen példában 3 - bemeneti leaf, spine, kimeneti leaf).&lt;br /&gt;
&lt;br /&gt;
== CLOS a gyakorlatban ==&lt;br /&gt;
[[Fájl:Datacenter network.png|középre]]&lt;br /&gt;
&lt;br /&gt;
Az adatközpontok hálózatában a [[Tipikus vállalati hálózati struktúra|vállalatoknál használt]] hálózati struktúra nem megfelelő, hiszen azt Észak-Dél irányú kommunikációra optimalizálták - kliens gépek internet hozzáférésének biztosítása stb. Az a struktúra azt feltételezi, hogy a vállalat szerverei egy &#039;&#039;Distribution&#039;&#039; rétegben foglalnak helyet, a szerver és a adattár (Storage) között csak egy switch található. Az adatközpontokban ez az állítás nem igaz: a központ bármely pontján lehet az adattár, akár több rack szekrény távolságban is. Ráadásul az észak-dél irányú kommunikációt biztosító struktúra bővítése igen költséges széltében és egy adatközpont általában ebben az irányban fejleszt.&lt;br /&gt;
&lt;br /&gt;
A fenti okok miatt adatközpontokban olyan hálózati struktúrát kell alkalmazni, ami:&lt;br /&gt;
* széltében viszonylag kis költségek mentén bővíthető (végtelenségig),&lt;br /&gt;
* észak-dél irányú kommunikáció helyett nyugat-kelet irányra van optimalizálva.&lt;br /&gt;
Ezeknek a kritériumoknak megfelel például a Clos hálózat:&lt;br /&gt;
* a Clos hálózati modell felső fokozatát tükrözzük a Spine fokozatra, így a fentebb látható struktúrát kapjuk&lt;br /&gt;
* a spine L3 switch, tipikusan 100Gbps linkekkel&lt;br /&gt;
* a Leaf L3 switch 40Gbps sávszélességgel, amely vagy megegyezik a ToR (Top of Rack) switchekkel (3-stage clos) vagy erre csatlakozik (ez esetben 5-stage clos hálózat alakul ki).&lt;br /&gt;
* Az L3 kapcsolatot érdemes a ToR szintig letolni - tehát a Spine-Leaf-ToR között is L3 kapcsolat van (routing) -, így kiküszöbölhetők az L2 hátrányai:&lt;br /&gt;
** a spanning tree kikapcsolja a hurkot okozó portot, így a redundánsan kialakított portokból csak az egyik használható&lt;br /&gt;
** L2 hálózaton sok olyan nem kívánatos kommunikáció zajlik, ami csökkenti a sávszélességet&lt;br /&gt;
* point-point IP címeket használunk a Spine-Leaf-ToR hálózatban&lt;br /&gt;
* VXLAN segítségével kapcsolódunk a Leaf-ekre, így a szerverek nagyon gyorsan mozgathatók akár a rack szekrények között is (pl. egy virtuális gép áttelepítése során nem okoz problémát, hogy az IP tartományt is mozgassuk vele).&lt;br /&gt;
* Egy blokkolásmentes Clos hálózat minden portját ugyanakkora sávszélességgel érünk el, fix távolsággal (ez könnyedén kezelhető). Emiatt az adattárak bárhol lehetnek&lt;br /&gt;
* ne feledjük el, hogy az internetelérést biztosító router is a Leaf-re van kötve (nem a spine felett helyezkedik el!)&lt;br /&gt;
&lt;br /&gt;
Az L3 kapcsolaton általában BGP protokollt alkalmaznak az IP cím tartományok hirdetésére. Lehet ehelyett mást is alkalmazni, azonban egy adatközpont többnyire publikus címeket is továbbít az internet felé, amire csak a BGP képes, így adja magát, hogy a belső hálózat címeihez is ezt használják. A BGP előnye, hogy támogatja az ún. ECMP szabályokat (Equal Cost Multipath routing), így a Spine és a Leaf fokozat között található összes kapcsolatot képes kihasználni - kvázi összeadva a sávszélességüket. Hátránya, hogy az eszközök számával exponenciálisan növekszik a konfigurációs igény is, de ezt különböző AS-ek kialakításával lehet mérsékelni.&lt;br /&gt;
&lt;br /&gt;
A gyakorlatban nem törekednek a blokkolásmentes hálózat kialakítására, hiszen jelentősen növeli a költségeket, ha több ezer portra van szükségünk. Ugyanakkor azt se felejtsük el, hogy a Spine és a Leaf között nagyobb sávszélességet (100Gbps), mint a végpontok és a Leaf között (40Gbps). Ebből kifolyólag kevesebb Spine eszközzel is tudjuk biztosítani a szükséges sávszélességet - ennek következtében több elérhető port marad a Leaf fokozaton. A tipikus kialakítás, hogy a Spine-Leaf között a szükséges sávszélesség 3-át alakítják ki. Példa:&lt;br /&gt;
* Egy Rack-ben 10 szerver található, melyek fejenként 4x10Gbps kapcsolaton csatlakoznak a Leaf switch-re (egyben ToR)&lt;br /&gt;
* A rack szekrény sávszélessége így összesen 400Gbps&lt;br /&gt;
* A Spine-Leaf sávszélességét tehát 400/3=134Gbps sebességre kell optimalizálni&lt;br /&gt;
* Ha a Spine-Leaf között 100Gbps linkekkel számolunk, akkor összesen 2 Spine elegendő a szükséges sávszélesség eléréséhez (2-nél kevesebb Spine elhelyezése megszünteti a redundanciát is!).&lt;br /&gt;
&lt;br /&gt;
=== A hálózat bővítése ===&lt;br /&gt;
A hálózatot két módon lehet bővíteni:&lt;br /&gt;
* Új Leaf switch elhelyezésével (A Leaf-et rá kell kötni az összes Spine switchre) a kapacitás növelhető - több portunk lesz&lt;br /&gt;
* Új Spine switch elhelyezésével jelentősen növelhetjük a rendszer sávszélességét.&lt;br /&gt;
&lt;br /&gt;
A hálózat bővítésének felső korlátját a Leaf switchek portszáma jelöli ki: egy eszköz portszámának a felénél több spine nem telepíthető. (Ha többet telepítünk, akkor maradnak kihasználatlan vonalak maximális terhelés mellett is.) A fent látható hálózat nem bővíthető tovább (a Spine switchek telítettek, a Leaf switchek felét elfoglalja a Spine-Leaf kapcsolat).&lt;br /&gt;
&lt;br /&gt;
== Fat-tree topológia ==&lt;br /&gt;
A Fat-tree egy speciális clos topológia. Korábban szó esett arról, hogy egy Clos hálózat Spine fokozata kicserélhető egy 3 fokozatú Clos hálózattal - így kettővel növekedik az addigi hálózat fokszáma. Alább láthatjuk ezt a bővítést 3-ról 5 fokozatra.&lt;br /&gt;
[[Fájl:Extend 3-stage clos to 5 stage.png|középre]]&lt;br /&gt;
A képen be van keretezve a 3 fokozatú hálózat Spine rétege, de ne feledjük, hogy egy Clos hálózatnak egyetlen ilyen fokozata van: tehát a fenti képen a fehérrel jelölt switchek képezik ezt a fokozatot. A képen a színezés miatt jól látható, hogy egy Leaf egyetlen Spine-hoz kapcsolódik csoporton belül (azonos színárnyalattal lettek jelölve, pl. zöld, kék stb.), mindegyik csoport két eszközből áll (világosak és sötétebbek). Természetesen az összes switchez kapcsolódik valamelyik Leaf, és egy Leaf továbbra is négy Spine-hoz kapcsolódik - mivel összesen 4 Spine csoport látható.&lt;br /&gt;
&lt;br /&gt;
Ezzel a kapcsolással lehetőségünk nyílik a portok megtöbbszörözésére - a belső réteg arra szolgál, hogy az egyébként 2x2 portos switchekből 2x4 portos eszközöket hozzunk létre. A kapcsolás blokkolásmentes, tehát teljes egészében úgy működik, mintha egy 8 portos switcheket használtunk volna - igaz, ez sokkal költségesebb. Ne feledjük el, hogy ez a Clos hálózati topológia célja: blokkolásmentes óriás hálózatok felépítése.&lt;br /&gt;
&lt;br /&gt;
A Fat-tree szintén ezt a bővítést használja ki: N darab spine switchet csoportokba rendez és szerverek egy csoportját - úgynevezett POD-okat - csatlakoztatja hozzá úgy, hogy minden POD minden switchel kapcsolatban álljon. ez az alábbi képen látható.&lt;br /&gt;
[[Fájl:Fat-tree.png|középre]]&lt;br /&gt;
A kialakítás során alkalmazunk egy pár trükköt, hogy a fenti struktúra alakuljon ki az 5 fokozatú Clos hálózatból:&lt;br /&gt;
* A középső switcheket megcseréljük alul és felül is - így alakul ki 2-2 POD (mindegyikbe kettő leaf lesz)&lt;br /&gt;
* A Spine fokozatra tükrözünk, így összesen 8 Leaf switch lesz, amelyet bármelyik irányba használhatunk&lt;br /&gt;
* N Leaf-re N darab (a példában 2) switch-et kapcsolunk, amelyek mind össze vannak kötve minden szemben lévő eszközzel&lt;br /&gt;
* A rétegekeket átnevezzük:&lt;br /&gt;
** A spine fokozat lesz a Core réteg&lt;br /&gt;
** A Leaf fokozat lesz az Aggregation réteg.&lt;br /&gt;
** A Leaf-ekre kapcsolt újabb switchek lesznek az Edge réget.&lt;br /&gt;
* A Core rétegben a Spine switchek átrendezhetők - ez a képen is így látható (az eredeti elrendezés szerint minden POD Leaf eszköze a Spine csoport első eszközére, minden POD második Leaf eszköze a Spine csoport második eszközére lenne kapcsolva), hogy  minden POD egy Leaf eszköze egyetlen Spine switch csoporthoz kapcsolódjon. Ezek a csoportok Plane névre hallgatnak, amelyek innentől kezdve könnyedén telepíthetőek - egy újabb plane telepítéséhez újabb switch szükséges minden POD-ba az Aggregation rétegbe (és ezzel együtt az edge rétegbe is), majd minden újonnan telepített switchhez csatlakoztatni kell az új Plane eszközt (a csoportosítás nélkül a Spine switchek szét lennének szórva a rack szekrények között).&lt;br /&gt;
&lt;br /&gt;
A fenti képen a 3 rétegű Fat-tree topológia látható, de a Clos topológiához hasonlóan több réteggel is létrehozható.&lt;br /&gt;
&lt;br /&gt;
=== Összefüggések ===&lt;br /&gt;
L = rétegek száma,&amp;lt;br&amp;gt;&lt;br /&gt;
k = használt switcheken található portok száma&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Tulajdonság !! Általános !! 3 réteg&lt;br /&gt;
|-&lt;br /&gt;
| Spine eszközök maximális száma || (k/2)^(L-1) || (k/2)^2&lt;br /&gt;
|-&lt;br /&gt;
| Maximális végpontok száma || 2*(k/2)^(L) || 2*(k/2)^3&lt;br /&gt;
|-&lt;br /&gt;
| Összes felhasznált switch || (2*L-1)*(k/2)^(L-1) || 5*(k/2)^2&lt;br /&gt;
|-&lt;br /&gt;
| Edge rétegbeli switchek száma || 2*(k/2)^(L-1) || 2*(k/2)^2&lt;br /&gt;
|-&lt;br /&gt;
| Maximális POD || 2*(k/2)^(L-2) || k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Méretezés ===&lt;br /&gt;
Tegyük fel, hogy egy hálózatot szeretnénk létrehozni, amelyben az alábbiakat kell teljesítenünk:&lt;br /&gt;
* 12 db szervert szeretnénk üzemeltetni,&lt;br /&gt;
* a szerver és az Edge között 10Gbps linkekkel&lt;br /&gt;
* a leaf és a spine között 25Gbps linkekkel&lt;br /&gt;
* 16 portos switcheket fogunk felhasználni&lt;br /&gt;
&lt;br /&gt;
Ha mindezt 3 rétegű Fat-tree topológiában szeretnénk létrehozni, akkor a következő tulajdonságokat írhatjuk le:&lt;br /&gt;
* F(16, 3):&lt;br /&gt;
** Maximum (16/2)^2 = 64 Core switch&lt;br /&gt;
** Maximum 2*(16/2)^3 = 1024 végpont lesz&lt;br /&gt;
** 16 POD hozható létre&lt;br /&gt;
&lt;br /&gt;
Elsőként el kell döntenünk, hogy ezek a korlátok hogyan befolyásolják a jövőnket: várhatóan mikor lépünk túl ezen. Ha kevés, vagy hamarosan kevés lesz, akkor növelnünk kell a switch portszámát (k) vagy a rétegeket. Tegyük fel, hogy számunkra ez megfelelő választás. Azonban nincs pénzünk az egésznek a kiépítésére (hiszen tudjuk, hogy összesen 256 darab switch árát kellene kifizetni), ráadásul nem is indokolt a jelenlegi terheltség mellett. Ez esetben el kell döntenünk, hogy mit szeretnénk elérni. Például a teljes kapacitás 1/4-t garantáljuk - figyelem! &#039;&#039;&#039;nem blokkolásmentes hálózatot építünk ki&#039;&#039;&#039;, de a terheltség növekedésével tudunk fejleszteni. Nézzük hogyan méretezhetjük be a hálózatunkat a kívánt szintre:&lt;br /&gt;
* A 12 szerver 10Gbps sebességgel összesen 120Gbps sávszélességet igényel.&lt;br /&gt;
* A 120Gbps 1/4-dét szeretnénk kiépíteni, tehát: 120/x = 4/1 =&amp;gt; 4x = 120 =&amp;gt; x = 30Gbps.&lt;br /&gt;
* A switchek között 25Gbps sebesség érhető el, tehát 30Gbps/25Gbps darab Spine switch-re lesz szükségünk, hogy elérjük a minimális szintet. Mivel az eredmény tört, ezért 2 Spine switch szükségeltetik minden Spine-csoportba, amivel a lefedett sebesség 50Gbps lesz.&lt;br /&gt;
* A kettő Spine-switchez 2 Leaf tartozik (Aggregation) és 2 Edge switch - ezeket később a Core switchek növelésével szintén növelnünk kell&lt;br /&gt;
* A 64 darab Core switch összesen 8 csoportban helyezhető el (8x8). Jelenleg minden csoportban csak 2 eszközre van szükségünk. (Valójában ez egészen addig igaz, amíg a 16 POD mindegyike létezik és azok között 30Gbps sebességet szeretnénk garantálni. Jelenleg egy POD-ban elfér a 12 szerver (1 POD 16x25Gbps csatlakozással rendelkezik).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ha a switch-ek kapacitása nagyobb, mint a használt sávszélesség (pl. 25Gbps helyett 50 vagy 100Gbps a gerincen), akkor a Fat-tree konfiguráció többszörözhető (pl. F(16,3)-ból F(32,3) lesz 50Gbps esetén és F(64,3) lesz 100Gbps esetén).&lt;br /&gt;
&lt;br /&gt;
= Erőforrás virtualizálás =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 135-173.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Virtuális gépek ==&lt;br /&gt;
=== „Software Stack” ===&lt;br /&gt;
Egy szerver rétegekből épül fel: legalul a fizikai hardver, fölötte az operációs rendszer (kernel + driverek), majd az azon futó szolgáltatások/alkalmazások. Virtualizáció esetén ez a &amp;quot;software stack&amp;quot; kiegészül egy újabb réteggel: a hardver fölé egy hypervisor (Virtual Machine Monitor, VMM) kerül, ami több, egymástól elszigetelt virtuális gépet (VM) hoz létre, mindegyikben saját, önálló vendég operációs rendszerrel és saját szoftverstack-kel. A hypervisor feladata, hogy a fizikai erőforrásokat (CPU, memória, hálózat, tárolás) szétossza és elszigetelje a rajta futó VM-ek között.&lt;br /&gt;
&lt;br /&gt;
A hypervisorokat két nagy csoportba szokás sorolni:&lt;br /&gt;
* &#039;&#039;&#039;1-es típus (bare-metal)&#039;&#039;&#039;: közvetlenül a hardveren fut, nincs alatta „host” operációs rendszer (pl. VMware ESXi, Microsoft Hyper-V, Xen, KVM). Ez a jellemző megoldás szerverkörnyezetben, felhőszolgáltatóknál is.&lt;br /&gt;
* &#039;&#039;&#039;2-es típus (hosted)&#039;&#039;&#039;: egy már futó operációs rendszeren belül, alkalmazásként fut (pl. VirtualBox, VMware Workstation asztali gépen). Kényelmesebb fejlesztői/tesztelési célra, de nagyobb overhead-del jár.&lt;br /&gt;
&lt;br /&gt;
== Környezetek ==&lt;br /&gt;
=== QEMU ===&lt;br /&gt;
Nyílt forráskódú gépemulátor és virtualizáló szoftver. Önmagában, hardveres gyorsítás nélkül is képes teljes rendszereket emulálni - akár eltérő processzorarchitektúrát is (pl. ARM emulálása x86-os gépen), ez viszont jelentős teljesítménybeli veszteséggel jár, mivel minden processzorutasítást szoftveresen kell értelmeznie. Linux alatt tipikusan a KVM-mel párosítva használják: ekkor a KVM végzi a CPU/memória virtualizációját hardveres gyorsítással, míg a QEMU az eszközök (hálózati kártya, lemez, grafikus kártya stb.) emulálásáért felel - így érhető el közel natív teljesítmény, teljes eszközemulációval kombinálva.&lt;br /&gt;
&lt;br /&gt;
=== XEN ===&lt;br /&gt;
A Cambridge-i Egyetemen indult, ma nyílt forráskódú, bare-metal (1-es típusú) hypervisor. Az egyik úttörője volt a paravirtualizációnak: a korai x86-os processzorok még nem támogatták hardveresen a virtualizációt, ezért a Xen a vendég operációs rendszer forráskódjának (kernel) módosításával érte el a hatékony működést. Történelmi jelentősége van az AWS szempontjából is: az Amazon EC2 hosszú éveken át Xen alapokon futott, mielőtt áttértek volna a saját fejlesztésű, KVM-alapokra épülő Nitro rendszerre.&lt;br /&gt;
&lt;br /&gt;
== Virtualizációk típusai ==&lt;br /&gt;
=== Paravirtualizáció ===&lt;br /&gt;
A vendég operációs rendszer &amp;quot;tudatában van&amp;quot; annak, hogy virtualizált környezetben fut: a kritikus, hardverközeli műveleteket (pl. memóriakezelés, megszakítások) nem a valódi hardver felé, hanem közvetlenül a hypervisor felé, egy erre kialakított interfészen (hypercall) keresztül kéri. Ez elkerüli a drága hardveremulációt, cserébe a vendég operációs rendszer kernelét módosítani kell, ami nem minden esetben lehetséges (pl. zárt forráskódú, nem támogatott rendszerek esetén).&lt;br /&gt;
&lt;br /&gt;
=== Hardware Virtual Machine (HVM) ===&lt;br /&gt;
A modern processzorok hardveres virtualizációs kiegészítéseit (Intel VT-x, AMD-V) kihasználó megoldás. Ezekkel a kiegészítésekkel a processzor hardveresen ismeri fel és kezeli a privilegizált utasításokat, így a hypervisornak nem kell szoftveresen emulálnia vagy a vendég kernelt módosítania - teljesen változtatás nélküli (&amp;quot;unmodified&amp;quot;), akár zárt forráskódú operációs rendszer (pl. Windows) is virtualizálható vele, közel natív teljesítménnyel.&lt;br /&gt;
&lt;br /&gt;
=== Kernel-based Virtual Machine (KVM) ===&lt;br /&gt;
A Linux kernelbe épített modul, ami magát a Linux kernelt alakítja hypervisorrá: a HVM hardveres kiegészítéseket (VT-x/AMD-V) használja ki, és a Linuxot 1-es típusú hypervisorként viselkedteti. Önmagában csak a CPU és memória virtualizációját végzi, az eszközök emulálásához jellemzően a fentebb már említett QEMU-val párosítják. Nyílt forráskódú, ingyenes, és mivel a Linux kernel részét képezi, rendkívül elterjedt (többek között ezt használja a Proxmox, az OpenStack alapértelmezett hypervisoraként, és ez az alapja az AWS jelenlegi Nitro rendszerének is).&lt;br /&gt;
&lt;br /&gt;
== Privát felhő platformok ==&lt;br /&gt;
=== Eucalyptus ===&lt;br /&gt;
Az egyik legkorábbi (2008-as) nyílt forráskódú privát felhő platform, ami kifejezetten az AWS API-jaival (EC2, S3) kompatibilis felületet biztosított, így az AWS-re írt eszközök/scriptek egy saját, helyben üzemeltetett felhőn is futtathatók voltak. A HP felvásárlása (2014) után a fejlesztése lelassult, mára inkább csak történeti jelentősége van, éles környezetben aktívan nem igazán terjedt el.&lt;br /&gt;
&lt;br /&gt;
=== Open-Nebula ===&lt;br /&gt;
Nyílt forráskódú, viszonylag könnyűsúlyú felhő-menedzsment platform privát és hibrid felhők kialakítására. Az OpenStacknál egyszerűbb architektúrájú, gyorsabban üzembe helyezhető, cserébe kevésbé moduláris/rugalmas nagy, komplex, sok komponensből álló környezetekhez.&lt;br /&gt;
&lt;br /&gt;
=== OpenStack ===&lt;br /&gt;
A legszélesebb körben elterjedt nyílt forráskódú IaaS felhőplatform, amivel saját, AWS-hez hasonló szolgáltatáskínálatú privát vagy hibrid felhő építhető ki. Moduláris felépítésű, önálló, de egymással együttműködő szolgáltatásokból áll, például:&lt;br /&gt;
* &#039;&#039;&#039;Nova&#039;&#039;&#039; - számítási erőforrások (VM-ek) kezelése&lt;br /&gt;
* &#039;&#039;&#039;Neutron&#039;&#039;&#039; - hálózatkezelés&lt;br /&gt;
* &#039;&#039;&#039;Cinder&#039;&#039;&#039; - blokk tárolás&lt;br /&gt;
* &#039;&#039;&#039;Swift&#039;&#039;&#039; - objektum tárolás&lt;br /&gt;
* &#039;&#039;&#039;Glance&#039;&#039;&#039; - image-ek (virtuálisgép-sablonok) kezelése&lt;br /&gt;
* &#039;&#039;&#039;Keystone&#039;&#039;&#039; - azonosítás- és jogosultságkezelés&lt;br /&gt;
* &#039;&#039;&#039;Horizon&#039;&#039;&#039; - webes admin felület&lt;br /&gt;
Nagyvállalati és telekommunikációs környezetekben (pl. saját adatközponttal rendelkező szolgáltatóknál) különösen elterjedt, ahol fontos szempont, hogy ne legyenek egy adott nyilvános felhőszolgáltatóhoz kötve (vendor lock-in elkerülése).&lt;br /&gt;
&lt;br /&gt;
== Virtualizáló szoftverek ==&lt;br /&gt;
A fentebb tárgyalt virtualizációs típusokat (paravirtualizáció, HVM) a gyakorlatban konkrét, telepíthető hypervisor-termékek valósítják meg. Néhány elterjedt, elsősorban vállalati/szerver környezetben használt példa:&lt;br /&gt;
* Red Hat Virtualization (RHV), KVM alapú&lt;br /&gt;
* Hyper-V, Windows&lt;br /&gt;
* z/VM, IBM VM OS&lt;br /&gt;
* VMware ESXi&lt;br /&gt;
* Oracle VM Server&lt;br /&gt;
&lt;br /&gt;
= Adattárolás a felhőben =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 215-230.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Tárolási modellek ==&lt;br /&gt;
A felhős tárolási szolgáltatásokat érdemes három alapmodell mentén elkülöníteni, amelyeket korábban az AWS szolgáltatásainál konkrét termékeken keresztül is érintettünk:&lt;br /&gt;
* &#039;&#039;&#039;Objektum tárolás&#039;&#039;&#039; (pl. AWS S3): fájlokat (objektumokat) tárol laposan, mappastruktúra nélkül (a &amp;quot;mappákat&amp;quot; csak a fájlnevek elé fűzött prefixek szimulálják), HTTP(S) API-n keresztül érhető el. Nagy mennyiségű, ritkán módosuló adathoz (képek, videók, biztonsági mentések, statikus weboldalak) ideális, de nem csatolható fájlrendszerként egy operációs rendszerbe.&lt;br /&gt;
* &#039;&#039;&#039;Blokk tárolás&#039;&#039;&#039; (pl. AWS EBS): egy nyers, particionálható, fájlrendszerrel ellátható &amp;quot;virtuális merevlemezt&amp;quot; ad, amit egyetlen szerverhez csatolunk. Adatbázisok, operációs rendszer image-ek jellemző felhasználási területei, mivel alacsony késleltetésű, blokk szintű elérést biztosít.&lt;br /&gt;
* &#039;&#039;&#039;Fájl tárolás&#039;&#039;&#039; (pl. AWS EFS - Elastic File System): hálózati fájlrendszer (NFSv4 alapokon), amit egyszerre több szerver is csatolhat és közösen írhat/olvashat, szemben az EBS-sel, ami jellemzően csak egy EC2-höz kapcsolódik aktívan. Megosztott konfigurációkhoz, közös feltöltési könyvtárakhoz kifejezetten hasznos (pl. egy Auto Scaling Group több példánya számára közös feltöltött fájlok tárolására).&lt;br /&gt;
&lt;br /&gt;
== Konzisztencia modellek ==&lt;br /&gt;
Elosztott, több gépen/zónán replikált tárolók esetén fontos kérdés, hogy egy írás után azonnal, minden olvasó ugyanazt az (új) adatot látja-e:&lt;br /&gt;
* &#039;&#039;&#039;Erős konzisztencia (strong consistency)&#039;&#039;&#039;: egy sikeres írás után minden következő olvasás garantáltan a legfrissebb adatot adja vissza, függetlenül attól, melyik replikát/zónát érte el a kérés.&lt;br /&gt;
* &#039;&#039;&#039;Végső konzisztencia (eventual consistency)&#039;&#039;&#039;: egy írás után rövid ideig előfordulhat, hogy egy másik replikáról olvasva még a régi adatot kapjuk vissza, de egy idő után (jellemzően másodperceken belül) minden replika konzisztenssé válik.&lt;br /&gt;
Érdemes tudni, hogy az AWS S3 sokáig csak végső konzisztenciát biztosított egyes műveleteknél, 2020 végétől azonban minden művelethez (GET, PUT, LIST, DELETE) erős, olvasás-írás utáni konzisztenciát garantál, külön felár nélkül.&lt;br /&gt;
&lt;br /&gt;
== Helyi fájlrendszerek a tárolás mögött ==&lt;br /&gt;
A blokk tárolók (pl. egy EBS kötet) önmagukban csak nyers, particionálatlan tárterületet adnak - ahhoz, hogy fájlokat tudjunk rajtuk tárolni, fájlrendszert kell rájuk telepíteni. A választott fájlrendszer jelentősen befolyásolja a teljesítményt, a megbízhatóságot és az üzemeltethetőséget, ezért érdemes ismerni a leggyakoribb Linux alatti lehetőségeket:&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
A legtöbb Linux disztribúció (pl. Ubuntu) alapértelmezett fájlrendszere. Naplózó (journaling) fájlrendszer, ami azt jelenti, hogy a metaadat-módosításokat előbb egy naplóba írja, csak utána a végleges helyükre, így egy váratlan áramkimaradás vagy összeomlás esetén is konzisztens állapotba állítható vissza gyorsan. Kiforrott, jól ismert, kompatibilis és jó alapértelmezett választás, ha nincs speciális igényünk.&lt;br /&gt;
&lt;br /&gt;
=== XFS ===&lt;br /&gt;
Eredetileg az SGI IRIX rendszeréhez készült, ma a Red Hat Enterprise Linux (és az AlmaLinux, RockyLinux) alapértelmezett fájlrendszere. Kifejezetten nagy fájlokra és nagy párhuzamos írási/olvasási terhelésre lett optimalizálva (pl. adatbázisok, nagy médiafájlok), jól skálázódik több CPU maggal is. Hátránya, hogy natívan nem támogat pillanatképeket (snapshot) - ehhez alsóbb szintű megoldásra (pl. LVM snapshot) van szükség -, és a fájlrendszer méretét utólag csak növelni lehet, csökkenteni nem.&lt;br /&gt;
&lt;br /&gt;
=== BTRFS ===&lt;br /&gt;
Modern, copy-on-write (CoW) elvű Linux fájlrendszer (az openSUSE alapértelmezettje, sok NAS gyártó - pl. Synology - is használja). A CoW elv miatt egy módosításkor sosem írja felül a régi adatot a helyén, hanem az új verziót máshova írja, majd a mutatókat frissíti - ennek köszönhetően pillanatképek (snapshot) készítése szinte azonnali és nulla extra hellyel jár (amíg az adat nem változik). Beépített adatintegritás-ellenőrzést (checksumming) végez minden blokkon, támogat tömörítést és több lemez összekapcsolását (hasonlóan egy RAID-hoz). &#039;&#039;&#039;Fontos korlát:&#039;&#039;&#039; a BTRFS RAID5/RAID6 módja évek óta ismert, nem javított &amp;quot;write hole&amp;quot; hibával küzd, éles környezetben emiatt továbbra sem ajánlott ezekben a módokban használni.&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Eredetileg a Sun Microsystems Solaris rendszeréhez készült, ma nyílt forráskódú, közösségi fejlesztésű folytatása az OpenZFS (Linux, FreeBSD, TrueNAS stb. alatt is elérhető). A ZFS egyszerre fájlrendszer &#039;&#039;&#039;és&#039;&#039;&#039; kötetkezelő (a hagyományos LVM+fájlrendszer páros helyett), ezért sok funkciót natívan, nagyon hatékonyan valósít meg:&lt;br /&gt;
* Copy-on-write elv, akárcsak a BTRFS-nél, így itt is azonnali, olcsó pillanatképek/klónok készíthetők&lt;br /&gt;
* Beépített, blokkonkénti ellenőrzőösszeg (checksum) minden adaton és metaadaton, ami az esetleges &amp;quot;silent data corruption&amp;quot; (csendes adatsérülés) hibákat is kiszűri&lt;br /&gt;
* Saját RAID megvalósítás (RAIDZ1/2/3), amely - szemben a hagyományos RAID5/6-tal - nem szenved a &amp;quot;write hole&amp;quot; jelenségtől&lt;br /&gt;
* Beépített tömörítés és (opcionális) deduplikáció&lt;br /&gt;
* Az ARC (Adaptive Replacement Cache) nevű, RAM-alapú olvasási gyorsítótár jelentősen felgyorsítja a gyakran használt adatok elérését&lt;br /&gt;
A ZFS erőforrásigénye (elsősorban RAM) magasabb a fentieknél, cserébe kiemelkedően megbízható, ezért elsősorban dedikált tárolószervereken, NAS-okon, adatbázis-szerverek mögött terjedt el.&lt;br /&gt;
&lt;br /&gt;
=== Összefoglalás ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fájlrendszer !! Copy-on-write !! Natív snapshot !! Natív RAID !! Jellemző felhasználás&lt;br /&gt;
|-&lt;br /&gt;
| ext4 || Nem || Nem || Nem || Általános célú, alapértelmezett választás&lt;br /&gt;
|-&lt;br /&gt;
| XFS || Nem || Nem || Nem || Nagy fájlok, párhuzamos I/O, adatbázisok&lt;br /&gt;
|-&lt;br /&gt;
| BTRFS || Igen || Igen || Igen (RAID5/6 kerülendő) || Desktop/NAS, gyors pillanatképek&lt;br /&gt;
|-&lt;br /&gt;
| ZFS (OpenZFS) || Igen || Igen || Igen (RAIDZ) || Dedikált tárolószerverek, NAS, kritikus adatok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Felhőbiztonság =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 257-291.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Megosztott felelősség modell ==&lt;br /&gt;
A felhőbiztonság megértésének alapja a korábban (a Felhő ökoszisztéma fejezetnél) már bemutatott megosztott biztonsági felelősség (Shared Responsibility Model): a szolgáltató mindig a felhő &#039;&#039;&#039;infrastruktúráját&#039;&#039;&#039; (fizikai biztonság, hypervisor, hálózati gerinc stb.) védi, míg az ügyfél felelőssége a felhőn &#039;&#039;&#039;belüli&#039;&#039;&#039; konfiguráció - annál több, minél alacsonyabb szintű szolgáltatást (IaaS) használ. A leggyakoribb, valós felhős biztonsági incidensek túlnyomó többsége nem a szolgáltató oldalán, hanem az ügyfél helytelen konfigurációjából (pl. nyilvánosan elérhető S3 bucket, túl megengedő jogosultság) fakad.&lt;br /&gt;
&lt;br /&gt;
== Identitás- és hozzáférés-kezelés (IAM) ==&lt;br /&gt;
Az AWS IAM (Identity and Access Management) szolgáltatásán keresztül szabályozható, hogy ki, milyen szolgáltatáshoz, milyen módon férhet hozzá. Alapelvek:&lt;br /&gt;
* &#039;&#039;&#039;Legkisebb jogosultság elve (least privilege)&#039;&#039;&#039;: mindenki csak azt a jogosultságot kapja meg, ami a feladatához feltétlenül szükséges - ne adjunk soha alapból &#039;&#039;AdministratorAccess&#039;&#039;-t egy alkalmazásnak vagy felhasználónak.&lt;br /&gt;
* &#039;&#039;&#039;Felhasználók vs. szerepkörök (roles)&#039;&#039;&#039;: önálló felhasználó helyett gyakran célszerűbb egy EC2-höz/Lambdához szerepkört (role) rendelni, amihez időben korlátozott, automatikusan lejáró hitelesítő adatok tartoznak - így nincs statikus kulcs, amit ellophatnak.&lt;br /&gt;
* &#039;&#039;&#039;Többfaktoros azonosítás (MFA)&#039;&#039;&#039;: különösen a root és adminisztrátori fiókoknál alapkövetelmény.&lt;br /&gt;
* &#039;&#039;&#039;Hozzáférési kulcsok (Access Key) kezelése&#039;&#039;&#039;: ezek statikus, hosszú élettartamú titkok, ezért soha nem szabad forráskódba, verziókezelőbe (pl. GitHub) beleégetni őket - sajnos ez a felhős adatszivárgások egyik leggyakoribb oka.&lt;br /&gt;
&lt;br /&gt;
== Hálózati biztonság ==&lt;br /&gt;
A VPC-n belül több rétegben is szabályozható a forgalom:&lt;br /&gt;
* &#039;&#039;&#039;Security Group&#039;&#039;&#039;: a korábban már tárgyalt, EC2 (vagy más erőforrás) szintjén ható, &#039;&#039;stateful&#039;&#039; tűzfal - ha egy bejövő kapcsolatot engedélyezünk, a rá érkező válaszforgalmat automatikusan is engedi, külön szabály nélkül.&lt;br /&gt;
* &#039;&#039;&#039;Network ACL (NACL)&#039;&#039;&#039;: alhálózat szintjén ható, &#039;&#039;stateless&#039;&#039; szűrő - itt a bejövő és kimenő szabályokat külön-külön, explicit módon kell megadni, mivel nem emlékszik a kapcsolat állapotára.&lt;br /&gt;
* &#039;&#039;&#039;Mélységi védelem (defense in depth)&#039;&#039;&#039;: a gyakorlatban ezeket egymásra rétegezve érdemes alkalmazni (VPC szegmentálás, publikus/privát alhálózatok, Security Group + NACL együtt), hogy egyetlen hibásan beállított szabály se jelentsen azonnal teljes kompromittálódást.&lt;br /&gt;
&lt;br /&gt;
== Titkosítás ==&lt;br /&gt;
* &#039;&#039;&#039;Nyugalmi állapotú adatok (encryption at rest)&#039;&#039;&#039;: a tárolt adatok titkosítása, jellemzően az AWS KMS (Key Management Service) által kezelt kulcsokkal - EBS kötetek, S3 objektumok, RDS adatbázisok mind támogatják, sok esetben egyetlen checkbox bekapcsolásával.&lt;br /&gt;
* &#039;&#039;&#039;Adatátviteli titkosítás (encryption in transit)&#039;&#039;&#039;: a hálózaton mozgó adatok védelme, jellemzően TLS/HTTPS segítségével - egy publikus alkalmazásnál ez ma már alapkövetelmény, nem opció.&lt;br /&gt;
&lt;br /&gt;
== Monitorozás és naplózás ==&lt;br /&gt;
* &#039;&#039;&#039;CloudTrail&#039;&#039;&#039;: minden API-hívást naplóz (ki, mikor, milyen szolgáltatáson, milyen műveletet hajtott végre) - utólagos vizsgálathoz (audit), illetéktelen hozzáférés kiderítéséhez nélkülözhetetlen.&lt;br /&gt;
* &#039;&#039;&#039;GuardDuty&#039;&#039;&#039;: gépi tanuláson és fenyegetettségi adatbázisokon alapuló, folyamatos anomália-/fenyegetésfelismerő szolgáltatás (pl. szokatlan API-hívási minták, ismert rosszindulatú IP-kről érkező forgalom jelzése).&lt;br /&gt;
* &#039;&#039;&#039;CloudWatch&#039;&#039;&#039;: a korábban már tárgyalt monitorozó szolgáltatás biztonsági szempontból is releváns - riasztásokat (alarm) állíthatunk be szokatlan erőforrás-felhasználásra, ami akár egy kompromittálódás jele is lehet.&lt;br /&gt;
&lt;br /&gt;
== DDoS és alkalmazásszintű védelem ==&lt;br /&gt;
* &#039;&#039;&#039;AWS Shield&#039;&#039;&#039;: hálózati/szállítási rétegbeli (L3/L4) DDoS védelem, ami alapszinten minden ügyfélnek automatikusan, ingyenesen jár.&lt;br /&gt;
* &#039;&#039;&#039;AWS WAF (Web Application Firewall)&#039;&#039;&#039;: alkalmazásrétegbeli (L7) szűrés, amivel pl. SQL injection, XSS és egyéb tipikus webes támadásminták ellen védekezhetünk, illetve rate limitinget is beállíthatunk vele.&lt;br /&gt;
* &#039;&#039;&#039;CloudFront (CDN)&#039;&#039;&#039;: a felhasználókhoz földrajzilag közelebb elhelyezett gyorsítótárazó réteg, ami a látható eredeti szerver elrejtésével és a terhelés elosztásával is csökkenti a támadási felületet.&lt;br /&gt;
&lt;br /&gt;
== Tipikus felhős biztonsági hibák ==&lt;br /&gt;
A gyakorlatban tapasztalt incidensek jelentős része néhány visszatérő hibára vezethető vissza:&lt;br /&gt;
* Nyilvánosan (publikusan) elérhetőre állított S3 bucket, amiben bizalmas adat van&lt;br /&gt;
* Túl megengedő (pl. &#039;&#039;0.0.0.0/0&#039;&#039; minden portra nyitott) Security Group szabályok&lt;br /&gt;
* Forráskódba/verziókezelőbe kerülő, hardcode-olt hozzáférési kulcsok&lt;br /&gt;
* Az EC2 metaadat-szolgáltatás (Instance Metadata Service) régebbi, v1 verziójának használata, ami SSRF-sebezhetőség esetén jogosultsági adatok kiszivárgásához vezethet - emiatt ma már az újabb, tokenalapú IMDSv2 használata javasolt/kötelező sok szervezetnél&lt;br /&gt;
* Elavult, javítatlan szoftverek/csomagok futtatása a szerverpéldányokon (ezért is hasznos a korábban említett OpenVAS-szerű, CVE-alapú sebezhetőség-vizsgálat)&lt;br /&gt;
&lt;br /&gt;
== Megfelelőség (compliance) ==&lt;br /&gt;
A felhőszolgáltatók számos iparági és jogi szabványnak (pl. ISO 27001, SOC 2, PCI-DSS) való megfelelést tanúsítanak az infrastruktúrájukra, ez azonban csak a megosztott felelősség modell &amp;quot;szolgáltatói&amp;quot; felét fedi le - az, hogy egy konkrét alkalmazás/adatkezelés megfelel-e például a GDPR-nak, továbbra is az üzemeltető felelőssége, a megfelelő régióválasztástól kezdve a hozzáférés-szabályozásig.&lt;br /&gt;
&lt;br /&gt;
= Docker =&lt;/div&gt;</summary>
		<author><name>ApelPro</name></author>
	</entry>
	<entry>
		<id>http://wiki.farkas-attila.hu/index.php?title=GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::El%C5%91ad%C3%A1s&amp;diff=841</id>
		<title>GAMF::Felhőalapú-szolgáltatások::Előadás</title>
		<link rel="alternate" type="text/html" href="http://wiki.farkas-attila.hu/index.php?title=GAMF::Felh%C5%91alap%C3%BA-szolg%C3%A1ltat%C3%A1sok::El%C5%91ad%C3%A1s&amp;diff=841"/>
		<updated>2026-09-14T07:54:26Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Szakmai hibák javítása (EC2 név, Clos éve, VPC/IaC/Lambda leírás, EBS/S3/SimpleDB/Elastic IP frissítés, Facebook-&amp;gt;Instagram) + Adattárolás a felhőben (ZFS/XFS/BTRFS/ext4) és Erőforrás virtualizálás fejezetek megírása&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bérelt szervertől (VPS) a felhő megoldásokig =&lt;br /&gt;
A legalapvetőbb feladat, amit egy szerverre szeretnénk bízni, hogy szolgálja ki a weboldalunkat. Szerencsére ehhez ingyenesen elérhető tárhelyek is rendelkezésünkre állnak, mint például a [https://nethely.hu nethely]. Az ingyenes változatok gyakran reklámokkal tűzdelik tele weboldalunkat és/vagy olyan tárhely korlátokkal vehetjük igénybe, amelyekkel egy komolyabb alkalmazás esetén nem ússzuk meg a fizetős változatok megrendelését. Azonban jó ha tudjuk, hogy ezek a szolgáltatások főleg PHP alkalmazások futtatására alkalmasak, a ma népszerű NodeJS kódokat nem tudják futtatni.&lt;br /&gt;
&lt;br /&gt;
== VPS ==&lt;br /&gt;
Ha nem csupán egy tárhelyet szeretnénk bérelni - ennek oka lehet, hogy nem tudja a tárhely szolgáltató futtatni alkalmazásunkat (pl. NodeJS), vagy annyira komplikált/bonyolult az üzemeltetése, hogy nem fér bele a sablonos keretekbe -, akkor bérelhetünk virtuális szervereket is: VPS-t (Virtual Private Server). Ekkor egy virtuális „vasat” kapunk, amire korlátozott, de széles választékból telepíthetünk operációs rendszert és kedvünk szerint konfigurálhatjuk azt. Ez a legelterjedtebb megoldás, azonban ezen szolgáltatásoknak is meg vannak a szintjei:&lt;br /&gt;
# VPS bérlés - a fent említett módon, virtuális környezetben létezik szerverünk&lt;br /&gt;
# Dedikált szerver - Egy komplett szerverhez kapunk hozzáférést. Többnyire igen drága szolgáltatás.&lt;br /&gt;
&lt;br /&gt;
A szolgáltató ezeket a rendszereket általában monitorozzák, illetve webes felületet biztosítanak, hogy újra tudjuk indítani/telepíteni, távoli asztallal rá tudjunk csatlakozni stb. A rendszert azonban nekünk kell karbantartanunk, így a vírusok, támadások ellen többségében nekünk kell kivédenünk (természetesen egy valamirevaló szolgáltató rendelkezik IDS/IPS rendszerekkel, de ügyeljünk rá, hogy ezek nem adnak százszázalékos védelmet). Ilyenkor mi telepítjük fel és frissítjük a webkiszolgálót, az adatbáziskezelőt, amennyiben szükségünk van rá és az alkalmazáshoz szükséges minden csomagot nekünk kell naprakészen tartanunk.&lt;br /&gt;
&lt;br /&gt;
== Saját globális hálózat ==&lt;br /&gt;
Míg egy kis cégnek elegendő egyetlen VPS, amelyen fut a webkiszolgáló és az SQL szerver is, egy nagyobb cégnek, gyakrabban látogatott alkalmazásoknak célszerű szét darabolni az elemeit - külön SQL szerver, külön fájl szerver és külön kiszolgáló. Ennek a háromnak folyamatosan kommunikálni kell egymással (lényeges a közöttük kialakított hálózat minősége), de egy támadás a webkiszolgáló felé valószínűleg nem fogja elérhetetlenné tenni a fájlszerverünket és az adatbázisunkat, ezzel együtt pedig az adatokat is megvédtük a behatolók elől. Ezzel le is írtunk egy mini felhőt.&lt;br /&gt;
Sok alkalmazás esetében azonban ez sem volt elegendő: hol adatvédelmi okból, hol a rendelkezésreállás javítása miatt clustereket hoztak létre, esetleg datacentereket létesítettek a világ több pontján. Ezek gyakorlatilag egyeznek a ma privát felhőként emlegetett megoldással, komplexitásuk megközelíti a ma igénybevehető szolgáltatások mögött található rendszerek bonyolultságát.&lt;br /&gt;
&lt;br /&gt;
== Felhőszolgáltatás ==&lt;br /&gt;
A fentebb említett cluster illetve datacenter kialakítások igen költségesek. Mivel a szolgáltatók ezeket már kiépítették világszerte, így célszerű ebbe bekapcsolódni ahelyett, hogy a sajátunkat kezdenénk el megtervezni. Egy szolgáltatás igénybevételével hozzáférhetünk a teljes hálózathoz, így például nagyon egyszerűen biztosíthatjuk, hogy Amerikában ugyanolyan gyorsan töltsön be weboldalunk, mint Magyarországon - természetesen nem ugyanarról a szerverről. Emlékezzünk vissza, hogy ezekkel a tulajdonságokkal régebben nagyon kevés cég (Google, Microsoft) rendelkezett és csakis azért kezdtek el adatközpontokat létesíteni a világ más pontjain, hogy ne kelljen az óceán fenekén húzódó optikai kábeleken keresztül, nagy távolságon és sok hálózati ugráson át elérnünk a szolgáltatást (ami jelentős késleltetést (latency) okozna), amikor például Európából akarjuk böngészni a weboldalukat. Ha ma megnézzük az elérhető felhőszolgáltatókat, akkor pontosan ezeket a „mamut cégeket” fogjuk megtalálni a piacon.&lt;br /&gt;
&lt;br /&gt;
Ritka ugyan, de manapság is előfordul, hogy saját felhőt alakítanak ki maguknak cégek: például az Instagram eleinte az Amazon Web Services hálózatát használta fel, hogy a világ minden táján elérhető legyen, majd a Facebook általi felvásárlása (2012) után fokozatosan átköltöztették a Facebook saját infrastruktúrájára.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A felhőszolgáltatások előnyei egyben hátrányként is szolgálnak:&#039;&#039;&#039;&lt;br /&gt;
* A felhőben általában csak az elhasznált erőforrásokért fizetünk (gyakran idő alapon) - ez gyakorlatilag nagyon nehézzé teszi a költségtervezést&lt;br /&gt;
* A felhő biztosítja számunkra, hogy az adataink mindig elérhetők legyenek - a nagy szolgáltatók (pl. AWS) ma már régió szintjén garantálják, hogy az általunk kiválasztott adatközpont-régión belül maradnak az adatok (pl. van kifejezetten EU-s régió is), de érdemes tudni, hogy egyes globális/menedzselt szolgáltatásaik alapértelmezetten több régió között replikálhatnak, ha ezt nem konfiguráljuk explicit módon régióhoz kötötten. Emiatt egy bizalmas adatokat kezelő cégnek (pl. bank) az EU-s adatvédelmi (GDPR) elvárások miatt mindig tudatosan, szerződéses garanciákkal (Data Processing Agreement, adott régióra korlátozás) kell konfigurálnia a felhős környezetét, nem elég csak &amp;quot;belefutni&amp;quot; az alapértelmezett beállításokba.&lt;br /&gt;
&lt;br /&gt;
Érdemes azt is megjegyezni, hogy az alacsony költségek igen relatívak. Sok cég még ma sem engedheti meg magának, a felhőbe költöztesse az alkalmazásait. Ennek egyik oka az említett adatbiztonsági szabályozás az EU tagjaként, de benne lehet a bizalmatlanság és a vélt forgalomhoz becsült árak és a szintén említett kiszámíthatatlanság. Sok cégnek még ma is jobban megéri egy VPS szolgáltatást igénybe venni, főleg ha nem akar a határokon kívülieket megszólítani. Az alacsony költségek főleg ott értelmezhetők, ahol speciális eszközök (TensorCore, GPU) kellenek rövid időre, illetve a cég felhőszolgáltató hiányában saját globális hálózatot építene ki magának a Google-höz és a Microsoft-hoz hasonlóan.&lt;br /&gt;
&lt;br /&gt;
== Ajánlott VPS szolgáltatók ==&lt;br /&gt;
A szolgáltatás árak egy cég számára talán nem magasak, ám egy tanuló informatikus számára, aki csupán azért szeretne bérelni egy szervert, hogy kipróbálja az iskolában tanultakat (esetleg máshol olvasottakat), neki minden fillér számítani fog. Amennyiben az egy éves próbaidőszakon túl is szeretnél szerverekkel, azok konfigurációjával foglalkozni, akkor a következő szolgáltatókat ajánlom figyelmedbe:&lt;br /&gt;
* [https://contabo.com/en/ Contabo] - egy német cég, igen alacsony bérleti árakkal (évi 20.000HUF kb., természetesen Euróban). Hátránya, hogy Németországban lesz a szervered, ami földrajzilag távol esik, főleg ha VPN szerű alkalmazásokkal is próbálkozni szeretnél. Hozzá kell tenni, hogy a BIX (&#039;&#039;Budapest Internet Exchange&#039;&#039;), ami Magyarország fő kilépési pontja a világháló felé, Frankfurtból kapja szolgáltatását. Innen nézve Németország nincs is olyan messze...&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások, amelyek segítségével felügyelhetjük a szerverünket ==&lt;br /&gt;
&#039;&#039;Az alkalmazások a felhőben létrehozott IaaS szolgáltatásokra is telepíthetők&#039;&#039;&lt;br /&gt;
* [https://zabbix.com Zabbix] - Telemetria rendszer, amely alkalmas konténerek és alkalmazások monitorozására a szerver alapvető (CPU, RAM, HDD) tulajdonságain túl.&lt;br /&gt;
* [https://www.nagios.org Nagios] - a Zabbixhoz hasonló Telemetria rendszer&lt;br /&gt;
* [https://openvas.org OpenVAS] - A szerveren futó alkalmazások verziószámát összeveti a CVE adatbázissal (pl. [https://cve.mitre.org cve.mitre.org] és naplózza a talált hibákat. Segítségével értesülhetünk a hibákat tartalmazó szoftvereinkről és még idejében frissíthetjük, lecserélhetjük azokat, mielőtt egy hacker találna rá. Nagyon fontos, hogy az információkat bejelentkezés nélkül szedi össze, tehát csupán a publikum számára is elérhető információk alapján keres. További információkért keresd fel az [https://nmap.org/book/man-nse.html nmap scripts] oldalt.&lt;br /&gt;
&lt;br /&gt;
= Felhő ökoszisztéma =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 13-40.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 A skálázásnak mélyreható következményei vannak a menedzsmentet tekintve: egyik oldalon a rendszernek rugalmasnak kell lennie, tudnia kell kezelni a hirtelen megnövekvő terhelést is; míg a másik oldalon optimalizálnia kell az energiafelhasználást. Természetesen ezeket a nehézségeket el kell rejteni a felhasználó elől egy jól átlátható, könnyen használható felület mögé.&lt;br /&gt;
&lt;br /&gt;
== Szolgáltatási szintek ==&lt;br /&gt;
&lt;br /&gt;
==== IaaS, azaz Infrastructure as a Service ====&lt;br /&gt;
Ez a szolgáltatásszint a tárhelyet, hálózatot és egyéb alapvető számítási erőforrásokat foglal magában. Ez esetben a bérlő természetesen nem fér hozzá a felhő belső infrastruktúrájához, de testreszabhatja a vásárolt virtuális gép erőforrásait: tárhelyméret, CPU, memória, operációs rendszer, terhelés elosztás (...) és saját virtuális hálózatot, internet kilépési pontot konfigurálhat köré. Ez a szolgáltatásszint hasonlít a korábban tárgyalt VPS-hez.&lt;br /&gt;
A modell akkor lehet hasznos, ha egy induló vállalkozásnak számítási kapacitásra van szüksége, de nem akar saját szervereket karbantartani, vagy ha a szervezet gyorsan növekszik.&lt;br /&gt;
&lt;br /&gt;
==== PaaS, azaz Platform as a Service ====&lt;br /&gt;
Lehetővé teszi, hogy a bérlő saját alkalmazásokat futtasson a felhőben, természetesen azzal a megkötéssel, hogy a szolgáltató támogatja az adott programkészletet. Ebben az esetben a bérlőnek nem kell üzemeltetési kérdésekkel foglalkoznia - operációs rendszer, CPU, memória, tárhely, hálózat (...) - csupán a saját programjára és az ahhoz kapcsolódó konfigurációs lehetőségekre kell koncentrálnia.&lt;br /&gt;
Ez a szolgáltatásszint nem ésszerű választás, ha az alkalmazásnak hordozhatónak kell lennie, ha szabadalom alatt álló programozási nyelvet használunk vagy ha az alkalmazás erőforrásait konfigurálni szeretnénk. Gyakran szoftverfejlesztők használják, amikor több fejlesztő dolgozik együtt és mind a fejlesztési mind a tesztelési szolgáltatásokat automatizálni kell.&lt;br /&gt;
&lt;br /&gt;
==== SaaS, azaz Software as a Service ====&lt;br /&gt;
A szolgáltatások ezen szintjén sem az alkalmazás kódját, sem az alatta futó infrastruktúrát nem ismerjük. Tipikus példa az email vagy a keresés, ahol használjuk az alkalmazást, esetleg testreszabhatjuk (kinézet, logó, név stb.), de többnyire nem rendelkezünk információkkal (vagy teljesen lényegtelen a használat szempontjából), hogy milyen programnyelven készültek és milyen közegben működnek. Lehetnek ilyen alkalmazások továbbá asztali / telefonos alkalmazások, de például számlázó végpontok is. Fontos figyelembe venni, hogy a felhőbe érkező kérések nem valósidőben kerülnek feldolgozásra, így csak azon programok esetén használható, amelyek ezt nem követelik meg.&lt;br /&gt;
&lt;br /&gt;
==== DBaaS, azaz Database as a Service ====&lt;br /&gt;
Ez a szolgáltatás garanciát ad azonnali skálázhatóságra, teljesítményre; a legújabb technológiákat használja és rendelkezik hibakezeléssel. A legfontosabb tulajdonságai:&lt;br /&gt;
# Self-service: különösebb konfigurálás nélkül elindítható. Nem csökkentett teljesítménnyel rendelkezik és nincs telepítési díj.&lt;br /&gt;
# Eszköz és helyfüggetlen adatbázis erőforrás&lt;br /&gt;
# Rugalmasság és skálázhatóság&lt;br /&gt;
# Annyit fizetsz, amennyit használsz&lt;br /&gt;
# Zökkenőmentes váltás a verziók / technológiák között&lt;br /&gt;
&lt;br /&gt;
A szolgáltatás réteges architektúrát alkalmaz:&lt;br /&gt;
* UI réteg: interneten keresztül elérhetővé teszi a szolgáltatást&lt;br /&gt;
* Alkalmazás réteg: A szoftver szolgáltatásait és a tároló réteget is eléri&lt;br /&gt;
* Adatbázis réteg: hatékony és megbízható szolgáltatást nyújt - például menti az utolsó lekérdezéseket, hogy ismétlődés esetén ne kelljen újra lefuttatnia azokat&lt;br /&gt;
* Adat tároló réteg: adatok titkosítása, biztonsági mentések és lemezfigyelők találhatók itt&lt;br /&gt;
&lt;br /&gt;
==== IaC, azaz Infrastructure as Code ====&lt;br /&gt;
Az infrastruktúra vezérlése magas szintű leírónyelv (deklaratív konfigurációs fájlok) segítségével, kézi kattintgatás helyett. Fontos leszögezni, hogy az IaC önmagában &#039;&#039;&#039;nem&#039;&#039;&#039; követeli meg sem a mikroszolgáltatás-architektúrát, sem a konténerek használatát - ugyanígy leírható vele akár egyetlen monolitikus alkalmazáshoz tartozó hagyományos virtuális gép, hálózat vagy adatbázis is. Az IaC segítségével megadhatjuk, hogy milyen erőforrásokat (EC2, VPC, RDS stb.) szeretnénk elindítani, milyen kapcsolatban álljanak egymással, és ez a leírt állapot verziókezelhető, újrafelhasználható és automatizáltan alkalmazható a felhőben. A legsűrűbben használt eszköz az &#039;&#039;Ansible&#039;&#039; és a &#039;&#039;Terraform&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Összefoglalás ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Megosztott biztonsági felelősség (SSR) modell a szolgáltató (félkövér) és az ügyfelek között&lt;br /&gt;
|-&lt;br /&gt;
! SaaS !! PaaS !! IaaS&lt;br /&gt;
|-&lt;br /&gt;
| Felhaszálói hozzáférés || Felhaszálói hozzáférés || Felhaszálói hozzáférés&lt;br /&gt;
|-&lt;br /&gt;
| Adatok || Adatok || Adatok&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Alkalmazások&#039;&#039;&#039; || Alkalmazások || Alkalmazások&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Operációs rendszer&#039;&#039;&#039; || &#039;&#039;&#039;Operációs rendszer&#039;&#039;&#039; || Operációs rendszer&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hálózati forgalom&#039;&#039;&#039; || &#039;&#039;&#039;Hálózati forgalom&#039;&#039;&#039; || Hálózati forgalom&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hypervisor&#039;&#039;&#039; || &#039;&#039;&#039;Hypervisor&#039;&#039;&#039; || &#039;&#039;&#039;Hypervisor&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Infrastruktúra&#039;&#039;&#039; || &#039;&#039;&#039;Infrastruktúra&#039;&#039;&#039; || &#039;&#039;&#039;Infrastruktúra&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Felhők típusai ==&lt;br /&gt;
==== Privát felhő ====&lt;br /&gt;
Az adatok nincsenek megosztva harmadik féllel, a kontrollt teljes egészében a struktúrát kialakító rendszergazda kezében van. Természetesen nem korlátozódik a cég helyszínén üzemeltetett szerverekre a fogalom, szóba jöhetnek harmadik féltől bérelt VPS, VDS, de komplett bérelt szerverek is, de általában az eszközök VPN alagúton keresztül cserélnek információt, ezzel védve az adatokat.&lt;br /&gt;
&lt;br /&gt;
==== Publikus felhő ====&lt;br /&gt;
Az adatokat egy harmadik fél által kialakított hálózaton keresztül használjuk, ami a csomagokat a publikus IP hálózaton keresztül továbbítják egymás között. Óriási előnye, hogy nincs üzemeltetési költsége a szolgáltatást igénybe vevőnek, általában a CPU idő után kell fizetni, tehát flexibilis költséget hoz magával.&lt;br /&gt;
&lt;br /&gt;
==== Hibrid felhő ====&lt;br /&gt;
A publikus és a privát felhő kombinációja, így a kiemelt biztonságot igénylő adatok nem kerülnek ki az internetre, míg a kevésbé érzékeny adatok továbbíthatók a publikus felhő segítségével, ezzel kihasználva annak minden előnyét.&lt;br /&gt;
&lt;br /&gt;
== AWS szolgáltatásai ==&lt;br /&gt;
Az AWS első körben IaaS szolgáltatásokat nyújt, nagy sebességű hálózaton összekötött feldolgozóegységet és tárolóegységeket tartalmazó infrastruktúrát és az ezeket támogató szolgáltatáshalmazt kínál.&lt;br /&gt;
&lt;br /&gt;
=== Feldolgozás, adattárolás és kommunikációs szolgáltatások ===&lt;br /&gt;
==== Elastic Compute Cloud (EC2) ====&lt;br /&gt;
Egy szolgáltatás, amely egyszerű felület segítségével teszi lehetővé, hogy szerver példányokat futtassunk a felhőben. Létrehozáskor meg kell adnunk az operációs rendszert, amely lehet Linux alapú, OpenSolaris, FreeBSD, NetBSD, de akár a Windows Server különböző verziói közül is választhatunk. Szintén ki kell választanunk, hogy melyik régióban és melyik rendelkezésreállási zónában szeretnénk futtatni, ahogy az erőforrásigény szerint létrehozott különböző típusok közül is választatnunk kell. A nagyobb teljesítmény magasabb költségekkel rendelkezik.&lt;br /&gt;
&lt;br /&gt;
A létrehozott szerver rendelkezik belső és külső IP címekkel és a hozzájuk tartozó domain nevekkel is. Ezeket a címeket leállításkor elveszíti és újraindításkor kap újat. A címek tehát dinamikusak, ami egy szerver esetében ritka jelenség. Van lehetőségünk azonban statikus IP címek (Elastic IP) igénylésére is. &#039;&#039;&#039;Figyelem, 2024 februárja óta megváltozott az árazási modell:&#039;&#039;&#039; korábban csak a nem használt (egyetlen futó szerverhez sem csatolt) statikus IP-kért kellett fizetni, ma viszont az AWS &#039;&#039;&#039;minden&#039;&#039;&#039; publikus IPv4 címért számláz óránként, függetlenül attól, hogy csatolva van-e egy futó szerverhez. Az IP címtartományok zónánként változnak.&lt;br /&gt;
&lt;br /&gt;
A szerver példányok létrehozhatók előre definiált képfájlokból - &#039;&#039;Amazon Machine Image&#039;&#039; (AMI) -, vagy egy a felhasználó által létrehozott készletből. Az AMI képfájlok másolatot készítenek egy meglévő rendszerről - könyvtárak, applikációk, amelyeket a felhasználó saját maga telepített fel - kivéve a alsóbb szintű konfigurációs paramétereket, mint például a &#039;&#039;hostname&#039;&#039; vagy a MAC címek.&lt;br /&gt;
&lt;br /&gt;
Egy EC2-ben létrehozott szerver interakcióba léphet egyéb más szolgáltatásokkal is, mint például S3, EBS, DynamoDB stb.&lt;br /&gt;
&lt;br /&gt;
==== Simple Storage Service (S3) ====&lt;br /&gt;
Nagy objektumok tárolására alkalmas szolgáltatás. A minimálisan szükséges funkciókkal rendelkezik: írás, olvasás és törlés. A szolgáltatás lehetővé teszi egy alkalmazás számára, hogy korlátlan mennyiségű objektumot kezeljen 1 bájt mérettől egészen 5 terabájtig. Az objektumok úgynevezett &#039;&#039;bucket&#039;&#039;-ban tárolódnak, amelynek egyedi azonosítója van és a felhasználó által kiválasztott régióban helyezkedik el. Az objektumokhoz állíthatunk be hozzáférési listát (ACL), amellyel kontrollálhatjuk, hogy ki milyen fájlokhoz, milyen módon férhet hozzá. Elérését egy REST illetve egy SOAP API biztosítja, alapvetően HTTP(S) alapon. &#039;&#039;(Régebben BitTorrent protokollon keresztüli hozzáférés is elérhető volt, de ezt az AWS 2021-ben megszüntette.)&#039;&#039; Az egyes fájlokhoz MD5 hash (ETag) készül, így letöltés után ellenőrizhető a fájlok helyessége.&lt;br /&gt;
&lt;br /&gt;
==== Elastic Block Store (EBS) ====&lt;br /&gt;
Tartós tár, amelyet az EC2-höz csatolva használunk: egy fizikai lemezként megjelenő meghajtó. Mérete kötettípustól függően akár 16 tebibájtig (gp3, io1/io2) is terjedhet. A meghajtók a rendelkezésreállási zónán belül csoportosításra kerülnek, majd replikációkat hoznak létre az egyéb zónákban. Egy EC2 több EBS-t is használhat, és jellemzően egy EBS is csak egy EC2-höz lehet aktívan hozzárendelve (kivétel az io1/io2 Multi-Attach funkció, ami korlátozott esetekben több példányhoz is engedi csatolni ugyanazt a kötetet). Használható pillanatképek létrehozására egy szerverpéldányból, hogy később ezt felhasználva új EC2 példányt indíthassunk belőle.&lt;br /&gt;
&lt;br /&gt;
==== DynamoDB ====&lt;br /&gt;
Az AWS natív NoSQL (kulcs-érték és dokumentum modellű) adatbázis szolgáltatása, amely web szolgáltatásokon keresztül teszi lehetővé a fejlesztők számára az adatok manipulálását. A szolgáltatás több, földrajzilag távol eső helyeken is képes másolatot készíteni (globális táblák). Támogatja a nagy teljesítményigényű alkalmazásokat, automatikusan skálázza a használat alapján az erőforrásokat, a táblában található indexeket és kezeli az adatbázis replikációkat. &#039;&#039;(Az AWS korábbi, hasonló célú szolgáltatása a SimpleDB volt, ezt azonban évek óta nem ajánlják új projektekhez, helyette a DynamoDB használata javasolt.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Simple Queue Service (SQS) ====&lt;br /&gt;
Szolgáltatások szinkronizációjára szolgáló üzenetsor, amelybe bejelentkezés nélkül lehet adatokat küldeni. Az üzenetsorok megoszthatók különböző regisztrációk között is. Az egyes üzenetek feldolgozás alatt zárolásra kerülnek, hogy elkerüljék azok többszöri feldolgozását. Amennyiben az üzenet feldolgozása valamilyen okból kifolyólag sikertelen eredménnyel zárul, akkor feloldják, ezáltal újra kivehető a sorból. A hozzáférés IP és idő alapon is tiltható.&lt;br /&gt;
&lt;br /&gt;
==== CloudWatch ====&lt;br /&gt;
Egy monitorozó rendszer, amely telemetria adatokat gyűjt. Segítségével optimalizálható az alkalmazás. Anélkül, hogy a felhasználó bármit telepítene, tucatnyi metrika közül választhat, majd megtekintheti a hozzájuk tartozó grafikonokat. Az alap monitorozás ingyenes, amely 5 percenként gyűjt adatot, de készíthetünk bővebb, 1 perces mintavételezéssel is jelentést. A szolgáltatás monitorozza a az EBS elérésének idejét, az adatbázis hozzáférés idejét és az SQS-ben tárolt adatokat is és természetesen még sok egyéb paramétert.&lt;br /&gt;
&lt;br /&gt;
==== Virtual Private Cloud ====&lt;br /&gt;
A VPC egy saját, elkülönített, logikailag izolált virtuális hálózat az AWS felhőjén belül: hétköznapibb értelemben modellezhetjük egy routerként, amelynek vannak alhálózatai, route táblája és egy internet kilépési pontja (Internet Gateway), amin keresztül a benne futó erőforrások (EC2 stb.) kommunikálnak egymással és a külvilággal. A VPC-n belül tűzfalként funkcionáló Security Groupokat és hálózati ACL-eket is definiálhatunk. Nem kötelező eleme egy VPC-nek, hogy egy meglévő céges hálózathoz kapcsolódjon - ha viszont erre is szükség van, arra külön szolgáltatás áll rendelkezésre: a VPN-alapú Site-to-Site VPN, illetve a dedikált vonalas Direct Connect köti össze a VPC-t egy meglévő, helyi infrastruktúrával.&lt;br /&gt;
&lt;br /&gt;
==== Auto Scaling ====&lt;br /&gt;
Az Auto Scaling segítségével megadhatunk olyan szabályokat, amelyek segítségével az erőforrásaink dinamikusan változnak. Csoportokat hozhatunk létre, amelyben monitorozhatjuk az EC2 példányainkat, majd triggerek segítségével újabb és újabb példányokat indíthatunk el vagy éppen állíthatunk le, annak függvényében, hogy a csoportban megszabott szabályok szerint az erőforrás kevés vagy sok. A csoportban szereplő EC2 példányokra állíthatunk be teszteket, aminek segítségével információt nyújthatunk a terheléselosztást végző &#039;&#039;Load Balancer&#039;&#039; szolgáltatásnak: így biztosíthatjuk, hogy csak olyan gépek szerepeljenek annak listájában, amelyek elérhetők. A leggyakoribb trigger a CPU: ha a csoport CPU kihasználtsága magas, akkor újabb EC2 példány indul, ami egyúttal csökkenti a csoport CPU terhelését. Ha a csoport CPU terhelése nagyon alacsony (pl. 0%), akkor kevesebb EC2 példány is képes kiszolgálni az aktuális forgalmat, tehát leállít egyet. A létrehozáskor megadhatjuk, hogy milyen értékek között változhat a példányok darabszáma.&lt;br /&gt;
&lt;br /&gt;
==== Cloud Formation ====&lt;br /&gt;
Segítségével JSON fájlban írhatjuk le az alkalmazás futtatásához szükséges infrastruktúrát. Benne leírhatjuk a szükséges erőforrások paramétereit, mint például az instance típusa, az SQL portja vagy mérete.&lt;br /&gt;
&lt;br /&gt;
==== Elastic Beanstalk ====&lt;br /&gt;
Ez a szolgáltatás automatikusan skálázza az erőforrásokat az alkalmazás igényeihez igazítva. Ezt úgy éri el, hogy az Amazon egyéb szolgáltatásait automatikusan paraméterezi: EC2, S3, SNS, Load Balancer, Auto Scaling Group stb.&lt;br /&gt;
&lt;br /&gt;
==== Lambda Service ====&lt;br /&gt;
Egy esemény alapú számítási erőforrás. &#039;&#039;Serverless&#039;&#039;-nek is nevezik a megvalósítást. Ez esetben egy-egy függvényt írunk meg, amit a Lambda egy erősen izolált, könnyűsúlyú mikro-virtuális gépben (AWS Firecracker) futtat le. 2020 óta lehetőség van a függvényt Docker (OCI) image formájában is csomagolni és feltölteni, de ez csak a csomagolás/terjesztés módja - maga a futtatókörnyezet ekkor sem egy hagyományos Docker daemon, hanem ugyanaz a Firecracker alapú izolált környezet. A függvény egy esemény hatására elindul és végrehajtja a benne lévő kódot, majd le is áll - ezért serverless, mert nem kell, hogy folyamatosan fusson egy szerver. Az eredmény általában adatbázisba kerül, de használhat egyéb szolgáltatásokat is, mint például az SQS, SNS stb. Egy alkalmazás több Lambda kifejezésből épül fel általában. Ez esetben a fizetés idő alapú: amennyi ideig használjuk az erőforrást, annyi idő után fogunk fizetni.&lt;br /&gt;
&lt;br /&gt;
=== Régiók és rendelkezésre állási zónák ===&lt;br /&gt;
Az Amazon mára több száz adatközponttal rendelkezik szerte a világban, ezekből épülnek fel a rendelkezésre állási zónák (availability zone) - egy zóna jellemzően egy vagy több, egymáshoz nagyon közeli adatközpontot takar, amelyben nagyságrendileg tízezres nagyságrendű szerver található. (A pontos szerver- és adatközpont-számokat az AWS nem publikálja, ezek becslések.) Minden AWS régió minimum három rendelkezésre állási zónával rendelkezik (ez már évek óta az AWS hivatalos vállalása új régiók indításakor), melyek nagy sebességű hálózaton vannak összekapcsolva. A régiók nem osztanak meg erőforrásokat és nem kommunikálnak az interneten keresztül. A tárhelyek esetében automatikus replikáció jön létre a régiókon belül: az S3 a rendelkezésre állási zónák között, az EBS csak az adott rendelkezésre állási zónán belül. A kritikus alkalmazásokat célszerű több régióban definiálni biztonság szempontból. Az egyes régiók között lehet különbség számlázás (árak) és az elérhető szolgáltatások tekintetében.&lt;br /&gt;
&lt;br /&gt;
=== AWS hálózatok ===&lt;br /&gt;
Minden régió redundáns kapcsolaton keresztül lett összekapcsolva a többi régióval. Ezen kívül privát link kerül kiépítésre a &#039;&#039;Direct Connect&#039;&#039; ügyfelek számára. A legtöbb főbb régió privát linken keresztül került összekötésre, aminek segítségével minimalizálható a szakadások lehetősége.&lt;br /&gt;
&lt;br /&gt;
A rendelkezésre állási zónákon belül akár 25Tbps sebességgel képesek kommunikálni egymással a szolgáltatások, miközben a késleltetés 1-2 ms.&lt;br /&gt;
&lt;br /&gt;
== Átjárhatóság a felhőszolgáltatók között ==&lt;br /&gt;
Miközben a legtöbb szolgáltató arra törekszik, hogy minél több ügyfelet szólítson meg, minden szolgáltatónak vannak erősségei és gyengeségei. Emiatt könnyedén bekövetkezhet, hogy egy cégnek, amelynek addig megfelelő volt XY szolgáltató, hirtelen annak gyengébb minőségű szolgáltatásaival kellene dolgoznia, így a váltás, esetleg az újdonságok más szolgáltatónál történő elhelyezését helyezi kilátásba. Ekkor használjuk a &#039;&#039;vendor lock-in&#039;&#039; kifejezést, ami arra utal, hogy csak rengeteg idő és energia befektetéssel oldhatjuk fel a problémát, ráadásul elképzelhető, hogy épp olyan kellemetlenségekkel jár az új szolgáltatóhoz költöztetés más (régebbi) funkciók esetében, mintha az addigi szolgáltatónál helyeztük volna el az újításokat.&lt;br /&gt;
&lt;br /&gt;
Egy tervezet szerint a szolgáltatók lehetőséget biztosítanak az egymást közötti átjárásra. A problémát messze nem egyszerű feloldani, hiszen nincs szabvány az adattárolásra, kommunikációs megoldásokra - sőt, az egyes szolgáltatók vonakodnak ezeket az információkat egymás között megosztani, hiszen egy hatékonyabb algoritmus sok pénzt spórolhat meg a gazdájának, ami előnybe is hozza a piacon. A szolgáltatók között úgynevezett &#039;&#039;Intercloud exchange&#039;&#039; interfészen keresztül lehetne kommunikálni.&lt;br /&gt;
&lt;br /&gt;
= Adatközpontok belső hálózata =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 175-212.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ennek a fejezetnek a tanulmányozása előtt érdemes átolvasni a következő oldalakat is:&lt;br /&gt;
* [[Tipikus vállalati hálózati struktúra]]&lt;br /&gt;
* [[Hálózat rendelkezésreállás számítás]]&lt;br /&gt;
* [[BGP protokoll]]&lt;br /&gt;
&lt;br /&gt;
== CLOS hálózati topológia elmélete ==&lt;br /&gt;
A clos hálózati topológiát Charles Clos írta le 1953-ban (&amp;quot;A Study of Non-Blocking Switching Networks&amp;quot;, Bell System Technical Journal). A vezetékes telefonokhoz készült, hogy két végpont minden esetben tudjon egymással kommunikálni, független attól, hogy hány ügyfél telefonál egyszerre.&lt;br /&gt;
[[Fájl:Clos topológia.png|középre]]&lt;br /&gt;
A fenti képen látható a használt modell: van egy bemeneti ág (inbound) és egy kimeneti ág (outbound). Mind a Spine (gerinc), mind a Leaf (a fa levelei) switchek. A szabály szerint a Spine esetlegesen üresen maradt portjaira NEM köthetünk semmilyen végponti eszközt, csak és kizárólag a Leaf szintre. A hálózati topológia blokkolásmentes, ha a Spine-Leaf között több vagy egyenlő link van, mint a Leaf-ek és a rájuk kötött végponti eszközök között.&lt;br /&gt;
&lt;br /&gt;
A példában 3 fokozatú (3-stage clos) hálózat látható. Minden ennél nagyobb fokozat elérhető, ha a középső (Spine) switcheket egy 3 fokozatú clos hálózattal helyettesítjük. Független a fokozatok számától mindig igaz, hogy a hálózaton a forrás és a cél között pontosan a fokozatok számával megegyező távolság alakul ki (jelen példában 3 - bemeneti leaf, spine, kimeneti leaf).&lt;br /&gt;
&lt;br /&gt;
== CLOS a gyakorlatban ==&lt;br /&gt;
[[Fájl:Datacenter network.png|középre]]&lt;br /&gt;
&lt;br /&gt;
Az adatközpontok hálózatában a [[Tipikus vállalati hálózati struktúra|vállalatoknál használt]] hálózati struktúra nem megfelelő, hiszen azt Észak-Dél irányú kommunikációra optimalizálták - kliens gépek internet hozzáférésének biztosítása stb. Az a struktúra azt feltételezi, hogy a vállalat szerverei egy &#039;&#039;Distribution&#039;&#039; rétegben foglalnak helyet, a szerver és a adattár (Storage) között csak egy switch található. Az adatközpontokban ez az állítás nem igaz: a központ bármely pontján lehet az adattár, akár több rack szekrény távolságban is. Ráadásul az észak-dél irányú kommunikációt biztosító struktúra bővítése igen költséges széltében és egy adatközpont általában ebben az irányban fejleszt.&lt;br /&gt;
&lt;br /&gt;
A fenti okok miatt adatközpontokban olyan hálózati struktúrát kell alkalmazni, ami:&lt;br /&gt;
* széltében viszonylag kis költségek mentén bővíthető (végtelenségig),&lt;br /&gt;
* észak-dél irányú kommunikáció helyett nyugat-kelet irányra van optimalizálva.&lt;br /&gt;
Ezeknek a kritériumoknak megfelel például a Clos hálózat:&lt;br /&gt;
* a Clos hálózati modell felső fokozatát tükrözzük a Spine fokozatra, így a fentebb látható struktúrát kapjuk&lt;br /&gt;
* a spine L3 switch, tipikusan 100Gbps linkekkel&lt;br /&gt;
* a Leaf L3 switch 40Gbps sávszélességgel, amely vagy megegyezik a ToR (Top of Rack) switchekkel (3-stage clos) vagy erre csatlakozik (ez esetben 5-stage clos hálózat alakul ki).&lt;br /&gt;
* Az L3 kapcsolatot érdemes a ToR szintig letolni - tehát a Spine-Leaf-ToR között is L3 kapcsolat van (routing) -, így kiküszöbölhetők az L2 hátrányai:&lt;br /&gt;
** a spanning tree kikapcsolja a hurkot okozó portot, így a redundánsan kialakított portokból csak az egyik használható&lt;br /&gt;
** L2 hálózaton sok olyan nem kívánatos kommunikáció zajlik, ami csökkenti a sávszélességet&lt;br /&gt;
* point-point IP címeket használunk a Spine-Leaf-ToR hálózatban&lt;br /&gt;
* VXLAN segítségével kapcsolódunk a Leaf-ekre, így a szerverek nagyon gyorsan mozgathatók akár a rack szekrények között is (pl. egy virtuális gép áttelepítése során nem okoz problémát, hogy az IP tartományt is mozgassuk vele).&lt;br /&gt;
* Egy blokkolásmentes Clos hálózat minden portját ugyanakkora sávszélességgel érünk el, fix távolsággal (ez könnyedén kezelhető). Emiatt az adattárak bárhol lehetnek&lt;br /&gt;
* ne feledjük el, hogy az internetelérést biztosító router is a Leaf-re van kötve (nem a spine felett helyezkedik el!)&lt;br /&gt;
&lt;br /&gt;
Az L3 kapcsolaton általában BGP protokollt alkalmaznak az IP cím tartományok hirdetésére. Lehet ehelyett mást is alkalmazni, azonban egy adatközpont többnyire publikus címeket is továbbít az internet felé, amire csak a BGP képes, így adja magát, hogy a belső hálózat címeihez is ezt használják. A BGP előnye, hogy támogatja az ún. ECMP szabályokat (Equal Cost Multipath routing), így a Spine és a Leaf fokozat között található összes kapcsolatot képes kihasználni - kvázi összeadva a sávszélességüket. Hátránya, hogy az eszközök számával exponenciálisan növekszik a konfigurációs igény is, de ezt különböző AS-ek kialakításával lehet mérsékelni.&lt;br /&gt;
&lt;br /&gt;
A gyakorlatban nem törekednek a blokkolásmentes hálózat kialakítására, hiszen jelentősen növeli a költségeket, ha több ezer portra van szükségünk. Ugyanakkor azt se felejtsük el, hogy a Spine és a Leaf között nagyobb sávszélességet (100Gbps), mint a végpontok és a Leaf között (40Gbps). Ebből kifolyólag kevesebb Spine eszközzel is tudjuk biztosítani a szükséges sávszélességet - ennek következtében több elérhető port marad a Leaf fokozaton. A tipikus kialakítás, hogy a Spine-Leaf között a szükséges sávszélesség 3-át alakítják ki. Példa:&lt;br /&gt;
* Egy Rack-ben 10 szerver található, melyek fejenként 4x10Gbps kapcsolaton csatlakoznak a Leaf switch-re (egyben ToR)&lt;br /&gt;
* A rack szekrény sávszélessége így összesen 400Gbps&lt;br /&gt;
* A Spine-Leaf sávszélességét tehát 400/3=134Gbps sebességre kell optimalizálni&lt;br /&gt;
* Ha a Spine-Leaf között 100Gbps linkekkel számolunk, akkor összesen 2 Spine elegendő a szükséges sávszélesség eléréséhez (2-nél kevesebb Spine elhelyezése megszünteti a redundanciát is!).&lt;br /&gt;
&lt;br /&gt;
=== A hálózat bővítése ===&lt;br /&gt;
A hálózatot két módon lehet bővíteni:&lt;br /&gt;
* Új Leaf switch elhelyezésével (A Leaf-et rá kell kötni az összes Spine switchre) a kapacitás növelhető - több portunk lesz&lt;br /&gt;
* Új Spine switch elhelyezésével jelentősen növelhetjük a rendszer sávszélességét.&lt;br /&gt;
&lt;br /&gt;
A hálózat bővítésének felső korlátját a Leaf switchek portszáma jelöli ki: egy eszköz portszámának a felénél több spine nem telepíthető. (Ha többet telepítünk, akkor maradnak kihasználatlan vonalak maximális terhelés mellett is.) A fent látható hálózat nem bővíthető tovább (a Spine switchek telítettek, a Leaf switchek felét elfoglalja a Spine-Leaf kapcsolat).&lt;br /&gt;
&lt;br /&gt;
== Fat-tree topológia ==&lt;br /&gt;
A Fat-tree egy speciális clos topológia. Korábban szó esett arról, hogy egy Clos hálózat Spine fokozata kicserélhető egy 3 fokozatú Clos hálózattal - így kettővel növekedik az addigi hálózat fokszáma. Alább láthatjuk ezt a bővítést 3-ról 5 fokozatra.&lt;br /&gt;
[[Fájl:Extend 3-stage clos to 5 stage.png|középre]]&lt;br /&gt;
A képen be van keretezve a 3 fokozatú hálózat Spine rétege, de ne feledjük, hogy egy Clos hálózatnak egyetlen ilyen fokozata van: tehát a fenti képen a fehérrel jelölt switchek képezik ezt a fokozatot. A képen a színezés miatt jól látható, hogy egy Leaf egyetlen Spine-hoz kapcsolódik csoporton belül (azonos színárnyalattal lettek jelölve, pl. zöld, kék stb.), mindegyik csoport két eszközből áll (világosak és sötétebbek). Természetesen az összes switchez kapcsolódik valamelyik Leaf, és egy Leaf továbbra is négy Spine-hoz kapcsolódik - mivel összesen 4 Spine csoport látható.&lt;br /&gt;
&lt;br /&gt;
Ezzel a kapcsolással lehetőségünk nyílik a portok megtöbbszörözésére - a belső réteg arra szolgál, hogy az egyébként 2x2 portos switchekből 2x4 portos eszközöket hozzunk létre. A kapcsolás blokkolásmentes, tehát teljes egészében úgy működik, mintha egy 8 portos switcheket használtunk volna - igaz, ez sokkal költségesebb. Ne feledjük el, hogy ez a Clos hálózati topológia célja: blokkolásmentes óriás hálózatok felépítése.&lt;br /&gt;
&lt;br /&gt;
A Fat-tree szintén ezt a bővítést használja ki: N darab spine switchet csoportokba rendez és szerverek egy csoportját - úgynevezett POD-okat - csatlakoztatja hozzá úgy, hogy minden POD minden switchel kapcsolatban álljon. ez az alábbi képen látható.&lt;br /&gt;
[[Fájl:Fat-tree.png|középre]]&lt;br /&gt;
A kialakítás során alkalmazunk egy pár trükköt, hogy a fenti struktúra alakuljon ki az 5 fokozatú Clos hálózatból:&lt;br /&gt;
* A középső switcheket megcseréljük alul és felül is - így alakul ki 2-2 POD (mindegyikbe kettő leaf lesz)&lt;br /&gt;
* A Spine fokozatra tükrözünk, így összesen 8 Leaf switch lesz, amelyet bármelyik irányba használhatunk&lt;br /&gt;
* N Leaf-re N darab (a példában 2) switch-et kapcsolunk, amelyek mind össze vannak kötve minden szemben lévő eszközzel&lt;br /&gt;
* A rétegekeket átnevezzük:&lt;br /&gt;
** A spine fokozat lesz a Core réteg&lt;br /&gt;
** A Leaf fokozat lesz az Aggregation réteg.&lt;br /&gt;
** A Leaf-ekre kapcsolt újabb switchek lesznek az Edge réget.&lt;br /&gt;
* A Core rétegben a Spine switchek átrendezhetők - ez a képen is így látható (az eredeti elrendezés szerint minden POD Leaf eszköze a Spine csoport első eszközére, minden POD második Leaf eszköze a Spine csoport második eszközére lenne kapcsolva), hogy  minden POD egy Leaf eszköze egyetlen Spine switch csoporthoz kapcsolódjon. Ezek a csoportok Plane névre hallgatnak, amelyek innentől kezdve könnyedén telepíthetőek - egy újabb plane telepítéséhez újabb switch szükséges minden POD-ba az Aggregation rétegbe (és ezzel együtt az edge rétegbe is), majd minden újonnan telepített switchhez csatlakoztatni kell az új Plane eszközt (a csoportosítás nélkül a Spine switchek szét lennének szórva a rack szekrények között).&lt;br /&gt;
&lt;br /&gt;
A fenti képen a 3 rétegű Fat-tree topológia látható, de a Clos topológiához hasonlóan több réteggel is létrehozható.&lt;br /&gt;
&lt;br /&gt;
=== Összefüggések ===&lt;br /&gt;
L = rétegek száma,&amp;lt;br&amp;gt;&lt;br /&gt;
k = használt switcheken található portok száma&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0px auto;&amp;quot;&lt;br /&gt;
! Tulajdonság !! Általános !! 3 réteg&lt;br /&gt;
|-&lt;br /&gt;
| Spine eszközök maximális száma || (k/2)^(L-1) || (k/2)^2&lt;br /&gt;
|-&lt;br /&gt;
| Maximális végpontok száma || 2*(k/2)^(L) || 2*(k/2)^3&lt;br /&gt;
|-&lt;br /&gt;
| Összes felhasznált switch || (2*L-1)*(k/2)^(L-1) || 5*(k/2)^2&lt;br /&gt;
|-&lt;br /&gt;
| Edge rétegbeli switchek száma || 2*(k/2)^(L-1) || 2*(k/2)^2&lt;br /&gt;
|-&lt;br /&gt;
| Maximális POD || 2*(k/2)^(L-2) || k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Méretezés ===&lt;br /&gt;
Tegyük fel, hogy egy hálózatot szeretnénk létrehozni, amelyben az alábbiakat kell teljesítenünk:&lt;br /&gt;
* 12 db szervert szeretnénk üzemeltetni,&lt;br /&gt;
* a szerver és az Edge között 10Gbps linkekkel&lt;br /&gt;
* a leaf és a spine között 25Gbps linkekkel&lt;br /&gt;
* 16 portos switcheket fogunk felhasználni&lt;br /&gt;
&lt;br /&gt;
Ha mindezt 3 rétegű Fat-tree topológiában szeretnénk létrehozni, akkor a következő tulajdonságokat írhatjuk le:&lt;br /&gt;
* F(16, 3):&lt;br /&gt;
** Maximum (16/2)^2 = 64 Core switch&lt;br /&gt;
** Maximum 2*(16/2)^3 = 1024 végpont lesz&lt;br /&gt;
** 16 POD hozható létre&lt;br /&gt;
&lt;br /&gt;
Elsőként el kell döntenünk, hogy ezek a korlátok hogyan befolyásolják a jövőnket: várhatóan mikor lépünk túl ezen. Ha kevés, vagy hamarosan kevés lesz, akkor növelnünk kell a switch portszámát (k) vagy a rétegeket. Tegyük fel, hogy számunkra ez megfelelő választás. Azonban nincs pénzünk az egésznek a kiépítésére (hiszen tudjuk, hogy összesen 256 darab switch árát kellene kifizetni), ráadásul nem is indokolt a jelenlegi terheltség mellett. Ez esetben el kell döntenünk, hogy mit szeretnénk elérni. Például a teljes kapacitás 1/4-t garantáljuk - figyelem! &#039;&#039;&#039;nem blokkolásmentes hálózatot építünk ki&#039;&#039;&#039;, de a terheltség növekedésével tudunk fejleszteni. Nézzük hogyan méretezhetjük be a hálózatunkat a kívánt szintre:&lt;br /&gt;
* A 12 szerver 10Gbps sebességgel összesen 120Gbps sávszélességet igényel.&lt;br /&gt;
* A 120Gbps 1/4-dét szeretnénk kiépíteni, tehát: 120/x = 4/1 =&amp;gt; 4x = 120 =&amp;gt; x = 30Gbps.&lt;br /&gt;
* A switchek között 25Gbps sebesség érhető el, tehát 30Gbps/25Gbps darab Spine switch-re lesz szükségünk, hogy elérjük a minimális szintet. Mivel az eredmény tört, ezért 2 Spine switch szükségeltetik minden Spine-csoportba, amivel a lefedett sebesség 50Gbps lesz.&lt;br /&gt;
* A kettő Spine-switchez 2 Leaf tartozik (Aggregation) és 2 Edge switch - ezeket később a Core switchek növelésével szintén növelnünk kell&lt;br /&gt;
* A 64 darab Core switch összesen 8 csoportban helyezhető el (8x8). Jelenleg minden csoportban csak 2 eszközre van szükségünk. (Valójában ez egészen addig igaz, amíg a 16 POD mindegyike létezik és azok között 30Gbps sebességet szeretnénk garantálni. Jelenleg egy POD-ban elfér a 12 szerver (1 POD 16x25Gbps csatlakozással rendelkezik).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ha a switch-ek kapacitása nagyobb, mint a használt sávszélesség (pl. 25Gbps helyett 50 vagy 100Gbps a gerincen), akkor a Fat-tree konfiguráció többszörözhető (pl. F(16,3)-ból F(32,3) lesz 50Gbps esetén és F(64,3) lesz 100Gbps esetén).&lt;br /&gt;
&lt;br /&gt;
= Erőforrás virtualizálás =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 135-173.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Virtuális gépek ==&lt;br /&gt;
=== „Software Stack” ===&lt;br /&gt;
Egy szerver rétegekből épül fel: legalul a fizikai hardver, fölötte az operációs rendszer (kernel + driverek), majd az azon futó szolgáltatások/alkalmazások. Virtualizáció esetén ez a &amp;quot;software stack&amp;quot; kiegészül egy újabb réteggel: a hardver fölé egy hypervisor (Virtual Machine Monitor, VMM) kerül, ami több, egymástól elszigetelt virtuális gépet (VM) hoz létre, mindegyikben saját, önálló vendég operációs rendszerrel és saját szoftverstack-kel. A hypervisor feladata, hogy a fizikai erőforrásokat (CPU, memória, hálózat, tárolás) szétossza és elszigetelje a rajta futó VM-ek között.&lt;br /&gt;
&lt;br /&gt;
A hypervisorokat két nagy csoportba szokás sorolni:&lt;br /&gt;
* &#039;&#039;&#039;1-es típus (bare-metal)&#039;&#039;&#039;: közvetlenül a hardveren fut, nincs alatta „host” operációs rendszer (pl. VMware ESXi, Microsoft Hyper-V, Xen, KVM). Ez a jellemző megoldás szerverkörnyezetben, felhőszolgáltatóknál is.&lt;br /&gt;
* &#039;&#039;&#039;2-es típus (hosted)&#039;&#039;&#039;: egy már futó operációs rendszeren belül, alkalmazásként fut (pl. VirtualBox, VMware Workstation asztali gépen). Kényelmesebb fejlesztői/tesztelési célra, de nagyobb overhead-del jár.&lt;br /&gt;
&lt;br /&gt;
== Környezetek ==&lt;br /&gt;
=== QEMU ===&lt;br /&gt;
Nyílt forráskódú gépemulátor és virtualizáló szoftver. Önmagában, hardveres gyorsítás nélkül is képes teljes rendszereket emulálni - akár eltérő processzorarchitektúrát is (pl. ARM emulálása x86-os gépen), ez viszont jelentős teljesítménybeli veszteséggel jár, mivel minden processzorutasítást szoftveresen kell értelmeznie. Linux alatt tipikusan a KVM-mel párosítva használják: ekkor a KVM végzi a CPU/memória virtualizációját hardveres gyorsítással, míg a QEMU az eszközök (hálózati kártya, lemez, grafikus kártya stb.) emulálásáért felel - így érhető el közel natív teljesítmény, teljes eszközemulációval kombinálva.&lt;br /&gt;
&lt;br /&gt;
=== XEN ===&lt;br /&gt;
A Cambridge-i Egyetemen indult, ma nyílt forráskódú, bare-metal (1-es típusú) hypervisor. Az egyik úttörője volt a paravirtualizációnak: a korai x86-os processzorok még nem támogatták hardveresen a virtualizációt, ezért a Xen a vendég operációs rendszer forráskódjának (kernel) módosításával érte el a hatékony működést. Történelmi jelentősége van az AWS szempontjából is: az Amazon EC2 hosszú éveken át Xen alapokon futott, mielőtt áttértek volna a saját fejlesztésű, KVM-alapokra épülő Nitro rendszerre.&lt;br /&gt;
&lt;br /&gt;
== Virtualizációk típusai ==&lt;br /&gt;
=== Paravirtualizáció ===&lt;br /&gt;
A vendég operációs rendszer &amp;quot;tudatában van&amp;quot; annak, hogy virtualizált környezetben fut: a kritikus, hardverközeli műveleteket (pl. memóriakezelés, megszakítások) nem a valódi hardver felé, hanem közvetlenül a hypervisor felé, egy erre kialakított interfészen (hypercall) keresztül kéri. Ez elkerüli a drága hardveremulációt, cserébe a vendég operációs rendszer kernelét módosítani kell, ami nem minden esetben lehetséges (pl. zárt forráskódú, nem támogatott rendszerek esetén).&lt;br /&gt;
&lt;br /&gt;
=== Hardware Virtual Machine (HVM) ===&lt;br /&gt;
A modern processzorok hardveres virtualizációs kiegészítéseit (Intel VT-x, AMD-V) kihasználó megoldás. Ezekkel a kiegészítésekkel a processzor hardveresen ismeri fel és kezeli a privilegizált utasításokat, így a hypervisornak nem kell szoftveresen emulálnia vagy a vendég kernelt módosítania - teljesen változtatás nélküli (&amp;quot;unmodified&amp;quot;), akár zárt forráskódú operációs rendszer (pl. Windows) is virtualizálható vele, közel natív teljesítménnyel.&lt;br /&gt;
&lt;br /&gt;
=== Kernel-based Virtual Machine (KVM) ===&lt;br /&gt;
A Linux kernelbe épített modul, ami magát a Linux kernelt alakítja hypervisorrá: a HVM hardveres kiegészítéseket (VT-x/AMD-V) használja ki, és a Linuxot 1-es típusú hypervisorként viselkedteti. Önmagában csak a CPU és memória virtualizációját végzi, az eszközök emulálásához jellemzően a fentebb már említett QEMU-val párosítják. Nyílt forráskódú, ingyenes, és mivel a Linux kernel részét képezi, rendkívül elterjedt (többek között ezt használja a Proxmox, az OpenStack alapértelmezett hypervisoraként, és ez az alapja az AWS jelenlegi Nitro rendszerének is).&lt;br /&gt;
&lt;br /&gt;
== Privát felhő platformok ==&lt;br /&gt;
=== Eucalyptus ===&lt;br /&gt;
Az egyik legkorábbi (2008-as) nyílt forráskódú privát felhő platform, ami kifejezetten az AWS API-jaival (EC2, S3) kompatibilis felületet biztosított, így az AWS-re írt eszközök/scriptek egy saját, helyben üzemeltetett felhőn is futtathatók voltak. A HP felvásárlása (2014) után a fejlesztése lelassult, mára inkább csak történeti jelentősége van, éles környezetben aktívan nem igazán terjedt el.&lt;br /&gt;
&lt;br /&gt;
=== Open-Nebula ===&lt;br /&gt;
Nyílt forráskódú, viszonylag könnyűsúlyú felhő-menedzsment platform privát és hibrid felhők kialakítására. Az OpenStacknál egyszerűbb architektúrájú, gyorsabban üzembe helyezhető, cserébe kevésbé moduláris/rugalmas nagy, komplex, sok komponensből álló környezetekhez.&lt;br /&gt;
&lt;br /&gt;
=== OpenStack ===&lt;br /&gt;
A legszélesebb körben elterjedt nyílt forráskódú IaaS felhőplatform, amivel saját, AWS-hez hasonló szolgáltatáskínálatú privát vagy hibrid felhő építhető ki. Moduláris felépítésű, önálló, de egymással együttműködő szolgáltatásokból áll, például:&lt;br /&gt;
* &#039;&#039;&#039;Nova&#039;&#039;&#039; - számítási erőforrások (VM-ek) kezelése&lt;br /&gt;
* &#039;&#039;&#039;Neutron&#039;&#039;&#039; - hálózatkezelés&lt;br /&gt;
* &#039;&#039;&#039;Cinder&#039;&#039;&#039; - blokk tárolás&lt;br /&gt;
* &#039;&#039;&#039;Swift&#039;&#039;&#039; - objektum tárolás&lt;br /&gt;
* &#039;&#039;&#039;Glance&#039;&#039;&#039; - image-ek (virtuálisgép-sablonok) kezelése&lt;br /&gt;
* &#039;&#039;&#039;Keystone&#039;&#039;&#039; - azonosítás- és jogosultságkezelés&lt;br /&gt;
* &#039;&#039;&#039;Horizon&#039;&#039;&#039; - webes admin felület&lt;br /&gt;
Nagyvállalati és telekommunikációs környezetekben (pl. saját adatközponttal rendelkező szolgáltatóknál) különösen elterjedt, ahol fontos szempont, hogy ne legyenek egy adott nyilvános felhőszolgáltatóhoz kötve (vendor lock-in elkerülése).&lt;br /&gt;
&lt;br /&gt;
== Virtualizáló szoftverek ==&lt;br /&gt;
A fentebb tárgyalt virtualizációs típusokat (paravirtualizáció, HVM) a gyakorlatban konkrét, telepíthető hypervisor-termékek valósítják meg. Néhány elterjedt, elsősorban vállalati/szerver környezetben használt példa:&lt;br /&gt;
* Red Hat Virtualization (RHV), KVM alapú&lt;br /&gt;
* Hyper-V, Windows&lt;br /&gt;
* z/VM, IBM VM OS&lt;br /&gt;
* VMware ESXi&lt;br /&gt;
* Oracle VM Server&lt;br /&gt;
&lt;br /&gt;
= Adattárolás a felhőben =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 215-230.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Tárolási modellek ==&lt;br /&gt;
A felhős tárolási szolgáltatásokat érdemes három alapmodell mentén elkülöníteni, amelyeket korábban az AWS szolgáltatásainál konkrét termékeken keresztül is érintettünk:&lt;br /&gt;
* &#039;&#039;&#039;Objektum tárolás&#039;&#039;&#039; (pl. AWS S3): fájlokat (objektumokat) tárol laposan, mappastruktúra nélkül (a &amp;quot;mappákat&amp;quot; csak a fájlnevek elé fűzött prefixek szimulálják), HTTP(S) API-n keresztül érhető el. Nagy mennyiségű, ritkán módosuló adathoz (képek, videók, biztonsági mentések, statikus weboldalak) ideális, de nem csatolható fájlrendszerként egy operációs rendszerbe.&lt;br /&gt;
* &#039;&#039;&#039;Blokk tárolás&#039;&#039;&#039; (pl. AWS EBS): egy nyers, particionálható, fájlrendszerrel ellátható &amp;quot;virtuális merevlemezt&amp;quot; ad, amit egyetlen szerverhez csatolunk. Adatbázisok, operációs rendszer image-ek jellemző felhasználási területei, mivel alacsony késleltetésű, blokk szintű elérést biztosít.&lt;br /&gt;
* &#039;&#039;&#039;Fájl tárolás&#039;&#039;&#039; (pl. AWS EFS - Elastic File System): hálózati fájlrendszer (NFSv4 alapokon), amit egyszerre több szerver is csatolhat és közösen írhat/olvashat, szemben az EBS-sel, ami jellemzően csak egy EC2-höz kapcsolódik aktívan. Megosztott konfigurációkhoz, közös feltöltési könyvtárakhoz kifejezetten hasznos (pl. egy Auto Scaling Group több példánya számára közös feltöltött fájlok tárolására).&lt;br /&gt;
&lt;br /&gt;
== Konzisztencia modellek ==&lt;br /&gt;
Elosztott, több gépen/zónán replikált tárolók esetén fontos kérdés, hogy egy írás után azonnal, minden olvasó ugyanazt az (új) adatot látja-e:&lt;br /&gt;
* &#039;&#039;&#039;Erős konzisztencia (strong consistency)&#039;&#039;&#039;: egy sikeres írás után minden következő olvasás garantáltan a legfrissebb adatot adja vissza, függetlenül attól, melyik replikát/zónát érte el a kérés.&lt;br /&gt;
* &#039;&#039;&#039;Végső konzisztencia (eventual consistency)&#039;&#039;&#039;: egy írás után rövid ideig előfordulhat, hogy egy másik replikáról olvasva még a régi adatot kapjuk vissza, de egy idő után (jellemzően másodperceken belül) minden replika konzisztenssé válik.&lt;br /&gt;
Érdemes tudni, hogy az AWS S3 sokáig csak végső konzisztenciát biztosított egyes műveleteknél, 2020 végétől azonban minden művelethez (GET, PUT, LIST, DELETE) erős, olvasás-írás utáni konzisztenciát garantál, külön felár nélkül.&lt;br /&gt;
&lt;br /&gt;
== Helyi fájlrendszerek a tárolás mögött ==&lt;br /&gt;
A blokk tárolók (pl. egy EBS kötet) önmagukban csak nyers, particionálatlan tárterületet adnak - ahhoz, hogy fájlokat tudjunk rajtuk tárolni, fájlrendszert kell rájuk telepíteni. A választott fájlrendszer jelentősen befolyásolja a teljesítményt, a megbízhatóságot és az üzemeltethetőséget, ezért érdemes ismerni a leggyakoribb Linux alatti lehetőségeket:&lt;br /&gt;
&lt;br /&gt;
=== ext4 ===&lt;br /&gt;
A legtöbb Linux disztribúció (pl. Ubuntu) alapértelmezett fájlrendszere. Naplózó (journaling) fájlrendszer, ami azt jelenti, hogy a metaadat-módosításokat előbb egy naplóba írja, csak utána a végleges helyükre, így egy váratlan áramkimaradás vagy összeomlás esetén is konzisztens állapotba állítható vissza gyorsan. Kiforrott, jól ismert, kompatibilis és jó alapértelmezett választás, ha nincs speciális igényünk.&lt;br /&gt;
&lt;br /&gt;
=== XFS ===&lt;br /&gt;
Eredetileg az SGI IRIX rendszeréhez készült, ma a Red Hat Enterprise Linux (és az AlmaLinux, RockyLinux) alapértelmezett fájlrendszere. Kifejezetten nagy fájlokra és nagy párhuzamos írási/olvasási terhelésre lett optimalizálva (pl. adatbázisok, nagy médiafájlok), jól skálázódik több CPU maggal is. Hátránya, hogy natívan nem támogat pillanatképeket (snapshot) - ehhez alsóbb szintű megoldásra (pl. LVM snapshot) van szükség -, és a fájlrendszer méretét utólag csak növelni lehet, csökkenteni nem.&lt;br /&gt;
&lt;br /&gt;
=== BTRFS ===&lt;br /&gt;
Modern, copy-on-write (CoW) elvű Linux fájlrendszer (az openSUSE alapértelmezettje, sok NAS gyártó - pl. Synology - is használja). A CoW elv miatt egy módosításkor sosem írja felül a régi adatot a helyén, hanem az új verziót máshova írja, majd a mutatókat frissíti - ennek köszönhetően pillanatképek (snapshot) készítése szinte azonnali és nulla extra hellyel jár (amíg az adat nem változik). Beépített adatintegritás-ellenőrzést (checksumming) végez minden blokkon, támogat tömörítést és több lemez összekapcsolását (hasonlóan egy RAID-hoz). &#039;&#039;&#039;Fontos korlát:&#039;&#039;&#039; a BTRFS RAID5/RAID6 módja évek óta ismert, nem javított &amp;quot;write hole&amp;quot; hibával küzd, éles környezetben emiatt továbbra sem ajánlott ezekben a módokban használni.&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Eredetileg a Sun Microsystems Solaris rendszeréhez készült, ma nyílt forráskódú, közösségi fejlesztésű folytatása az OpenZFS (Linux, FreeBSD, TrueNAS stb. alatt is elérhető). A ZFS egyszerre fájlrendszer &#039;&#039;&#039;és&#039;&#039;&#039; kötetkezelő (a hagyományos LVM+fájlrendszer páros helyett), ezért sok funkciót natívan, nagyon hatékonyan valósít meg:&lt;br /&gt;
* Copy-on-write elv, akárcsak a BTRFS-nél, így itt is azonnali, olcsó pillanatképek/klónok készíthetők&lt;br /&gt;
* Beépített, blokkonkénti ellenőrzőösszeg (checksum) minden adaton és metaadaton, ami az esetleges &amp;quot;silent data corruption&amp;quot; (csendes adatsérülés) hibákat is kiszűri&lt;br /&gt;
* Saját RAID megvalósítás (RAIDZ1/2/3), amely - szemben a hagyományos RAID5/6-tal - nem szenved a &amp;quot;write hole&amp;quot; jelenségtől&lt;br /&gt;
* Beépített tömörítés és (opcionális) deduplikáció&lt;br /&gt;
* Az ARC (Adaptive Replacement Cache) nevű, RAM-alapú olvasási gyorsítótár jelentősen felgyorsítja a gyakran használt adatok elérését&lt;br /&gt;
A ZFS erőforrásigénye (elsősorban RAM) magasabb a fentieknél, cserébe kiemelkedően megbízható, ezért elsősorban dedikált tárolószervereken, NAS-okon, adatbázis-szerverek mögött terjedt el.&lt;br /&gt;
&lt;br /&gt;
=== Összefoglalás ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fájlrendszer !! Copy-on-write !! Natív snapshot !! Natív RAID !! Jellemző felhasználás&lt;br /&gt;
|-&lt;br /&gt;
| ext4 || Nem || Nem || Nem || Általános célú, alapértelmezett választás&lt;br /&gt;
|-&lt;br /&gt;
| XFS || Nem || Nem || Nem || Nagy fájlok, párhuzamos I/O, adatbázisok&lt;br /&gt;
|-&lt;br /&gt;
| BTRFS || Igen || Igen || Igen (RAID5/6 kerülendő) || Desktop/NAS, gyors pillanatképek&lt;br /&gt;
|-&lt;br /&gt;
| ZFS (OpenZFS) || Igen || Igen || Igen (RAIDZ) || Dedikált tárolószerverek, NAS, kritikus adatok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Felhőbiztonság =&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Oldalszám: 257-291.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Docker =&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=840</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=840"/>
		<updated>2026-09-14T07:48:16Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: 2024-es Free Tier váltás jelzése; EC2 névmagyarázat javítása; AWSCLI v2 hivatalos telepítés hozzáadva&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 regisztrációhoz 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 jellemzően egy jelképes összeggel (kb. 1$ vagy annak megfelelő) meg terheli a számlát a kártya ellenőrzéséhez, 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;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; 2024 közepe óta az AWS megváltoztatta az ingyenes csomag felépítését: az újonnan regisztráló fiókok már &#039;&#039;&#039;nem&#039;&#039;&#039; a régi, klasszikus &amp;quot;12 hónapig minden Free tier eligible szolgáltatás ingyenes&amp;quot; modellt kapják, hanem egy kredit alapú, rövidebb (jellemzően kb. fél éves) ingyenes időszakot induló jóváírással. A korábban regisztrált fiókok a régi, 12 hónapos feltételeket tarthatják meg. Regisztráció előtt mindenképp nézzük meg az aktuális [https://aws.amazon.com/free/ AWS Free Tier] feltételeit, mert idővel ezek is változhatnak.&lt;br /&gt;
&lt;br /&gt;
== Ingyenes verzió korlátai ==&lt;br /&gt;
Az ingyenes csomagban nem minden érhető el és ami mégis, az sem korlátlan ideig (a klasszikus modellben pl. 750 óra EC2 futási idő havonta, az új kredit alapú modellben pedig a jóváírt összeg elfogyásáig), 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 hivatalos neve &#039;&#039;Elastic Compute Cloud&#039;&#039;, innen az &#039;&#039;EC2&#039;&#039; rövidítés: a &#039;&#039;2&#039;&#039;-es a végén azt jelzi, hogy a névben két &#039;&#039;C&#039;&#039; kezdőbetűs szó van (&#039;&#039;Compute&#039;&#039; és &#039;&#039;Cloud&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
 A különbséget a VPS-hez elsősorban a rugalmas (&#039;&#039;elastic&#039;&#039;) skálázhatóság okozza: az EC2 példányokat gyorsan tudjuk indítani, leállítani, típust váltani rajtuk, illetve automatikusan is skálázhatjuk a darabszámukat (lásd később: Auto Scaling Group). Emiatt architekturálisan úgy érdemes tervezni, mintha bármikor cserélődhetne egy adott példány - ez alap (On-Demand) EC2 esetén a gyakorlatban ritkán, hardverhiba vagy saját leállítás esetén fordul csak elő, de a olcsóbb &#039;&#039;Spot&#039;&#039; típusú példányoknál az AWS bármikor, rövid (kb. 2 perces) előzetes figyelmeztetéssel visszavonhatja a gépet. Emiatt körültekintően kell eljárnunk: semmilyen adatot nem érdemes úgy egy alkalmazáson belül tárolni, mint egy VPS esetén: a dinamikus adatok (pl. PHP Session, feltöltött fájlok) 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;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Az &#039;&#039;apt install awscli&#039;&#039; a legtöbb Debian/Ubuntu rendszeren a régebbi, 1-es főverziójú AWS CLI-t telepíti a disztribúció saját tárolójából, amit az AWS már csak fenntartási (maintenance) módban frissít. Az AWS hivatalosan a 2-es főverzió telepítését ajánlja, amit a következő paranccsal tehetünk meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&amp;quot; -o &amp;quot;awscliv2.zip&amp;quot;&lt;br /&gt;
unzip awscliv2.zip&lt;br /&gt;
sudo ./aws/install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Órai/gyakorlási célra az &#039;&#039;apt install awscli&#039;&#039; is elegendő lehet, de érdemes tudni, hogy nem ez a hivatalosan ajánlott telepítési mód.&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::Docker&amp;diff=839</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::Docker</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::Docker&amp;diff=839"/>
		<updated>2026-09-14T07:46:50Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Hibás apt install docker.io docker parancs javítva; hibás CMD [&amp;quot;-D FOREGROUND&amp;quot;] példa magyarázó figyelmeztetéssel kiegészítve; 777-es jogosultság megjegyzéssel; apró elgépelések&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mi az a Docker? ==&lt;br /&gt;
A Docker a konténer technológiák egyike. A konténerek és a virtuális gépek rokonságban állnak egymással, de mégis nagy különbség van közöttük: a konténerek pehelykönnyűek.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;De hogyan válik egy virtuális gép pehelykönnyűvé?&#039;&#039;&#039;&lt;br /&gt;
A válasz az, hogy Docker esetében nincs hardvervirtualizáció, így kisebb az erőforrásigénye - nem kell az eszközökre &amp;quot;memory map&amp;quot;-ot létrehozni a felmerülő biztonsági problémák kezelésére és nem kell minden hozzáférésnél azokat forwardolni - és a benne futó operációs rendszerek is a lehető legminimálisabb konfigurációval rendelkeznek.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tekintsük meg egy virtuális gép szintjeit&#039;&#039;&#039; (lásd: [https://www.researchgate.net/figure/Virtual-Machine-underlying-layers_fig1_344208115 VM szintek]):&lt;br /&gt;
# A fizikai vas szintje fölé telepítünk valamilyen hypervisort, azaz virtualizációs környezetet&lt;br /&gt;
#* itt jön létre az említett &amp;quot;memory map&amp;quot;&lt;br /&gt;
#* a virtuális gépek az itt beállított hardverkörnyezetet fogják látni, ami akár fals információ is lehet, eltérhet a valóságtól (kompatibilitások miatt szokás átverni a felsőbb szinteket)&lt;br /&gt;
# A Virtualizált OS szintje, saját kernellel és driverekkel&lt;br /&gt;
# A virtuális gépben telepített alkalmazások szintje&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ezzel szemben tekintsük meg a Docker szintjeit&#039;&#039;&#039; (lásd: [https://www.researchgate.net/figure/Container-underlying-layers_fig2_344208115 Docker szintek] vagy [https://www.researchgate.net/figure/Comparison-of-Docker-Container-and-Virtual-Machine-Architecture-13_fig1_343764931 VM vs Docker]&lt;br /&gt;
# A fizikai vas szintje fölé telepítjük a HOST operációs rendszert, ami többnyire valamilyen linux alapú operációs rendszer&lt;br /&gt;
# Az operációs rendszeren telepítünk egy konténerizációs alkalmazást (esetünkben &#039;&#039;docker daemon&#039;&#039;-t)&lt;br /&gt;
# Az elindított konténerek a telepített konténerizációs alkalmazással kommunikálnak számukra ez az API a HOST operációs rendszere felé.&lt;br /&gt;
&lt;br /&gt;
Végső soron &#039;&#039;&#039;a nagy különbséget az jelenti&#039;&#039;&#039;, hogy a konténerek esetén a kernelt nem virtualizáljuk, hanem felhasználjuk a HOST operációs rendszerét, így mindent, ami az alatti szinten található ki vehetjük a virtuális környezet menedzseléséből.&lt;br /&gt;
&lt;br /&gt;
==== Egyéb konténer technológiák ====&lt;br /&gt;
Szerencsés megjegyezni, hogy bár a piac nagy részét jelenleg a Docker birtokolja a konténerek világában, azért nem nevezhetjük egyeduralkodónak. Vannak egyéb fejlesztések is, amelyek bizonyos esetekben célravezetőbbek lehetnek, bár ezek felhasználási területei jóval szegényesebbek.&lt;br /&gt;
&lt;br /&gt;
A teljesség igénye nélkül egy pár nevesebb (a többit lásd: [https://www.containiq.com/post/docker-alternatives Docker alternatívák 2022-ben]):&lt;br /&gt;
* LXC / LXD, azaz Linux Container, amelyet többet között a Proxmox is támogat (a proxmox egy ESXi-hez hasonló virtuális gép vezérlő operációs rendszer, amelyet a VPS szolgáltatók (is) használnak).&lt;br /&gt;
* Podman&lt;br /&gt;
* RunC&lt;br /&gt;
* Containerd&lt;br /&gt;
&lt;br /&gt;
 Érdemes tájékozódni, mielőtt egy technológiát ténylegesen ajánlatba adunk, gyorsan fejlődik az iparág, így könnyedén jelenhetnek meg újabb szereplők is, akik lesöprik a megszokott dolgokat!&lt;br /&gt;
&lt;br /&gt;
=== Docker felhasználási területei ===&lt;br /&gt;
A docker mára annyira kinőtte magát, hogy a legtöbb cég az alkalmazásait ilyen környezetben telepíti, ezzel ténylegesen időt spórolva magának.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Hogyan spórolhat időt egy olyan technológia, ami újabb üzemeltetési kérdéseket vet fel?&#039;&#039;&#039;&lt;br /&gt;
 Képzeljünk el egy olyan szervert, amely 5db weboldalt futtat, azaz 5 különböző virtual host létezik rajta. Az egyik nginx alatt fut, a másik nodejs, a harmadik php7-es verzióval, a negyedik php8-as verzióval fut és még nem is említettük, hogy adatokat is szeretnénk tárolni mssql, mysql, postgresql esetleg sqlite adatbázisokban, akármilyen kombinációban. Érezzük, hogy ennek a szervernek az üzemeltetése nem kis feladat, de ha csak a különböző verziót igénylő PHP-s weboldalakat szeretnénk egy szerveren elhelyezni, azzal is rendkívül érdekes feladatokba ütközhetünk (természetesen lehetséges és meg van rá a bejáratott módszer, hiszen ez a docker előtt is probléma volt).&lt;br /&gt;
 Ha ezt tekintjük és ezzel állítjuk szembe azt a többlet feladatot, hogy a docker daemon-t is üzemeltetni, frissíteni kell, akkor már nem is tűnik rossz ötletnek: ha egy-egy alkalmazás külön-külön konténerekbe kerülne, akkor nem kellene sem az egy szerveren futtatott többféle verzió problémájával, sem a különböző adatbázis szükségletekkel, sem a különböző webszerver szükségletekkel foglalkoznunk, gyakorlatilag mindenki olyan technológiát használ, amilyet szeretne és úgy frissíti a konténeren belül azokat, amilyen ütemben szeretné, a többire nem lesz hatással.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Mi a helyzet a konténerek okozta többlet teljesítmény szükséglettel?&#039;&#039;&#039;&lt;br /&gt;
 A korábbi fejezetben tárgyaltak alapján a konténer nem fogyaszt sokat, így az overhead rendkívül kicsi. Természetesen van némi többlet CPU idő, memória és tárhely felhasználás - ha csak azt vesszük, hogy egyetlen SQL szerver helyett minden konténerbe külön fel lesz telepítve, így töbszörösen tároljuk a szerver konfigurációs állományait stb.), de mindez manapság bőven ellensúlyozható viszonylag alacsony költségen: nem okoz akkora költség többletet, mint amekkora veszteséget okozna egy frissítést követően összeomlott vegyes rendszer, tehát mondhatjuk, hogy bár teljesítmény vesztés jelentkezik, azt mégis megéri bevállalni az előnyei miatt (a virtuális gépet ugyanerre a célra például nem érte meg bevetni).&lt;br /&gt;
&lt;br /&gt;
Az üzemeltetés gyorsításán túl &#039;&#039;&#039;használják felhő kialakítására is&#039;&#039;&#039;, hiszen a daemon-ba épített &#039;&#039;&#039;swarm&#039;&#039;&#039;-nak köszönhetően automatikusan skálázhatunk dockereket akár több szerveren is, amik ráadásul pár másodperc alatt elérhetővé válnak, így a bootolási időt is megspóroljuk.&lt;br /&gt;
Hozzá kell tenni, hogy a &#039;&#039;swarm&#039;&#039;-nál manapság létezik jobb és barátságosabb &#039;&#039;orchestrator&#039;&#039; is, pl.: Kubernetes.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Nem csak az üzemeltetést könnyíti meg vagy javítja a rendelkezésreállást, hanem a fejlesztési időn is javít&#039;&#039;&#039;.&lt;br /&gt;
 Természetesen ne gondoljunk olyanokra, hogy a programot helyettünk lefejleszti egy konténer, de azzal nagyon sokat nyerünk, hogy ha egy konténerben lefejlesztünk valamit és működik, akkor a konténert egy másik gépre másolva is működni fog, függetlenül attól, hogy esetleg platformot váltottunk (windows-&amp;gt;linux vagy fordítva), hogy verziót váltottunk vagy hogy milyen csomagok érhetők el a cél szerveren. Ezek a kérdések sok esetben plusz fejlesztési időt jelentenek, hogy valamelyest dinamikus legyen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Sandboxing&#039;&#039; megoldások körében is előkerül a docker. Ez azt jelenti, hogy egy alkalmazást először egy konténerben próbálnak ki és ha úgy gondolják, akkor telepítik az éles rendszerbe is. Ha úgy alakul, hogy nincs rá szükség, akkor a konténerrel együtt elveszik minden módosítás is, tehát a tárhely 100%-ban visszanyerhető. Legyünk azért ezzel is óvatosak, egy virtuális gép alkalmazás tesztelésre sokkal jobb lehetőséget biztosít, sokkal mélyebben szétválik a két rendszer egymástól. Docker esetében például egy kernel sebezhetőséggel konténeren belülről is vissza lehet élni és ne feledkezzünk meg a &#039;&#039;docker daemon&#039;&#039; hibáiról sem.&lt;br /&gt;
&lt;br /&gt;
=== Docker registry ===&lt;br /&gt;
Ez a szolgáltatás tárolja az elérhető képfájlokat. A docker egyéb információ hiányában a [https://docker.com docker.com] webhelyre feltöltött fájlok között keres és innen tölti le a találatokat, de telepíthetünk sajátot is (erről később lesz szó).&lt;br /&gt;
&lt;br /&gt;
 A docker.com-ra a regisztráció ingyenes, egy privát projektet hozhatunk létre és bármennyit publikusan. Ez magában foglalja a veszélyt is: bárki feltölthet például egy webszervert, amelyben kiskapuk vannak stb.&lt;br /&gt;
 &#039;&#039;&#039;Mindig ügyeljünk rá, hogy megbízható helyről származzon, amit letöltünk!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Docker Telepítése ==&lt;br /&gt;
A futáshoz telepítenünk kell a &#039;&#039;docker daemon&#039;&#039;-t, amit a következő paranccsal tehetünk meg:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install docker.io -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem!&#039;&#039;&#039; Ne próbáljunk meg egy önálló &#039;&#039;docker&#039;&#039; csomagot is telepíteni a &#039;&#039;docker.io&#039;&#039; mellé - Debian/Ubuntu alatt nem ez a konténerizációs Dockert jelenti (a névütközés miatt kapta annak idején a csomag a &#039;&#039;docker.io&#039;&#039; nevet), hanem egy azzal semmilyen kapcsolatban nem álló, régi segédprogramot, így egy &#039;&#039;apt install docker.io docker&#039;&#039; parancs hibára fut vagy felesleges csomagot telepít.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Éles / production környezetben érdemes lehet a Docker hivatalos apt tárolóját használni &#039;&#039;docker.io&#039;&#039; helyett, mert abban naprakészebb (Docker CE) verzió érhető el: lásd a [https://docs.docker.com/engine/install/ubuntu/ hivatalos telepítési útmutatót].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Docker konténerek indítása ==&lt;br /&gt;
Az elérhető konténerek között kereshetünk az &#039;&#039;ubuntu&#039;&#039; karakterláncra a következő paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker search ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A kimeneten láthatjuk, hogy mely csomagnak milyen a megítélése, biztonságos forrásból származik-e stb.&lt;br /&gt;
&lt;br /&gt;
A képfájlok neve a következőképp épül fel: &#039;&#039;&#039;[registry_server]/namespace/name[:tags]&#039;&#039;&#039;&lt;br /&gt;
* A &#039;&#039;registry_server&#039;&#039; a &#039;&#039;docker search&#039;&#039; kimenetében nem látszik, mivel ebben az esetben fixen a &#039;&#039;docker.com&#039;&#039; oldalon keresünk.&lt;br /&gt;
* A &#039;&#039;namespace&#039;&#039;-re láthatunk példát&lt;br /&gt;
* Amennyiben nincs benne /-jel, akkor csak a nevét adtuk meg namespace és szerver nélkül&lt;br /&gt;
* Kettőspont után adhatunk hozzá tag-et (egyet, de általában kötőjellel választjuk el, ha többet is szeretnénk mégis). Ha nem írunk tag-et egy image után, akkor a docker úgy veszi, hogy a &#039;&#039;&#039;latest&#039;&#039;&#039; nevűt akarjuk használni, tehát ezt nem kell kiírni. Minden más esetben igen.&lt;br /&gt;
&lt;br /&gt;
Mivel az &#039;&#039;ubuntu&#039;&#039;-ra volt találat, így indítsunk el egy konténert belőle:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ha a fenti parancsot lefuttatjuk, akkor nem fogunk tapasztalni semmit, igazán csak azt látjuk, hogy a daemon úgy döntött, hogy ez az image nálunk nem elérhető, így letöltötte és egyébként futtatta is, de a végén ugyanúgy a HOST OS-ben találjuk magunkat. Ez nem hiba, rosszul paramétereztük a rendszerünket.&lt;br /&gt;
&lt;br /&gt;
Most indítsuk el a következő paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 -t =&amp;gt; pseudo-tty hozzárendelése&lt;br /&gt;
 -i =&amp;gt; interaktív, tehát tudunk kommunikálni a dockerrel&lt;br /&gt;
 Ebben az esetben kapunk egy újszerű PROMPT-ot, tehát most tényleg a konténerben vagyunk, azt tudjuk konfigurálni. &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal be tudjuk ezt a terminált zárni.&lt;br /&gt;
&lt;br /&gt;
Miután vissza kaptuk a HOST OS terminálját futtassuk le az alábbi parancsot, ahol azt tapasztaljuk, hogy egyetlen konténer sem fut:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 A &#039;&#039;&#039;ps&#039;&#039;&#039; kilistázza a futó konténereket és azok főbb tulajdonságait - pl. mi a neve, milyen portokat engedélyeztünk rajta, melyik image-ből indult ki stb.&lt;br /&gt;
&lt;br /&gt;
A konténer leállását az okozza, hogy az &#039;&#039;exit&#039;&#039; parancsra a &#039;&#039;bash&#039;&#039; program kilép és az &#039;&#039;ubuntu&#039;&#039; ennek a leállását várja: addig fut a konténer, amíg a &#039;&#039;bash&#039;&#039; is fut. Amikor az leállt, akkor a docker-nek már nem volt egyéb feladata, így leállt. &#039;&#039;&#039;Erre mindig oda kell majd figyelnünk, hogy amivel elindítjuk a konténert, az folyamatosan fusson benne, hogy a konténerünk működésben maradjon&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A fenti problémát feloldhatjuk azzal, ha daemonizáljuk a konténert - azaz a háttérben indítjuk el:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez esetben azonban nem kaptunk PROMPT-ot sem, bár a &#039;&#039;docker ps&#039;&#039; parancs mutatja, hogy fut.&lt;br /&gt;
Szerezzünk terminált a futó konténerhez:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti &amp;lt;a &#039;&#039;docker ps&#039;&#039; által kiírt container_id&amp;gt; bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Az &#039;&#039;exec&#039;&#039; segítségével új feladatot adhatunk a konténernek, ami természetesen az előző mellett, párhuzamosan fog futni. Ha a program, amit futtatunk egy SHELL, pl. &#039;&#039;bash&#039;&#039;, akkor kapunk egy konzolt a konténerben. (-ti jelentése ugyanaz, mint korábban).&lt;br /&gt;
&lt;br /&gt;
== Docker konténerek leállítása ==&lt;br /&gt;
# A &#039;&#039;docker ps&#039;&#039; parancsot futtatva kinyerhetjük a futó konténer ID-ját&lt;br /&gt;
# Futtassuk a &#039;&#039;docker kill &amp;lt;container_id&amp;gt; &amp;lt;container_id2&amp;gt; &amp;lt;container_id3&amp;gt;&#039;&#039; parancsot a kívánt konténerek erőszakos kilövéséhez vagy a &#039;&#039;docker stop &amp;lt;container_id&amp;gt; &amp;lt;container_id2&amp;gt; &amp;lt;container_id3&amp;gt;&#039;&#039; parancsot a normál leállításhoz.&lt;br /&gt;
&lt;br /&gt;
== Docker konténerek menedzselése ==&lt;br /&gt;
A rendszerben futó konténereket kilistázhatjuk a következő paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A rendszerben egyszer elindított (nem feltétlen futó) konténereket listázhatjuk a következő paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container ls -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A nem futó konténereket letörölhetjük egyesével megnevezve a következő paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container rm &amp;lt;container_id&amp;gt; &amp;lt;container_id2&amp;gt; &amp;lt;container_idN&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A nem futó konténereket letörölhetjük egy paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container prune&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker képfájlok menedzselése ==&lt;br /&gt;
A helyi gyűjtőbe mentett képfájlokat a következő paranccsal listázhatjuk:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A nem használt képfájlokat letörölhetjük egyesével megnevezve a következő paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image rm &amp;lt;image_id&amp;gt; &amp;lt;image_id&amp;gt; &amp;lt;image_id&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A nem használt képfájlokat letörölhetjük egy paranccsal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image prune&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker image készítése ==&lt;br /&gt;
=== Konténerből ===&lt;br /&gt;
Először is indítsunk el egy konténert a kiválasztott képfájlból (pl. ubuntu)!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Ezzel kapnunk kell egy terminált, aminek a PROMPT-ja nem hasonlít a HOST OS-ére, legyünk körültekintőek, hogy hol futtatjuk a következő parancsokat: a konténeren belül legyünk!&lt;br /&gt;
&lt;br /&gt;
Frissítsük le a csomaglistát és telepítsük fel az apache2 programot, hogy legyen webes alkalmazásunk!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install apache2 -y&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Miután feltelepült, ki is lépünk az &#039;&#039;&#039;exit&#039;&#039;&#039; paranccsal. Emlékezzünk, hogy ezzel a konténerünk leállt!&lt;br /&gt;
&lt;br /&gt;
Keressük ki az előbb létrehozott konténer ID-ját (a &#039;&#039;docker ps&#039;&#039; csak a futó konténereket listázza)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container ls -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 A leállítás óta eltelt időnél a legkisebb értéket jegyző konténer lesz az, amit most állítottunk le, amennyiben többet is listázott és nem ismerjük fel.&lt;br /&gt;
&lt;br /&gt;
Mentsük a konténeren történt változásokat egy új képfájlba:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# docker commit &amp;lt;container_id&amp;gt; &amp;lt;name&amp;gt;:&amp;lt;tag&amp;gt;&lt;br /&gt;
docker commit &amp;lt;container_id&amp;gt; ubuntu:apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ellenőrizzük, hogy létrejött-e az új képfájl:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Itt látszódnia kell egy ubuntu:apache2 sornak. Ügyeljünk rá, hogy a név és a tag ez esetben tabulátorral vannak elválasztva, nem kettősponttal, hiszen táblázatos formában jelenik meg.&lt;br /&gt;
&lt;br /&gt;
Végül próbáljuk ki, hogy ténylegesen a mentett állapot fogad-e minket, ha az új konténer indítjuk el:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu:apache2 bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A konténer terminálját megnyitva teszteljük le, hogy létezik-e például az apache2ctl nevű parancs:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
which apache2ctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Ha ezutóbbi parancs ír ki valamit, akkor jó eséllyel telepítve van a konténerben.&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy ténylegesen működjön az alkalmazásunk, ahhoz jelezni kell, hogy a konténerben a 80-as porton van egy szolgáltatásunk. Ez a &#039;&#039;docker daemon&#039;&#039; felé nyújtott információ, így lesz lehetőségünk rá forgalmat küldeni, ha szeretnénk. Természetesen amíg nem engedélyezzük, addig nem fogja elérni senki.&lt;br /&gt;
A következő paranccsal futtathatjuk úgy, hogy a HOST gép IP-jével hivatkozva (saját gépen localhost, egyébként a szerver IP-je) betöltsön a konténeren belüli alkalmazás:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --expose 80 -p 80:80  ubuntu:apache2 apache2ctl -D FOREGROUND&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Az &#039;&#039;--expose 80&#039;&#039; üzeni a &#039;&#039;docker daemon&#039;&#039; felé, hogy ez a konténer kommunikálhat a 80-as porton keresztül a HOST OS felé.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 A &#039;&#039;-p 80:80&#039;&#039; jelzi, hogy a HOST OS 80-as portját át irányítjuk az ubuntu:apache2 képfájlból készített konténer 80-as portjára. Sablon: &#039;&#039;&#039;&amp;quot;&amp;lt;host_ip&amp;gt;:&amp;lt;host_port&amp;gt;:&amp;lt;container_port&amp;gt;&amp;quot;&#039;&#039;&#039;, ahol a host_ip lehet 127.0.0.1 =&amp;gt; csak a localhostról érhető el a portforward (proxy esetén javasolt, hogy kívülről ne lehessen elérni a konténert direktben), lehet a szerver IP címei közül bármelyik megadva (pl. 192.168.1.100, amennyiben ez a belsőhálózati IP címe) és lehet &#039;&#039;&#039;0.0.0.0&#039;&#039;&#039; (ez &#039;&#039;&#039;az alapértelmezett&#039;&#039;&#039;), ami minden a géphez köthető IP címen hallgatózni fog.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Az &#039;&#039;„apache2ctl -D FOREGROUND”&#039;&#039; előtérben futtatja az apache2 szervert, így nem áll le a konténer sem, futásban marad és várja a csatlakozó klienseket.&lt;br /&gt;
&lt;br /&gt;
Érdemes a parancs lefuttatása után megnézni a &#039;&#039;docker ps&#039;&#039; kimenetét, a port átirányítások és lehetőségek ott is látszódnak. Ha pl. az előző parancsot megismételjük a következő bővítéssel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --expose 80 --expose 443 -p 80:80  ubuntu:apache2 apache2ctl -D FOREGROUND&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A &#039;&#039;docker ps&#039;&#039; kimenetében azt fogjuk látni, hogy a 80:80-as portforward szabály él erre a konténerre, de mindeközben &#039;&#039;&#039;lenne lehetőség&#039;&#039;&#039; a 443-as porton is kommunikálni, ha ezt is felkonfigurálnánk egy &#039;-p 443:443&#039; kapcsolóval.&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
==== Dockerfile tartalma ====&lt;br /&gt;
Képfájlt hozhatunk létre anélkül is, hogy elindítanánk egyet kézzel és be konfigurálnánk azt, ahogy az előbb tettük. Ehhez egy &#039;&#039;Dockerfile&#039;&#039; nevű állományt kell létrehoznunk.&lt;br /&gt;
Érdemes ezt a saját könyvtárunkban megtenni, esetleg egy külön mappában, ahogy a következő kód is mutatja:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~ &amp;amp;&amp;amp; mkdir web &amp;amp;&amp;amp; cd web &amp;amp;&amp;amp; nano Dockerfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fájl tartalma legyen ez:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dockerfile&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install apache2 -y&lt;br /&gt;
EXPOSE 80 443&lt;br /&gt;
ENTRYPOINT apache2ctl -D FOREGROUND&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Jól látható, hogy ugyanazok a parancsok vannak benne, amit az előbb is lefuttatunk, csupán ezt most egy fájlban foglaltuk össze.&lt;br /&gt;
 &lt;br /&gt;
 A &#039;&#039;„FROM”&#039;&#039;-mal adjuk meg, hogy melyik képfájlból akarunk kiindulni&lt;br /&gt;
 A &#039;&#039;„RUN”&#039;&#039; kulcsszót olyan parancsok követik, amelyet a kiválasztott képfájlban végre akarunk hajtani.&lt;br /&gt;
 Az &#039;&#039;„EXPOSE”&#039;&#039; kulcsszó után megadhatjuk szóközzel elválasztva, hogy mely portokon képes kommunikálni a konténer.&lt;br /&gt;
 Az &#039;&#039;„ENTRYPOINT”&#039;&#039; kulcsszót követi a docker elindítását követően (&#039;&#039;docker run&#039;&#039;) automatikusan induló program (a &#039;&#039;docker daemon&#039;&#039; ennek a programnak a kilépésére fog várni, amikor ez a program megszakad, akkor a konténer is leáll, tehát csak olyat írjunk ide, ami a végtelenségig képes futni).&lt;br /&gt;
&lt;br /&gt;
Az ENTRYPOINT helyett írhatunk CMD-t is, azonban jó, ha tudjuk, hogy a &#039;&#039;docker run&#039;&#039; parancs végén a &#039;&#039;CMD&#039;&#039; utasítást adhatjuk meg:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ebben az esetben a &#039;&#039;„bash”&#039;&#039; kulcsszó a CMD-nek felel meg, így ha a felhasználó ezt a paramétert is megadja, akkor felül fogja írni a képfájlban definiáltat, ami az alkalmazás helyi összeomlását is jelentheti egyes esetekben (természetesen az újbóli futtatása jelen esetben &#039;&#039;bash&#039;&#039; paraméter nélkül meg fogja oldani a problémát).&lt;br /&gt;
Az ENTRYPOINT érétke azonban csak külön kapcsolóval változtatható meg, így kisebb az esélye, hogy egy hozzá nem értő ezzel működésképtelenné teszi a konténerben az alkalmazást.&lt;br /&gt;
&lt;br /&gt;
A program futtatása úgy épül fel, hogy &#039;&#039;${ENTRYPOINT} ${CMD}&#039;&#039;, tehát az &#039;&#039;ENTRYPOINT&#039;&#039;-ban megadhatjuk, hogy melyik programot szeretnénk, hogy mindenképp lefusson és &#039;&#039;CMD&#039;&#039;-vel megadhatjuk, hogy alapértelmezetten milyen paraméterekkel induljon, de a felhasználó ha szeretné, akkor a paramétereket megváltoztathatja. Ehhez a következő formában kell megadnunk ezeket az értékeket:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dockerfile&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install apache2 -y&lt;br /&gt;
EXPOSE 80&lt;br /&gt;
ENTRYPOINT [&amp;quot;apache2ctl&amp;quot;]&lt;br /&gt;
CMD [&amp;quot;-D FOREGROUND&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;Csak ebben a megadási módban működik, „[” „]” párok nélkül nem cserélődik le a &#039;&#039;CMD&#039;&#039; tartalma!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Figyelem, ez a konkrét példa hibás lesz futtatáskor!&#039;&#039;&#039; Exec formában (szögletes zárójelekkel) a &#039;&#039;CMD&#039;&#039; tömb minden eleme &#039;&#039;&#039;külön&#039;&#039;&#039;, önálló argumentumként adódik át a programnak. A fenti &#039;&#039;CMD [&amp;quot;-D FOREGROUND&amp;quot;]&#039;&#039; emiatt egyetlen, szóközt is tartalmazó argumentumként (&#039;&#039;&amp;quot;-D FOREGROUND&amp;quot;&#039;&#039;) adja át az értéket az &#039;&#039;apache2ctl&#039;&#039;-nek két külön kapcsoló (&#039;&#039;-D&#039;&#039; és &#039;&#039;FOREGROUND&#039;&#039;) helyett, amit a program nem fog tudni értelmezni, és a konténer el fog állni. A helyes megoldáshoz minden argumentumot külön tömbelemként kell felsorolni - lásd az alábbi példát.&lt;br /&gt;
&lt;br /&gt;
Lehetséges konfiguráció lehet jelen esetben a következő is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dockerfile&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install apache2 -y&lt;br /&gt;
EXPOSE 80&lt;br /&gt;
ENTRYPOINT [&amp;quot;apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;]&lt;br /&gt;
CMD [&amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 Ez esetben a &#039;-D&#039; kapcsoló mindenképp az &#039;&#039;apache2ctl&#039;&#039; parancs után kerül, a felhasználó a docker indításakor azt választhatja meg, hogy a defualt &#039;&#039;FOREGROUND&#039;&#039; vagy egy explicit megadott &#039;&#039;BACKGROUND&#039;&#039; paraméterrel szeretné-e futtatni (&#039;&#039;&#039;utóbbi esetben a konténer egyből kilépne, így ennek a nyitva hagyása jelen esetben nem ésszerű&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Adhatunk meg továbbá &#039;&#039;USER&#039;&#039; és &#039;&#039;WORKDIR&#039;&#039; kulcsszavakat: előbbivel azt állíthatjuk be, hogy a docker milyen felhasználónévvel fusson, utóbbi a kezdőkönyvtárat változtatja meg.&lt;br /&gt;
&#039;&#039;&#039;A USER paraméter NAGYON fontos, soha ne készítsünk olyan image-t, amely root joggal fut! A biztonsági kockázata nagyon magas.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dockerfile&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install apache2 -y&lt;br /&gt;
&lt;br /&gt;
# ez egy pillanatra elindítja az apache2-t, így kialakítja root joggal a működéshez szükséges mappákat&lt;br /&gt;
RUN apache2ctl start &lt;br /&gt;
&lt;br /&gt;
# admin felhasználó létrehozása&lt;br /&gt;
RUN useradd admin &lt;br /&gt;
&lt;br /&gt;
# apache logfájlokon legyen admin csoport a szerző&lt;br /&gt;
RUN chgrp admin /var/log/apache2 -R&lt;br /&gt;
&lt;br /&gt;
# apache2 log fájlokon root és admin csoport bármit tehet, mindenki más olvashat &lt;br /&gt;
RUN chmod 2774 /var/log/apache2 -R &lt;br /&gt;
&lt;br /&gt;
# admin el tudja indítani az apache2 szolgáltatást&lt;br /&gt;
RUN chgrp admin /var/run/apache2 -R&lt;br /&gt;
&lt;br /&gt;
# admin el tudja indítani az apache2 szolgáltatást, tudjon ide írni &lt;br /&gt;
RUN chmod 2775 /var/run/apache2 -R &lt;br /&gt;
&lt;br /&gt;
# admin-ként fogja inicializálni a konténert indításkor (docker run)&lt;br /&gt;
USER admin &lt;br /&gt;
&lt;br /&gt;
# a kezdőkönyvtár legyen az app könyvtára (nem muszáj, de így nem kell keresni később)&lt;br /&gt;
WORKDIR /var/www/html &lt;br /&gt;
EXPOSE 80&lt;br /&gt;
ENTRYPOINT apache2ctl -D FOREGROUND&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Képfájl mentése Dockerfile-ból ====&lt;br /&gt;
A következő paranccsal létrehozhatjuk a képfájlt, ha a Dockerfile az aktuális mappában van:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# docker build --tag &amp;lt;server&amp;gt;/&amp;lt;namespace&amp;gt;/&amp;lt;name&amp;gt;:&amp;lt;tags&amp;gt; &amp;lt;context&amp;gt;&lt;br /&gt;
# ne feledkezzünk meg a kontextus paraméterről a sor végén, mivel a Dockerfile mellettünk van, &#039;.&#039; van a parancs végén.&lt;br /&gt;
docker build --tag ubuntu:apache2 .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Saját image feltöltése registrybe ===&lt;br /&gt;
&lt;br /&gt;
== Docker hálózatok ==&lt;br /&gt;
== Docker containerek csoportosítása (compose) ==&lt;br /&gt;
&lt;br /&gt;
== Apache2 ubuntu - biztonságos ==&lt;br /&gt;
 &#039;&#039;&#039;Megjegyzés:&#039;&#039;&#039; az alábbi példa a &#039;&#039;root&#039;&#039; nélküli futtatást (USER app) mutatja be, ami valóban jó gyakorlat, de a &#039;&#039;mkdir /environment -m 777&#039;&#039; sor világolvasható-írható (777) jogosultságot ad a mappának, ami önmagában nem tekinthető szigorúan biztonságosnak. Éles környezetben inkább a fentebb bemutatott, csoport alapú, szűkebb jogosultságú megoldást (&#039;&#039;chgrp&#039;&#039;+&#039;&#039;chmod 2774/2775&#039;&#039;) érdemes követni, a 777 helyett.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dockerfile&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y \&lt;br /&gt;
        apache2&lt;br /&gt;
EXPOSE 80/tcp&lt;br /&gt;
RUN useradd app&lt;br /&gt;
RUN mkdir /environment -m 777&lt;br /&gt;
RUN sed -i \&lt;br /&gt;
		&amp;quot;s/\/var\/run\/apache2\$SUFFIX\/apache2.pid/\/environment\/apache2.pid/&amp;quot; \&lt;br /&gt;
		/etc/apache2/envvars&lt;br /&gt;
RUN sed -i \&lt;br /&gt;
		&amp;quot;s/\/var\/run\/apache2\$SUFFIX/\/environment/&amp;quot; \&lt;br /&gt;
		/etc/apache2/envvars&lt;br /&gt;
RUN sed -i \&lt;br /&gt;
		&amp;quot;s/\/var\/lock\/apache2\$SUFFIX/\/environment/&amp;quot; \&lt;br /&gt;
		/etc/apache2/envvars&lt;br /&gt;
RUN sed -i \&lt;br /&gt;
		&amp;quot;s/\/var\/log\/apache2\$SUFFIX/\/environment/&amp;quot; \&lt;br /&gt;
		/etc/apache2/envvars&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
USER app&lt;br /&gt;
ENTRYPOINT [&amp;quot;/sbin/apache2ctl&amp;quot;, &amp;quot;-D&amp;quot;, &amp;quot;FOREGROUND&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# docker build --tag test:apache2 .&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::R%C3%B6vid%C3%ADt%C3%A9sek&amp;diff=838</id>
		<title>EDU::GAMF::Felhőalapú-szolgáltatások::Rövidítések</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::R%C3%B6vid%C3%ADt%C3%A9sek&amp;diff=838"/>
		<updated>2026-09-14T07:45:22Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: Rövidítések javítása: EC2, ECS, S3, TCP, HTML, RFC, GIMP hibás kifejtések javítva; elgépelések és a COMA/CORBA egybefolyt sor javítva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Hasznos rövidítések&lt;br /&gt;
|-&lt;br /&gt;
! Rövidítés !! Kifejtés&lt;br /&gt;
|-&lt;br /&gt;
| ABI || Application Binary Interface&lt;br /&gt;
|-&lt;br /&gt;
| ACID || Atomicity, Consistency, Isolation, Durability&lt;br /&gt;
|-&lt;br /&gt;
| ACL || Access Control List&lt;br /&gt;
|-&lt;br /&gt;
| AMI || Amazon Machine Image&lt;br /&gt;
|-&lt;br /&gt;
| API || Application Programming Interface&lt;br /&gt;
|-&lt;br /&gt;
| ARM || Advanced RISC Machine&lt;br /&gt;
|-&lt;br /&gt;
| ASIC || Application Specific Integrated Circuit&lt;br /&gt;
|-&lt;br /&gt;
| AVX || Advanced Vector Extensions&lt;br /&gt;
|-&lt;br /&gt;
| AWS || Amazon Web Services&lt;br /&gt;
|-&lt;br /&gt;
| AWSLA || Amazon Web Services Licensing Agreement&lt;br /&gt;
|-&lt;br /&gt;
| BASE || Basically Available, Soft state, Eventually consistent&lt;br /&gt;
|-&lt;br /&gt;
| BCE || Basic Core Equivalent&lt;br /&gt;
|-&lt;br /&gt;
| BIOS || Basic Input Output System&lt;br /&gt;
|-&lt;br /&gt;
| BPD || Bootstrap Performance Diagnostic&lt;br /&gt;
|-&lt;br /&gt;
| BSP || Bulk Synchronous Parallel&lt;br /&gt;
|-&lt;br /&gt;
| CCN || Content Centric Network&lt;br /&gt;
|-&lt;br /&gt;
| CDN || Content Delivery Network&lt;br /&gt;
|-&lt;br /&gt;
| CISC || Complex Instruction Set Computer&lt;br /&gt;
|-&lt;br /&gt;
| COMA || Cache Only Memory Access&lt;br /&gt;
|-&lt;br /&gt;
| CORBA || Common Object Request Broker Architecture&lt;br /&gt;
|-&lt;br /&gt;
| CPI || Cycles per Instruction&lt;br /&gt;
|-&lt;br /&gt;
| CPU || Central Processing Unit&lt;br /&gt;
|-&lt;br /&gt;
| CRM || Customer Relationship Management&lt;br /&gt;
|-&lt;br /&gt;
| CSP || Cloud Service Provider&lt;br /&gt;
|-&lt;br /&gt;
| CUDA || Compute Unified Device Architecture&lt;br /&gt;
|-&lt;br /&gt;
| DAT || Dynamic Address Translation&lt;br /&gt;
|-&lt;br /&gt;
| DBaaS || Database as a Service&lt;br /&gt;
|-&lt;br /&gt;
| DDoS || Distributed Denial of Service&lt;br /&gt;
|-&lt;br /&gt;
| DHCP || Dynamic Host Configuration Protocol&lt;br /&gt;
|-&lt;br /&gt;
| DMA || Direct Memory Access&lt;br /&gt;
|-&lt;br /&gt;
| DRAM || Dynamic Random Access Memory&lt;br /&gt;
|-&lt;br /&gt;
| DVFS || Dynamic Voltage and Frequency Scaling&lt;br /&gt;
|-&lt;br /&gt;
| EBS || Elastic Block Store&lt;br /&gt;
|-&lt;br /&gt;
| EC2 || Elastic Compute Cloud&lt;br /&gt;
|-&lt;br /&gt;
| ECS || Elastic Container Service&lt;br /&gt;
|-&lt;br /&gt;
| EMR || Elastic Map Reduce&lt;br /&gt;
|-&lt;br /&gt;
| EPIC || Explicitly Parallel Instruction Computing&lt;br /&gt;
|-&lt;br /&gt;
| FC || Fibre Channel&lt;br /&gt;
|-&lt;br /&gt;
| FCFS || First Come First Serve&lt;br /&gt;
|-&lt;br /&gt;
| FIFO || First In First Out&lt;br /&gt;
|-&lt;br /&gt;
| FPGA || Field Programmable Gate Array&lt;br /&gt;
|-&lt;br /&gt;
| FSM || Finite State Machine&lt;br /&gt;
|-&lt;br /&gt;
| GFS || Google File System&lt;br /&gt;
|-&lt;br /&gt;
| GiB || Gibibyte&lt;br /&gt;
|-&lt;br /&gt;
| GIMP || GNU Image Manipulation Program&lt;br /&gt;
|-&lt;br /&gt;
| GPFS || General Parallel File System&lt;br /&gt;
|-&lt;br /&gt;
| GPU || Graphics Processing Unit&lt;br /&gt;
|-&lt;br /&gt;
| HDD || Hard Disk Drive&lt;br /&gt;
|-&lt;br /&gt;
| HDFS || Hadoop Distributed File System&lt;br /&gt;
|-&lt;br /&gt;
| HTML || Hypertext Markup Language&lt;br /&gt;
|-&lt;br /&gt;
| HTTP || Hypertext Transfer Protocol&lt;br /&gt;
|-&lt;br /&gt;
| IaaS || Infrastructure as a Service&lt;br /&gt;
|-&lt;br /&gt;
| IDE || Integrated Drive Electronics&lt;br /&gt;
|-&lt;br /&gt;
| IoT || Internet of Things&lt;br /&gt;
|-&lt;br /&gt;
| IPC || Instructions per Clock Cycle&lt;br /&gt;
|-&lt;br /&gt;
| IRTF || Internet Research Task Force&lt;br /&gt;
|-&lt;br /&gt;
| ISA || Instruction Set Architecture&lt;br /&gt;
|-&lt;br /&gt;
| JDBC || Java Database Connectivity&lt;br /&gt;
|-&lt;br /&gt;
| JMS || Java Message Service&lt;br /&gt;
|-&lt;br /&gt;
| JSON || JavaScript Object Notation&lt;br /&gt;
|-&lt;br /&gt;
| KVM || Kernel-based Virtual Machine&lt;br /&gt;
|-&lt;br /&gt;
| MAC || Medium Access Control&lt;br /&gt;
|-&lt;br /&gt;
| MFLOPS || Million Floating Point Operations per Second&lt;br /&gt;
|-&lt;br /&gt;
| MIMD || Multiple Instruction Multiple Data&lt;br /&gt;
|-&lt;br /&gt;
| MIPS || Million Instructions per Second&lt;br /&gt;
|-&lt;br /&gt;
| MLMM || Multi-level Memory Manager&lt;br /&gt;
|-&lt;br /&gt;
| MMX || Multi Media Extension&lt;br /&gt;
|-&lt;br /&gt;
| MPI || Message Passing Interface&lt;br /&gt;
|-&lt;br /&gt;
| MSCR || Map Shuffle Combine Reduce&lt;br /&gt;
|-&lt;br /&gt;
| NAT || Network Address Translation&lt;br /&gt;
|-&lt;br /&gt;
| NDN || Named Data Networks&lt;br /&gt;
|-&lt;br /&gt;
| NFS || Network File System&lt;br /&gt;
|-&lt;br /&gt;
| NTFS || New Technology File System&lt;br /&gt;
|-&lt;br /&gt;
| NUMA || Non-Uniform Memory Access&lt;br /&gt;
|-&lt;br /&gt;
| NV-RAM || Non-Volatile Random Access Memory&lt;br /&gt;
|-&lt;br /&gt;
| OCCI || Open Cloud Computing Interface&lt;br /&gt;
|-&lt;br /&gt;
| OGF || Open Grid Forum&lt;br /&gt;
|-&lt;br /&gt;
| OLTP || On Line Transaction Processing&lt;br /&gt;
|-&lt;br /&gt;
| OLAP || On Line Analytical Processing&lt;br /&gt;
|-&lt;br /&gt;
| PaaS || Platform as a Service&lt;br /&gt;
|-&lt;br /&gt;
| PHP || Recursive acronym for PHP, Hypertext Preprocessor&lt;br /&gt;
|-&lt;br /&gt;
| PN || Petri Net&lt;br /&gt;
|-&lt;br /&gt;
| QoS || Quality of Service&lt;br /&gt;
|-&lt;br /&gt;
| RAID || Redundant Array of Independent Disks&lt;br /&gt;
|-&lt;br /&gt;
| RAM || Random Access Memory&lt;br /&gt;
|-&lt;br /&gt;
| RAR || Read After Read&lt;br /&gt;
|-&lt;br /&gt;
| RAW || Read After Write&lt;br /&gt;
|-&lt;br /&gt;
| RDD || Resilient Distributed Dataset&lt;br /&gt;
|-&lt;br /&gt;
| RDBMS || Relational Database Management System&lt;br /&gt;
|-&lt;br /&gt;
| RDS || Relational Database Service&lt;br /&gt;
|-&lt;br /&gt;
| REST || Representational State Transfer&lt;br /&gt;
|-&lt;br /&gt;
| RFC || Request For Comments&lt;br /&gt;
|-&lt;br /&gt;
| RFB || Remote Framebuffer (a VNC protokollja)&lt;br /&gt;
|-&lt;br /&gt;
| RISC || Reduced Instruction Set Computer&lt;br /&gt;
|-&lt;br /&gt;
| RMI || Remote Method Invocation&lt;br /&gt;
|-&lt;br /&gt;
| RPC || Remote Procedure Call&lt;br /&gt;
|-&lt;br /&gt;
| RTT || Round Trip Time&lt;br /&gt;
|-&lt;br /&gt;
| SaaS || Software as a Service&lt;br /&gt;
|-&lt;br /&gt;
| SAN || Storage Area Network&lt;br /&gt;
|-&lt;br /&gt;
| SDK || Software Development Kit&lt;br /&gt;
|-&lt;br /&gt;
| SDN || Software Defined Network&lt;br /&gt;
|-&lt;br /&gt;
| SHA || Secure Hash Algorithm&lt;br /&gt;
|-&lt;br /&gt;
| SIMD || Single Instruction Multiple Data&lt;br /&gt;
|-&lt;br /&gt;
| SLA || Service Level Agreement&lt;br /&gt;
|-&lt;br /&gt;
| SNS || Simple Notification Service&lt;br /&gt;
|-&lt;br /&gt;
| SOAP || Simple Object Access Protocol&lt;br /&gt;
|-&lt;br /&gt;
| SPMD || Single Program Multiple Data&lt;br /&gt;
|-&lt;br /&gt;
| SQL || Structured Query Language&lt;br /&gt;
|-&lt;br /&gt;
| SQS || Simple Queue Service&lt;br /&gt;
|-&lt;br /&gt;
| SSD || Solid State Disk&lt;br /&gt;
|-&lt;br /&gt;
| SSE || Streaming SIMD Extensions&lt;br /&gt;
|-&lt;br /&gt;
| S3 || Simple Storage Service&lt;br /&gt;
|-&lt;br /&gt;
| SWF || Simple Workflow Service&lt;br /&gt;
|-&lt;br /&gt;
| TCP || Transmission Control Protocol&lt;br /&gt;
|-&lt;br /&gt;
| TLB || Translation Lookaside Buffer&lt;br /&gt;
|-&lt;br /&gt;
| UDP || User Datagram Protocol&lt;br /&gt;
|-&lt;br /&gt;
| UFS || Unix File System&lt;br /&gt;
|-&lt;br /&gt;
| UMA || Uniform Memory Access&lt;br /&gt;
|-&lt;br /&gt;
| vCPU || Virtual CPU&lt;br /&gt;
|-&lt;br /&gt;
| VLIW || Very Long Instruction Word&lt;br /&gt;
|-&lt;br /&gt;
| VM || Virtual Machine&lt;br /&gt;
|-&lt;br /&gt;
| VMCS || Virtual Machine Control Structure&lt;br /&gt;
|-&lt;br /&gt;
| VMM || Virtual Machine Monitor (hypervisor) / Virtual Memory Manager (a két jelentés kontextusfüggő)&lt;br /&gt;
|-&lt;br /&gt;
| VNC || Virtual Network Computing&lt;br /&gt;
|-&lt;br /&gt;
| VPC || Virtual Private Cloud&lt;br /&gt;
|-&lt;br /&gt;
| VPN || Virtual Private Network&lt;br /&gt;
|-&lt;br /&gt;
| WAN || Wide Area Network&lt;br /&gt;
|-&lt;br /&gt;
| WAR || Write After Read&lt;br /&gt;
|-&lt;br /&gt;
| WAW || Write After Write&lt;br /&gt;
|-&lt;br /&gt;
| WSC || Warehouse Scale Computer&lt;br /&gt;
|-&lt;br /&gt;
| WWN || World Wide Name&lt;br /&gt;
|-&lt;br /&gt;
| XML || Extensible Markup Language&lt;br /&gt;
|-&lt;br /&gt;
| YARN || Yet Another Resource Negotiator&lt;br /&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=837</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=837"/>
		<updated>2026-09-14T06:55:10Z</updated>

		<summary type="html">&lt;p&gt;ApelPro: /* A tárgy teljesítéséhez szükséges idő */&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 projektfeladatbó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 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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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=836</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=836"/>
		<updated>2026-09-14T06:54:26Z</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 projektfeladatbó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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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=835</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=835"/>
		<updated>2026-09-14T06:53:22Z</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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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=834</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=834"/>
		<updated>2026-09-14T06:52:59Z</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] és alap szolgáltatások átbeszélése&lt;br /&gt;
# EC2 telepítés, nginx + apache2 bevezetés, alap parancsok ismétlése (ls, nano, mcedit stb.)&lt;br /&gt;
# Alkalmazás telepítése előre elkészített script segítségével + AMI, ASG, LB&lt;br /&gt;
# RDS telepítés és alkalmazás integráció ellenőrzése&lt;br /&gt;
# Docker alapok&lt;br /&gt;
# Docker compose alapok&lt;br /&gt;
# Alkalmazás indítása Docker környezetben&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# IaC eszközök áttekintése&lt;br /&gt;
# MessageQueue eszközök használata&lt;br /&gt;
# Lambda eszköz használata&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&lt;br /&gt;
# Projekt bemutató (6db)&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::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>
</feed>