Yliopiston etusivulle Suomeksi
Helsingin yliopisto
Kurssin harjoitukset

Yhteystiedot:

Osoite:
Yleisen kielitieteen laitos
PL 9
Siltavuorenpenger 20A
00014 Helsingin yliopisto

Puhelin: +358 (09) 1911 (vaihde)
Faksi: +358 (09) 191 29307

Kurssin harjoitukset

Pikalinkit

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 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):

  • Tehtävävastauksista tulee käydä ilmi, mihin tehtäviin niiden on tarkoitus vastata.
  • Tehtävävastaussähköpostin otsikkokenttään pitäisi kirjoittaa: ctl130_Panu tehtävät: käyttäjätunnus luentokerta. Esimerkiksi ctl130_Panu tehtävät: luupio 1.
  • Älä lähetä vastauksia liitetiedostona ellei ole ihan pakko (äläkä varsinkaan word-tiedostona). Kirjoita mieluummin vastaukset suoraan viestiin.
  • 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.
  • Jos tehtävässä on sekä kysymys että jotain, mitä pitää tehdä, vastaa ja näytä / kerro.
  • 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.

1. luentokerta (aloitus)

Lue materiaalista ainakin tiedostojen nimeäminen, kurssimonisteen alkuosa ja ehkä myös tietokoneen tarkoitus.

  1. Lähetä (ainakin) tämän kerran harjoitukset laitoksen koneelta pine-ohjelmalla.
  2. Salasanansa voi vaihtaa komennolla passwd. Vaihda unix-salasanasi, ellet ole jo tehnyt sitä. Älä kerro sitä kenellekään. (Jälkemmäinen ei liity harjoitukseen mitenkään.)
  3. Luo kotihakemistosi alle alihakemisto nimeltä unixtesti ja siirry siihen.
  4. Mikä on tämänhetkinen työhakemistosi?
  5. Siirry takaisin kotihakemistoosi.
  6. Mitä tiedostoja kotihakemistossasi on?
  7. Tee hakemistolistauksesta (eli hakemiston sisältämien tiedostojen nimien listasta) tekstitiedosto (> listaus.txt; ohjaus tiedostoon). Miten näet, onko listauksen sisältävä tiedosto työhakemistossasi?
  8. Selvitä, mitä komento ln tekee.
  9. Montako kertaa käsky cd .. pitää antaa, jotta pääsee käyttämälläsi palvelimella kotihakemistosta juurihakemistoon?
  10. Keksi jokin äärimmäisen epäkäytännöllinen tapa mennä hakemistoon /usr/lib.
  11. echo-komennolla ja >-ohjauksella voit luoda yksinkertaisia tiedostoja. Miten voit kopioida tiedoston käyttämättä cp-komentoa?
  12. Tee osoitekirja itsellesi. Pane tiedostoon (echo-ohjelmalla ja >>-ohjauksella) rivejä, joilla on jonkun kaverisi nimi, osoite ja sähköpostiosoite. Tarkastele tulosta cat-ohjelmalla.
  13. Komennolla grep voi etsiä tietyn sanan (oikeasti merkkijonon) sisältäviä rivejä tiedostosta. Esimerkiksi komento grep Jussi osoitekirja etsii osoitekirja-nimisestä tiedostosta rivit, joissa on sana (merkkijono) Jussi. Tee erilaisia hakuja nimien, osoitteen osien, jne. perusteella edellistehtävän osoitekirjasta.
  14. Jos sinulla on kaksi tiedostoa, esimerkiksi tied1 ja tied2, mitä tekee komento cat tied1 tied2? Pystytkö arvaamaan, mistä cat-komennon nimi tulee?
  15. Tiedostojen nimeämisestä -paprussa selitetään tiedostojen organisoinnin periaatteita. Laadi ja toteuta suunnitelma alustavasta tiedostojen organisoinnista kotihakemistossasi.
  16. Komennolla mv tiedosto hakemisto voi siirtää (MoVe) tiedosto-nimisen tiedoston hakemisto-nimiseen hakemistoon. siirtele kaikki tähän mennessä tuottamasi tiedostot oikeisiin kohtiin edelliskohdan organisaatiota.

Moniin tässä oleviin tehtäviin kerrotaan kätevämpiä tapoja tulevilla luennoilla.

2. luentokerta (tiedostojen käsittely)

Lue kurssimoniste loppuun, sekä johdanto emacsiin. Tulosta itsellesi emacsin muistilappu (löytyy sekin materiaalisivulta) ja kurkista lisäselityksiä materiaaliin -osiosta kohta absoluuttiset ja relatiiviset nimipolut.

Tunnilla olleiden tehtävien esimerkkivastaukset ovat saatavilla tiedoksenne.

