Gyakorló feladatok - UNIX

Tartalomjegyzék

 

Korábbi évek vizsgafeladatai

  1. Írj olyan "ls" parancsot, amelyik csak a mai napon keletkezett vagy változtatott "reguláris" fájljaid listáját adja. (kidolgozva)

  2. Írj olyan "ls" parancsot, amelyik csak a directory-kat listázza. Paraméterként megadható legyen a könyvtár, amit listázni akarunk.

  3. Írd át úgy a LOGIN SCRIPT-edet, hogy a promptod a következő legyen: te@pandora> (ahol te a user azonosítód)

  4. Derítsd ki, hogy hány diszk van az augusta-ban.

  5. Állítsd át a promptodat a következőre: VIZSGA>

  6. Írd ki, hány felhasználónak van NEM bash shell-je.

  7. Az időtől függően írd ki a következő szöveget: Jó reggelt, Jó napot, Jó estét

  8. Írd ki azoknak a valódi nevét, akik éppen most vizsgáznak. (Az asza*.elte.hu-rol vannak bejelentkezve) Írd ki azt is hányan vannak.

  9. Írj egy shell script-et, ami megmutatja, hány Robert keresztnevű felhasználó van. (Nem a bejelentkezettek közül, hanem az összes felhasználóból)

  10. Keresd meg a /g alatti könyvtárban az összes a-val kezdődő, .c kiterjesztesű file-t.

  11. Kiknek van file-ja a /ftp directoryban? (cut)

  12. Írj egy shell script-et, ami a grep parancs man-jából kiírja a fejezet-címeket.

  13. Hány user van bejelentkezve? Mi van a többször bejelentkezettekkel ? (Hányan vannak?)

  14. Írd ki az ABC-ben legutolsó USER valódi nevét. (Az összes közül, nem csak a bejelentkezettek közül.)

  15. Írj egy shell script-et, aminek két paramétere van. A script számoljon el egyesével az első paramétertől a másodikig. Közben írja ki a számokat.

  16. Írj olyan script-et, amely kiírja a csoportod nevét.

  17. Melyik az a processz, amelyik a legtöbb példányban fut most?

  18. Írd át a login script-edet úgy, hogy bejelentkezéskor kiírja, hányan dolgoznak a gépen

  19. Hány user futtat valamilyen a shell-től eltérő processz-t?

  20. Kiknek van sh shell-jük az augusta-n? Rendezd ABC-be.

  21. Hány usernek van bash shell-je?

  22. Legrégebben bejelentkezett user neve.

  23. Írj egy shell script-et, ami hibajelzést ad, ha nem pontosan 3 paramétere van. Ha 3 paramétert kapott, írja ki őket fordított sorrendben.

  24. Írj egy shell script-et, amely létrehoz a könyvtáradban egy vizsga, majd abban egy czaby es abban egy seci könyvtárat. Adj jogot, hogy bárki tudja ezeket írni es olvasni.
 

Rádióműsorral kapcsolatos feladatok

A következő feladatok egy sok zenét játszó rádió - kissé hiányos - éves adataihoz kapcsolódnak. Az adatok a pandora gépen, a /h/public/c/csa/public_html/ezaz directoryban, a gzip programmal tömörített radio.gz fájlban vannak. Ne csomagoljuk ki a fájlt - csak a zcat (stb) programokkal használjuk, mert kicsomagolva kb. 8 MB. A fájl minden sora egy műlejátszás adatait tartalmazza, az alábbi formában:

