Kieliteknologian oppiaine

Kurssin harjoitukset

- KIT-verkosto | Yleisen kielitieteen laitos| Kieliteknologian opetus| Helsingin yliopisto -
ctl130-kurssin tiedot
opetusohjelma
materiaali
harjoitukset
käytäntöjä
ctl130-kurssin muu
Postia opettajalle
kuvaus

Kurssin harjoitukset

1 Harjoitusten tekemisestä

Harjoitusten pääasiallinen tarkoitus on tuoda Unix-järjestelmää tutuksi. Harjoituksia käytetään myös kurssin suorittamisen tarkkailuun, mutta tästä aiheutuva vaiva yritetään saada mahdollisimman pieneksi. Tehtävien vastaukset lähetetään vapaamuotoisesti sähköpostitse luennoitsijalle ja kurssiassistentille (ctl130-teacher@ling.helsinki.fi).

Tehtävää kannattaa yrittää, vaikka se osoittautuisi liian vaikeaksi. Kesken jääneet ratkaisut kannattaa myös lähettää ja merkitä niihin [kesken] - niistä saa puolet tehtävän suorituksesta, jos näkee, että on tosissaan yritetty. Kesken jääneet tehtävät tarjoavat myös arvokasta tietoa siitä, mikä on koettu hankalaksi.

Vielä muutamia ohjeita vastaamisesta (nämä perusasiat unohtuvat yllättävän helposti):

  • Jos tehtävässä on jokin kysymys, vastaa siihen.
  • Jos tehtävässä käsketään tekemään jotain, näytä / kerro, kuinka teit sen.
  • Monet tehtävistä ovat itse asiassa sellaisia, että täysin oikean vastauksen kertominen olisi perin työlästä. Käytä omaa kohtuullisuudentajuasi. Oikeastaan tärkeämpää kuin kertoa mahdollisimman perinpohjainen vastaus on ymmärtää, mitä asiaa ei tiedä / mistä ei ole varma.

2 Alkeet

Näillä harjoituksilla on tarkoitus saada perusasiat selkäytimeen.

  • harjoitukset a (Sinikka Loikkanen)
    1. Lähetä laitoksen koneelta luennoitsijalle sähköposti otsikolla Ilmoittaudun unix-kurssille. Kerro postissa suku- ja etunimesi, sekä opiskelijanumerosi (tai hetu).
    2. Luo kotihakemistosi alle alihakemisto nimeltä unixtesti ja siirry siihen.
    3. Mikä on tämänhetkinen työhakemistosi?
    4. Siirry takaisin kotihakemistoosi.
    5. Mitä tiedostoja kotihakemistossasi on? (katso myös piilotiedostot).
    6. Tee hakemistolistauksesta (eli hakemiston sisältämien tiedostojen nimien listasta) tekstitiedosto (> listaus.txt; ohjaus tiedostoon) ja kopioi se unixtesti-hakemistoon. Miten näet, onko se siellä?
    7. Kopioi listaus.txt kotihakemistoosi toiselle nimelle.
    8. Tuhoa unixtesti-hakemistossa oleva listaus.txt.
    9. Miten tuhoaisit kaikki hakemiston tiedostot yhdellä kertaa?
    10. Aseta listaus.txt:lle sellaiset oikeudet että kaverisikin pääsevät katsomaan sitä. (Muista myös hakemiston oikeudet.)
    11. Selvitä mitä komento ln tekee.
  • harjoitukset b (Nicholas Volk)
    1. Vaihda unix-salasanasi, ellet ole jo tehnyt sitä. Älä kerro sitä kenellekään. (Jälkemmäinen ei liity harjoitukseen mitenkään.)
    2. Montako kertaa käsky cd .. pitää antaa, jotta pääsee käyttämälläsi palvelimella kotihakemistosta juurihakemistoon?
    3. Tee /tmp-hakemistoon alihakemisto, jonka nimeksi tulee käyttäjätunnuksesi. Mene ko. alihakemistoon ja luo siellä tiedosto tiedosto.foo. Palaa /tmp-hakemistoon. Poista äsken tekemäsi hakemisto. Onnistuuko, ja jos ei, niin miksei? Miten ongelma korjaantuu?
  • harjoitukset c
    1. Keksi jokin äärimmäisen epäkäytännöllinen tapa mennä hakemistoon /usr/lib.
    2. echo-komennolla ja >-ohjauksella voit luoda yksinkertaisia tiedostoja. Miten voit kopioida tiedoston käyttämättä cp-komentoa?
    3. Pystyvätkö käyttäjät lukemaan toistensa tekemiä tiedostoja? Perustele.
    4. Kuinka monta paikkaa tiedostojärjestelmästä onnistut löytämään, joita sinulla ei ole oikeutta selailla?
    5. Voiko olla tilanne, jossa et voi mitenkään poistaa hakemistoa, jonka omistaja olet (eli ls -l näyttää hakemiston omistajaksi sinut)? Millainen tilanne?
    6. Ota selvää, mitä umask-komento tekee. (Jos tämä osoittautuu liian vaikeaksi, ota selvää, mitä sleep-komento tekee.)
    7. Siirrä kaikki harjoitusten tuottama turha roska, jota et ole jostain syystä halunnut poistaa, kotihakemiston ali-alihakemistoon harjoitukset/ctl130.

