Szerdai nappalis csoport házi feladatai

progalap 1

  1. Bejelentkezés után a pandora gépen (a bejelentkezési directoryba, tehát ne válts könyvtárat) hozz létre egy tetszőleges nevű könyvtárat, és ezután oda dolgozz.
  2. A pandora gépen a /h/public/l/lenart könyvtárban van egy citrom nevű directory. Ebben, illetve alkönyvtáraiban találsz összesen 4 darab "a" betűvel kezdődő fájlt. Ezeket másold le magadnak (a létrehozott könyvtárba).
    Megoldó "algoritmus": a tanult parancsokkal szisztematikusan végignézed a citrom könyvtárat, és a benne lévő aldirectorykat.
  3. Az előbbi fájlok közül az alma.jpg fájl kivételével mindet csatold az emailhez, de előtte az alma.txt fájl első sorába valamelyik editorral írd a pandorás azonosítód (az alma.txt fájl tartalma maradjon meg, csak legyen egy új első sor).
    Segítség: amikor a pine programmal csatolsz egy fájlt, annak nevét a HOME directoryhoz viszonyítva kell megadni.

(6 pont) - ebbe mindig beleértem az esetleges dolgozat pontszámát is


progalap 2

A 2. és 3. feladatban szükséges a következők ismerete:
A pandora gépen mindenkinek a bejelentkezési könyvtárában (~) van egy public nevű alkönyvtára, ezt hívjuk az adott felhasználó publikus könyvtárának, mert minden ami itt van, bármely más pandora felhasználó számára látható. Hogyan?
Ehhez a könyvtárhoz más nem tud hozzáférni bejelentkezési könyvtárunkon keresztül (esetemben /h/b/bzsr/public néven), de egy másik útvonalon, a /h/public kezdetűn igen. A progalap 1/2. feladatban például szerepel "lenart" felhasználó publikus könyvtárának neve (/h/public/l/lenart).
A ~/public/public_html könyvtárba tett fájlok viszont már nem csak a pandora gép felhasználói számára láthatók, bárki megnézheti őket "kívülről" a http://people.inf.elte.hu/azonosito címen egy böngészőprogrammal (a most olvasott oldal is bzsr publikus könyvtárának egy aldirectoryjában van).

  1. Írj parancsok olyan sorozatát (parancsok egymás alatt), mellyel létrehozod a masodik.txt fájlt. A masodik.txt fájl a következőképpen nézzen ki: tartalmaznia kell a pandora gépen a /dev könyvtárban közvetlenül található fájlok neveit, illetve ennek a listának végére hozzáfűzve az éppen bejelentkezett felhasználókhoz tartozó sorokat.
  2. Csomagold ki egy üres directoryba a publikus könyvtáramban lévő sok.tar nevű állományt (a sok.tar ne legyen ebben a directoryban). Töröld le a kicsomagolt fájlok közül azokat, melyeknek neve "t" betűre vagy számjegyre végződik, és ezenkívül nevében még legalább 1 darab karaktert tartalmaz.
    A megmaradt fájlokat tömörítve csomagold be bead2.tgz néven.
    Segítség: Először próbáld csak a törlendő fájlok neveit kilistázni, és ha úgy látod hogy jó, akkor törölj. Amennyiben elrontottad, a letörölt fájlokat már nem tudod visszaállítani, kezd újra az egészet.
  3. Pandorás azonosítód kezdőbetűjének megfelelően hozz létre egy képet, hogy azt a http://people.inf.elte.hu/azonosito/rajzolas/kep.png címen meg lehessen nézni (ahol az "azonosito" a saját azonosítód).
    azonosító kezdőbetűje	szín		szélesség       magasság
    
    a-f			fekete		200		50
    g-k			kék		150		100
    l-r			zöld		250		70
    s-z			piros		120		180
    
    A kép létrehozásához mindössze 2 parancsra lesz szükség.
    Példa a parancsok használatára:
    ppmmake "#cccccc" 20 10
    ppmmake "#cccccc" 20 10 >szurke.ppm
    pnmtopng szurke.ppm >szurke.png
    
    Az első parancs létrehoz egy 20 képpont szélességű, 10 képpont magaságú szürke színű képet, és azt a képernyőre ömleszti. Épp ezért ezt nem használjuk, lásd: 2. parancs, ahol az eredményt a szurke.ppm nevű fájlba mentjük, amit a harmadik parancs png képformátumba konvertál, és ennek eredménye a szurke.png fájlba kerül.

    Picit bővebb magyarázat: "#cccccc" -hez hasonlóan (az idézőjelek lényegesek) megadható a kép színe "#RRGGBB" weblapokon is használt RGB kóddal. A ppmmake parancs eredményeképp létrejövő ppm formátumú képet a szokásos képnéző programok nem ismerik, ezért kellett konvertálni (pnmtopng paranccsal, de más paranccsal lehetne akár .jpg vagy .gif fájlt is létrehozni). A png formátumú képet a pandorán megjeleníteni csak "szövegesként" lehet, megnézni úgy tudod, hogy vagy lemásolod (scp-vel) saját gépedre, vagy a feladatban is kért helyre teszed, így egy böngészővel láthatod.
    Itt egy lila színű, 200x100-as képet találsz.
  4. A használt parancsokat írd a levéltörzsbe és csatold az elküldendő levélhez a bead2.tgz és masodik.txt fájlokat.
    A parancsokat célszerű nem emlékezetből begépelni, hanem kipróbálás után visszahívni őket, és bemásolni a levélbe.

