Bash quests
Sissejuhatus
Bash quests annab võimaluse teha bash skriptimise kodutööd ka neile, kellel teemat pole. Skript tuleb panna Tudengi enda wiki lehele. Punktid saab esimene, kes antud questi täies mahus valmis sai. Kui lahendus pole rahuldav saab punktid järgmine OK lahenduse looja.
Kui quest valmis, siis pane link questi juurde (nagu näites)
Queste tuleb pidevalt juurde.
Quest 0 - Näide
Teha skript, mis ei tee midagi asjalikku, kuid väljasta sõna BÖÖÖ
Lahendus: User:Mernits
Quest lukus (tehtud) Mernits 10:36, 10 May 2011 (EEST)
Quest 1 - Leia suured kaustad oma kodukataloogist
Probleem: Kodukaustast on vaja leida suured kataloogid ja teada, palju nendele ruumu kulub.
Luua skript suuredkaustad.sh
Väljasta kataloogid suuremad kõige alla kujul:
20MB Allalaadimised
100MB Dokumendid
hint: du -s * | sort -nr
Lahendus : Katrin Kukk
Quest lukus ja tehtud Mernits 16:27, 10 May 2011 (EEST)
Quest 2
Teha skript, mis taastab poolelijäänud tarkvarapaigalduse (apt-get baasil)
Kui näiteks kasutaja tahab midagi installeerida ja talle öeldakse, et eelmine install jäi pooleli (vool läks ära või mis iganes), siis viidaks installeerimine/konfigureerimine lõpuni.
Bashi lahendus: User:Hvosujal
Pythoni lahendus: User:Hvosujal
Quest lukus (tehtud) Mernits 13:37, 10 May 2011 (EEST)
Quest 3
Teha skript, mis eemaldab vanad kernelid (jätab alles kaks viimast). Tulemuseks on grub2 menüüs näha kahe viimase kerneli ridu ja vanade kernelite arvelt hoitakse kettaruumi kokku.
Lahendus: User:otuur
Lahendus: User:Metamm - Parandatud 16.05 14:24
Rpm eemaldust kasutades ubuntu 10.10'ga saab teate "head: unrecognized option '--1'" peale seda teavitatakse, kasutajat, et skript kustutas kõik kernelid peale kahe viimase, ometi seda ei toimunud. Dpkg eemaldus toimib. Olle Tuur 13.05.2011 21:38
Parandasin Olle välja toodud vea, nüüd skript kontrollib, kas kasutajal ikka on see paketihaldur olemas, millega skripi käivitab. Olle skript töötab dpkg paketihalduriga linuxites (N: Ubuntu, Debian) ilusti. Aga Fedoras, kus on kasutusel rpm paketihaldur ei saa kasutada apt-get remove kernelite eemaldamiseks Meelis Tamm 16.05.2011 14:30
Quest lukus Mernits 10:26, 24 May 2011 (EEST)
Quest 4
Teha skript, mis ühendab lahti kõik kettajaod/saalealad etteantud kettalt ja kustutab partitsioonid sellelt kettalt.
Skript peab kasutajat hoiatama, et eemaldatakse see ja too kettajagu.
Skript annab vea, kui lahtiühendamine ei õnnestu.
Skript kontrollib, kas kasutajal on piisavalt õiguseid.
Käivitamine: trash.sh <kettas>
näiteks: trash.sh /dev/sdb
Lahendus: User:Uluuk
Quest lukus ja tehtud Mernits 12:12, 12 May 2011 (EEST)
Quest 5
Teha shell funktsioon, mis kontrollib faili olemasolu ja sellele antud õiguseid
Näiteks on fail rwxrwxrwx /var/kala.txt
funktsioon välja kutsudes argumentidega /var/kala.txt 777 tagastatakse 0 Teistel juhtudel: 1 - faili pole 2 - omanikul on valed õigused 3 - grupil on valed õigused 4 - teistel kasutajatel on valed õigused
Lahendus: User:Krikko - parandatud
Lahendus: User:Skangsep -Täiendatud. Skript peab tegema exit 0 või 1 ... echoda pole vaja
Python'is lahendus User:Uluuk#Quest 5 - Python
Quest 6
Teha skript save-alias, mis töötab nagu käsk alias, kuid salvestab loodud aliase .bashrc faili ja sourceb .bashrc faili.
Juhtus, et sai valmis:
Kkalder
Quest lukus (tehtud) Mernits 12:36, 10 May 2011 (EEST)
Quest 7
Looge skript mis lisab kasutaja nimetatud gruppi.
Skript peab kontrollima kas grupp on juba olemas, vajadusel grupi looma.
Skript peab kontrollima mitte ainult lokaalseid gruppe vaid ka globaalseid (LDAP).
Skript peab kontrollima ka seda, kas kasutaja on olemas, vajadusel küsib kas kasutaja luua või mitte.
nt. ./att-to-group.sh kasutajanimi grupinimi
Lahendus: User:Mlehari
Täiendused tehtud! --Mlehari 10:24, 13 May 2011 (EEST) Quest lukus Mernits 19:30, 16 May 2011 (EEST)
Quest 8
Luua skript, mis otsiks etteantud kataloogist ühesuguseid faile. Failide võrdlemine võiks toimuda md5sum tasandil. Loodav skript peaks olema suuteline leidma kõikide ühesuguste failide asukoha ja kuvama ka nende nimed.
Näideks failidel võivad olla erinevad nimed, kuid sama sisu :
fca209683890bb2a02c60535ca82f920 joujou
fca209683890bb2a02c60535ca82f920 tere
fca209683890bb2a02c60535ca82f920 hello
fca209683890bb2a02c60535ca82f920 asd
Lahendus: User:Vkolesni
Quest tehtud Mernits 12:19, 12 May 2011 (EEST)
Quest 9 Kasutajanime küsimine ja faili salvestamine
Teha skript, mis küsib kasutajanime ja salvestab selle tekstifaili /var/tmp/username
Peale nime küsimist küsib skript kinnitust, et nimi on õige.
Skript kirjutab eelneva faili üle (kui ei saa üle kirjutada, siis annab vea)
Lahendus: User:okilk Quest Lukus Mernits 10:31, 17 May 2011 (EEST)
Quest 10 - Keerukam - Mysql varukoopia tegemise skript (koos installiskriptiga)
NB: seda skripti võivad teha 3 inimest, kui iga inimene teeb ühe allosa.
Taust: on varundusarvuti ja mysql andmebaasi arvuti. Andmebaasi arvutis töötab mysql server, mille külge otse üle võrgu ühenduda ei saa. Andmevaasist on vaja teha varukoopiaid, mida igapäevalselt kopeeritakse varundusserverisse. Varundusserver algatab kopeerimise ja autentimine käib võtmete abil.
Skript koosneb kolmest osast.
- Skript, mis on mysql serveris ja käivitatakse cron abil. Skript teeb mydqldump -A ... käsuga koopia /var/varukoopiad kausta ja failinimega <DATE>-mysql-<masinanimi>.sql.gz - seega sisaldab kuupäeva ja masina nime, ning pakitakse kokku.
Bash lahendus: User:kjogi#Quest10.1
- Teine skript kopeerib andmebaasiserverist varukoopiad varundusserverisse ja kustutab andmebaasiserverist varukoopiad, mis on vanemad, kui üks kuu
Python lahendus: User:kjogi#Quest10.2
- Kolmas skript on installatsiooniskript. See küsib andmebaasiserveri nime/parooli ja mysql root parooli.
Skript kopeerib esimese skripti andmebaasiserverisse ja seadistab sealse cron-i seda regulaarselt käivitama. Skript seadistab varundusserveri cron-i regulaarselt käivitama kopeerimise skripti.
Quest 11 - Skript paki installi kontrolliks
Teha skript, mis kontrollib, kas etteantud tarkvarapakk on installeeritud. Kui on installeeritud, siis tagastab 0 ja vastasel juhul 1.
is_installed.sh <pakinimi>
Väikest mööndustega on skript OK (Kui keel on Eesti, siis skript ei toimi. Skripti algusesse export LC_ALL=C oleks hea)
Quest tehtud Mernits 13:01, 12 May 2011 (EEST)
Quest 12 kasutaja/grupi olemasolu testimine
Teha skriptid is_user.sh is_group.sh mis kontrollivad, kas kasutaja või grupp eksisteerib.
is_user.sh <username>
is_group.sh <username>
Skriptid tagastavad 0, kui kasutaja/grupp on olemas ja 1 kui kasutajat/gruppi pole.
Lahendus : User:Vvinogra
Quest tehtud Mernits 12:29, 12 May 2011 (EEST)
Bash skript, mis vähendab foto lahutus: Skript, mis vähendab foto lahutus
Python skript (bash quest 12 ülesanne): User:Vvinogra#Python_kasutaja_olemasolu_testimine_skript
Quest 13 - kas kasutaja kuulub gruppi?
Teha skript user_in_group.sh mis kontrollib, kas etteantud kasutaja kuulub etteantud gruppi.
Tagastab 0, kui kuulub ja 1 kui ei kuulu.
user_in_group.sh <kasutaja> <grupp>
Lahendus: User:Amill - lahendus OK Mernits 12:55, 12 May 2011 (EEST)
Lahendus: User:Skullara - lahendus OK - kuna leitud teisest lahendusest viga, siis lähevad punktid kirja... Mernits 22:34, 12 May 2011 (EEST)
Quest lukus Mernits 12:55, 12 May 2011 (EEST)
Quest 14 IP aliase loomine ja salvestamine
Teha skript, mis loob ubuntu serverile IP aliase ja salvestab selle.
add_ip.sh <IP aadress>
Skript teeb võrgule restardi ja kontrollib, kas IP vastab. (enne võiks pingida, et ip ei vastaks)
Lahendus: User:trohumet - Siin luuakse alati alias eth0:0, samas võib see juba olemas olla ja seda tuleks kontrollida ja seejärel luua eth0:1 jne. Mernits 19:32, 16 May 2011 (EEST)
Nüüd oskab see skript ka teistele liidestele Aliast anda.
Lahendus: User:Rkorgmaa
Parandused sisestatud 26.05.2011
Quest 15 - IP aliase kontroll
Skript kontrollib, kas Ubuntu serveris on seadistatud etteantud IP alias
is_ip_alias.sh <IP aadress>
return 0 - alias olemas
return 1 - aliast pole
Lahendus: User:rsepp
Quest 16 - Osta elevant ära
Teha programm, mis käivitamisel paku kasutajale "osta elevant ära" ja ootaks kasutaja sisendit. Ükskõik mida kasutaja sisestab ütleb skript "Seda ütlevad kõik, aga osta elevant ära" ja nii lõpmatuseni.
Lahendus: User:skullara
Quest tehtud Mernits 14:21, 12 May 2011 (EEST)
Quest 17 - Kas serveris on piisavalt mälu
Teha skript, mis kontrollib, kas servers on piisavalt operatiivmälu (näiteks mõne teenuse installi skript võiks seda teha)
./ram.sh <mälu MB>
./ram.sh 512
Väljund: exit 0 - mälu on piisavalt
exit 1 - mälu pole piisavalt
Lahendus : User:ttoppi | Lahendus OK, quest lukus Mernits 13:17, 19 May 2011 (EEST)
Quest 18
Tuleb tekitada skript, mis suunaks kasutaja viimati kasutatud failid nende viimase muutmise kuupäeva järgi kaustadesse.
Skript peab sisaldama: viite erinevat kausta.
Skript peab tegema seda toimingut iga 2 päeva tagant ja teavitama kasutajat sellest, et failid on ümber jagatud.
Skript peab peale failide sorteerimist ütlema mitu faili mingisse kausta tõsteti.
Kaustadesse tuleb failid sorteerida järgmiselt: esimesse kausta peavad minema failid mida on viimati muudetud vähem kui 2 päeva tagasi, teisse kausta failid mis on muudetud 2-7 päeva tagasi, kolmandasse failid mis on 8-14 päeva tagasi muudetud, neljandasse kausta 15-29 päeva tagasi muudetud failid ja viiendaks 30 päeva ning vanemad failid mis on muudetud.
Lahendus: User:Iambos
Quest lukus Mernits 10:48, 24 May 2011 (EEST)
Quest 19
Kasutaja saab määrata mis faile otsitakse (.torrent; .avi või mkv vmt.) kogusüsteemist. Kui failid on leitud peab skript kasutajale teada andma millised on failide nime.
Skript peab leidma kõik kasutaja poolt sisestatud lõpuga failid.
Skript peab failid ära nummerdama ja kasutajale nende nimesid näitama.
Skript peab võimaldama kasutajal valida numbritega failid mida soovib kustutada (Näiteks: 1-3, 9, 12, 19-20). Peab toimima valiku võimalus näiteks: 15-19
Skript peab kontrollima kas kasutajal on õigused faile kustutada. Kui õigused puuduvad tuleb anda vea teade.
Skript peab peale kasutaja poolt valitud numbreid väljastama uuesti failide nimed mis on valitud ja küsima kas valitud failid on õiged. (kui on õiged peab sisestama 0 , kui valed siis 1)
Skript peab peale failide kustutamist väljastama teate, et failid on kustutatud.
Lahendus: User:Msuursal
Quest lukus Mernits 10:49, 24 May 2011 (EEST)
Quest 20
Teha skript, mis käib läbi PATH muutuja sisu ja leiab sealt üles kataloogid, mida pole olemas. Leitud olematud kataloogid kuvatakse kasutajale.
Skript lisab uue PATH muutuja kasutaja profile faili
Lahendus: User:krvask
Quest lukus, tehtud Mernits 09:47, 24 May 2011 (EEST)
Quest 21
Teha skript, mis lisab kataloogi PATH muutujasse (ja sinna faili, kus kasutaja oma PATH muutujat hoiab)
./add_path.sh <KATALOOG>
Lahendus: User:Akannus Töötas Mac OS keskonnas. - See töötab siiski vaid root kasutaja alt (tavakasutaja ei kirjuta /etc/ kataloogi. Otsi, kus hoitakse tavakasutaja PATH väärtust, mida ta ise muuta saab. Mernits 09:22, 17 May 2011 (EEST)
Questile võib teha ka linux lahenduse
2. varjant: User:Jliiva
Quest lukus Mernits 09:40, 2 June 2011 (EEST)
Quest 22 - kontrollib, kas lokaalne kasutaja on lukus
./user_is_locked.sh <loginname>
exit 0 - kasutaja on lukus
exit 1 - kasutaja pole lukus
exit 2 - kasutajat pole üldse
Quest lukus Mernits 09:46, 24 May 2011 (EEST)
Quest 23
Luua skript, mis otsib logifailist välja kasutajate ebaõnnestunud sisselogimised ja kordade arvu viimase kolme päeva jooksul, järjestades kasutajad alustades kõige rohkem ebaõnnestunud sisselogimisi teinud kasutajast ja suunab need faili vead.txt. vihjeks: faillog näitab ebaõnnestunud sisselogimisi, on käivitav käsurealt
Quest lukus (kuigi see sudo puhul ei toimi) Mernits 10:28, 24 May 2011 (EEST)
Quest 24
Teha skript, mis kontrollib, kas etteantud string on palindroom või mitte. http://et.wikipedia.org/wiki/Palindroom
./is_palindroom.sh kaak Tagastab 0
./is_palindroom.sh kala Tagastab 1
Quest lukus (Tehakse tunnis) Mernits 10:17, 24 May 2011 (EEST)
Quest 25
Skript, mis leiab lehelt google anatytics andmed ja väljastab need.
./is_google_analytics.sh veebileht
exit 0 - olemas
exit 1 - pole
Lisaks peab skript kasutajale tevitama ID
Quest 26
Kirjutada skript, mis otsib üles kõik .html failid ning kirjutab iga faili html dokumendi pealkirja failid.html faili. Loodud html fail (failid.html) peab sisaldama .html faile linkidena, ehk sinna klikates suunab asukohta, kus fail asub.
user:ulaaneot - Siin kirjutatakse esimene rida. Mernits 10:15, 27 May 2011 (EEST) NB keegi võiks seda täiendada. Ulaaneot 16:55, 27 May 2011 (EEST) Täiendatud ja muudetud vastavalt kirjeldusele
User:Metamm - Pythonis
Quest 27
Kirjutada skript, mis kopeerib data CD-lt pilditõmmise (image) kõvakettale ning kirjutab selle sama pildi uuele plaadile. Pärast kirjutasmit küsib, kas soovib pildi (image) kõvakettalt kustutada. NB! Data plaadilt tehtud image peab olemuselt olema MD5 räsi. ( md5sum < > )
Quest tehtud Mernits 12:18, 26 May 2011 (EEST)
Quest - Python arvestus (saata ära 24.mai enne 12:30)
Leida etteantud failist kõik palindroomid ja kirjutada tulemus uude faili. Failinimed antakse ette käsurealt.
Seega väljundfailis on ainult palindroomid või fail on tühi.
./pal.py sisendfail väljundfail
Quest lukus Mernits 13:25, 24 May 2011 (EEST)
Quest 28
Kirjutada skript, mis eemaldab Opera veebibrauseri bookmarkidest kirjeldused (descriptionid). Skripti jaoks peaks olemas olema Opera veebibrauser ja failid asuvad ~/.opera
Quest lukus Mernits 15:37, 30 May 2011 (EEST)
Quest 29
Teha skript, mis pakub kasutajale välja erinevate promptide valikuid a'la kombineeri ise endale bash prompt.
Quest 30 - Python arvestustöö - Lahendused saata laurile ja margusele 27.mai hiljemalt kell 11:30!
Luua isikukoodi parser ja õigsuse kontroll. Sisendiks fail kus igal real on isikukood, mis võib olla õige või vale. Väljundiks on fail kus on õiged isikukoodid kus kontrollsumma klapib ning kuupäev on korrektne (aastas 12 kuud ning iga kuu päevade arv sobiv).
Sisendfail enesekontrolliks: http://lauri.vosandi.eu/python/isikukoodid.txt
NB! Kuupäeva õigsuse kontrollimiseks kasutage datetime.strptime funktsiooni ja uuesti vormindamiseks datetime.strftime funktsiooni
Eeldatav väljund:
lauri@lauri-t410:~/isikukood$ python isikukoodid.py isikukoodid.txt 61206116170 - 11.06.2012 - naine 40511309870 - 30.11.1905 - naine 41407165380 - 16.07.1914 - naine 63511033026 - 03.11.2035 - naine 44408261855 - 26.08.1944 - naine 36001157802 - 15.01.1960 - mees 68905216902 - 21.05.2089 - naine 44702094652 - 09.02.1947 - naine 63812277449 - 27.12.2038 - naine 41207203213 - 20.07.1912 - naine 68708158219 - 15.08.2087 - naine 59803250119 - 25.03.2098 - mees 53912086035 - 08.12.2039 - mees 51211188093 - 18.11.2012 - mees 43805027379 - 02.05.1938 - naine 63206180726 - 18.06.2032 - naine 51501095401 - 09.01.2015 - mees 41609258538 - 25.09.1916 - naine 60306250756 - 25.06.2003 - naine 61901193165 - 19.01.2019 - naine 43107188423 - 18.07.1931 - naine 48210160415 - 16.10.1982 - naine 48910144868 - 14.10.1989 - naine 37605156061 - 15.05.1976 - mees 30907090640 - 09.07.1909 - mees 53907089733 - 08.07.2039 - mees
Programm peab sisaldama infot skripti autori kohta ning valede parameetrite korral väljastama programmi kasutusinfo
Quest 31
Teha skript mis ärataks hommikul (öösel) unise tudengi. Skripti tuleks lisada ka mingi phrase mille tudeng peab kirjutaama, et alarm kinni jääks.
Python; User:Eumal
Quest 32
Luua skript mis automaatselt installeerib uued ATI graafika driverid.
Quest 33
Luua skript mis automaatselt installeerib uued Geforce graafika driverid.
Quest 34 - Viimane arvestus
Saata 16:30 seisuga toimiv kood aadressile lauri.vosandi@gmail.com
Lugeda sisendfailist tabulaatoritega ("\t") eraldatud read kus tulpades vastavalt: ainekood, aine nimi, õppejõud, hindamisviis, hinne, EAP
Sisendfail: http://lauri.vosandi.eu/python/ainepunktid.txt
Programm peab lugema käsurealt sisend ja väljundfailide nimed:
lauri@lauri-t410:~/midagi$ python lahendus.py Usage: lahendus.py <input_file> <output_file>
Väljundfaili peaks kirjutama kaalutud keskhinde ning Euroopa ainepunktid kokku:
lauri@lauri-t410:~/midagi$ python lahendus.py ainepunktid.txt out.txt lauri@lauri-t410:~/midagi$ cat out.txt Kokku EAP: 88.0 Kaalutud keskhinne: 2.15
Quest 35
Teha skript, mis paneb ubuntu serveri kasutajale e-posti saatma, kui tuleb uusi uuendusi.
- Paigaldab apticron tarkvara.
- Muudab selle konfiguratsioonis määratavat e-posti aadressi vastavalt kasutajalt küsitavale aadressile.
https://wiki.itcollege.ee/index.php/User:Osoom
Quest 36
Luua skript, mis seadistab võtmete baasil autentimise ssh abil.
Kasutaja kirjutab:
./ssh-setup.sh kasutajanimi@server
Skript kontrollib, kas kasutajal on olemas privaatvõti (kui pole, siis genereerib)
Skript logib ssh abil serverisse ja kopeerib avaliku võtme .ssh kataloogi
Teatab, et edaspidi saab serverisse ühenduda võtmetega autentimisega.
Skripti tooriku leiab skriptimise loengus (sealne skript teeb pea kõik ära, kuid küsib kaks korda parooli. Piisaks ühest korrast)
Valmis skript asub User:rkorgmaa
Quest lukus Mernits 09:41, 2 June 2011 (EEST)
Quest 37
Luua skript, mis leiab etteantud kataloogist kõik katkised nimelingid
Quest tehtud Mernits 09:45, 2 June 2011 (EEST)
Quest 38
Luua skript, mis muuda etteantud faili muutmisaega
Skript saab käsurealt argumendina failinime.
- Kontrollib, kas fail on olemas, kui pole - exit 1
- Küsib kasutajalt aastat, kuupäeva, kellaaega
- Seab failile muutmiskuupäeva
Lukus Mernits 15:17, 1 June 2011 (EEST)
Quest 39
Luua skript, mis leiab kasutaja kodukaustast kõik failid ja kataloogid, mille omanikuks ta ise pole ja väljastab nende täispikad nimed
User:KValjako Quest lukus Mernits 15:15, 1 June 2011 (EEST)
Quest 40 Tarkvara uuendamine (koos lisakontrolliga)
Teha skript, uuendab Ubuntu Linux tarkvara. Eelnevalt kontrollitakse, kas kettal on piisavalt ruumi (paarsada MB) ja tehakse uuendus. Kui eelnev uuendus oli katki, siis tehakse uuendus korda (2 käsku tarkvara paigaldamise loengust)