Nämä ovat eniten turhaa vaivaa tuottavat harjoitukset. Mutta harjoitus tekee maasturin.

  1. luo kotihakemistosi hakemistolistauksesta tekstitiedosto johonkin harjoituksia sisältävään hakemistoosi (jotakuinkin sama tehtävä kuin viime kerralla).
  2. kopioi se kotihakemistoosi toiselle nimelle.
  3. poista molemmat tiedostot, sekä alkuperäinen että sen kopio.
  4. Miten tuhoaisit kaikki hakemiston tiedostot yhdellä kertaa?
  5. 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?
  6. Keksi jokin äärimmäisen epäkäytännöllinen tapa mennä hakemistoon /usr/lib. (Tämäkin!)
  7. Ota selvää, mitä umask-komento tekee. (Jos tämä osoittautuu liian vaikeaksi, ota selvää, mitä sleep-komento tekee.)
  8. Mene harjoituksia varten tekemääsi hakemistoon. Kirjoita sinne emacsilla tiedosto tärkeä.txt.
  9. Kommentoi emacs:n käyttöä. (Anna tulla vain!) Kirjoita kuvaus vähintään kuudesta emacsin toiminnosta, joita tarvitset tavallisessa tekstin muokkaamisessa.
  10. Tee toinen tiedosto (esim. rakkautta.txt) muokkaamalla tärkeä.txt:a ja tallettamalla se eri nimellä. (Eri nimellä tallettamisen näppäinkomento on C-x C-w)
  11. Tee Emacsilla tekstitiedosto uutinen.txt. Kirjoita tekstitiedostoon joku tuore uutisotsikko vaikkapa Hesarin WWW-sivuilta.
  12. Käyttäjien www-sivut sijaitsevat Unix-koneissa yleensä kotihakemiston alihakemistossa public_html. Kirjoita emacs:lla www-hakemistoosi tiedosto vitsi.txt, joka sisältää jonkin lyhyen vitsin. Aseta tiedoston oikeudet sellaisiksi, että näet vitsisi www-selaimella, komennolla chmod a+r vitsi.txt. Mene katsomaan vitsiäsi selaimella; se näkyy osoitteessa http://www.ling.helsinki.fi/~ktunnus/vitsi.txt (jossa ktunnus korvataan omalla käyttäjätunnuksella).
  13. Hae jokin suosikkisivusi (esimerkiksi www.google.fi) selaimella. Talleta se kotihakemistoosi. (Esim. laitoksen mozilla-selaimessa sivun saa talletetuksi valikosta löytyvällä Save page as...-toiminnolla.) Muokkaa sitä, lisäile esim. siivottomia huomautuksia ja muuta roinaa. Tarkastele lopputulosta selaimella. (Esim. laitoksen mozilla-selaimessa tämän voi tehdä valikosta löytyvällä Open file...-toiminnolla.)
  14. Siirrä (taas) kaikki harjoitusten tekemisen tuottamat roskatiedostot oikeille paikoilleen hakemistohierarkiassasi tai tuhoa ne.

3. luentokerta (tiedostojen soveltaminen)

Ei pitäisi olla kovin vaikeaa… paitsi ehkä ne käyttöoikeusjutskat. Lue materiaalista tiedostojen oikeuksiin liittyvät fläbyt, ehkä virtuaalinäytöistä yms. kohdasta Tästä saattaa olla myös hyötyä... ja lisähuomautuksista kohta www-sivun olemus. Matskusivulla on myös linkkejä HTML-tutoriaaleihin niille, jotka ovat niistä kiinnostuneita.

  1. Mitä tiedostoja kotihakemistossasi on? (katso myös piilotiedostot).
  2. Tee public_html-hakemistoosi alihakemisto koehak2 ja kopioi sinne vitsi.txt. Aseta vitsi.txt:lle sellaiset oikeudet että kaverisikin pääsevät katsomaan sitä. (Muista myös hakemiston oikeudet.)
  3. Tee index.html-sivuusi linkki vitsi.txt-tiedostoon. WWW-sivussa linkki tehdään näin: <a href="vitsi.txt"> tekstiä… </a>. Lisää tämä johonkin kohtaan index.html-tiedostoa emacs:lla.
  4. Pystyvätkö käyttäjät lukemaan toistensa tekemiä tiedostoja? Perustele.
  5. Kuinka monta paikkaa tiedostojärjestelmästä onnistut löytämään, joita sinulla ei ole oikeutta selailla?
  6. Voiko olla tilanne, jossa et voi mitenkään poistaa hakemistoa, jonka omistaja olet (eli ls -l näyttää hakemiston omistajaksi sinut)? Millainen tilanne?
  7. Emacsissa on järkyttävä määrä toimintoja. Monet niistä eivät ole sidottuja (bound) mihinkään näppäinkomentoon, vaan niitä voi käyttää painamalla ensin M-x (eli alt-x, tai esc ja sitten x), kirjoittamalla toiminnon nimen ja painamalla Enter (jota emacs kutsuu nimellä RET). Kokeile ainakin M-x gomoku RET ja M-x doctor RET. Talleta käymäsi keskustelu nimellä tohtori.txt.
  8. Tee www-hakemistoosi alihakemistot julkinen ja salainen ja kopioi tohtori.txt molempiin niistä. Aseta näiden oikeudet siten, että tohtori.txt on selaimella haettavissa molemmista, mutta listauksen hakemiston sisältämistä tiedostoista näkee selaimella vain julkinen-hakemistosta, ei salainen-hakemistosta.
  9. 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.
  10. Mitä tekee komento lpq? Mitä muita komentoja liittyy samaan aihepiiriin?
  11. Kirjoita kaunis runo ja tulosta se.
  12. Tutustu emacs:n avukkeisiin, eli katso, mitä kaikkea apuvalikosta (jonka saa näkyviin C-h:lla) löytyy.
  13. Etsi emacs:sta toiminto, jolla voit korvata merkkijonon tiedostosta toisella.
  14. Löydätkö man-sivuja, joiden BUGS-osiossa olisi jotain hauskaa?
  15. (ekstrakysymys! Tästä voi saada tuplapisteet.) Jos tietokone ei tee, mitä haluat, mitä kannattaa tehdä? Miksi?