3 Tekstin muokkaus

Nämä ovat eniten turhaa työtä tuottavat harjoitukset.

  • harjoitukset a (Sinikka Loikkanen)
    1. Mene harjoituksia varten tekemääsi hakemistoon. Kirjoita sinne emacsilla tiedosto tärkeä.txt.
    2. Kommentoi emacs:n käyttöä. (Anna tulla vain!) Kirjoita kuvaus vähintään kuudesta emacsin toiminnosta, joita tarvitset tavallisessa tekstin muokkaamisessa.
    3. Tee toinen tiedosto (esim. rakkautta.txt) muokkaamalla tärkeä.txt:a ja tallettamalla se eri nimellä.
  • harjoitukset b (Nicholas Volk)
    1. Tee Emacsilla tekstitiedosto uutinen.txt. Kirjoita tekstitiedostoon joku tuore uutisotsikko vaikkapa Hesarin WWW-sivuilta.
    2. Käyttäjien www-sivut sijaitsevat Unix-koneissa yleensä kotihakemiston alahakemistossa public_html. Kirjoita emacs:lla www-hakemistoosi tiedosto vitsi.txt, joka sisältää jonkun lyhyen vitsin. Aseta tiedoston (ja hakemiston) oikeudet sellaisiksi, että näet vitsisi www-selaimella.
    3. Tee www-hakemistoosi alihakemistot julkinen ja salainen ja kopioi vitsi.txt molempiin niistä. Aseta näiden oikeudet siten, että vitsi.txt on selaimella haettavissa molemmista, mutta listauksen hakemiston sisältämistä tiedostoista näkee selaimella vain julkinen-hakemistosta, ei salainen-hakemistosta.
  • harjoitukset c
    1. Hae jokin suosikkisivusi (esimerkiksi www.google.fi) selaimella. Talleta se kotihakemistoosi. Muokkaa sitä, lisäile esim. siivottomia huomautuksia ja muuta roinaa. Tarkastele lopputulosta selaimella. (Kyllä, selaimella voi katsella myös paikallisessa koneessa olevia tiedostoja.)
    2. Perusta itsellesi breivari-hakemisto eli hakemisto, johon kaverit voivat käydä jättämässä viestejä ja muuta jännää. Kerro jollekulle kurssilaiselle sähköpostitse, missä hakemisto sijaitsee, ja pyydä häntä jättämään sinne viesti.
    3. Minkälaisia tiedostoja sijaitsee hakemiston /usr/lib alla? Entä /usr/share?
    4. Mitä tekee komento lpq? Mitä muita komentoja liittyy samaan aihepiiriin?
    5. Kirjoita kaunis runo ja tulosta se.
    6. Suunnittele jokin kiva hakemistorakenne kotihakemistollesi. (Tarkoittaa, että päätät, miten nykyiset ja tulevat tiedostot jakautuvat alihakemistoihin kotihakemistossa.)
    7. Etsi emacs:sta toiminto, jolla voit korvata merkkijonon tiedostosta toisella.
    8. Tutustu emacs:n avukkeisiin, eli katso, mitä kaikkea apuvalikosta (jonka saa näkyviin C-h:lla) löytyy.

4 Putket ja prosessointi

