Kihagyás

1. gyakorlat

Bevezetés

Az első gyakorlat arról szól, hogy mindenki képbe kerüljön, és megismerje azt az infrastruktúrát, környezetet, amelynek használata elengedhetetlen lesz a félév teljesítéséhez. Előfordulhat, hogy egyes információkhoz valaki már hozzájutott, ilyen esetben az adott rész átugorható.

Azonosítók, jelszavak

Először is, mindenkinek szüksége lesz egy h-s azonosítóra (ezt a levelezésben illetve a számonkérések során az azonosításban fogjuk használni) illetve egy NEPTUN azonosítóra (amivel a tanulmányi rendszert tudja használni). Mindkettő a hallgatói szerver regisztrációs oldalán szerezhető be. A nevet, édesanya leánykori nevét, és a születési dátumot úgy kell megadni ezen az űrlapon, ahogyan az az egyetemi adatbázisban szerepel (ami remélhetőleg megegyezik a hallgató által ismert adatokkal, olvassátok el az apróbetűs részt a lap alján :)).

Az űrlap kitöltése után (a Rendben, mehet gomb megnyomásával) egy olyan oldalra jutunk, amiről több fontos információra lesz szükségünk, ezek:

  1. A h###### alakú h-s azonosító (ahol a # egy-egy decimális számjegyet jelöl, vagyis egy h után következő 6 darab számjegy lesz az azonosító)
  2. A ABCDEF alakú NEPTUN azonosító (ahol az A-F az angol ábécé tetszőleges nagybetűit jelölik, azaz 6 darab nagybetűből áll a kód)
  3. Az angol ábécé kis- és nagybetűiből illetve számjegyekből álló kezdő jelszó (ezt valahova másold ki mert 2 helyen kell majd)
  4. A hivatalos egyetemi e-mail cím, ami Vezeteknev.Keresztnev@stud.u-szeged.hu alakú, több keresztnév esetén a @ előtt újabb .Keresztnev tagokkal, illetve gyakori nevek esetén (értsd: már van pont ilyen nevű aktív egyetemi hallgató) .# alakú számlálóval kiegészítve. Valójában a h######@stud.u-szeged.hu alakú, a h-s azonosítóból képzett e-mail cím is használható, a két cím ugyanazt a postafiókot jelenti.

Na most, ha ez megvan, akkor a jelszót kéretik AZONNAL megváltoztatni a hallgatói szerver jelszóváltó oldalán! A "jelenlegi jelszó" így első alkalommal nyilván a kezdő jelszó lesz. Ezzel a hallgatói szerverre való belépés jelszava, a stud-os jelszó változik meg. Ezen a szerveren lehet levelezni (tanulmányi ügyekben csak az innen, a hivatalos stud-os email címről érkezett leveleket vesszük figyelembe!) illetve saját honlapot készíteni.

Most nézzük a h-s azonosító másik felhasználását! Keresd meg az Informatikai Intézet honlapján a jelszóváltó oldalt, majd onnan a jelszóváltó űrlapot (utolsó bekezdés)! Itt is a h-s azonosítódat és a kezdő jelszót kell megadni (egyszer a belépéshez, egyszer a változtatáshoz). Ez egy külön rendszer, független a hallgatói szervertől, a kapcsolat csak annyi, hogy ugyanazt a h-s azonosítót és kezdő jelszót használja, de az egyik rendszeren történő jelszóváltás nincs kihatással a másik rendszer aktuális jelszavára. Ha megtörtént a jelszóváltás, akkor a h-s azonosítóddal és a most megadott inf-es jelszóval tudod használni az Irinyi kabinet erőforrásait, többek között a linuxos szervert, a saját tárterületet, illetve a bíró és gyakorló bíró rendszereket. Fontos, hogy a kabinetes rendszereket csak az első inf-es jelszóváltás után szabad használni, ennek technikai, szinkronizálási okai vannak. Amit még mindenképpen kérnénk, az egy-egy regisztráció a bíró és gyakorló bíró megfelelő regisztrációs oldalain. E nélkül nehéz lesz zh-t írni, amire rámehet a félév.

Miután megváltoztattad a jelszavakat, próbálj meg bejelentkezni a STUD-os levelezőbe!

Nem sikerül belépni a STUD levelezésbe

Amennyiben nem sikerül sokadik próbálkozásra sem belépni és már úgy gondolod, hogy csak a csoda segíthet, akkor írj levelet a help@cc.u-szeged.hu címre, melyben röviden elmondod a problémát (a h-s azonosítód, NEPTUN azonosítód, teljes neved mindenképpen szerepeljen a levélben, de jelszót ne adj meg!).

Ha sikerült belépned, akkor küldj e-mailt a gyakorlatvezetődnek (NEPTUN-ból látod a nevét, az e-mail címére pedig keress rá) a h-s azonosítóddal, NEPTUN kódoddal és a neveddel a következő formában.

1
h-s;NEPTUN;nev

Az e-mail tárgya "[progalap] adatok" legyen!

A NEPTUN-ról most nem lesz külön szó, ennek használatát rátok bízzuk. Ott van viszont a CooSpace, amin a gyakorlattal (és nem mellesleg a legtöbb kurzussal) kapcsolatos hivatalos kommunikáció is zajlik. Ezt érdemes felkeresni.

Home, Pub és Távoli elérésük

Az Irinyi kabinet rendszerében (lásd fentebb) mindenki kap egy mappát ("home mappa" - HOME), amiben az órai munkáit tárolhatja. Ezen a kvóta 300 MB illetve 10000 fájl, ezeket a korlátokat nem szabad (és talán nem is lehet) túllépni. Ezen kívül a kabineten belül mindenki eléri a pub könyvtárat (/pub útvonalon), melyben a tananyagok találhatók.

Amennyiben a kabinetben vagyunk, próbáljuk is ki a saját HOME-unk felcsatolását, melyet a "Mount Home" ikonra kattintás után a h-s azonosítónk és jelszavunk (inf-es jelszó!) megadásával tehetünk meg! Tesztként hozzunk létre pl. egy üres dokumentumot, mentsük le, majd csatoljuk le a HOME-unkat - "Unmount Home"! Egy ismételt felcsatlakozással ellenőrizzük le, hogy az előzőekben létrehozott file továbbra is megtalálható-e ott, ahol elhelyeztük. Amíg folyamatosan használjuk a gépet nem kell állandóan fel- és lecsatolni a HOME-ot, de amikor otthagyjuk, mindenképpen csatlakoztassuk le a HOME-unkat! Miután ezzel játszottunk kicsit, nézzünk szét a pub-ban, hogy milyen anyagok találhatóak ott (keressük meg a progalap mappát)!

Otthonról alapvetően két dolgot szeretnénk csinálni: bejelentkezni az Irinyi kabinet szerverére és adatot mozgatni a szerverről a saját gépünkre vagy éppen fordítva (Pl.: pub-ba felmásolt anyagok beszerzése). Az alábbiakban ezeket nézzük meg részletesebben.

SSH (Secure Shell)

Egy protokoll, melynek segítségével biztonságosan kommunikálhat egy helyi és egy távoli számítógép egy titkosított csatornán keresztül. Leggyakrabban arra használjuk, hogy egy távoli gépre belépjünk/bejelentkezzük (pl: otthonról szeretnél belépni az Irinyi kabinet szerverére, hogy próbálgasd a Linux-os parancsokat).

Távoli bejelentkezéshez használható szoftverek Windows alatt:

  • Putty

    1. Töltsd le a putty-ot, innen: 64bit-es msi installer
    2. Telepítőben: Next -> Next -> Install -> Finish
    3. Putty indításakor a következő fogad mindket

      PuTTY kezdőképernyő
      putty_1
    4. Hostname: linux.inf.u-szeged.hu

    5. Amennyiben szeretnéd menteni a későbbi belépésekhez, akkor a saved session alatti inputba írd be a kívánt nevet, majd nyomj rá a save gombra! Ezután az Open-nel csatlakozhatsz a szerverhez.
    6. Ezután a h-s azonosítód és jelszavad megadásával be kell tudnod lépni a szerverre
  • MobaXTerm

    1. Töltsd le a MobaXTerm-et, innen, Free verzió
    2. Installer letöltése
    3. Csomagold ki a fájlokat valahova
    4. *.msi fájl indítása
    5. Kattintsd végig a telepítőt
    6. Indítsd el az alkalmazást
    7. Bal felső sarokban Session -> SSH
    8. Remote Host: linux.inf.u-szeged.hu
    9. Specify Username: h-s azonosítód
    10. OK
    11. Add meg a jelszavad

Távoli bejelentkezés Linux alatt:

  1. Nyiss egy terminált!
  2. Add ki a következő parancsot: ssh hxxxxxx@linux.inf.u-szeged.hu
  3. Add meg a jelszavadat! Ezután a kabineten belüli dolgaidat látod (olyan mintha a kabinetben ülnél és az ottani gépedet használnád).
  4. Az ssh-ból az exit utasítás segítségével léphetünk ki!

A fentiek bármelyikét is használod, belépéskor egyből a home könyvtáradat is megkapod (mountolni nem kell), illetve a $HOME környezeti változó is helyesen állítódik be (a $HOME környezeti változó a saját felhasználódhoz tartozó mappa elérési útvonalát adja meg. Például: /home/h123456)

Grafikus programok távoli használata

Ha Linux alatt az ssh -X hxxxxxx@linux.inf.u-szeged.hu paranccsal jelentkezel be (megadod a -X kapcsolót is), akkor a szerveren elindított grafikus programokat is használni tudod majd a saját képernyődön, bár lehet, hogy nem lesznek túl gyorsak.

Nem tudok belépni a linux.inf.u-szeged.hu szerverre