(8 pont)


progalap 3

  1. Írj egyetlen UNIX parancsot, ami megadja a HOME directoryban közvetlenül lévő (tehát nem a HOME valamelyik alkönyvtárában) könyvtárak számát.
    Segítség: hogy egy fájl directory-e, a "hosszú lista" eredményében látjuk.
  2. Írj UNIX parancsot, ami megadja, hogy a házi feladat készítésének időpontjáig a pandorára bejelentkezett felhasználók azonosítói közül melyik a névsor szerinti első. De csak azokat a felhasználói neveket kell figyelembe venni, melyekben szerepel "g" betű. Tehát a parancsnak egyetlen felhasználói nevet kell kiírnia (illetve egyet sem, ha nem jelentkezett be addig olyan, akinek azonosítójában "g" szerepel).
  3. Írj UNIX parancsot, ami létrehoz egy 3 soros 3legtobb nevű fájlt. A fájl tartalma legyen a házi feladat készítésének időpontjában a pandorára bejelentkezett felhasználók azonosítóiban szereplő 3 leggyakoribb kisbetű, gyakorisági számukkal, gyakoriság szerint csökkenő sorrendben.
    Segítség: tr -d "\n" | sed "s/./&\n/g"
    Ezt a parancsot változtatás nélkül használd fel. A parancs az inputjában lévő kisbetűket soronként írja az outputjára (tehát használható csővezetékben, pipe-ban).
    Ha a who parancs eredménye így néz ki, ezzel tovább dolgozva ezt kell kapjad eredményként.
  4. Emailben kapsz tőlem (pandorás címedre) egy nevnap.txt fájlt. A fájl minden sorában egy dátum (HH-NN alakban) szerepel, mellette szóközzel elválasztva egy keresztnév. A fájl nincs sehogysem rendezve.
    Írj UNIX parancsot, ami kírja a nevnap.txt fájl alapján az szeptemberi (9. hónap) névnaposok nevét, névsorban az szept fájlba.
    Legkésőbb a gyakorlatot követő napon kell hogy megkapd az említett levelet, ha nem kaptál, akkor küldj magadról életjelet (ami tartalmazza a pandorás azonosítódat), bzsr-nek, a pandora gépre.
  5. Csatolni csak a szept nevű fájlt kell, továbbá írd a levéltörzsbe az előbbi feladatokban szereplő 4 parancsot (persze az EHA kódod alá!).

(6 pont)