Nämä ovat ylivoimaisesti vaikeimmat harjoitukset.

  • harjoitukset a (Sinikka Loikkanen)
    1. Selitä (itsellesi), mitä tulostuu komennolla ''head -5 /usr/share/dict/words | tail -3''.
    2. Laske merkit, sanat ja rivit jostakin tiedostosta. Ohjaa vastaus tiedostoon.
    3. Anna numeroitu listaus sisällä olevista käyttäjistä. Alkuun pääsee komennolla who.
    4. Hanki harjoitushakemistoosi teksti alice11.txt. Tarkista, että se on siellä. Muuta tiedoston sisältö pieniksi kirjaimiksi.
    5. Rivitä sanat kyseisestä tiedostosta (muunna sanavälit ja välimerkit rivinvaihdoiksi).
    6. Millä komennolla etsit merkkijonoa gooz tiedostoista, joiden nimessä on merkkijono foo?
    7. Millä komennolla saat tietää, missä tiedostoissa esiintyy sana villasukka siten, että saat samalla sen rivin rivinumeron, jossa ko. sana esiintyy? (Tähän on (ainakin) kaksi erilaista ratkaisua.)
  • harjoitukset b (Nicholas Volk)

    Näissä tehtävissä voi käyttää koemateriaalina tiedostoa yhdestoista.txt.

    1. Laadi käskyt, jotka poimivat syötteensä toiseksi viimeisen rivin. Voit käyttää syötetiedostona tiedostoa /usr/share/dict/words, jolla oikea lopputulos on sana Zulus.
    2. Laadi käskyt, jotka laskevat montako a-kirjainta tiedosto sisältää. Yritä ottaa huomioon sekä 'A' että 'a'. Tehtävä on mukailtu viime kevään Tekstikorpusten tietojenkäsittely -kurssin ekojen laskarien kakkostehtävästä ja alkuperäisessä tehtävässä annettiin myös tehtävää helpottava vihje.
    3. Laadi syötteen normalisoivat käskyt. Eli muuta kaikki aakkoset pieniksi ja poista aakkosiin kuulumattomat merkit (älä välilyöntiä ja rivinvaihtomerkkiä).
    4. Ohjaa edellisen käskyn lopputulos kotihakemistossasi tiedostoon h4-3.txt ja palauta ko. tiedosto liitetiedostona luennoitsijalle. (Kertaus on opintojen äiti.)
    5. Mikä on aakkosjärjestyksessä toiseksi viimeinen sana yhdestoista.txt-tiedostossa? (Käytetään sort-käskyssä eri kirjainkoot samanarvoisina käsittelevää optiota.). Eli sanat omille riveilleen ja siitä etiäppäin. Tässä aakkosjärjestys == koneen tekemä sorttaus.
  • harjoitukset c
    1. Komento rev kääntää jokaisen syötetiedoston rivin merkki merkiltä väärin päin. Mitä ihmeen hyötyä tällaisesta komennosta voi olla?
    2. Tee komento, joka tuottaa listan tiedoston sanoista ja niiden esiintymiskerroista esiintymistiheysjärjestyksessä.
    3. Komento pr on suunniteltu tekstin palstoittamiseen ja fmt sen uudelleenrivittämiseen. Muodosta komento, joka tulostaa 72 merkkiä leveän tekstin siten, että siinä on kaksi 37 merkin levyistä palstaa.
    4. Keksitkö mitään keinoa listata työhakemiston tiedostoja ilman ls-komentoa? Entä mitään keinoa tuhota työhakemistosta a-alkuiset tiedostot ilman komentotulkin jokerimerkkiä (*)?
    5. Tutki history-, sort- ja uniq-komennoilla, mitä komentoja olet antanut kaikkein eniten. Tästä tiedosta on hyötyä myöhemmin, kun opitaan tekemään aliaksia.
    6. Miten saat selville, kuinka monta tiedostoa yhdessä hakemistossa ja sen kaikissa alihakemistoissa yhteensä on?
    7. mail-komennolla voi postittaa haluamaansa osoitteeseen mitä tahansa merkkivirtoja. Tee komento, joka lähettää sinulle sähköpostissa listan kotihakemistosi yli 10 kilotavua vievistä tiedostoista ja hakemistoista. Aja se taustalla ja poistu komentotulkista.
    8. Tiedostossa /usr/share/dict/words on pitkähkö lista englannin kielen sanoja. Mitä hyötyä tästä voisi olla?
    9. Muodosta komento, joka tuottaa listan työhakemiston alla olevista tiedostoista, joissa on sana ja, yhdessä sen tiedon kanssa, kuinka monta kertaa kyseinen sana esiintyy tiedostossa.
    10. Selvitä kokeilemalla, mitä merkkejä unix-tiedoston nimessä ei voi olla.
    11. emacs tekee varmuuskopiotiedostoja, jotka loppuvat tilde-merkkiin (~). Katso diff:lla, mitä olet muuttanut viimeksi kotisivustasi.
    12. Taas kerran, jos harjoituksista on tullut tavaraa kotihakemistoosi, siivoa ne johonkin järkevään alihakemistoon tai tuhoa.