Ez akkor történhet meg, ha rossz jelszót adsz meg. A regisztráció utáni jelszóváltoztatások közül a második, inf-es jelszó volt az, ami ehhez tartozik. Amennyiben nem csináltad még meg az Informatikai Intézet honlapján a jelszóváltást, akkor érdemes ezzel [kezdeni]((#azonosítók-jelszavak). Abban az esetben, ha sehogy sem sikerül megoldani a problémát, akkor írj e-mailt az Intézet rendszergazdáinak a kabinet@inf.u-szeged.hu címre!

SFTP (Secure File Transfer Protocol)

Ugyanúgy egy protokoll, melyet fájlok mozgatásához, menedzseléséhez használunk a helyi és a távoli számítógépek között. A fájlok mozgatásához egy olyan szoftverre van szükségünk, mely támogatja az SFTP protokollt.

Windows alatt:

  • WinSCP

    1. Letöltés
    2. Installálás
    3. Indítás
    4. Kiszolgáló neve: linux.inf.u-szeged.hu
    5. Felhasználónév: h-s azonosítód
    6. Jelszót add meg
    7. Belépés
    8. Bal oldalon a lokális géped fájlrendszerét látod, jobb oldalon pedig a távoli számítógépét
    9. A fájlok mozgatása intuitív

Windows és Linux alatt is:

  • FileZilla

    1. Letöltés
    2. Installálás (Vigyázz, mert közben simán telepít pár extra szoftvert, ha nem figyelsz!)
    3. Indítás
    4. Cím: linux.inf.u-szeged.hu
    5. Felhasználónév: h-s azonosítód
    6. Jelszót add meg
    7. Csatlakozás
    8. Bal oldalon a lokális géped fájlrendszerét látod, jobb oldalon pedig a távoli számítógépét
    9. A fájlok mozgatása intuitív

Linux alatt:

  1. Nyiss egy terminált!
  2. Add ki a következő parancsot: sftp hxxxxxx@linux.inf.u-szeged.hu, ahol a saját h-s azonosítódat adod meg!
  3. Add meg a jelszót!
  4. Ezután az sftp> prompt-ot fogod visszakapni. Ilyenkor a távoli helyet (linux.inf.u-szeged.hu), azaz a kabinetes környezetet fogod látni. A legtöbb parancshoz tartozik egy l prefixes megfelelő is, mely a lokális gépre vonatkozik (ahonnan sftp-zel). Például:
    • ls -> a távoli gépen hajt végre egy listázást az aktuális könyvtárra,
    • lls -> a lokális gépen hajt végre egy listázást.
  5. A programozás alapjaihoz tartozó anyagokat úgy tudod a saját gépedre másolni, ha használod a get (pl.: get -r gyak01, ami a lokális gép aktuális könyvtárába másolja a távoli gyak01 mappa teljes tartalmát) parancsot miután a megfelelő helyre navigáltál.
  6. Az sftp-ből az exit parancs kiadásával tudsz kilépni.

Ha a Linux-os sftp-s megoldás még kicsit bonyolult, akkor próbálkozz grafikus programmal, vagy térj vissza ide az óra végén!

"Megmondom a véleményem" rovat

Anonim véleménynyilvánítás félév közben. Nem a félév végi hallgatói véleményezést helyettesíti, csupán lehetőséget nyújt a hallgatók számára, hogy félév közben is jelezni tudják észrevételeiket, kéréseiket, panaszaikat, ... ezzel is hozzájárulva, hogy minél inkább a TI, és ne az mi elképzeléseink formálják az órákat. Várunk minden nemű, építő jellegű kritikát!

Linux

A gyakorlat folyamán mindenkitől elvárjuk a felhasználói szintű Linux ismereteket. Ez azt jelenti, hogy magabiztosan tudni kell egy Linux rendszeren:

  • könyvtárakat kezelni, létrehozni, törölni, aktuális könyvtárat váltani
  • fájlokat kezelni, törölni, másolni, mozgatni
  • jogosultságot állítani
  • tömörített állomány (.zip) tartalmát adott helyre kitömöríteni
  • parancssorból programot futtatni, paraméterezni
  • egy tetszőleges szövegszerkesztőt (konzolos pl. az mcedit, grafikus pl. a gedit, geany, subl, code, stb.) használni, ezzel új fájlt létrehozni, módosítani, menteni
  • böngészővel fájlokat letölteni és adott helyre menteni
  • egy szerverre távolról valamilyen ssh klienssel bejelentkezni
  • a gcc fordítóprogramot parancssorból használni

Környezet

A gyakorlat további anyagai a fent leírt elvárások elsajátításában nyújtanak segítséget. Ahhoz, hogy a Linux-os parancsokat megfelelően el tudjuk sajátítani szükségünk lesz egy Linux operációs rendszerre, melyet elég sok módon beszerezhetünk. Nem kell az összes létező módszert alkalmazni, elég ha valamelyik módon szert teszünk egy Linux-ra.

Linux használata virtuális géppel

Hogy minél könnyebben elérhető legyen egy gyakorló környezet, egy virtuális gép image fájlt is biztosítunk. Ennek előnye, hogy csak egy virtuális gépkezelő kell (Virtual Box), melynek megadjuk a virtuális lemezképet, majd elindítjuk. A kapott image-en egy előre telepített rendszer van, amire már nem kell semmi mást telepíteni.

Az elérhető image egy Ubuntu 20.04 LTS, melyre a következő eszközök előre fel vannak telepítve:

Program Leírás Verzió
gcc C fordító 8.4.0 (default), 9.3.0
gdb C degugger 9.1
clang-10 C fordító 10.0.1 (clang-10)
codelite C IDE 13.0.0
codeblocks C IDE 20.03
clion C IDE 2020.2
sublime Szövegszerkesztő 3.2.2
vscode Általános IDE 1.48.2
geany Szövegszerkesztő 1.36
git Verziókövető 2.25.1
firefox Böngésző 80.0
zip/unzip Tömörítő/Kicsomagoló 3.0 és 6.00
filezilla SFTP grafikus kliens 3.46.3
make C build rendszer 4.2.1

Az alapértelmezett felhasználói név: valaki, melyhez tartozó jelszó megegyezik a felhasználó nevével. A letöltött image csak egy alaprendszer, a beszerzett image-en mindenki saját maga úgy garázdálkodik, ahogyan csak szeretne. Mivel a létrehozott image mérete több, mint 4GB, így annak megosztására elsősorban a torrent-et ajánljuk. A torrent alapú letöltéshez kattints ide!

Mivel kollégiumokban tiltva lehet a torrentezés, így alternatívaként a Google Drive rendszeréből is elérhető itt, viszont az ajánlott letöltés továbbra is a torrent.

Miután sikerült beszerezni az image-et, nyissuk meg a VirtualBox-ot! Kattintsunk a File -> Import Appliance... menüre, majd adjuk meg a letöltött *.ove fájlt, azaz importálandó image fájl elérési útvonalát! Importálás után, már indíthatjuk is a virtuális gépet, melyen így elindul az Ubuntu rendszer.

Image felhasználónév és jelszó

  • Felhasználónév: valaki
  • Jelszó: valaki
  • Root jelszó, ha kellene valakinek: valaki

Aki saját maga szeretné csinálni az is megteheti. Amik ehhez szükségesek lehetnek:

  • Debian: kabinetben ez a Linux disztribúció szokott telepítve lenni
  • Ubuntu: talán a legnépszerűbb disztribúció asztali környezetben
  • VirtualBox: maga virtuális gép létrehozásához és futtatásához szükséges eszköz

Az interneten számos forrás fellelhető, hogy hogyan lehet telepíteni Linux-ot:

A fentieken kívül nyilván más források is használhatóak.

Natív Linux használata

Ha érzed magadban az erőt, hogy egy gépre virtualizáció nélkül Linuxot telepíts, akkor hajrá! Ehhez kell egy gép, rajta hely a Linux partíció(i)nak (nem, a már felrakott oprendszer egyik meghajtójának üres helye nem jó), valamint egy disztribúció telepítője bootolható DVD-n vagy USB meghajtón.

Vagy kell valaki, aki megcsinálja helyetted. ;)

Linux parancsok

A következőkben alapvető Linux parancsokat fogunk áttekinteni. (A linuxról az előadáson csak pár szó esik, bár egy kicsit részletesebb leírás is van az ott elhangzottakról.) Ehhez nem kell mást tennünk, mint nyitni egy Terminált. A Terminál vagy másnéven Shell az a hely ahol az operációs rendszer magjával (kernel) tudunk beszélgetni, azaz parancsokat kiadni, melyeket aztán az operációs rendszer végrehajt.

Történelem óra

A számítástechnika hajnalán az egyik operációs rendszer a Unix volt, amit arra terveztek, hogy egyszerre több felhasználó is használhassa azt, ami általában egy nagy mainframe gépen futott. A felhasználóknak csak egy terminálra (billentyűzet és megjelenítő képernyő) volt szükségük. Ezeken a terminálokon nem lehetett semmilyen komoly számítást elvégezni, ők csak továbbították a billentyűleütéseket a mainframe felé, ami végrehajtotta a megadott parancsokat majd visszaküldte a válaszokat. Ekkor még nem volt semmi fancy grafika, az input és az output szöveges formában történt. Ebben a korszakban az összes olyan műveletet, amit most általában grafikus programmal végzünk (fájlok létrehozása, másolása, törlése, hogy csak az alapvető fájlműveleteket említsem) ezen a szöveges interfésszel rendelkező terminálon kellett megoldani.

A terminálon keresztül parancsokat lehet kiadni az egyes feladatok elvégzésére (pl.: cd -> change directory, ls -> list directory). Annak érdekében, hogy ezen programok végrehajtását koordinálni tudjuk szükségünk lehet egy fő programra, amely aztán képes ezen programok meghívását kezelni. Ez az egységes kezelőprogram a shell, mely lehetővé teszi például azt is, hogy az egyik parancs kimenetét egy másik parancs bemenetének adjuk. Érdemes lehet úgy gondolni a shell-re mint egy szerszámosládára, melyben a parancsok (programok) egy-egy szerszámot jelentenek. Minden szerszámnak egy jól definiált feladata van, amire tökéletesen használható, de semmi többre.

A legtöbb modern Linux alapú operációs rendszer a bash (Bourne Again Shell)-t használja. A Linux operációs rendszer tekinthető a Unix operációs rendszer utódjának is. A fő különbség a régi időkhöz képest, hogy manapság nem egy fizikai terminált használunk, hanem szoftveres terminált, amin alapesetben a saját számítógépünkön futó operációs rendszernek adhatunk parancsokat (fentebb már említettük az SSH-t, melynek segítségével távoli számítógépeknek adhatunk ki parancsokat).

Terminál nyitása

Ubuntu alatt: Activities -> keress a terminal szóra -> indítsd el a Terminal-t! Amennyiben mégsem sikerül megtalálnod a terminált, akkor nyomd meg a Ctrl + Alt + T billentyű kombinációt, hogy egy új terminált kapj! Ezután valami hasonlóval találod magad szemben:

1
valaki@valaki:~$ 

Ezt nevezzük command prompt-nak, mely nagy valószínűséggel el fog térni mindenki számítógépén (amúgy megváltoztatható a prompt szövege). Amikor látjuk a prompt-ot, akkor a terminál azt jelzi számunkra, hogy kész fogadni az utasításainkat. A továbbiakban nem fogjuk a teljes command prompt-ot mindig kiírni, hiszen a parancsok kiadásához nem kell ezt begépelni, illetve el is térhet mindenki gépén. Amiatt, hogy mégis lássuk, hogy mi az amit nekünk kell beírni a promptot egy $ jelre rövidítjük (ahol fontos, hogy lássuk melyik könyvtárban kellett kiadni a parancsot, ott továbbra is kiírjuk a promptot).

Fájlkezelés

Az első és legfontosabb dolog, hogy tudjunk navigálni a fájlrendszeren, illetve azzal kapcsolatos információkat le tudjunk kérni. Mielőtt megnézzük az elérhető legfontosabb parancsokat tisztázzunk néhány dolgot az útvonalakkal kapcsolatban.

Az útvonalaknak alapvetően két típusát különböztetjük meg

  • Abszolút: Az operációs rendszer fájlrendszerének van egy gyökér könyvtára, melyet a / (per jel) jelöl (Linux alatt nincsenek meghajtók, minden fájl és könyvtár ezalatt a gyökérkönyvtár alatt található valahol). Minden útvonalat, mely a per jellel kezdődik, abszolút útvonalnak nevezünk. Fontos itt megjegyeznünk, hogy Linux alatt az elválasztójel (könyvtárak elválasztásához) szintén a '/' jel (Windows alatt a '\' használatos).
  • Relatív: Igazából minden útvonal, ami nem abszolút (tehát nem '/'-el kezdődik). A relatív útvonal azért relatív, mert az aktuális mappához (munkakönyvtárnak, angolul working directory-nak szokás nevezni) képest ad meg egy útvonalat. Nézzük is meg, hogy hogyan kérhető le az aktuális munkakönyvtár!

pwd (print working directory)

Aktuális könyvtár elérési útvonalának kiírása. Bármikor kiadhatod ezt a parancsot, eredményként megkapod, hogy pontosan "hol" is vagy (hiszen mindig valahol vagy a fájlrendszeren belül, ha egy terminált használsz).

1
2
$ pwd
/home/valaki

Az eredmény nyilván eltérhet attól, amit fent kapunk.

ls (list)

Ez a parancs megmutatja az aktuális könyvtárban tálalható fájlok neveit. A lista alapértelmezés szerint abc sorrendben sorolja fel a neveket.

1
$ ls

Eredményként kiíratódik a terminálban az aktuális mappa tartalma.

A legtöbb parancs rendelkezik alapértelmezett viselkedéssel, de sok esetben úgynevezett kapcsolókat is használhatunk, hogy valamilyen eltérő eredményt érjünk el. A kapcsolókat a parancs neve után írjuk és kötőjellel adjuk meg. A parancsok általános alakja:

parancs -kapcsoló1 -kapcsoló2 ... argumentumok

Az ls parancs leggyakoribb kapcsolói:

  • -l: oszlopokban, részletesen mutatja a fájlok adatait
  • -d <könyvtár>: csak az adott könyvtár adatait írja ki. (Használjuk a -l kapcsolót is!)
  • -a: a rejtett fájlokat is mutatja
  • -R: könyvtáron belüli könyvtárak tartalmát is listázza (R, mint rekurzív)
  • -r: fordított sorrendben listáz (r, mint reverse)
  • -h: "barátságosabb" formában listázza ki a számokat (h, mint "human")

A kapcsolókat lehet kombinálva is használni:

1
2
$ ls -l -a -r
$ ls -lar

Mindkét parancs ki fogja listázni oszlopokba rendezve (-l), részletes adatokkal a rejtett fájlokat (-a) is, fordított sorrendben (-r).

A fentiek további magyarázatra szorulhatnak, így azokat most itt mutatjuk be részletesen:

Adjuk ki az ls -la parancsot, hogy az aktuális könyvárunk részletes listázását (rejtett állományokkal együtt) megtekinthessük! Az eredmények között két sort biztosan találunk:

1
2
drwx------ 15 user user         4096 szept  1 01:05 .
drwxr-xr-x  6 root root            0 szept  1 10:48 ..

Az oszlopos megjelenítés utolsó oszlopában található az állományok neve. Ebben a két sorban elsőre két elég furcsa állomány található: a '.' és a '..' Ez a két állomány kitüntetett, speciális jelentéssel bír.

  • aktuális könyvtár: ".", azaz a pont karakter
  • szülőkönyvtár: "..", azaz a pont pont

Ezeket a speciális jelölőket az útvonalak megalkotásában is használhatjuk. Az is nagyon fontos, hogy ezeket - bármilyen helyen is vagyunk éppen - el tudjuk érni (minden könyvtárnak van szülő könyvtára, kivéve a gyökérkönyvtárnak). A következő parancsnál (cd) fogjuk is használni ezen speciális útvonalakat.

Mivel a fenti parancs kiadásánál használtuk a -a kapcsolót, így a rejtett állományokat is megjeleníti a rendszer. Linux-on az összes olyan állomány, melynek neve .-al kezdődik rejtett állománynak minősül, így az aktuális könyvtár és a szülőkönyvtár speciális állományok is rejtettnek minősülnek.

A következő magyarázatra szoruló rész az oszlopos listázásnál az első oszlop 10 karaktere (pl: drwx------). Az első karakter az állomány típusáról ad információt:

  • d: könyvtár
  • l: link
  • -: fájl

A következő 9 karakter az állományra vonatkozó jogosultságokat adja meg. Ha minden jogosultság adott az állományra az így nézne ki: rwxrwxrwx. Kérdés, hogy miért szerepel az rwx háromszor? A válasz, hogy azért, mert 3 különböző szereplőre adhatjuk meg a jogokat (felsorolással megegyező sorrendben):

  • tulajdonos (owner)
  • csoport (group), amibe a felhasználó tartozik
  • mindenki más (others)

Egy rwx hármas jelentése a jogra vonatkozik:

  • r: Read (olvasási jog)
  • w: Write (írási jog)
  • x: eXecute (futtatási jog)

Az adott helyen a '-' (kötőjel) a jogosultság hiányát jelzi. Ezek tükrében egy felhasználói körre a jogok a következőképpen alakulhatnak:

Jogok Jelentése
--- semmi jog
--x csak futtatási
-w- csak írási
-wx írási és futtatási
r-- csak olvasási
r-x olvasási és futtatási
rw- olvasási és írási
rwx olvasási, írási és futtatási jog

Később megnézzük azt is, hogy hogyan kell egy állomány jogosultságait megváltoztatni (chmod, chown parancsok).

A jogosultságok után az állományra nyilvántartott linkek számát láthatjuk, melyet az állomány tulajdonosa követ (kihez tartozik az állomány, ki hozta létre). A tulajdonos után a csoport neve, melyhez az állomány tartozik (egy felhasználó több csoporthoz is tartozhat). Ezután az állomány méretét láthatjuk byte-okban (könyvtár esetében ez mindig a 4096 valamilyen többszöröse, de ez nem azt jelenti, hogy a könyvtárban található állományok mérete összesen ennyi, hanem, hogy a könyvtár információit (milyen fájlok és alkönyvtárak vannak benne, ezekre milyen jogosultságok vannak beállítva, ezek adatai pontosan hol tárolódnak, stb.) éppen mekkora helyen tároljuk). Az állomány nevét megelőzően még láthatjuk annak utolsó módosítási dátumát is.

Feladatok

  1. Listázd ki az aktuális könyvtár tartalmát!
  2. Bővebb információkat is szeretnénk látni!
  3. Listázd ki az ÖSSZES fájlt a home könyvtáradban!
  4. Listázd ki az összes alkönyvtár tartalmát!
  5. Nézd meg, hogy milyen jogosultságai vannak egy könyvtárnak!
Lehetséges megoldás
  1. 1
    $ ls
    
  2. 1
    $ ls -l
    
  3. 1
    2
    $ cd
    $ ls -a
    
  4. 1
    $ ls -R *
    
    A * helyettesítő karakterről a mintaillesztés fejezetben olvashatsz

  5. 1
    $ ls -ld /home/valaki
    

cd (change directory)

A fájlrendszeren való mozgást teszi lehetővé. Paraméterként a megcélzott könyvtár útvonalát kell megadni, vagy abszolút, vagy relatív elérési útvonal használatával.

Példa abszolút útvonal megadásával:

1
$ cd /home/valaki/Letöltések/eclipse

Relatív útvonalmegadással (feltételezve, hogy a /home/valaki könyvtárban vagyunk jelen pillanatban):

1
$ cd Letöltések/eclipse/

Visszalépés a szülő könyvtárba:

1
$ cd ..

vagy ha egyszerre két könyvtárat akarunk felfelé lépni

1
$ cd ../..

A cd parancs önmagában (paraméterek nélkül) visszadob a saját home könyvtárunkba. Minden felhasználónak van egy home könyvtára, mely általában a /home/<felhasznalonev> helyen található (ha a kabinetben vagyunk, akkor a home könyvtárunkat fel kell csatolni az asztalon található Mount Home script futtatásával, majd ezután érhető el a home-unk a /home/hxxxxxx helyen).

1
2
3
$ cd
$ pwd
/home/valaki

A home könyvtárat egy környezeti változó tárolja, melynek neve $HOME (akár ki is írathatod az aktuális értékét az echo $HOME parancs kiadásával). A cd parancs erre az útvonalra visz át minket. Mivel a saját home könyvtárunkat rendszerint sűrűn használjuk, így egy rövidebb alternatíva is lehetőségünkre áll, melynek jelölése a "~" (tilde karakter, Alt Gr + 1). Példa a "~" használatához:

1
$ cd ~/Letöltések/eclipse

Feladatok

  1. Lépj be a saját home könyvtáradba!
  2. Lépj ki a /-be, azaz a gyökérkönyvtárba!
  3. Add ki a cd parancsot! Mit csinált?
  4. Lépj be különböző könyvtárakba mind relatív, mind abszolút út használatával!
Lehetséges megoldás
  1. 1
    $ cd
    
  2. 1
    $ cd /
    
  3. Visszalépett a home könyvtárba.
  4. 1
    2
    3
    $ cd /pub/progalap
    $ cd
    $ cd ../../pub/progalap
    

history

A kiadott parancsokról készül egy naplózás, mely megadja a history-t. Használathoz adjuk ki a következő parancsot, mely kiírja a legutóbbi előzményeket!

1
$ history

A kiadott parancsok history-ja egy fájlba kerül lementésre, melyet mi magunk is megtalálhatunk a home könyvtárunkon belül. A fájl neve .bash_history.

A history-val kapcsolatosan van néhány dolog, ami nagyon hasznos tud lenni. Amikor a legutoljára kiadott parancsok közül akarunk egyet újra lefuttatni, akkor elég megnyomnunk a billentyűt és máris megjelenik az aktuális promptban az előző parancs. Többszöri lenyomásra a régebbi parancsok között válogathatunk.

Amennyiben már rengeteg parancsot kiadtunk, de tudjuk hogy milyen kulcsszó szerepelt a parancsban, akkor használhatjuk a Ctrl + R kombinációt, mely megnyomása után a prompt átvált reverse-i-search szövegre. Kezdjük el gépelni a keresett parancsban lévő kulcsszót! Ekkor a history-ban visszafelé (időben visszafelé) indulva keres a rendszer, és az első találatot adja vissza, melyet egy az egyben kiadhatunk vagy ki is egészíthetünk. Ha másik találatot keresünk, akkor nyomjuk meg még egyszer a Ctrl + R billentyű kombinációt!

Automatikus kiegészítés

A Terminál egy nagyon fontos funkciója az automatikus kiegészítés, melyet használhatunk a hosszabb nevű parancsok kiegészítéséhez. Például írjuk be a prompt után a his szöveget, majd nyomjunk egy Tab ↹-ot! Ekkor a terminál kiegészíti a parancsot, amennyiben az egyértelműen megtehető. Ha mondjuk létezne egy historic nevű parancs és ugyanígy a his szöveg után kérjük a kiegészítést, akkor a rendszer még nem tudja eldönteni, hogy a kettő közül melyikre gondoltunk, viszont a leghosszabb közös prefixet már tudhatja, mely jelen esetben a histor szöveg lenne, így eddig ki is egészíti. Ammennyiben ilyen helyzettel találkozunk akkor a Tab ↹ kétszeri lenyomásával a terminálra kiíródik az összes lehetséges opció.

Mivel Linux alapparancsok zöme tudatosan csak pár karakterből áll, így itt talán kevesebb hasznát vesszük, ugyanakkor ez a mechanizmus tökéletesen használható útvonalak megadásakor is. Próbáljuk tudatosan figyelni erre még akkor is, ha az elején kicsit lassabbak leszünk így (később megtérül).

mkdir (make directory)

Új könyvtár létrehozásakor használhatjuk. Általános formája:

mkdir [kapcsoló] <új mappa>

1
$ mkdir hello

Létrejön egy "hello" nevű mappa az aktuális könyvtáron belül.

Hasznos kapcsolók:

  • -p: Létrehozza a kívánt könyvtár eléréséig az összes szükséges könyvtárat. pl.:
1
$ mkdir -p hello/hello2/hello3

Az aktuális mappában létrehozza a teljes könyvtárszerkezetet (hello mappát, majd azon belül a hello2 mappát, majd azon belül a hello3 mappát).

  • -m: Megadhatjuk az új katalógus hozzáférési jogát oktálisan a "mode" értékének beállításával. pl.:
1
2
3
$ mkdir -m 777 hello2
$ ls -l
drwxrwxrwx 2 user user 4096 aug    5 17:05 hello2

A '777' megadásával teljeskörű jogokat biztosítunk mindhárom felhasználói csoportnak (user, group, other). A 3 db 7-es számjegy egyenkénti csökkentésével (0-7) lehet egyre kisebb jogokkal felruházni a felhasználói csoportokat.

Az elérési jogok megváltoztatásáról/értelmezéséről részletesen a (chmod) alfejezetben olvashatsz.

Feladatok

  1. Készíts egy 'sajat' nevű alkönyvtárat a home könyvtáradban!
  2. Lépj be a 'sajat' alkönyvtárba!
  3. Készíts a 'sajat' alkönyvtárban egy 'masik' alkönyvtárat!
  4. Lépj vissza a home könyvtáradba!
  5. Próbálj meg készíteni egy 'sajat' nevű alkönyvtárat!
  6. Az előző 2 könyvtárat hozd létre egy paranccsal!
Lehetséges megoldás
  1. 1
    $ mkdir sajat
    
  2. 1
    $ cd sajat
    
  3. 1
    $ mkdir masik
    
  4. 1
    $ cd
    
  5. 1
    2
    $ mkdir sajat
    mkdir: nem lehet a következő könyvtárat létrehozni: ”sajat”: A fájl már létezik
    
  6. Először törölni kell a meglévőt, később ezzel is részletesen foglalkozunk.

    1
    2
    $ rm -rf sajat
    $ mkdir -p sajat/masik
    

touch

Általános alak:

touch <fájl neve>

Segítségével létrehozhatunk egy üres szöveges fájlt. Példa:

1
$ touch teszt.txt

Eredményeképpen az aktuális könyvtárban létrejön a teszt.txt nevű állomány.

rmdir (remove directory)

Könyvtárak törlésére szolgáló parancs. Az rmdir parancs csak üres könyvtárat vagy könyvtárakat töröl. Általános alakja:

rmdir [kapcsoló] <törlendő mappa>

Példa:

1
2
3
$ mkdir hello
$ rmdir hello
Eredményül kitörlődik a 'hello' nevű mappa.

Hasznos kapcsolók:

  • -p: A könyvtár törlése után, a szülő könyvtárat is törli, ha üres, rekurzívan.

A Dokumentumok mappán belül található egy hello nevű mappa és azon belül egy hello2 nevű mappa. Ha az aktuális könyvtár a Dokumentumok, akkor a -p kapcsoló segítségével, ha kitöröljük a hello2 mappát, akkor a hello mappa is törlődni fog (mivel nem tartalmaz mást).

1
2
valaki@valaki:~/Dokumentumok$ mkdir -p hello/hello2
valaki@valaki:~/Dokumentumok$ rmdir -p hello/hello2

Feladatok

  1. Először végezd el az mkdir-hez tartozó feladatokat!
  2. Töröld le a 'sajat' alkönyvtáradat! Miért nem törli?
  3. Töröld le az összes alkönyvtárat a 'sajat' -ban! Majd töröld le a 'sajat'-ot is!
  4. Hogy lehet ezt egyszerűbben?
Lehetséges megoldás
  1. lásd mkdir
  2. 1
    2
    $ rmdir sajat
    rmdir: 'sajat' eltávolítása meghiúsult: A könyvtár nem üres
    
  3. 1
    2
    $ rmdir sajat/masik
    $ rmdir sajat
    
  4. 1
    $ rmdir -p sajat/masik
    

rm (remove)

Általános alakja:

rm [kapcsoló] <törlendő fájl(ok)>

Kitörli az rm parancs paraméterében megadott fájlokat (könyvtárakat nem, arra az rmdir használandó, kivéve kapcsoló hozzáadásával - lásd lentebb). Példa:

1
valaki@valaki:~/Dokumentumok$ rm file1.txt file2.txt

Eredményül a file1.txt és a file2.txt törlésre kerül.

Kapcsolók:

  • -f: sosem kérdez (force).
  • -i: kétes esetben kérdez (interactive).
  • -r: könyvtár törlésére, akkor is törli ha nem üres (recursive)!
  • -R: -//-
1
2
3
4
5
6
7
8
9
valaki@valaki:~/Dokumentumok$ ls
elso
valaki@valaki:~/Dokumentumok$ cd elso/masodik
valaki@valaki:~/Dokumentumok/elso/masodik$ ls
t.txt
valaki@valaki:~/Dokumentumok/elso/masodik$ cd ../..
valaki@valaki:~/Dokumentumok$ rm -r elso
valaki@valaki:~/Dokumentumok$ ls
valaki@valaki:~/Dokumentumok$

Kitörlésre kerül az elso/masodik mapparendszer, annak ellenére, hogy nem üres.

Az rm -rf kombináció kiadása előtt mindig jól gondold át, hogy mit törölsz, mert amit egyszer így törölsz annak vége (nem lomtárba kerül, hanem tényleges törlésre)!

Feladatok

  1. Töröld le az általad létrehozott fájlokat!
  2. Törölj le egy üres könyvtárat rm-el!
  3. Törölj le egy nemüres alkönyvtárat rekurzívan!
  4. Alkalmazd a force-t a törlésre!
Lehetséges megoldások
  1. 1
    $ rm sajat/ujnev
    
  2. 1
    2
    $ mkdir valami
    $ rm -d valami
    
  3. 1
    2
    3
    $ mkdir valami
    $ touch valami/teszt.txt
    $ rm -r valami
    
  4. 1
    2
    3
    $ mkdir valami
    $ touch valami/teszt.txt
    $ rm -rf valami
    

mv (move)

Általános alakja:

mv [kapcsoló] <forrás><cél>

A fájlok állományrendszeren belüli mozgatására/átnevezésére szolgáló parancs. Ha nem adunk meg fájlnevet a célnál, akkor nem változik meg a neve, különben a megadott fájlnév lesz a célkönyvtárban (átnevezés). Példa áthelyezésre:

1
valaki@valaki:~/Dokumentumok$ mv hello /home/valaki/Letöltések

Eredményül a hello nevű fájl átkerül a Dokumentumok könyvtárból a Letöltések könyvtárba, de a neve nem változik meg.

Példa átnevezésre:

1
$ mv hello uj_hello

Eredményképpen a hello új neve uj_hello lesz.

Kapcsolók:

  • -b: biztonsági másolatot készít a forrásfájlról.
  • -f: sosem kérdez felülírásnál.
  • -i: kétes esetben kérdez (pl. névütközés...).
  • -u: csak régebbit ír felül.

Feladatok

  1. Nevezd át a home könyvtáradban létrehozott "valami" fájlodat!
  2. Mozgasd át a fájlt egy alkönyvtáradba!
  3. Mégegyszer mozgasd át a fájlt egy alkönyvtáradba, de jelezzen a felülíráskor!
Lehetséges megoldások
  1. 1
    2
    $ touch valami
    $ mv valami ujnev
    
  2. 1
    2
    3
    $ touch valami
    $ mkdir sajat
    $ mv valami sajat/
    
  3. 1
    2
    $ touch valami
    $ mv valami sajat/ -i
    

cp (copy)

Általános alakja:

cp [kapcsoló] <forrás> <cél>

Átmásolja a forrás fájlt a megadott helyre. Példa:

1
valaki@valaki:~/Letöltések$ cp image.png /home/valaki/Dokumentumok

Eredményül átmásolja a image.png fájlt a Letöltések könyvtárból a Dokumentumok könyvtárba.

Kapcsolók:

  • -r: könyvtár egész tartalmának másolása.
  • -R: -//-
  • -b: minden célfájlról biztonsági mentés.
  • -f: sosem kérdez.
  • -i: kétes esetben kérdez.
  • -u: csak régebbit írja felül.
  • -l: linkelés másolás helyett.
  • -s: szimbolikus linket készít.

Az utolsó két parancs a linkeléssel kapcsolatos, ezekről alább találhatsz bővebb információt.

Feladatok

  1. Másolj át egy fájlt a home könyvtáradban lévő alkönyvtárba!
  2. Másold át mégegyszer!
  3. Másold át az alkönyvtáradat rekurzívan egy másik alkönyvtárba!
Lehetséges megoldások
  1. 1
    2
    3
    $ mkdir sajat
    $ cp .bash_history sajat
    $ ls -la sajat
    
  2. 1
    2
    $ cp .bash_history sajat
    $ ls -la sajat
    
  3. 1
    2
    $ mkdir masik
    $ cp -r sajat masik/
    

Általános alakja:

ln [kapcsoló] <forrás> <cél>

Az első paraméter a fájl, amihez szeretnénk linket készíteni, a második paraméter a link neve. Kapcsoló nélkül hard link készítése.

Kapcsolók:

  • -s: Szimbolikus (soft) link készítése.

Hard link példa:

1
2
3
4
5
6
7
8
valaki@valaki:~/Dokumentumok$ cat > file1.txt
hello
valaki@valaki:~/Dokumentumok$ ln file1.txt file2.txt
valaki@valaki:~/Dokumentumok$ ls -l
-rw-r--r-- 2 valaki valaki       6 aug    7 01:15 file1.txt
-rw-r--r-- 2 valaki valaki       6 aug    7 01:15 file2.txt
valaki@valaki:~/Dokumentumok$ cat >> file1.txt
world!

Létrehozunk egy .txt fájlt file1 névvel, melybe a hello szöveget írtuk. Majd készítettünk egy hard linket a fájlunkról 'file2' névvel. Majd módosítottuk a file1-et, amelynek eredményeképp a file2 is módosult. Így mindkét .txt fájlban a hello world! szöveg fog szerepelni. Listázásnál a második mező jelenti a fájlra mutató hard linkek számát. Ha kitöröljük az egyik fájlt, attól a másik még használható. Gondolhatunk a Hard link-re egyfajta biztonsági mentés + automatikus módosítás kombinációra.

Szimbolikus/soft link:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
valaki@valaki:~/Dokumentumok$ ln -s file1.txt file3.txt
valaki@valaki:~/Dokumentumok$ ls -l
-rw-r--r-- 2 valaki valaki      13 aug    7 01:16 file1.txt
-rw-r--r-- 2 valaki valaki      13 aug    7 01:16 file2.txt
lrwxrwxrwx 1 valaki valaki       9 aug    7 01:29 file3.txt -> file1.txt
valaki@valaki:~/Dokumentumok$ cat >> file1.txt
valaki@valaki:~/Dokumentumok$ rm file1.txt
valaki@valaki:~/Dokumentumok$ ls -l
-rw-r--r-- 1 valaki valaki      29 aug    7 01:34 file2.txt
lrwxrwxrwx 1 valaki valaki       9 aug    7 01:29 file3.txt -> file1.txt

A meglévő file1.txt fájlunkhoz készítünk egy szimbolikus linket. Listázás után ez jól megfigyelhető az elkészült file3.txt után látható nyíl alapján, amely a file1.txt-re mutat. A hard linkkel ellentétben, amennyiben töröljük a file1.txt-t, akkor a file3.txt használhatatlan lesz, mivel töröltük a fájlt, amire mutatott.

du (disk usage)

A fájljaink és könyvtáraink által elfoglalt lemezterületet lehet vele megtekinteni. Példa:

1
2
3
4
5
valaki@valaki:~/Dokumentumok$ du file2.txt
4   file2.txt
valaki@valaki:~/Dokumentumok$ du file2.txt hello
4   file2.txt
4   hello

Kapcsolók:

  • -a: minden fájl adatait kiírja a könyvtár(ak)on belül, nem csak a könyvtár(ak)ét.
  • -h: "barátibb" alakban a számok.
  • -m: megabájtban írja ki a méretet.
  • -s: csak összméret.

chmod (change mode)

Az elérési jogok megváltoztatása a chmod paranccsal lehetséges a tulajdonos számára. Szintaxisa pedig:

1. verzió:

1
chmod [ugoa][+-][rwx] fájlnév

Az [ugoa] kapcsolókkal tudjuk előírni, hogy kinek adjuk a jogot. Adhatunk jogokat a tulajdonosnak (u - user), a csoportnak (g - group), másoknak (o - others) vagy pedig mindenkinek egyszerre (a - all). A [+-] azt jelenti, hogy adhatunk (+) vagy elvehetünk (-) jogokat. Végül pedig, hogy olvasási (r - Read), írási (w - Write) vagy futtatási (eXecute) jogot adunk. pl.:

1
2
3
4
5
valaki@valaki:~/Dokumentumok$ ls -l
drwxrwxrwx 2 valaki valaki    4096 aug    9 15:07 hello
valaki@valaki:~/Dokumentumok$ chmod g-w hello
valaki@valaki:~/Dokumentumok$ ls -l
drwxr-xrwx 2 valaki valaki    4096 aug    9 15:07 hello

2. verzió:

1
chmod <xxx> fájlnév

Hasonló az előzőhöz, viszont itt minden x helyén 0-7-ig való osztályozással adható meg a különböző felhasználói csoportok jogosultágai (tulajdonos, csoport, mindenki más sorrendben).

Rendre egy darab x helyettesítésének jelentése:

Dec Bin Jogok Jelentése
0 000 --- semmi jog
1 001 --x csak futtatási
2 010 -w- csak írási
3 011 -wx írási és futtatási
4 100 r-- csak olvasási
5 101 r-x olvasási és futtatási
6 110 rw- olvasási és írási
7 111 rwx olvasási, írási és futtatási jog

A táblázatot áttanulmányozva látható, hogy igazából egy 3 bites számmal (\(2^3 = 8\)) adjuk meg a jogosultságot, ahol a legmagasabb bit (\(2^2 = 4\)) jelenti az olvasási jogot, a második legmagasabb bit (\(2^1 = 2\)) jelenti az írási jogot és a legalacsonyabb (\(2^0 = 1\)) jelenti a futtatási jogot. Így, ha például olvasási és futtatási jogot szeretnénk adni, akkor össze kell adni a megfelelő értékeket (4 + 1 = 5), melyet használhatunk az adott felhasználói kör jogosultságainak megadásához.

Példa:

1
2
3
4
5
valaki@valaki:~/Dokumentumok$ ls -l
drwx----wx 2 valaki valaki    4096 aug    9 15:07 hello
valaki@valaki:~/Dokumentumok$ chmod 777 hello
valaki@valaki:~/Dokumentumok$ ls -l
drwxrwxrwx 2 valaki valaki    4096 aug    9 15:07 hello

Kapcsolók:

  • -R: rekurzívan az összes fájlra és alkönyvtárra alkalmazza a jogosultságváltást.

Feladatok

  1. A home könyvtáradban lévő fájl jogosultságát állítsd 000 -ra!
  2. Adj olvasási jogot a tulajdonosnak!
  3. Adj írási jogot a tulajdonosnak!
  4. Adj futtatási jogot a csoportnak!
  5. Adj írási jogot mindenkineki!
  6. Vond meg mindenkitől az írási jogot!
  7. Egy alkönyvtárban mindennek adj futtatási jogot!
  8. Erről az alkönyvtárról szedd le a futtatási jogot rekurzívan!
  9. Hozz létre egy 000 jogosultságú könyvtárat! Lépj bele! Miért nem lehet belelépni?
  10. Listázd ki a 000 jogosultságú könyvtár tartalmát! Miért ez az eredmény?
  11. Hozz létre egy 600 jogosultságú könyvtárat! Lépj bele! Miért nem lehet belelépni? Mi a különbség az előzőhöz képest?
  12. Listázd ki a 600 jogosultságú könyvtár tartalmát! Miért ez az eredmény?
Lehetséges megoldások

Először készítsünk egy fájlt és egy mappát!

1
2
3
$ cd
$ touch teszt.txt
$ mkdir teszt_mappa

  1. 1
    $ chmod 000 teszt.txt
    
  2. 1
    $ chmod u+r teszt.txt
    
  3. 1
    $ chmod u+w teszt.txt
    
  4. 1
    $ chmod g+x teszt.txt
    
  5. 1
    $ chmod a+w teszt.txt
    
  6. 1
    $ chmod a-w teszt.txt
    
  7. 1
    $ chmod -R a+x teszt_mappa
    
  8. 1
    $ chmod -R a-x teszt_mappa
    
  9. 1
    $ chmod 000 teszt_mappa
    
    A könyvtárba lépés felér a futtatással, ami hiányzik, így nem enged belelépni.

  10. 1
    $ ls teszt_mappa
    
    Mivel nincs olvasási jogom, ezért nem tudom kilistázni a tartalmat.

  11. 1
    $ chmod 600 teszt_mappa
    
    Továbbra sincs futtatási jogom, viszont kilistázni ki tudom.

  12. 1
    $ ls teszt_mappa
    
    Olvasási jogom van.

zip/unzip

Adott fájl vagy mappa be- és kicsomagolása.

Fájl esetén

1
2
3
4
5
6
valaki@valaki:~/Dokumentumok$ zip file.zip file2.txt
  adding: file2.txt (stored 0%)
valaki@valaki:~/Dokumentumok$ unzip file.zip
Archive:  file.zip
replace file2.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
 extracting: file2.txt

Mappa esetén (rekurzívan)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
valaki@valaki:~/Dokumentumok$ zip -r hello.zip hello
updating: hello/ (stored 0%)
updating: hello/file.txt (stored 0%)
valaki@valaki:~/Dokumentumok$ rm -r uj
valaki@valaki:~/Dokumentumok$ unzip hello.zip
Archive:  hello.zip
   creating: hello/
 extracting: hello/file.txt
valaki@valaki:~/Dokumentumok$ ls
file2.txt       hello           hello.zip
valaki@valaki:~/Dokumentumok$

Kapcsolók:

  • -r: rekurzívan az összes fájlra és alkönyvtárra.

Feladatok

  1. Tömöríts össze egy tetszőleges fájlt! Tömörítsd is ki!
  2. Töröríts össze több fájlt egyszerre! Tömörítsd is ki!
  3. Tömörítsd össze a pub-ban lévő "sajat" mappát! Tömörítsd is ki egy másik könyvtárba!
Lehetséges megoldások
  1. 1
    $ zip tomoritett.zip sajatfajl
    
  2. 1
    $ zip tomoritett.zip sajatfajl-1 sajatfajl-2
    
  3. 1
    2
    $ zip sajat.zip sajat
    $ unzip sajat.zip
    

man (manual)

Már sikeresen megismertünk néhány igen hasznos parancsot és azok leggyakoribb kapcsolóit. Ugyanakkor néha jól jöhet, ha meg tudjuk nézni egy-egy parancs részletes dokumentációját, így további képességeket fedezhetünk fel (például további kapcsolók). Erre a célra a man parancsot használhatjuk, melynek argumentumában azt a parancsot kell megadnunk, melyről többet szeretnénk megtudni. Példa:

1
man ls

A dokumentáció olvasási módból a q billentyű lenyomásával léphetünk ki.

Feladatok

  1. Nézd meg az eddig ismertetett parancsok manuálját!
  2. A / jel használatával keress rá 1-1 szóra a manuálban!

Felhasználók

A Linux történetétek bemutatásakor is láthattuk, hogy az operációs rendszert többfelhasználósra tervezték. Az alábbi parancsok az aktuális rendszerre bejelentkezett felhasználókról adnak információt. Nyilván, ha az otthoni gépünket csak mi használjuk, akkor jobb esetben csak mi vagyunk bejelentkezve. Sokkal izgalmasabb lehet ezen parancsokat a linux.inf.u-szeged.hu szerveren kipróbálni (ssh használatával).

finger

Általános alak:

finger <argumentum>

Kiírja, hogy kik vannak bejelentkezve az aktuális gépre.

felhasználó: a megadott felhasználóról ír ki adatokat.

who

Kiírja, hogy kik vannak bejelentkezve az aktuális gépre, plusz adatokat ír ki a finger-hez képest.

w

Ugyanaz, mint a who, csak kiírja, hogy min dolgozik.

Multitask

A Linux operációs rendszer egy multitask-ot támogató operációs rendszer, ami azt jelenti, hogy egyszerre több feladatot is futtathat egy-egy felhasználó. A következő parancsok segítségével többek között az éppen futó parancsokról kaphatunk információkat vagy éppen szakíthatjuk meg futásukat.

ps (process)

Kiírja a képernyőre az aktuális process-eket (futó vagy várakozó programokat, amik az adott terminálhoz kapcsolódnak).

Kapcsolók:

  • -e: az összes futó process-t kiírja (más terminálhoz/terminálhoz nem kapcsoltakat is).
  • -f: több információ.
  • -u user: csak a megadott user által "birtokolt" processzek listázása.

Példa:

1
$ ps

Kimenet:

1
2
3
 PID TTY          TIME CMD
   6 tty1     00:00:00 bash
  66 tty1     00:00:00 ps

A ps parancs kiadásakor maga a bash, azaz a terminál és a ps process futott. Minden process-nek van egy egyedi azonosítója, melyet a PID ad meg. A TTY oszlopban láthatjuk, hogy melyik terminálon fut az adott process.

jobs

Kiírja az aktuális jobokat, amik az adott terminálhoz kapcsolódnak.

Mi is pontosan az a job és az a process?

Process: Egyszerűen egy futó program

Job: A processek/programok csokorba foghatóak, ekkor egy job-nak nevezzük. A job process-ei egymásután (szekvenciálisan) vagy párhuzamosan is futhatnak.

A pipeline-nál összefogunk majd több parancsot egy nagyobb művelet végrehajtásához, ilyenkor a parancsok a process-ek, míg a komplexebb programcsokor maga a job.

^C

Ctrl+c paranccsal leállíthatunk előtérben futó folyamatokat. Példa: indítsunk el egy hosszan futó programot (yes parancs végtelenségig ír 'y' karaktereket a terminálra), majd ezt állítsuk le!

1
2
3
4
5
6
7
8
9
$ yes
y
y
y
y
y
y
^C
$ 

^Z

Ctrl+z paranccsal szüneteltethetünk előtérben futó folyamatokat, azaz az előző példánál maradva a yes program futását nem lövi ki, hanem csak megszakítja. A megszakított programok futása később folytatható.

bg (background)

Általános alak:

bg %<szám>

Várakozó (vagy megszakított) job-ok elindítását teszi lehetővé, a "szám" helyére a job azonosítója kerül, háttérben indítja el (terminált nem blokkolja direktben, viszont írhat oda ami aztán blokkolni fogja. Például ha a yes programot a háttérben indítjuk, akkor után nem nagyon tudsz semmit se csinálni az adott terminállal).

fg (foreground)

Általános alak:

fg %<szám>

Megegyezik a bg paranccsal, annyi különbséggel, hogy nem a háttérben, hanem az előtérben futtatja az adott jobot.

Feladatok

  1. Indítsd el egy alkalmazást (pl. firefox) a parancssorból! Függeszd fel a futását!
  2. Most indítsd el ezt a háttérben!
Lehetséges megoldás
  1. 1
    2
    $ firefox
    $ ^Z
    
  2. 1
    $ firefox &
    

kill

Általános alak:

kill %<szám>/PID

Process-eket és job-okat tudunk vele leállítani.

%<szám> formátumnál a szám helyére a job azonosítóját kell írni. PID a process azonosítójának felel meg, és ezt a process-t állítja le (csak akkor, ha fut).

Kapcsolók:

  • -9: a leállított process-t is megszakítja.
  • -s: úgy állítja le a job-ot, hogy még újra lehet indítani.

Példa a job-ok kezelésére (cat > file.txt parancs kiadásával írhatunk tartalmat a file.txt állományba):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
valaki@valaki:~$ cat > file.txt
hello
^C
valaki@valaki:~$ cat > file.txt
hello
^Z
[1]+  Megállítva            cat > file.txt
valaki@valaki:~$ jobs
[1]+  Megállítva            cat > file.txt
valaki@valaki:~$ fg %1
cat > file.txt
world
^Z
[1]+  Megállítva            cat > file.txt
valaki@valaki:~$ jobs
[1]+  Megállítva            cat > file.txt
valaki@valaki:~$ kill %1

[1]+  Megállítva            cat > file.txt
valaki@valaki:~$ jobs
[1]+  Befejeződött          cat > file.txt
valaki@valaki:~$ jobs
valaki@valaki:~$

Beleírtunk egy sort a file.txt-be, majd leállítottuk (Ctrl+c) a folyamatot. Aztán ismét írtunk bele egy sort, viszont ekkor csak szüneteltettük (Ctrl+z) a folyamatot. jobs paranccsal lekértük az aktuális job-okat, ahol látható az előbbi fájlba írás folyamatunk. fg paranccsal "visszahívtuk" a job-ot. Ismét írtunk bele egy sort, majd várakozni küldtük és a következő lépésben a kill paranccsal "kilőttük" a folyamatot. Ezután a jobs paranccsal lekérdezve már látható, hogy a fájlba írás teljes egészében leállt.

&

Ha egy programot alapból a háttérben akarunk futtatni, akkor a futtatandó program neve után egy & jelet kell tenni. Példa:

1
valaki@valaki:~$ gedit &

A fenti parancs hatására megnyílik a gedit szövegszerkesztő a háttérben. Amennyiben nem teszünk & jelet a parancs végére, akkor a terminál egészen addig blokkolva lesz, ameddig be nem zárjuk a szövegszerkesztőt.

Szövegfájlok

echo

Az utána lévő szöveget írja ki a képernyőre. A szóközöket a "\<szóköz>" segítségével lehet beszúrni. Vagy ha az egész szöveget "" közé tesszük, akkor az kerül a képernyőre ami az idézőjelek között van. Példa:

1
2
3
4
valaki@valaki:~$ echo hello
hello
valaki@valaki:~$ echo "hello Kitty!"
hello Kitty!

Ahogyan azt korábban már láttuk az echo parancsot használhatjuk a környezeti változók értékének kiíratására is:

1
2
3
echo $PATH
echo $HOME
echo $PWD

Mi magunk is létrehozhatunk változókat, amelyek az adott terminálhoz fognak tartozni. Ezek értékét aztán tetszőleges más parancsokban is felhasználhatjuk. Változót létrehozni és értéket adni neki a következőképpen lehet:

1
valtozo_neve="ertek"

Ami nagyon fontos, hogy ne legyen szóköz az egyenlőség jel körül. Nézzük, hogyan lehet létrehozni egy változót, kiíratni az értékét, majd törölni a változót:

1
2
3
4
5
6
7
8
valaki@valaki:~$ echo $asd
(semmi)
valaki@valaki:~$ asd="hello"
valaki@valaki:~$ echo $asd
hello
valaki@valaki:~$ unset asd
valaki@valaki:~$ echo $asd
(semmi)

Létrehoztunk egy asd nevű változót, amely kezdetben üres, majd beletettük a "hello" szöveget, majd az unset parancs segítségével töröltük.

Feladat

  1. Írj ki a képernyőre egy tetszőleges szöveget!
  2. Az újsort ne írd ki a szöveggel együtt!
  3. Szúrj be a szövegbe egy tabulátor karaktert, és írd ki megfelelően a szöveget!
Lehetséges megoldás
  1. 1
    $ echo szoveg
    
  2. 1
    $ echo -n szoveg
    
  3. 1
    $ echo -e "elotte\tutana"
    

set

Kiírja az összes környezeti változót és az értéküket.

cat

Általános alak:

cat [<fájl>]

Paraméter nélkül írhatunk a képernyőre és Enter leütése után kiírja az addig beírt sort. Fájl paraméter esetén kiírja a fájl tartalmát a képernyőre. Ha cat > szövegfájl kombinációt használjuk, akkor a konzolra írt sorokat a szövegfájlba menti. Amennyiben >>-t írunk > helyett, akkor a sorokat hozzáfűzi a fájl végéhez (az előző tartalom megmarad). Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ cat
hello
hello
^C
$ cat > file.txt
first
^C
$ cat file.txt
first
$ cat >> file.txt
second
^C
$ cat file.txt
first
second

Először kiírtuk a képernyőre, hogy "hello", majd a 'file.txt'-be bele írtuk a "first" sort. Aztán ezt kiírattuk a képernyőre, majd hozzáfűztük ugyanehhez a fájlhoz a "second" sort és kiírattuk.

Cat és a job műveletek használata. Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
valaki@valaki:~$ cat
hello
hello
^Z
[1]+  Megállítva            cat
valaki@valaki:~$ jobs
[1]+  Megállítva            cat
valaki@valaki:~$ fg %1
cat
hi    
hi
^Z
[1]+  Megállítva            cat
valaki@valaki:~$ jobs
[1]+  Megállítva            cat
valaki@valaki:~$ kill %1

[1]+  Megállítva            cat
valaki@valaki:~$ jobs
[1]+  Befejeződött          cat
valaki@valaki:~$ jobs
valaki@valaki:~$ 

Feladatok

  1. Nézd meg a /etc/motd tartalmát!
  2. Nézd meg a /etc/shadow tartalmát! Miért nem tudja olvasni?
  3. Listázz ki egy jó nagy fájlt (pl.: .bash_history)!
  4. Listázd ki a jó nagy fájlt úgy, hogy számozva legyenek a sorok!
  5. Mit csinál magában a cat parancs?
Lehetséges megoldások
  1. 1
    $ cat /etc/motd
    
  2. 1
    2
    $ cat /etc/shadow
    $ ls -l /etc/shadow
    
  3. 1
    $ cat .bash_history
    
  4. 1
    $ cat -n .bash_history
    
  5. 1
    2
    3
    4
    $ cat
    qwert
    asdfg
    ^D
    

more

Általános alak:

more <filename>

A fájl tartalmát oldalanként írja ki a képernyőre. (Space leütésével lehet léptetni.) Akkor jön jól, ha hosszú állományokat akarunk olvasni, mivel a cat használatakor kiír mindent a terminálra és amennyiben a fájl elejére lettünk volna kíváncsiak akkor vissza kell görgetnünk.

less

Általános alak:

less <filename>

Ugyanarra használható, mint a more.

Feladatok

  1. Nézd meg a jó nagy fájlt less-el! Mi a különbség a cat-hez képest?
  2. Most nézd meg more-ral! Milyen esetekben jobbak ezek?
Lehetséges megoldások
  1. 1
    $ less .bash_history
    
  2. 1
    $ more .bash_history
    

Általános alak:

head [kapcsoló] <fájl>

Kiírja a fájl elejéről a megadott számú sort.

Kapcsolók:

  • -n <-szám>: kiírja a file első "szám"nyi sorát
  • -szám: -||-

tail

Általános alak:

tail [kapcsoló] <fájl>

Kiírja a fájl utolsó n sorát.

Kapcsolók:

  • -n <+szám>: utolsó számnyi sort írja ki
  • -szám: az utolsó "szám" számú sort írja ki
  • -f: folyamatosan bővülő fájl tartalmát írja ki (hasznos például logoknál, ahol folyamatosan történik írás a fájlba).

head és tail egyszerre:

A head és tail kombinálásával egy szövegfájl tetszőleges részét "kimetszhetjük".

Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
valaki@valaki:~/Dokumentumok$ cat file2.txt
elso
masodik
harmadik
negyedik
otodik
hatodik
hetedik
nyolcadik
kilencedik
tizedik
valaki@valaki:~/Dokumentumok$ head -4 file2.txt
elso
masodik
harmadik
negyedik
valaki@valaki:~/Dokumentumok$ tail -2 file2.txt
kilencedik
tizedik
valaki@valaki:~/Dokumentumok$ head -9 file2.txt | tail -3
hetedik
nyolcadik
kilencedik

Itt láthatunk egy példát a pipeline használatára, melyet a függőleges vonal (|) jelöl (Alt Gr + W). Ennek lényege, hogy két parancsot összekössön, mégpedig oly módon, hogy az első parancs kimenete lesz a következő parancs bemenete. Segítségével nagyon egyszerűen akár egészen bonyolult feldolgozások is megvalósíthatóak. A fenti példa eredményeképpen a 7-9 sorokat kapjuk eredményképpen.

wc (word count)

Általános alak:

wc [kapcsoló] <fájl>

Kiírja a fájl sorainak, szavainak, byte-jainak számát és a fájl nevét.

Kapcsolók:

  • -l: csak a nevet és a sorok számát írja ki.
  • -w: csak a nevet és a szavak számát írja ki.
  • -c: csak a nevet és a byte-ok számát írja ki.
  • -m: csak a nevet és a betűk számát írja ki.

Példa:

1
2
3
4
$ wc file2.txt
10 10 83 file2.txt
$ wc -l file2.txt
10 file2.txt

^D

Ctrl+D parancs megszünteti a bemenetet vagy kilép a terminálból (vagy shell programból).

/dev/null

Egy speciális fájl, amely minden beleírt adatot töröl, miközben az írási művelet sikeres. Az eszközből való olvasás nem ad vissza semmilyen adatot, eredménye azonnali EOF, azaz fájl vége. Felfogható adatnyelő eszközként ("fekete lyuk"). A null eszközt tipikusan folyamatok kimeneti stream-jeinek eltüntetésére használják, vagy az üres bemenet biztosítására, általában átirányítás segítségével. pl.: yes > /dev/null &

Beépített környezeti változók

A környezeti változók közül már többet is láthattunk, de összegzésként itt összeszedjük a leghasznosabbakat:

  • $PWD: Tárolja az aktuális elérési útvonalat.
  • $HOME: Tárolja a home könyvtár abszolút elérési útvonalát.
  • $PS1: A prompt kinézetét leíró kifejezést tárolja.
  • $PATH: A keresési könyvtárak elérési útvonalát tárolja, itt keresi a parancsokat.
  • ~: Nem környezeti változó, de a home könyvtár elérési útvonalát tárolja.

Mintaillesztés

Ha nem tudjuk egy szöveg pontos alakját, csak egy részét, vagy több szövegrészlettel szeretnénk egyszerre dolgozni, akkor jön jól a mintaillesztés. Használható egyszerre több fájl törlésénél, vagy keresésnél (fájlban, vagy fájlrendszerben).

Speciális karakterek:

  • ? - pontosan egy karaktert helyettesít: pl. ?lma lehet alma vagy álma is.
  • * - bármennyi (akár 0) karaktert helyettesít: pl. *gép lehet gép, mosógép, számítógép, stb.
  • [...] - a [] között felsorolt karakterekből pontosan egyet helyettesít. Példa: [aó]lom lehet ólom vagy alom, fajl[0123456789] pedig fajl0, fajl1, ... fajl9.

Példa: Az összes .txt végződésű fájl kilistázása:

1
$ ls *.txt

Minden .png fájl átmásolása a Dokumentumok/hello mappába az aktuális mappából:

1
$ cp *.png ~/Dokumentumok/hello

Az összes .png kép törlése a Dokumentumok/hello mappából:

1
$ rm ~/Dokumentumok/hello/*.png

grep

Általános alak:

grep [kapcsoló] [minta] <fájl>

Kiírja egy fájl azon sorait, amelyekben szerepel a minta szövegrészlet.

Kapcsolók:

  • -A # : # db sor kiírása az illeszkedő sorok után.
  • -B # : # db sor kiírása az illeszkedő sorok előtt.
  • -C # : # db sor kiírása az illeszkedő sorok előtt és után.
  • -e minta : minta megadása; segítségével több minta is megadható, illetve akkor is jó, ha a minta a - karakterrel kezdődik.
  • -r, -R: könyvtárak feldolgozása rekurzívan.
  • -v: azon sorait írja ki, amik nem tartalmazzák a minta szövegrészletet.

Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ grep hat file2.txt
hatodik
$ grep ed file2.txt
negyedik
hetedik
kilencedik
tizedik
$ grep -v ed file2.txt
elso
masodik
harmadik
otodik
hatodik
nyolcadik

Átirányítások és parancsok láncolása

A Linux alatt elérhető parancsok nagy része kap egy input-ot és ennek tükrében állítja elő az output-ját. Alapesetben az input a standard input (stdin), ami a billentyűzetet jelenti. Az alapértelmezett output pedig a standard output (stdout), ami a képernyőt jelenti.

Az átirányítások segítségével rendelkezhetünk másképpen és a bemenetet vehetjük máshonnan is (például egy fájlból), illetve az output-ot is előállíthatjuk máshova (például fájlba írjuk bele).

parancs > szövegfájl

A parancs kimenete a konzol helyett a fájlba fog íródni, a fájl addigi tartalma elvész. pl.:

1
2
3
4
5
6
$ ls -l > file.txt
$ cat file.txt
-rw-r--r-- 1 valaki valaki      83 aug    9 21:01 file2.txt
-rw-r--r-- 1 valaki valaki       0 aug   13 19:10 file.txt
drwxr-xrwx 2 valaki valaki    4096 aug    9 15:07 hello
-rw-r--r-- 1 valaki valaki   15796 aug   13 19:09 progalap_linux

parancs >> szövegfájl

A parancs kimenete a konzol helyett a szövegfájl végéhez fog hozzáfűződni. Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ ls >> file.txt
$ cat file.txt
-rw-r--r-- 1 valaki valaki      83 aug    9 21:01 file2.txt
-rw-r--r-- 1 valaki valaki       0 aug   13 19:10 file.txt
drwxr-xrwx 2 valaki valaki    4096 aug    9 15:07 hello
-rw-r--r-- 1 valaki valaki   15796 aug   13 19:09 progalap_linux
file2.txt
file.txt
hello
progalap_linux

parancs < szövegfájl

A parancs bemeneteként kapja a szövegfájl tartalmát.

Példa:

1
$ cat < .bash_history

Nyilván a felső parancs helyettesíthető lenne a cat .bash_history paranccsal. Viszont fontos megérteni a kettő között a különbséget. Az első esetben idézzük fel, hogy mi történik, amikor egyszerűen csak a cat parancsot adjuk ki! Ekkor a cat visszaírja a képernyőre, amit a billentyűzetről beolvasott, egészen addig, amíg meg nem szakítjuk annak futását. A < operátorral azt mondjuk, hogy ne a billentyűzetről, hanem a .bash_history állományból olvassa az input-ot, tehát ez legyen a bemeneti csatorna. A második esetben (cat .bash_history) maga a cat parancs képes arra, hogy egy fájl tartalmát kiírja (melyet argumentumként adunk át). Amennyiben ez a lehetőség nem állna rendelkezésünkre, az input átirányítással akkor is meg tudnánk ezt tenni.

parancs1 | parancs2 (pipeline)

A parancs1 kimenete konzolra kiírás helyett a parancs2 bemenete lesz. A pipeline-t már láttuk korábban, így itt már nem részletezzük azt. Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ cat file2.txt
elso
masodik
harmadik
negyedik
otodik
hatodik
hetedik
nyolcadik
kilencedik
tizedik
$ head -9 file2.txt | tail -3
hetedik
nyolcadik
kilencedik

parancs1 && parancs2

A parancs1 végrehajtása után a parancs2 csak akkor hajtódik végre, ha a parancs1 hiba nélkül futott le. Példa:

1
$ mkdir ujmappa && rmdir ujmappa

Ha létre tudta hozni az ujmappa nevű könyvtárat, akkor ki is törli a második paranccsal.

parancs1 || parancs2

A parancs1 végrehajtása után a parancs2 csak akkor hajtódik végre, ha a parancs1 futása közben hiba történt. Példa:

1
$ rm -r ujmappa || mkdir ujmappa

Megpróbáljuk törölni az ujmappa nevű könyvtárat. Mondjuk még nincs ilyen könyvtár, akkor hiba üzenetet kapunk, majd létrejön az ujmappa nevű könyvtár.

parancs1;parancs2;parancs3

A parancsok ";"-vel elválasztva egymás után hajtódnak végre balról jobbra.

1
2
$ mkdir ujmappa; cd ujmappa; ls -l
összesen 0

Linux hálózatok

scp (secure copy)

Arra használhatjuk, hogy fájlokat másoljunk a lokális és egy távoli számítógép között.

Általános alak:

scp <felhasználónév>@<szerver>:<távoli útvonal> <helyi útvonal>

Átmásol egy bizonyos fájlt vagy könyvtárat a "távoli útvonal"-ról a "helyi útvonal"-ra, vagy vissza. Példa:

1
2
3
$ scp h165057@linux.inf.u-szeged.hu:/n/pub/ProgramozasAlapjai/Gyakorlat/gyak02/anyag.txt ./
h165057@linux.inf.u-szeged.hu's password: 
anyag.txt                             100% 3659     3.6KB/s   00:01

ssh (Secure Shell)

Általános alak:

ssh [kapcsoló] <felhasználónév>@<szerver>

Csatlakozni lehet a szerverre, futtatni konzolos programokat. Korábban az ssh-ról is lehetett már olvasni, így annak részleteibe már nem megyünk bele.

  • -X: Ezzel a kapcsolóval grafikus programot is indíthatunk.

pl.:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
valaki@valaki:~$ ssh h999999@linux.inf.u-szeged.hu
h999999@linux.inf.u-szeged.hu's password: 
Linux linux1.inf.u-szeged.hu 3.2.0-4-686-pae #1 SMP Debian 3.2.54-2 i686

 ******************************************************************************
 *         Udvozoljuk az Informatikai Tanszekcsoport linux szerveren!         *
 *                                                                            *
 * A szerver azt a celt szolgalja, hogy tavoli bejelentkezes eseten ugyanazt  *
 * a kornyezetet biztositsa, amit egy tanteremben levo munkaallomas biztosit. *
 *                                                                            *
 * A szerver mukodesevel, a bejelentkezessel kapcsolatos problemaikat kerjuk  *
 *                a kabinet@inf.u-szeged.hu cimen jelezzek.                   *
 ******************************************************************************

Last login: Sun May  4 21:38:49 2014 from 79.101.5.52
h999999@linux1:~$ pwd
/home/h999999
h999999@linux1:~$ exit
kijelentkezés
Connection to linux.inf.u-szeged.hu closed.
valaki@valaki:~$ ssh -X h999999@linux.inf.u-szeged.hu
h999999@linux.inf.u-szeged.hu's password: 
Linux linux1.inf.u-szeged.hu 3.2.0-4-686-pae #1 SMP Debian 3.2.54-2 i686

 ******************************************************************************
 *         Udvozoljuk az Informatikai Tanszekcsoport linux szerveren!         *
 *                                                                            *
 * A szerver azt a celt szolgalja, hogy tavoli bejelentkezes eseten ugyanazt  *
 * a kornyezetet biztositsa, amit egy tanteremben levo munkaallomas biztosit. *
 *                                                                            *
 * A szerver mukodesevel, a bejelentkezessel kapcsolatos problemaikat kerjuk  *
 *                a kabinet@inf.u-szeged.hu cimen jelezzek.                   *
 ******************************************************************************

Last login: Wed Aug 13 21:12:17 2014 from 79.101.5.234
h165057@linux1:~$ 

sftp (Secure File Transfer Protocol)

Általános alak:

sftp <felhasználónév>@<szerver>

Csatlakozik a szerverre és lehetőségünk van lépkedni a szerver könyvtáraiban, illetve a lokális könyvtárunkban, majd leszedni illetve feltölteni bizonyos adatokat.

Egy 'l' betű hozzáadásával tudjuk közölni a géppel, hogy nem a szerveren szeretnék, hogy végrehajtódjon az adott parancs, hanem a lokális gépen. pl.:

  • ls - lls, pwd - lpwd, cd - lcd, mkdir - lmkdir.
  • put - fájl átmásolása a lokális gépről a szerver gépre.
  • get - fájl átmásolása a szerver gépről a lokális gépre.
  • exit - kilép a szerverről.

Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
valaki@valaki:~$ sftp h999999@linux.inf.u-szeged.hu
h999999@linux.inf.u-szeged.hu's password: 
Connected to linux.inf.u-szeged.hu. 
sftp> cd ../..                                                    
sftp> cd pub/ProgramozasAlapjai/Gyakorlat/gyak02/
sftp> get anyag.txt 
Fetching /n/pub/ProgramozasAlapjai/Gyakorlat/gyak02/anyag.txt to anyag.txt
/n/pub/ProgramozasAlapjai/Gyakorlat/gyak02/an 100%  306     0.3KB/s   00:00    
sftp> exit
valaki@valaki:~$

További Feladatok

Feladatok - 1

  1. Készíts egy 'vezerles.txt' nevű fájlt a home könyvtáradba!
  2. Készíts egy 'sajat' nevű alkönyvtárat a home könyvtáradba!
  3. Lépj be ebbe az alkönyvtárba!
  4. Készíts egy 'elso' és egy 'masodik' nevű alkönyvtárat!
  5. Készíts az 'elso' könyvtarban egy 'utolso' nevű alkönyvtárat!
  6. Készíts egy 'harmadik' nevű, és abban egy 'vegso' nevű alkönyvtárat!
  7. Töröld a 'masodik' nevű alkönyvtárat!
  8. Töröld az 'elso' könyvtarban az 'utolso' nevű alkönyvtárat!
  9. Töröld az 'elso' és 'harmadik' nevű alkönyvtárat!
  10. Készíts a home könyvtáradba egy 'sajat2' nevű alkönyvtárat!
  11. Lépj be a 'sajat2' nevű alkönyvtárba!
  12. Másold át ide a '/home/valaki' könyvtárból a 'vezerles.txt' fájlt!
  13. Készíts egy másolatot a 'vezerles.txt' fájlról 'masolat.txt' néven!
  14. Mozgasd át a 'vezerles.txt' fájlt a home könyvtáradba!
  15. Lépj vissza a home könyvtáradba!
  16. Másold be a 'vezerles.txt' fájlt a 'sajat2' alkönyvtárba.
  17. Másolj át minden '.txt' végződésű fájlt a 'sajat2' könyvtárból a 'sajat'-ba!
  18. Töröld a 'vezerles.txt' fájlt!
  19. Töröld a 'sajat2' könyvtárat a teljes tartalmával együtt!
  20. Mozgasd az aktuális könyvtárba a 'sajat' könyvtárból a 'vezerles.txt' fájlt!
  21. Töröld a 'sajat' könyvtárból a 'masolat.txt' fájlt!
  22. Adj meg mindenkinek minden jogot a 'vezerles.txt' fájlra!
  23. Vond meg a csoport és az egyéb felhasználók írásjogát a 'vezerles.txt' fájlhoz!
  24. Vond meg mindenkitől a futtatás jogát a 'vezerles.txt' fájlhoz!
  25. Állítsd be, hogy csak a csoport tudja és csak olvasni a 'vezerles.txt' fájlt!
  26. Adj magadnak írás-olvasási jogot a 'vezerles.txt' fájlhoz!
  27. Kérj listát az aktuális könyvtár tartalmáról!
  28. Kérj teljes listát a kabinetes pub könyvtár tartalmáról!
  29. Kérj részletes listát a gyökérkönyvtár tartalmáról!
  30. Kérj teljes és részletes listát az összes pub könyvtárban lévő 'Prog'-gal kezdődő könyvtár tartalmáról.
  31. Kérj listát a könyvtáradban lévő összes rejtett elemről (ne a tartalmukról)!
  32. Lépj be a 'sajat' könyvtárba!
  33. Kérdezd le, kik vannak bejelentkezve az általad használt gépre!
  34. Nézd meg azt is, éppen min dolgoznak!
  35. Töröld a 'sajat' könyvtárat, a tartalmával együtt!

Feladatok - 2

  1. Készíts listát az aktuális könyvtár tartalmáról!
  2. Készíts listát a home könyvtárad tartalmáról!
  3. Készíts részletes listát a home könyvtárad tartalmáról!
  4. Készíts részletes és teljes listát a home könyvtárad tartalmáról!
  5. Írasd ki a '/pub/ProgramozasAlapjai/Eloadas' könyvtár tulajdonságait!
  6. Írasd ki a '/pub/ProgramozasAlapjai/Eloadas' könyvtárban lévő össze 'pdf' kiterjesztésű fájlt!
  7. Írasd ki a home könyvtáradban lévő összes rejtett fájlt!
  8. Írasd ki az összes rejtett fájl méretét!
  9. Írasd ki a '/pub/ProgramozasAlapjai' könyvtárban lévő összes rejtett fájlt!
  10. Kérj teljes és részletes listát az összes pub könyvtárban lévő 'Prog'-gal kezdődő könyvtár tartalmáról!
  11. Hozz létre egy 'torlendo' nevű könyvtárat!
  12. Hozz létre egy 'gyumolcs' nevű könyvtárat! A 'gyumolcs' könyvtáron belül hozz létre egy 'alma' és egy 'korte' nevű könyvtárat is!
  13. Mi lesz az 'mkdir /gyumolcs/alma/jonatan' parancs eredménye?
  14. Mi lesz az 'mkdir Adam/Eva' parancs eredménye?
  15. Hozz létre egy 'auto' nevű könyvtárat és azon belül egy 'Audi' nevűt is! Ez egyetlen paranccsal tedd meg!
  16. Mi lesz az 'mkdir -p Adam/Eva' parancs eredménye?
  17. Töröld a 'torlendo' nevű könyvtárat!
  18. Töröld az 'auto' könyvtárban lévő 'Audi' könyvtárat egyetlen paranccsal!
  19. Mit csinál a 'rmdir Adam' parancs?
  20. Töröld az 'Adam' nevű könyvtárat!
  21. Töröld a teljes 'gyumolcs' könyvtárat!
  22. A home könyvtáradban vagy. Mi történik, ha kiadod a 'cd ..' parancsot?
  23. Mi lesz a 'cd ls' parancs eredménye?
  24. Mi lesz a 'cd .' parancs eredménye?
  25. Mi lesz a 'cd /' parancs eredménye?
  26. Mi lesz a 'cd' parancs eredménye?
  27. Hozz létre a saját home könyvtáradban egy 'szamitogep' nevű könyvtárat, benne egy 'billentyuzet' könyvtárat, azon belül pedig egy 'ybillentyu' nevűt! Az aktuális könyvtárad legyen a home könyvtárad. Egyetlen utasítással lépj be az 'ybillenyu' könyvtárba. Mi a hatása a 'cd ../..' utasításnak?
  28. Egyetlen utasítással lépj be a '/pub/ProgramozasAlapjai/Eloadas' könyvtárba!
  29. A '/pub/ProgramozasAlapjai/Eloadas' könyvtárban vagy, egyetlen utasítással lépj be a home könyvtáradban lévő 'szamitogep' könyvtárba!
  30. Másold át a '/pub/ProgramozasAlapjai/Eloadas/' könyvtárból valamelyik pdf fájlt a home könyvtáradba! (A home könyvtáradban vagy!)
  31. Másold át a '/pub/ProgramozasAlapjai' könyvtárból valamelyik pdf fájlt a home könyvtáradba! (A home könyvtárad 'szamitogep' nevű könyvtárában vagy.)
  32. Készíts egy progalap nevű alkönyvtárat a saját home könyvtáradba, és másold bele a '/pub/ProgramozasAlapjai' könyvtárban található össze '.pdf' kiterjesztésű fájt! Készíts egy másolatot egy 'pral-*.pdf' fájlról 'masolat' néven!
  33. Mire jó a 'cat' parancs? Mutass rá példát!
  34. Ments le egy hosszabb fájlt. Nézzük meg oldalanként!
  35. Hány sorból áll a '.bash_history' fájl?
  36. Hány szót tartalmaz egy tetszőleges fájl?
  37. Írasd ki egy tetszőleges fájl első 6 sorát!
  38. Írasd ki egy tetszőleges fájl utolsó 5 sorát!
  39. Írasd ki egy tetszőleges fájl összes olyan sorát, amely 2-es karaktert tartalmaz!
  40. Egy könyvtár jogosultsága: rw-r--r--. Mit jelent ez?
  41. Mit jelent a következő jogosultság: rwxr-xr-x?
  42. Ki módosíthatja az r-xr--r-- jogosultságú fájlt?
  43. Add meg azt a parancsot, ami egy fájl jogosultságait rwx--x-w- -re állítja!
  44. Mi a hatása a 'chmod 755 vezerles.txt' utasításnak?
  45. Milyen jogosultságot eredményez a 611 utasítás?
  46. Állítsd be a 'konyv.xml' fájl jogosultságait úgy, hogy senki se írhassa!
  47. Mi az eredménye a 'chmod = 777 alma.txt' parancsnak?
  48. Mi a hatása a következő parancsnak: 'chmod 421 korte.txt'?
  49. Mi a hatása a következő parancsnak: 'chmod go-w alma.txt'?
  50. Mi a hatása a következő parancsnak: 'chmod go+w alma.txt'?
  51. Mi a hatása a következő parancsnak: 'chmod a=rw'?
  52. Mi a hatása a következő parancsnak: 'chmod go=rx'?
  53. Mi a hatása a következő parancsnak: 'chmod rw=u proba.txt'?
  54. A 'pelda.txt' fájl jogosultsága a következő: rwx--x--x. Mit kell ahhoz tennünk, hogy mindenki futtatni tudja a fájlt?

Jótanácsok

Az alábbi kérdéseket azon hallgatóknak tettük fel, akik 2018/19 őszi félévben megbuktak progalapból, majd 2018/19 tavaszi keresztfélévben megcsinálták a tárgyat.

Mit üzennél azoknak, akik következő félévben veszik fel először a progalapot?
  • (fussatok) tanuljatok az első órától kezdve
  • Egy jó gyakorlat vezető nagyon fontos!
  • Ne ülj be úgy már az első órára se hogy nem programoztál még, ha egy hello world kiíratást meg tudsz csinálni még az első hét előtt akkor nyert ügyed van, mert ez a legbiztosabb alap
  • Akár nyáron kezdjenek kicsit ismerkedni a programozással. És attól még, hogy megy nekik ne szálljanak el mert itt inkább a bírót kell megérteni.
  • Az elejét kell meghúzni
  • Azt, hogy sokat gyakoroljanak, nézzenek videókat otthon, óráról-órára.
  • előtte egy hetet rászánni, hogy egy minimálisan képbe legyenek a C-vel
  • Elso 4 ZH-t nyomjak meg.
  • Első pár zh-t húzzák meg nagyon, mert azok ajándékpontok
  • Figyeljenek órán, csináljanak házit, gyakoroljanak otthon és tanuljanak.
  • Folyamatosan készülj minden órára.
  • Fussanak, amennyire messzire csak tudnak. Vicceltem.. Leginkább azt, hogy beszélgessenek azokkal akik mellettük ülnek, nagyon sokat számít az, ha nem egyedül kell gondolkodni egy feladaton. Nem tudom milyen menetrendben fognak tanulni, de nekem ez így sokkal jobban tetszett, hogy nemcsak másoltam a feladatokat, hanem nekem kellett megoldani őket órán. Ha erre nincs lehetőségük, akkor gyakoroljanak otthon, legalábbis írják meg otthon azt egyedül, amit órán vettek. Nézzék a progalapos videókat, szigorúan 1,25-ös gyorsítással, és ne közben, hanem utána írják meg egyedül is a programot.
  • Fussatok.
  • Gyakorlás, gyakorlás, gyakorlás!!
  • Gyakoroljanak sokat
  • Gyakoroljanak sokat! Ne adják fel ha becsúszik egy nulla pontos zh!
  • Gyakoroljanak, mert elég könnyen le lehet maradni.
  • Gyakorolni
  • Gyűrjék fel a gatya szárat, mert amit eddig tanultak semmi hozzá képest
  • Ha valamit nem értettek azonnal kérdezzétek meg mert ha az elején elvesztitek a fonalat akkor nagyon nehéz megérteni későbbi anyagrészt. Az első 5 zh aránylag egyszerű úgy hogy azokat írjátok meg jól ha a minimumra hajtotok és persze annyi gyakoroljatok amennyit csak lehetséges.
  • Hajrá!! Menni fog nektek is!
  • Hétről hétre tanulni, és ne bízzák el magukat.
  • Jó gyakorlat vezetőnél vegyék fel gyakorlatot
  • Kérjétek el a felsőbb évesektől az előző évi zh-kat és gyakoroljatok sokat azok segítségével.
  • Készüljenek fel rá már most
  • Kitartást. Sokat kell gyakorolni, hogy belerázódjanak.
  • Lesz nehezebb
  • Nagyon gyakoroljanak mert olyan a progalap mint a matek, vagy tudják vagy nem
  • Ne becsüljék alá a tárgy nehézségét.
  • Ne gondolják, hogy olyan egyszerű mint az első kb 2-3 órán
  • Ne ijedjenek meg attól, hogy az előadás más tematikát követ, mint a gyakorlat. Ha már az elején elvesznek, kérjenek segítséget, mert ha a legkönnyebb zh-k nem sikerülnek, akkor nagyobb eséllyel buknak meg.
  • Nem árt ha van előzetes tudás, és ha magadtól is tanulod mielőtt elkezdenéd
  • Nem elég mindig csak a minimum pont
  • otthon gyakoroljanak, ami érdekli nézzenek utána és annak is amit nem tud vagy nem ért
  • otthon nézzék át az egész c nyelvet
  • Rengeteg gyakorlás hiányában ne várjanak csodát a zh-kon. Az elejét kell meghúzni, mert a végén nemigen lesz már lehetőség pontokat szerezni, ha az elején sem ment.
  • Run you fools!!!!
  • Sok sikert hozzá ! :)
  • sok-sok gyakorlás, akkor van egy kicsi esély
  • Szinte csak az önszorgalmon múlik. Ha hajlandó vagy otthon is gyakorolni és nem csak átszenvedi a tanórát biztos, hogy sikerülni fog.
  • Tanuljanak és gyakoroljanak sokat, ne úgy mint én előző félévbe mikor sol vizsgának az anyagát kb utólag tanultam meg ;)
  • Tanuljatok
  • Több megbízható forrásból is tanulni.
  • Vegyék komolyan mert könnyen el lehet szúrni a tárgyat.
Milyen javaslataid lennének nekik? Mi segített téged a mostani félévben, illetve mit javasolnál nekik (vagy mit nem), hogy nekik elsőre sikerüljön?
  • Gyakorlás,gyakorlás,gyakorlás. Átvirrasztott éjszakák. Száz el nem rontott kód.
  • Hétről hétre készülni!!! Előző évek zhi, Gyakorlás gyakorlás gyakorlás
  • Bíró kiismerése, gyakorlás, akár néhány különóra ha az illető még nem programozott, rengeteg kitartás
  • youtube
  • Nálam az volt a baj, hogy elég sok más kurzusra is kellett hétről-hétre készülni, emiatt nem szántam rá elég időt otthon. Szerintem ez a legfontosabb, hogy ezt elkerüljék.
  • A legbelso sorba uljenek :D
  • Elejétől kezdve feküdjenek rá a gyakorlásra
  • Mostani félévben az segített, hogy előtte megbuktam így már csak ismétlés volt. Javaslat: bukjanak meg ők is. (nyílván nem :D )
  • Szerezz sok ismerõst, aki segít, ha elakadsz.
  • Az első 6 órára gyúrjanak rá, azt maxolják ki, utána amikor már benehezedik, akkor kevesebb pont is elég lesz egy egy zh-n (amit szerezni kell).
  • közös discord/messenger csoport,Tóth Zoltán youtube videók, gyakorlás,gyakorlás folyamatosan mert ha lemaradsz...meghalsz
  • Gyakoroljatok otthon.
  • Gyakorlás, gyakorlás, gyakorlás!!
  • Segítsetek egymásnak, és otthon gyakoroljatok sokat.
  • sok gyakorlás, ha valamit nem értenek kérdezzenek, ne tartsák magukban!
  • Gyakorlás,gyakorlás,gyakorlás
  • Gyakorolni
  • Nekem hetente 1-2x volt különórám egy főgólyámmal akinek köszönhetően megértettem a programozást na és persze a sok gyakorlás
  • Aki előtte nem kódolt annak nehéz lesz teljesítenie, azt javasolom hogy keresetek olyan embereket akik tudnak segíteni ha nem értesz valamit nekem is így sikerült felzárkóznom
  • gyakorolni!
  • Ha a beadott feladat nem jó, nem feltétlen veled van a baj, hanem arra figyelj hogy mit kér a bíró.
  • Sok gyakorlás
  • Ha valamit nem értetek, kérjetek segítséget bárkitől. Ha az elején valamit nem értesz ne halogasd hogy majd megérted, mert nem fogod megérteni, addig gyakorolj, keresgélj, kérdezz, amíg meg nem érted. Az első zh-kból szerezzek sok pontot! :D
  • több gyakorlás
  • Rendszeres gyakorlás
  • Nem elég bemagolni a parancsokat, gyakorolni kell!
  • Gyakorolj sokat, nem árt egy alap prog tudás
  • gyakorolj
  • Minden feladatot 1től egyig csináljanak meg és barátkozzanak mrg az angollal és a stackoverflow oldallal
  • Sokat gyakoroljanak otthon ,mert az órai gyakorlás nem feltétlen elég.
  • Gyakoroljanak, sokat. Kicsit olvassanak is utána akár.
  • Bár az alapoktól kezdünk, fontos lenne utána nézniük, hogy mire is vállalkoztak. Ha valamit nem értenek hiába néztek utána, kérjenek segítséget, mert ha nem teszik, egy idő után már azt sem fogják tudni mit nem értenek.
  • Csak magukra hagyatkozzanak, és nézzenek yt-on videókat, először az algoritmizálást tanulják meg lóhalálban
  • Sokat kell gyakorolni
  • Csinálják a házit
  • sok feladatat megoldása, több tapasztalt szerzése
  • Ne ijedjenek meg rögtön az elején a számonkéréseken. Bontsák részproblémákra az algoritmust, és ne az egésznek ugorjanak neki egyből. A legtöbb zh sokkal könnyebb, mint az ember első ránézésre gondolná.
  • Otthon is foglalkozzanak sokat a programozással. Gyakoroljanak sokat.
  • Mindig legyen valaki akitől segítséget lehet kérni, minél többet gyakoroljanak. A gyakorló és a házi feladatok fontosak ! Sokat lehet belőlük tanulni és ha annyi időt szán rá az ember, hogy azokat megcsinálja már az segít az órákra való felkészülésben.
  • gyakorlás
  • A fentebb említett 2 mondatban szerintem minden leírtam ami szükséges a sikeres első teljesítéshez, viszont annyit még elmondanék, hogy ne féljenek segítséget kérni és ha reggel 8kor van a gyakorlat, előző este ne menjenek bulizni.
  • gyakoroljanak sokat, főleg algoritmusokat
  • Össze dolgozni a többiekkel
  • Online feladatok megoldása saját maguktól.
  • Legyen tanulópárja mindenkinek.
Szerinted meg lehet csinálni elsőre is a kurzust, vagy ne is próbálkozzanak vele?
  • Aki még életében nem programozott, bármennyire is elkeserítő, nem hinném, hogy elsőre fogja tudni teljesíteni a kurzust. Maximum külső segítséggel.
  • Biztosan meglehet, csak én első félévben nagyon nem voltam tisztában az elvárásokkal, és hogy hogyan kell zh-t írnni
  • Gyakorlással egy kettes nagyon egyszerűen összehozható, kicsit több gyakorlással pedig a hármas is viszonylag könnyedén meglehet.
  • gyakveztől függ
  • Ha már korábban tanultál programozni akkor valószínűleg meg lesz
  • Hát, ha szerencséjük van, megoldható (x7)
  • Igen, de rengeteget kell dolgozniuk (x40)
  • Persze, nagyon könnyen teljesíthető (x6)
A bíró
  • a bíró a hibáival együtt szép, ki kell ismerni mit eszik meg és mit nem
  • A bíró egy nagyon nehéz eset, de egy idő után ki lehet ismerni (de nem haragszom meg ha leváltják valami jobbra)
  • bíróról beszélünk... csak okosabbnak kell lenni
  • Borzasztó, vannak zh -k ahol szinte lehetetlen részpontszámot elérni, ami nevetséges amikor 5-10 pontos a feladat.
  • Egyértelműen rossz ötlet a bíró. Megértem hogy muszáj,nem lehet egyenként kijavítani mindenkinek a beadott kódját. Viszont az soha egyetlen diáknak sem fog tetszeni hogy csak tökéletes./néha 1-2 értékben kicsit elcsúszott programra ad csak mirevaló pontot.
  • Gyakorlatilag egy tumor keletkezett a májamban tőle, pedig sok toxik anyagot élt már át.
  • Jól funkcionál, de ajánlott lenne egy pont nélküli teszt a biro használatának elsajátítására, még az első zh előtt.
  • Néha alul értékeli a helyes megoldást...
  • néhány helyen túl könnyű pl tavaly a szemantikai hibajavításnál csak a végére odaírtam a return hoz hogy -3 és adott rá 4 pontot :) de egyébként sok fejfájást tud okozni hogy mi lehet az adott teszteset
  • Szigorú
  • Vannak kínjai, de hozzá lehet szokni.

Utolsó frissítés: 2020-10-29 18:28:43