4. luentokerta (legot ja putket)

Hae itsellesi alice11.txt esimerkiksi komennolla wget http://www.ling.helsinki.fi/~pkalliok/public_html/alice11.txt

Nämä lienevät vaikeimmat harjoitukset (elleivät säännölliset lausekkeet myöhemmin tuota vielä enemmän vaikeuksia). Tehtävissä pitää muodostaa komento, joka tuottaa oikean vastauksen — ei vain komentoa, joka tuottaa vastauksen, josta te pystytte päättelemään oikean vastauksen. En pystynyt pitämään lupaustani siitä, että harjoituksia olisi vähemmän kuin aiemmilla kerroilla, päin vastoin. Toisaalta monet harjoituksista ovat aivan läpihuutojuttuja, ja niistä saa paljon helppoja pisteitä.

Seitsemän ensimmäistä tehtävää tehdään tiedostolle alice11.txt (tuloksia ei tarvitse panna mihinkään tiedostoon, olemme kiinnostuneet vain nämä tuottavista komennoista):

  1. muunna pienet kirjaimet isoiksi
  2. laske tiedoston rivimäärä
  3. muunna tiedostosta välilyönnit rivinvaihdoiksi (tr kutsuu niitä \\012)
  4. suodata edelliskohdan sanoista vain ne, jotka sisältävät kirjaimen a
  5. näytä edelliskohdan sanoista vain a-kirjainta edeltävä osa
  6. muunna tiedostosta rivinvaihdot välilyönneiksi ja välimerkit rivinvaihdoiksi
  7. näytä edelliskohdan perusteella tiedoston lauseiden ensimmäiset sanat
  8. Laske työhakemistossa olevien tiedostojen (sis. hakemistot) määrä.
  9. Selitä (itsellesi), mitä tulostuu komennolla head -5 /usr/share/dict/words | tail -3.
  10. Anna numeroitu listaus sisällä olevista käyttäjistä. Alkuun pääsee komennolla who.
  11. Millä komennolla etsit merkkijonoa gooz työhakemiston tiedostoista, joiden nimessä on merkkijono foo?
  12. 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.)
  13. 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.
  14. Laadi syötteen normalisoivat käskyt. Eli muuta kaikki aakkoset pieniksi ja poista aakkosiin kuulumattomat merkit (älä välilyöntiä ja rivinvaihtomerkkiä).
  15. 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. Tiedoston saat täältä.
  16. Komento rev kääntää jokaisen syötetiedoston rivin merkki merkiltä väärin päin. Mitä ihmeen hyötyä tällaisesta komennosta voi olla?
  17. Tee komento, joka tuottaa listan tiedoston sanoista ja niiden esiintymiskerroista esiintymistiheysjärjestyksessä.
  18. 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.
  19. Selvitä kokeilemalla, mitä merkkejä unix-tiedoston nimessä ei voi olla.
  20. 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.

5. luentokerta (etäyhteydet)

  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. Miten ssh suhtautuu Ctrl-Z:an? Katso man-sivuilta, miten ssh:n saa pysäytetyksi.
  5. Ottakaa yhteyttä laitoksen mars-palvelimelle ja katsokaa, olisiko siellä joku, jonka kanssa voisi alkaa keskustella ytalk-ohjelmalla. Alkakaa.
  6. Katso, onko tuttujasi ja/tai kurssin pitäjiä (pkalliok, mpsilfve) kirjautuneena mars- tai venus-palvelimelle, ja lähetä heille häiritseviä viestejä write-komennolla.