mezősor-pozícióformátum
a mű címe1-40szabad szöveg
a mű szerzői41-80szabad szöveg
a mű előadói81-120szabad szöveg
a mű kiadója121-129szabad szöveg
a mű időtartama130-134'mm,ss' alakú (mm=perc, ss=másodperc)
a mű nyelve135-144szabad szöveg
lejátszás dátuma145-149'MM.DD' alakú (MM=hónap, DD=nap)
lejátszás időpontja150-154'hh:mm' alakú (hh=óra, mm=perc)
játszás időtartama155-159'mm,ss' alakú (mm=perc, ss=másodperc)

  1. Egy művet az első 3 adat azonosít. Döntse el, hogy az alábbiak közül melyik azonosítja szintén egyértelműen az összes művet. (Természetesen az adott adatfájl esetén.)
    a mű címe
    cím+szerzők
    cím+előadók

  2. Keresse meg az azonos című, különböző műveket. Melyik fordul elő a legtöbb szerzővel ?

  3. Keresse meg az azonos című és szerzőjű, különböző műveket.

  4. Keresse meg azokat a műveket (ha vannak ilyenek), amiket egy nap többször is játszottak. (kidolgozva)

  5. Készítse el a művek top10-es listáját, azaz keresse meg a 10 legtöbbször játszott művet.

  6. Készítse el az előadók illetve szerzők top10-es listáját.

  7. Készítse el a napok top10-es listáját, azaz keresse meg azt a 10 napot, amikor a legtöbb műlejátszás történt.

  8. Keresse meg azt a 10 napot, amikor a legkevesebb (de nem 0) műlejátszás történt.

  9. Készítse el a napok olyan top10-es listáját, ami a lejátszott művek játszott összhosszán alapul.

  10. Döntse el, van-e olyan hónap, aminek az adatai hiányoznak a fájlból. Ha van, melyik ez a hónap.

  11. Döntse el, van-e olyan hónap, aminek az adatai nem hiányoznak, de hiányosak. (Hiányzik valamelyik nap. A februárt 28 naposnak vegyük.) Ha vannak, melyek a hiányzó napok ?

  12. Készítse el a műnyelv szerinti statisztikát.
    Rövid statisztika: hány ilyen nyelvú mű ill. elhangzás van.
    Hosszú statisztika: nyelvenként a műveket tartalmazza, elhangzási számmal együtt.

  13. Készítse el az előzőhöz hasonló módon a kiadói statisztikát.

  14. Listázza ki a "LATIN" nyelvű művek címét.

  15. Számítsa ki, hogy a lejátszott művek ill. a lejátszások hány %-a "MAGYAR" nyelvű. (kidolgozva)

  16. Hány olyan mű van, aminek a címében a LOVE és a YOU string is előfordul ?

  17. Listázzon ki egy adott napot lejátszási idősorrendben.

  18. Listázza ki egy adott című mű elhangzásait idősorrendben.

  19. Listázza ki egy adott nap olyan időszakait, amikor nem zenét játszott a rádió.

  20. Készítsen olyan összesító listát, amin a
    műcím
    előadók
    szerzők
    elhangzási szám
    ebben a sorrendben szerepelnek.

  21. Készítse el a műcímekben szereplő kölönböző szavak top50-es listáját. (Az elhangzások száma ne legyen benne figyelembe véve.) (kidolgozva)

  22. Keresse meg azokat a műveket - ha vannak ilyenek - amiknek a szerzői és előadói azonosak.

  23. Keresse meg azokat a műveket - ha vannak ilyenek - amiknek a lejátszási ideje nem a mű teljes időtartama. Van-e köztük olyan, ahol a lejátszási idő a nagyobb ? (kidolgozva)

  24. Ellenőrízze, hogy nincs-e olyan adathiba, ami szerint egyidőben két művet játszottak a rádióban.
 

