Gyakorló feladatok - UNIX

Tartalomjegyzék

 
Lehetôség van a megoldások beküldésére is.
 

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@AUGUSTA>

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

  5. Állítsd át a promtodat 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 az valerie gépen, a /public/$(echo ~csa)/unix directoryban, a compress programmal tömörített radio.Z 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 csak az egyikben van meg az 1. és 2. directoryban. Amelyik mindkét helyen megvan, annak az idôben frisebb 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:
    • A $L/NINCS1 nevû fájlba tegye azoknak a vizsgált fájloknak a nevét, amik a d1 directoryból hiányoznak.
    • A $L/NINCS2 nevû fájlba tegye azoknak a vizsgált fájloknak a nevét, amik a d2 directoryból hiányoznak.
    • A $L/AZONOS nevû fájlba tegye azoknak a vizsgált fájloknak a nevét, amik mindkét directoryban szerepelnek, és a tartalmuk azonos.
    • A $L/KULONBOZIK nevû fájlba tegye azoknak a vizsgált fájloknak a nevét, amik mindkét directoryban szerepelnek, de a tartalmuk különbözô. Ezekrôl a fájlokról a $L/DIFF nevû fájlba gyûjtse össze az eltéréseket is, mégpedig abban a formában, ahogy azt a diff nevû parancs eredményezi.
    (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!)
 

Kidolgozott feladatok


Csizmazia Albert csa@ullman.inf.elte.hu