6. luentokerta (kertaus, aliakset, alustustiedostot)

  1. Tutki (uudestaan) history:sta (ehkä jotenkin prosessoiden), mitä komentoja olet käyttänyt runsaasti. Tee niistä aliasmääritykset .bashrc-tiedostoosi.
  2. Laitoksella on määritetty rm-komento aliakseksi, joka kutsuu oikeaa rm-komentoa siten, että sille annetaan valitsin -i (jonka kuvauksen löydät man-sivulta). Pohdi, onko tämä toiminta hyvä vai ei, perustele, ja mahdollisesti lisää .bashrc-tiedostoosi tämän aliaksen poisto.

Vapaaehtoiset lisätehtävät (numeroi tehtäväpalautuksessa L1, L2 jne)

  1. Keksitkö mitään keinoa listata työhakemiston tiedostoja ilman ls-komentoa? Entä mitään keinoa tuhota työhakemistosta a-alkuiset tiedostot ilman komentotulkin jokerimerkkiä (*)?
  2. 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.
  3. Testaa prosessinhallintaa:
    • Aloita tehtävä man man.
    • Pysäytä tehtävä odotustilaan.
    • Aloita tehtävä man less.
    • Pysäytä sekin.
    • Mitä sanoo komento jobs?
    • Mitä sanoo komento ps?
    • Siirrä tehtävä etualalle. Mitä tapahtui?
    • Käynnistä tehtävä man man uudelleen, pysäytä se ja tapa se.
    • Onko sinulla jäljellä joitain töitä (jobs)?
  4. Millä saat selville kaikkien /web/ling -hakemistossa olevien HTML-sivujen otsikkokenttien sisällön? (HTML-sivuilla otsikkokenttä on <title> ja </title> -merkkijonojen välissä)
  5. Muodosta komento, jolla voit katsoa, kuinka monta kertaa olet ehtinyt kirjautua sisään palvelimelle (esim. venus). Alkuun pääsee komennolla last, joka näyttää listan koneen kirjautumisista.

7. luentokerta (graafinen ympäristö, ymp.muuttujat)

  1. Miten saat selville ympäristömuuttujan arvon?
  2. Kokeile PRINTER-muuttujan arvon asettamista. Tarkista, että arvo vaihtui.
  3. Kirjoita (emacs:lla) vertaileva essee (pituus neljä virkettä tai hieman enemmän) neljästä eri tavasta ajaa useampia ohjelmia yhtaikaa: useampien komentotulkkien käynnistäminen graafisessa ympäristössä, virtuaalinäytöt (Ctrl-Alt-F1 … Ctrl-Alt-F7), tehtävänhallinta (&-merkki, Ctrl-Z, fg ja bg) sekä screen. Jos kirjoituksesta uhkaa tulla pitkä, voit vertailla myös vain kahta näistä.

Vapaaehtoiset lisätehtävät (numeroi L1, L2 jne.):

  1. Tee kuvankäsittelyohjelmalla opiskelijatilan seinälle kuva, jossa on jonkun kuuluisan tyypin naama ja jokin hauska teksti.
  2. Tee itsellesi .plan-tiedosto. Aseta oikeudet niin, että muu maailma voi finger:lla nähdä sen sisällön. Testaa komennolla finger ktunnus (jossa ktunnus = oma käyttäjätunnuksesi).
  3. emacs tekee varmuuskopiotiedostoja, jotka loppuvat tilde-merkkiin (~). Katso diff:lla, mitä olet muuttanut viimeksi kotisivustasi.
  4. Taas kerran, jos harjoituksista on tullut tavaraa kotihakemistoosi, siivoa ne johonkin järkevään alihakemistoon tai tuhoa.

8. luentokirja

  1. Hae www:stä kotihakemistoosi jokin sivu ja jokin kuva. Pakkaa ne. Minkä verran ne veivät ennen pakkaamista, minkä verran pakkaamisen jälkeen?
  2. Tee tämän kurssin harjoitushakemistostasi pakattu tar-arkisto. Poista harjoitushakemisto. Juhli.
  3. Etsi kaikki laitoksen käyttäjät, joiden nimi alkaa P:llä ja loppuu i-kirjaimeen.

Vapaaehtoiset lisätehtävät (numeroi L1, L2 jne.):

  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.

Hae laitoksen sivuilta:

Sivua muokattu viimeksi:
Copyright © 2003-2004 Helsingin yliopisto. Kaikki oikeudet pidätetään.