5 Prosessit ja kommunikaatio

  • harjoitukset a (Sinikka Loikkanen)
    1. Testaa prosessinhallintaa:
      • Aloita työ man man.
      • Keskeytä työ odotustilaan.
      • Aloita työ man less.
      • Keskeytä sekin.
      • Mitä sanoo komento jobs?
      • Mitä sanoo komento ps?
      • Siirrä työ etualalle. Mitä tapahtui?
      • Käynnistä työ man man uudelleen, keskeytä se ja tapa se.
      • Onko sinulla jäljellä joitain töitä (jobs)?
    2. Miten saat selville ympäristömuuttujan arvon?
    3. Kokeile PRINTER-muuttujan arvon asettamista. Tarkista, että arvo vaihtui.
    4. Anna ympäristömuuttujalle PS1 erilaisia arvoja. Mihin muuttujan arvon muuttaminen vaikuttaa? Selvitä myös mitä merkinnät \u, \h, \t, \w ja \007 saavat aikaan PS1:ssa.
    5. Millä saat selville kaikkien jossakin hakemistossa olevien HTML-sivujen otsikkokenttien sisällön? (HTML-sivuilla otsikkokenttä on <title> ja </title> -tagien välissä) (Tässä tehtävässä haku piti alun perin tehdä vain .html-päätteisistä tiedostoista. Tähän kuitenkin tarvitaan xargs-ohjelmaa, jota meille ei ole vielä opetettu. Jos kiinnostaa, katso man xargs.)
    6. Tee itsellesi .plan-tiedosto. Aseta oikeudet niin, että muu maailma voi finger:lla nähdä sen sisällön.
  • harjoitukset c
    1. Kirjaudu Unix-palvelimelle sisään ssh:lla useita kertoja yhtaikaa. Tarkastele, millaisia prosesseja sisäänkirjautumisesi aiheuttavat.
    2. Anna komento yes. Mitä se tekee? Miten sen saa lopettamaan?
    3. Komennolla uptime voi tarkastella koneen kuormitusta. Käynnistä taustalle muutamia yes >/dev/null -prosesseja, tarkastele koneen kuormituksen kehittymistä, ja tapa prosessit.
    4. Käynnistä esim. marsissa taustalle yksi yes >/dev/null ja yksi nohup yes >/dev/null. Kirjaudu ulos, kirjaudu taas sisään, ja katso, selvisivätkö prosessit hengissä. (Tapa kaikki prosessit jälkeenpäin.)
    5. Miten ssh suhtautuu Ctrl-Z:an? Katso man-sivuilta, miten ssh:n saa pysäytetyksi.
    6. Sopikaa sähköpostilla jokin aika, jolloin kirjaudutte Unix-palvelimelle ja alatte keskustella keskenänne ytalk-ohjelmalla. Noudattakaa sopimusta.
    7. Katso, keitä kaikkia käyttäjiä on, joilla on sama sukunimi kuin itselläsi.
    8. Muodosta komento, jolla voit katsoa, kuinka monta kertaa olet ehtinyt kirjautua sisään palvelimelle.
    9. Löydätkö man-sivuja, joiden BUGS-osiossa olisi jotain hauskaa?
    10. Katso, onko tuttujasi kirjautuneena palvelimelle, ja lähetä heille häiritseviä viestejä write-komennolla.
    11. Tee aliakset eniten käyttämillesi komennoille (niiden selville ottaminen oli edellisen kerran harjoituksia). Sijoita kyseiset aliasmäärittelyt kotihakemistosi .bashrc-tiedoston perään.

6 Säännölliset lausekkeet

  • harj. c
    1. Muodosta säännöllinen lauseke (grep-komento), joka löytää syötteestä kaikki HTML-tagit. HTML-tagi on muotoa <jotain jotain jotain>
    2. Muodosta säännöllinen lauseke, joka löytää syötteestä sähköpostiosoitteet. (Huom! tämä on vaikea tehtävä. Mitä merkkejä sähköpostiosoitteessa saa olla? Ylettömään pedanttisuuteen ei tarvitse kuitenkaan ryhtyä.)
    3. Muodosta säännöllinen lauseke, joka löytää syötteestä isolla kirjaimella alkavat sanat.
    4. Käytä ls-, grep- ja xargs-komentoja (vihje: tässä järjestyksessä) näyttäksesi cat-komennolla .txt-päätteisten tiedostojen sisällön. Eli siis: tee putkilinja, joka toimii samoin kuin cat *.txt, muttei käytä *-rakennetta.
    5. Muodosta komento, joka poistaa hakemistosta kaikki tiedostot, joiden sisällössä esiintyy yli 10 numeroa pitkä luku.