progalap 4 (határidő: október 9. 24:00)

  1. Írj UNIX parancsfájlt szamol.sh néven, ami kiír egy számot. Ez a szám a PATH környezeti változóban található 2. programkönyvárban lévő fájlok száma legyen.
    Megjegyzés: mivel a PATH egy változó neve, értéke nem mindig ugyanaz, tehát természetesen a szükséges 2. programkönyvtár nevét is egy paranccsal kell megkapnod belőle.
  2. Írj UNIX parancsfájlt kulonbseg.sh néven, aminek első paramétere HH:MM-HH:MM alakú (ez 2 időpont kötőjellel elválasztva, óra:perc-óra:perc alakban). Az óra és perc is 2 számjeggyel van leírva, és a 2 időpontról feltesszük, hogy egy napon vannak, és az első hamarabb volt mint a második. Ellenőrizni semmit nem kell, (az időpontok 00:00 és 24:00 közti időpontok, formailag is helyesek). A parancsfájl írja ki a két időpont közt eltelt időt percben.
    Példafutás (10 óra és 25 perc a különbség a következő példában, ami 625 perc):
    bzsr@pandora:~$ ./kulonbseg.sh 10:23-20:48
    625
    
    Segítség:
    bzsr@pandora:~$ expr 00003 + 4
    7
    
    Tehát az expr parancs a 00003 szöveget számként (3) kezeli. Először csak a parancssorban próbálgasd a parancsokat (haladóknak ez a lépés kihagyható), akár úgy, hogy például egy 10:23-20:48 értékű KV nevű változóval dolgozol. Ha világosak a kapott esetleges hibaüzenetek, akkor írd meg a parancsfájlt, ami most már nem a KV változót dolgozza fel, hanem az 1. paraméterét.
  3. Írj UNIX parancsfájlt beszurele néven, aminek 1. paramétere egy közönséges szöveges fájl neve. A parancsfájl hozzon létre egy fájlt, aminek neve ugyanaz, mint az 1. paraméteré, a végéhez illesztve a ".txt" végződést. A létrehozott fájl első sorában legyen a "Date:" szöveg, majd szóközt követően a dátum, alatta 5 darab csillag. Ez a két sor után az eredeti (az 1. paraméterként adott fájl) sorai következzenek.
    Példafutás (ebben láthatod a beszurele.sh működését a proba nevű paraméterrel):
    bzsr@pandora:~$ cat proba
    elso sor
    alma
    dio
    korte
    bzsr@pandora:~$ ./beszurele.sh proba
    bzsr@pandora:~$ cat proba.txt
    Date: 2007. okt.  1.
    *****
    elso sor
    alma
    dio
    korte
    
    A megoldáshoz szükséged lehet a date parancsra, amit a pandora gépen próbálj ki (a parancsfájl elég ha a pandorán működik, a panda gépen más formájú a date parancs eredménye )
  4. bzsr@panda:~$ chmod +x szamol.sh
    bzsr@panda:~$ ./szamol.sh
    
    Az első paranccsal végrehajtási jogot adtunk a szamol.sh fájlra. A második paranccsal futtatjuk ezt a fájlt, a beszurele.sh és kulonbseg.sh hasznalatakor viszont meg kell adnunk paramétert (mint a fenti példákban). A parancsfájlokat próbáld ki, és csatold a levélhez a beszurele.sh, kulonbseg.sh és szamol.sh fájlokat.

(8 pont)


progalap 5 (határidő: okt. 16. 24:00)