További vegyes feladatok

  1. Írjon shell scriptet, ami a groff parancs használata nélkül kiszedi a
    man parancsnév >fájlnév
    módszerrel előállított fájlból a képernyővezérlő jeleket.

  2. Készítsen parancsfájlt, ami egy DOS-ékezetes fájlt html-ékezetes-re konvertál.

  3. Készítsen parancsfájlt, ami egy html-fájlt DOS-ékezetes-re konvertál.

  4. Készítsen parancsfájlt, ami egy szövegfájlban minden DOS-/Windows-/html-ékezetes jelet a megfelelő ékezet nélkülire konvertál.

  5. Készítsen parancsfájlt, ami egy html fájlból elhagyja a vezérlő (vagyis a < és > jeleket és az azok közötti részt, továbbá DOS-/Windows-ékezetekkel helyettesítik a html-ékezeteket, és visszaállítják a "látható" < és > jeleket.

  6. Írjunk olyan parancsfájlt, ami a paramétereit fordított sorrendben a standard outputra írja. (A paraméterek száma nem kötött.)

  7. Mutassuk meg egy directory összes textfájljának első sorát, megelőzve a fájl nevével, és egy azt követő kettősponttal és helyközzel.

  8. Egy "dir1" directoryra (nem a sajátunk a directory) a következő parancsok
    cd dir1
    ls
    hibátlanul működnek. Az ezt követő
    ls -l
    valamint az
    rm *
    parancsok mindegyike 'Permission denied' (Nincs hozzáférési joga) hiba- üzenetet ad. Milyen hozzáférési jogosultságokra következtethetünk ebből? Miért?

  9. Az alábbi módon létrehozzuk a file1, file2 és file3 fájlokat:
          echo "file1 >file2" >file3
          chmod 644 file3
          ln file3 file2
          chmod 711 file2
          cp file2 file1
          chmod 660 file1
           
    Milyenek az egyes fájlok "rwx" jogosultságai ill. mi a fájlok tartalma a parancs-sorozat végén?

  10. Mit ír a képernyőre az alábbi shell script?
          rm -r $HOME/xyz 2>/dev/null
          mkdir $HOME/xyz
          cd $HOME/xyz
          touch .profile
          ALMA=/usr/bin
          echo .prof* .exrc $ALMA
          echo ".prof* .exrc $ALMA"
          echo '.prof* .exrc $ALMA'
          echo .prof* \ \ .exrc\ \ $ALMA
          echo ".prof* \ \ .exrc\ \ $ALMA"
          echo '.prof* \ \ .exrc\ \ $ALMA'
           

  11. Mit ír a képernyőre az alábbi (hibátlanul működő) parancsfájl?
          case $# in
            0) ;;
            *) echo $1; shift; $0 $*;;
          esac
           
    Helyettesítse a rekurziót iterációval !

  12. Irjon parancsfájlt, ami a paramétereit megvizsgálva mindegyiket a képernyőre írja és mellé írja a neki megfelelőt az alábbi szövegek közül:
          : ez egy directory
          : ez egy fájl
          : nincs ilyen directory vagy fájl
           

  13. Irjon CP nevű parancsfájlt, ami a
    CP f1 f2 ... fn dir
    hívás hatására a cp parancs használata nélkül oldja meg a
    cp f1 f2 ... fn dir
    parancs feladatát. Paraméterellenőrzést is végezzen a parancs (amennyit tud).

  14. Mi ír a képernyőre az alábbi - PARANCS1 nevű - parancsfájl a következő hívások hatására.
    PARANCS1 alma
    PARANCS1 alma dió
    PARANCS1 alma dió mogyoró
    PARANCS1 alma "dió mogyoró"
          case $# in
           2) : ;;
           *) echo 2 paramétert kérek; exit;;
          esac
          cat <<ITT_A_VEGE >/tmp/f12
          # Ez a script hatodik sora
            A parancs 1. paramétere: \$1 = $1
            A parancs 2. paramétere: \$2 = $2
          ITT_A_VEGE
          more /tmp/f12
           

  15. Irjunk parancsfájlt, aminek 3 paramétere 3 directory neve. A 3. directory-t hozzuk létre, ha nem létezik, ha viszont létezik, először töröljük belőle az összes fájlt. Ezután tegyük be a 3. directoryba az 1.-ből azokat a fájlokat, amik a 2.-ban nem fordulnak elő. Lehetőleg ne változzon a 3. directoryba került fájlok dátuma.
    Irjon egy másik parancsfájlt, ami a képernyőn bekéri az előző parancs paramétereit, és elindítja azt.

  16. Irjunk parancsfájlt, ami egy beadott "string" összes előfordulását megadja az aktuális directory összes "text"-fájljában. ("file" parancs)

  17. Irjunk parancsfájlt, aminek 3 paramétere 3 directory neve. A 3. directory-t hozzuk létre, ha nem létezik, ha viszont létezik, először töröljük belőle az összes fájlt.
    Ezután a 3. directoryba tegyünk be minden fájlt, ami az 1. és 2. directorynak csak az egyikében van meg. Amelyik mindkét helyen megvan, annak az időben frissebb változata kerüljön a 3. directoryba. Lehetőleg ne változzon a 3. directoryba került fájlok dátuma.
    Irjon egy másik parancsfájlt, ami a képernyőn bekéri az előző parancs paramétereit, és elindítja azt.

  18. Irjon parancsfájlt, ami a paraméterként adott két directory közül az elsőnek a legrégebbi 10 fájlját összehasonlítja a másiknak az ugyanilyen nevű fájljaival, és megmondja, hogy egyenlők-e a megfelelő párok.
    Irjon egy másik parancsfájlt, ami a képernyőn bekéri az előző parancs paramétereit, és elindítja azt.

  19. Irjunk parancsfájlt, ami a felhasználótól addig kér be adatot, amig kap. (Vagyis ENTER leütésére befejeződik.) Minden beadott "adat"-ról megmondja a parancs, hogy az aktuális directoryban van-e ilyen nevű fájl vagy directory.

  20. Irjunk parancsfájlt, ami a felhasználótól addig kér be adatot, amig kap. (Vagyis ENTER leütésére befejeződik.) Ha directory nevét kapja a parancs, írja a directory nevét a képernyőre. Ha fájl nevét kapja a program, írja a fájl directoryjának a nevét a képernyőre. A parancs működjön az aktuális directory fájljaira ill. aldirectoryjaira, még jobb, ha az aktuális directory-val kezdődő directory részfára is működik.

  21. Irjon WHEREIS nevü parancsot, ami a whereis parancs használata nélkül megoldja a következő feladatot (nem pontosan ez a whereis feladata): A paraméterként beadott fájlról megmondja, hogy a (mindenkori) PATH környezetváltozóban adott directoryk melyikében található (esetleg többen is!).
    Irjon egy másik parancsfájlt, ami a képernyőn bekéri az előző parancs paramétereit, és elindítja azt.

  22. Irjon parancsfájlt, ami a paraméterként adott két directory közül az elsőnek a legújabb dátumú 10 fájlját összehasonlítja a másiknak az ugyanilyen nevű fájljaival, és megmondja, hogy egyenlők-e a megfelelő párok.
    Irjon egy másik parancsfájlt, ami a képernyőn bekéri az előző parancs paramétereit, és elindítja azt.

  23. Irjon parancsfájlt, ami a gépen éppen dolgozó felhasználók közül megadja annak a nevét, aki a legtöbb terminálon jelentkezett be. (ha több ilyen van, egyet küzülük)

  24. Irjon fel parancso(ka)t, amivel a "balta" szó összes olyan változata előállítható (a képernyőre írva), ami a "balta"-tól csak abban tér el, hogy bármelyik kisbetű helyén a megfelelő nagybetű áll. (balta, Balta, ... BALTA) (kidolgozva)

  25. Irjunk parancsfájlt, ami a képernyőn beadott parancsról "man" help-et ad ki, a felhasználó választása szerint vagy a képernyőn vagy az aktuális directorynak a beadott paranccsal megegyező nevű fájljában.

  26. Irjunk parancsfájlt, ami a gépen levő összes "user" keresztneveiből álló "utónév" jegyzéket ad ki, a felhasználó választása szerint vagy a képernyőn vagy az aktuális directorynak a felhasználó login nevével megegyező nevű fájljában.

  27. Irjunk parancsfájlt, ami egy beadott "user" login névről megmondja, hogy van-e ilyen felhasználó a gépen, és most éppen be van-e jelentkezve, és ha igen, akkor melyik terminálon.

  28. Mi az alábbi parancsfájl részlet feladata? (A "read" parancs exit státusza akkor nem 0, ha fájl vége jelet - a billentyűzetről CTRL+D-t - kap inputként)
          rm $L/alma 2>/dev/null
          while read alma
            do
              echo $alma >>$L/alma
            done
          
    Milyen egyszerűbb megoldást javasolna ugyanerre a célra az előbbi helyett?

  29. A grep parancs -i opciója azt jelenti, hogy kis- és nagybetű között nem tesz különbséget a keresésnél. Irjon fel olyan grep parancsot, ami az "alma" szót keresi ilyen módon az aktuális directory összes fájljában, és nem használja a -i opciót.

  30. Mi a
    trap 'rm /tmp/file*' 0
    parancs hatása?

  31. Mi az alábbi parancsfájl részlet "EREDMENY"-e?
          STRING=$1; EREDMENY=IGEN
          while [ x$STRING != x ]
            do
              case $STRING in
                [0-9]*) ;;
                     *) EREDMENY=NEM; break;;
              esac
              STRING=`echo $STRING|tail +2c`
            done
          echo $EREDMENY
          

  32. Mit ír a képernyőre az alábbi parancs sor:
          grep -v "^ " file1 | cut -c1-12 | sed "s/ *$//" | sed "s/  */\./"
          
    ha a "file1" file az alábbi két "--------------" sor közötti rész.
          ---------------------------------------------
           Volume in drive H has no label
           Volume Serial Number is 2567-1BF6
           Directory for H:/
        
          sp       arj    871711 10-01-1996   9:00a
          tanszek  doc     28160 10-14-1996   2:29p
          gzip     exe     39910 10-19-1996   9:46a
          vi       txt      3742 10-27-1996   9:04p
          megacomz         39667 01-22-1997  12:14p
          prognyil doc     37888 03-03-1997  12:33a
                  6 file(s)        1 021 180 bytes
                                      30 720 bytes free
          ---------------------------------------------
          

  33. Irjon parancsfájlt, ami a "basename" parancs használata nélkül a képernyőre hozza a paramétereként megadott teljes fájlnévből a directorynevek nélküli fájlnevet. (pl. /u/tmp/lajos/file1 esetén "file1"-et)

  34. Irjon parancsfájlt, ami az awk parancs segítségével valósítja meg az alábbi parancsok alapvető funkcióját:
    cat
    head
    nl
    line (= `head -1`)
    cut
    tail

  35. Irjon parancsfájlt, aminek egyetlen paramétere egy (általában hosszú) string. A stringben nincs szóköz, egymástól & jellel elválasztott "név=érték" alakú rész-stringekből épül fel. A parancsfájlnak az a feladata, hogy a "név értek" párokat tegye egy kétoszlopos html táblázat soraiba. (Ilyen inputot kap az ún. cgi-program a html böngészőtől input FORM kitöltése és elküldése után.)

  36. Irjon SHOWFONT nevű parancsfájlt, ami a [33-255] intervallumba eső kódokhoz tartozó jeleket a képernyőre írja. (Lehetőleg egy képernyőn elférjen!) (A Linuxban levő showfont parancshoz képest az output annyival legyen több, hogy tartalmaznia kell a kódértékeket is decimálisan.)

  37. Irjon parancsfájlt (szűrőt), ami egy szöveg sorainak karaktereit jobbról-balra sorrendben listázza ki. (Azaz minden egyes sort a - függőleges - tengelyére nézve tükröz.) (kidolgozva)

  38. Irjon center nevű parancsfájlt (szűrőt), ami egy szöveg sorait a képernyőn középre helyezi. Listázza ki vele a gépen user_id-vel rendelkező felhasználók nevét. (kidolgozva)

  39. Irjon parancsfájlt (szűrőt), ami egy szöveget a "vízszintes tengely"-ére nézve tükröz. (Azaz fordított sorrendben listáz.) (kidolgozva)

  40. Irjon parancsfájlt, amivel a mail parancs használata nélkül nézegethetjük a leveleinket. (kidolgozva)

  41. Irjon parancsfájlt, aminek az első 2 paramétere két directory neve. (Ezekre d1 ill. d2-vel hivatkozom.) Ha vannak további paraméterei, akkor azok fájlnevek, és azokkal dolgozzon a parancs, ha nincsenek, akkor az első directory összes fájljával. A parancs feladata a vizsgált fájlok 4 csoportba osztása az alábbiak szerint: (kidolgozva)

  42. Irjon parancsfájlt, ami a paraméterként kapott szövegfájl sorait - amik magyar ékezetes betűket is tartalmaznak - magyar ABC sorrendbe rendezi. (Megoldhatjuk a feladatot egy konkrét - pl. ISO-8859-1 - fontra is. Gondoljunk a kis és nagybetűkre is!)

  43. Egy script feladata az, hogy az X-Windowsban használható összes különböző színnel - mint háttérszínnel - nyisson egy xterm ablakot, aminek fejlécében a szín RGB összetétele és összes lehetséges (angol) megnevezése látszik. A felhasználó beírhat egy (esetleg üres) sort az ablakba, és ENTER-rel eltüntetheti az ablakot. (kidolgozva)
 

Kidolgozott feladatok


Csizmazia Albert csa@inf.elte.hu