Innentől kezdve a házikat megint a fi gépre (és csak oda!!!) kell küldeni.

  1. Írj UNIX parancsfájlt jogok.sh néven, ami létrehozza az 1. paraméterként kapott könyvtárat (de csak ha még nincs ilyen nevű könyvtár, egyébként írja ki, hogy "HIBA", és mást nem kell tennie), benne a 2. paraméterként kapott néven egy fájlt, aminek egyetlen sora legyen: a parancsfájl futtatójának felhasználói azonosítója.
    Továbbá a (2. paraméterként adott néven) létrehozott fájlra a következő jogosultságokat kell beállítania a parancsfájlnak:
    Csak a tulajdonos olvashatja.
    A tulajdonos csoportja és mindenki más is írhatja (csak a tulajdonos nem).
    Mindenki (a tulajdonos is) végrehajthatja, csak a csoport nem.
  2. Készíts parancsfájlt egyezo.sh néven, aminek pontosan 2 parametere van, mindkettő szöveg. A parancsfájl írja ki, hogy "IGEN", ha a két paraméter első karaktere megegyezik (tegyük fel, hogy a kis és nagybetű közt nem teszünk különbséget!), ellenkező esetben csak annyit írjon ki, hogy "NEM".
  3. Írj UNIX parancsfájlt igaze.sh néven, aminek 1. paramétere abc alakú, tehát 3 karakter hosszú. Ahol "a" r vagy -, "b" w vagy -, "c" pedig x vagy - lehet csak. (Tehát lehetséges paraméterek: rwx, rw-, r-x, ...)
    A parancsfájl írja ki az "IGAZ" illetve "HAMIS" valamelyikét, attól függően, hogy igaz-e, hogy az 1. paraméterben az r, w, x "jogok" közül pontosan 2 található meg.
  4. Csatold a levélhez a jogok.sh, egyezo.sh és igaze.sh fájlokat (miután kipróbáltad, hogy működnek).

(8 pont)


progalap 6 (határidő: okt. 23. 24:00)

  1. Írj UNIX parancsfájlt legalso.sh néven, ami kiírja a PATH változóban szereplő programkönyvtárak közül annak a (teljes) nevét, amelyik a gyökérkönyvtárhoz viszonyítva legmélyebben van. Másképp fogalmazva: aminek a legtöbb / van a teljes elérési útvonalában.
  2. Írj UNIX parancsfájlt utolso.sh néven, ami paraméterei közül kiírja az utolsó olyat, ami "a" vagy "A" betűvel kezdődik. Ha nincs ilyen paramétere, akkor semmit ne írjon ki.
  3. Tesztelő script
    bzsr el van maradva a házi feladatok javításával, segíts neki. A pandora gépen találsz egy /h/public/b/bzsr/hf/hazi3.tar nevű fájlt, ezt csomagold ki Magadnak (lehetőleg egy olyan directoryba, ahol még nincs progalap4_HF nevű fájl):
    tar -xvf /h/public/b/bzsr/hf/hazi3.tar
    A kicsomagolt progalap4_HF könyvtárban újabb alkönyvtárakat találsz, egy korábbi házi feladat (progalap 4) alkalmával beküldött megoldásokat, úgy hogy minden beküldőnek megfelel egy könyvtár. Egy könyvtárnév egy felhasználónak a neve, más könyvtárak nincsennek. A könyvtárakban lévő kulonbseg.sh nevű fájlokat (ha van), kell megnézned, hogy jól működnek-e.
    A progalap4_HF könyvtárban 2 közönséges fájlt is találsz. Az egyik neve kulonbseg.bzsr, ami jó megoldása a korábbi házi feladatnak. A másik fájl a teszt.sh, ezt kell módosítanod és majd beküldened. A teszt.sh programnak a következőt kell tudnia:
  4. Csatold a levélhez a legalso.sh, utolso.sh és teszt.sh fájlokat.

(7 pont)


progalap 7 (határidő: nov. 6. 24:00)

  1. A Túrázók Társasága egy fájlban tárolja, hogy tagjai közül ki hány km-es távú túrát tett meg ebben az évben. A fájl minden sorában egy túrázó neve, majd kettőspontot követően egész számok vannak, a számok egymástól szóközzel elválasztva. Például egy lehetséges sor:
    Borsi Zsolt:50 58 25 26
    Írj parancsfájlt turazok.sh néven, aminek 1. paramétere egy ilyen sorokat tartalmazó fájl. A parancsfájl outputja legyen egy HTML dokumentum, ami táblázatos formában (2 oszlop, és annyi sor ahány túrázó volt) tartalmazza, hogy ki hány túrán vett részt ebben az évben.

    Egy HTML dokumentumban a táblázat tartalma <table> és </table> cimkék, úgynevezett tag-ek között van. A táblázat sorokból, a sorok cellákból állnak. A sorokat a HTML dokumentumban <tr> és </tr> tag-párok fogják közre. Egy soron belül lévő minden cellát pedig egy-egy <td> és </td> tag-pár fog közre.

    Amennyiben nem láttál még ilyet, itt egy példa (ebben a táblázatnak 1 képpont vastagságú kerete van, ez a table kulcsszó után írt border="1"-gyel érjük el):
    <table border="1">
    <tr><td>Nagy Katalin</td><td>2</td></tr>
    <tr><td>Telek Imre</td><td>5</td></tr>
    <tr><td>Borsi Zsolt</td><td>4</td></tr>
    <tr><td>Lakatos Robi</td><td>0</td></tr>
    <tr><td>Gazdag Attila Tibor</td><td>6</td></tr>
    <tr><td>Kiss Norbi</td><td>2</td></tr>
    <tr><td>Szalai Ferenc</td><td>1</td></tr>
    </table>
    
    A HTML dokumentum a táblázat mellett tartalmazza még a kötelező <html>, <head> és <body> tag-eket, illetve ezek lezáró párjait. Továbbá a <head> tag-en belül a <title> és </title> tag-et, ami a közé írt szöveget megjeleníti a böngészőprogram ablakának címsorában (annak az oldalnak az esetében, emit most éppen nézel ez a szöveg "Programozási alapismeretek"). Ez legyen a paraméterként kapott fájl neve.

    Fontos:

  2. Egy banki nyilvántartást tartalmazó fájl minden sora vagy egy ügyfelet, vagy egy tranzakciót ír le. Egy ügyfélsort követő tranzakció sorok az adott ügyfél pénzkivételét illetve befizetéseit jelentik. Persze lehet olyan ügyfél, akinek számláján semmilyen pénzmozgás nem volt, akkor ezt az ügyfél sort a fájlban nem követik tranzakció sorok, hanem egy másik ügyfél sor követi.

    Egy ügyfél sor a következő alakú kell legyen:
    U XXX-YYYYY N
    Tehát a sor elején egy "U" karakter van, majd szóközt követően az ügyfél azonosító része (ez a mintában XXX-YYYYY), majd egy szóközt követően az adott ügyfélszámla egyenlege (a mintában N). Ahol XXX 3 tetszőleges nagybetűből áll, YYYYY pedig 5 darab tetszőleges számjegy. Az N pedig egy pozitív egész szám (a számlán nem lehet tartozás). N lehet olyan, hogy 0-val kezdődik, sőt olyan is, hogy csak 0 számjegyekből áll.

    Egy tranzakció sor a következő alakú kell legyen:
    T zN
    Tehát a tranzakció sorok "T" betűvel kezdődnek, majd egy szóközt követően vagy "p" vagy "m" karakter van (plusz/minusz, ezt jelöli z a mintában), majd közvetlenül mögötte egy tetszőleges pozitív egész (N, ennek első karaktere viszont nem lehet 0).

    Készíts parancsfájlt bank.sh néven, ami az első paramétereként adott fájlról eldönti, hogy az formailag helyes banki nyilvántartás-e.
    Formailag helyes banki nyilvántartást tartalmaz egy fájl, ha
    Amennyiben ez a 3 feltétel teljesül, a parancsfájl "HELYES"-t írjon ki, egyébként jelezni kell a hiba okát: "FORMAILAG ROSSZ SOROK" vagy "NEM UGYFEL VAN AZ 1. SORBAN".
    Példaként itt egy formailag helyes banki nyilvántartás.

    Tipp: azt hogy a fájl csak formailag helyes ügyfél és tranzakció sorokat tartalmaz tudod ellenőrizni úgy, hogy külön a formailag helyes ügyfél ill. a formailag helyes tranzakció sorok számának összege meg kell egyezzen a fájl sorainak számával.
    Az [A-Z][A-Z][A-Z][A-Z][A-Z] reguláris kifejezés kiváltható az [A-Z]\{5\} kifejezéssel (de ez a grep manjában is benne van).

  3. Írj parancsfájlt frissit.sh néven, aminek első paramétere egy formailag helyes banki nyilvántartás. A parancsfájl aktualizálja az ügyfelek számlaegyenlegét, vagyis a standard outputra kell írni az ügyfél sorokat benne az ügyfelek pillanatnyi számlán lévő összegeikkel.
    Ha tudod, akkor a standard outputra írd azt az ügyfél sort, amelyben a számlaegyenleg negatív lett.
    Az előbbi példafájlt használva 1. paraméterként így nézzen ki az eredmény.

    Tipp: egyesével nézd az 1. paraméterként adott fájl sorait, és ha az egy tranzakció sor, akkor attól függően, hogy kivétel vagy befizetés történt (p/m), a megjegyzett azonosítójú ügyfél aktuális számlaösszegét módosítsd, de kiírni az eredmény sorok közé csak akkor kell, ha már nincs több tranzakciója; tehát egy új ügyfelet olvastunk. Figyelj a legelső és legutolsó ügyfélre!

(12 pont)


progalap 8 (határidő: nov. 13. 24:00)

  1. Írj parancsfájlt van_e.sh néven, ami "IGEN"-t ír ki (idézőjelek nélkül), ha van olyan paramétere, amiben több betű van, mint számjegy. Ellenkező esetben "NEM"-et ír ki.
  2. Írj parancsfájlt vege.sh néven, ami bzsr publikus directoryjából, annak bármely mélységéből kilistázza azoknak a közönséges fájloknak a neveit (directorykét nem), melyek neve nem hosszabb 6 karakternél. A névnek nem része a könyvtárnév, tehát ha egy fájl neve például ./alma/dio/korte/citrom.txt, akkor csak a citrom.txt (10 karakter) hosszát kell figyelembe venni.
    Ehhez használd fel (nem kötelező, ha gondolod módosítsd) a következő parancsot, ami "hosszú listát" ad bzsr publikus könyvtárának minden fájljáról:
    find /h/public/b/bzsr -name "*" -exec ls -l {} \;
    
  3. A progalap ZH-k eredményét egy olyan fájlban tárolom, melynek minden sorában egy hallgató neve, EHA kódja, emailcíme, pontszámai vannak, egymástól kettősponttal elválasztva. Emailcím, vagy a pontszámok hiányozhatnak (utóbbi akkor, ha valaki nem írt ZH-t). A pontszámok mezőben egész számok vannak (esetleg "-", ha valaki egy adott feladattal nem foglalkozott). Az ilyen fájlok neve csoportnév.zhN alakú (ahol a fájlnév vége egy szám), például pa10.zh1 (ProgAlap 10-es csoport, 1. ZH)
    Írj UNIX parancsfájlt torol.sh néven, ami törli az első paraméterként adott fájlban lévő pontszámokat, és az eredményt kivételesen nem a standard outputra írja, hanem az első paraméterként megadott fájlhoz hasonló nevű, 1-gyel megnövelt ZH sorszámú fájlba. A pontszámokat megelőző kettőspontot nem kell törölni, hogy ne legyen pluszmunka azt majd visszaírni!
    Minta (figyelj a fájlnevekre is) input: pa10.zh2  output: pa10.zh3
    Feltehetjük, hogy a fájlnévbeli N egyjegyű szám (tehát 1<=N<=9), mert nincs 9 ZH-nál több egy csoportnak egy tárgyból.
  4. Írj UNIX parancsfájlt rendszam.sh néven, ami ha 1. paramétere egy formailag helyes autó-rendszám, akkor nem csinál semmit, egyébként kiírja a paramétert kerekzárójellel bezárójelezve.
    Formailag helyes egy rendszám, ha XXX-YYYY alakú, tehát 3 tetszőleges nagybetű, majd kötőjelet követően 4 tetszőleges számjegy alkotja. Mintafutás:
    bzsr@pandora:~$ ./rendszam.sh HJK-0230 #nem csinál semmit
    bzsr@pandora:~$ ./rendszam.sh HJg-05230 #ez rossz rendszám
    bzsr@pandora:~$ (HJg-05230)
    

(5 pont)