\documentclass[finnish,a4paper,12pt,notitlepage]{article}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% \usepackage{url}

\title{Unix-perusteet:\\opetusohjelma}
\date{$ $Date: 2004/02/05 20:18:37 $ $}

\newcommand{\www}{\textsc{www}}

\begin{document}
\maketitle
\tableofcontents

\section {Kurssin tarkoitus}

Kurssilla opiskelijat tutustutetaan Unix"-ympäristön käyttöön
päivittäisessä, normaalissa tietokonetyöskentelyssä.  Pääpaino on
ympäristöstä toiseen jotakuinkin samanlaisena pysyvän
komentoriviympäristön opettelussa, vaikka jonkin verran opetellaan myös
laitoksen graafisen ympäristön (KDE:n ja siihen lisättyjen ohjelmien)
käyttöä.

Kurssilla pääpaino ei ole niinkään yksittäisissä työkaluissa vaan
järjestelmän peruskäsitteissä.  Opiskelijoiden on tarkoitus saada
jonkinlainen kuva siitä, mitä ovat tiedostot, kuinka ne on järjestelty
tiedostojärjestelmään, mikä on komentojen yleinen rakenne, miten
etsitään tietoa erilaisista asioista, miten ohjelmat ja käyttöoikeudet
toimivat, ja miten koneiden välinen kommunikaatio toimii.  Tietyt
kaikelle työlle tärkeät työkalut, kuten tekstinmuokkaus"-, etäyhteys"- ja
sähköpostiohjelmat kuuluvat kuitenkin kurssin piiriin.  Sekä tietysti
komentorivitulkki itse.

Kurssin käytyään opiskelijoilla pitäisi olla valmiudet järjestellä
tiedostoja ja tutkia niitä, tehdä kirjoitus"- ym. perustöitä laitoksen
ympäristössä, sekä kyky oppia ja opetella lisää.

\section {Kurssin rakenne}

Kurssi on suunniteltu 6 päivän kokonaisuudeksi.  Jokaisen päivän lopussa
annetaan harjoitustehtäviä, jotka on tehtävä seuraavan päivän
kokoontumiskerraksi.  Harjoitustehtävien tarkastamiseen pyritään
käyttämään niin vähän aikaa kuin suinkin.

\section {Opetusohjelma}

\subsection {Sisään"- ja uloskirjautumiset, komentorivi,
tiedostojärjestelmä}

Tämä osio käydään läpi ensimmäisellä ja toisella opetuskerralla.

Opeteltavat kokonaisuudet:
\begin{itemize}
\item Työaseman käyttöönotto, poistuminen, lukittaminen, hätäpoistuminen
\item Ohjelmien käynnistäminen graafisessa ympäristössä, niiden
sulkeminen, komentotulkin käynnistys
\item Tiedostojärjestelmän rakenne, tiedostojen nimien antaminen,
pistetiedostot, (käyttöoikeudet)
\item Komentojen perusrakenne, tehtävänjako komentotulkin ja ohjelmien
välillä
\item Sähköpostin luku ja lähetys
\end{itemize}

Uudet komennot: cd, pwd, ls, chmod, mv, rm, cp, mkdir, rmdir, cat, less,
echo, date, exit, history, man, apropos, (pine).  Uudet shell"-ominaisuudet:
historia, globbaus (\verb"*"), täydennys (tab), työhakemisto, keskeytys
(C-c), tulosteen ohjaus tiedostoon.

Tehtävät:
\begin{enumerate}
\item Keksi jokin äärimmäisen epäkäytännöllinen tapa mennä hakemistoon
\verb"/web/ling".
\item echo-komennolla ja \verb">"-ohjauksella voit luoda yksinkertaisia
tiedostoja.  Miten voit kopioida tiedoston käyttämättä cp-komentoa?
\item Pystyvätkö käyttäjät lukemaan toistensa tekemiä tiedostoja?
Perustele.
\item Kuinka monta paikkaa tiedostojärjestelmästä onnistut löytämään,
joita sinulla ei ole oikeutta selailla?
\item Voiko olla tilanne, jossa et voi poistaa hakemistoa, jonka
omistaja olet (eli ls -l näyttää hakemiston omistajaksi sinut)?
Millainen tilanne?
\item Mitä ihmettä ls -l:n tulosteen toisessa sarakkeessa oleva luku
mahtaa merkitä?
\item Ota selvää, mitä umask-komento tekee.  (Jos tämä osoittautuu liian
vaikeaksi, ota selvää, mitä sleep-komento tekee.)
\end{enumerate}

\subsection {Tekstin muokkaus, \www}

Tämä osio käydään kolmannella opetuskerralla.  Hommaa voidaan aloittaa
jo toisen kerran lopussa, jos siltä tuntuu.

Opeteltavat kokonaisuudet:
\begin{itemize}
\item Mikä on tiedosto?
\item Tekstieditorin peruskäyttö
\item \www :n toiminta, (\textsc{url}:t)
\item Kotisivun tekeminen, selailu (ja tulostus)
\end{itemize}

Uudet komennot: emacs, (w3m), file, touch, ln, (fg, bg), a2ps.  Uudet
shell"-ominaisuudet: tausta"-ajo (\verb"&"), pysäyttäminen.

Tehtävät:
\begin{enumerate}
\item Hae jokin suosikkisivusi (esimerkiksi www.google.fi) selaimella.
Talleta se kotihakemistoosi.  Muokkaa sitä, lisäile esim. siivottomia
huomautuksia ja muuta roinaa.  Tarkastele lopputulosta selaimella.
\item 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.
\item Minkälaisia tiedostoja sijaitsee hakemiston \verb"/usr/lib" alla?
Entä \verb"/usr/share"?
\item Mitä tekee komento lpq?
\item Lisää kotisivuillesi linkkiosio, ts. linkkejä kaikkiin
mielenkiintoisiin sivustoihin, jotka olet löytänyt.
\item Kirjoita kaunis runo ja tulosta se.
\item Suunnittele jokin kiva hakemistorakenne kotihakemistollesi.
(Tarkoittaa, että päätät, miten nykyiset ja tulevat tiedostot jakautuvat
alihakemistoihin kotihakemistossa.)
\item Etsi emacsista toiminto, jolla voit korvata merkkijonon
tiedostosta toisella.
\end{enumerate}

\subsection {Raakatekstin käsittely}

Tämä osio käydään neljännellä opetuskerralla.  Asiaa on aika paljon,
joten se saa valua jonkin verran sekä kolmannen että viidennen
opetuskerran puolelle.

Kokonaisuudet:
\begin{itemize}
\item Pakkausohjelmat
\item Tiedostojen etsintä
\item Tiedon käsittely Unixin filtterikomennoilla
\item Tulostus
\item Alun säännöllisiä lausekkeita
\end{itemize}

Uudet komennot: tar, gzip, find, locate, du, (df), sort, diff, cut,
grep, tr, uniq, cat (uudestaan), head, tail, wc, (xargs), (sed), fmt,
(pr).  Uudet shell"-ominaisuudet: virtojen ohjaus, putket,
komentosubstituutio, aliakset, lainausmerkit.

Tehtävät:
\begin{enumerate}
\item Komento ``rev'' kääntää jokaisen syötetiedoston rivin merkki
merkiltä väärin päin.  Mitä ihmeen hyötyä tällaisesta komennosta voi
olla?
\item Tee komento, joka tuottaa listan tiedoston sanoista ja niiden
esiintymiskerroista esiintymistiheysjärjestyksessä.
\item Komento ``pr'' on suunniteltu tekstin palstoittamiseen.  Muodosta
komento, joka tulostaa 72 merkkiä leveän tekstin siten, että siinä on
kaksi 37 merkin levyistä palstaa.
\item Keksitkö mitään keinoa listata työhakemiston tiedostoja ilman
ls"-komentoa?  Entä mitään keinoa tuhota työhakemistosta a"-alkuiset
tiedostot ilman komentotulkin jokerimerkkiä (\verb"*")?
\item Katso komentorivihistoriasta, mitkä ovat yleisimmin käyttämäsi
käskyt.  Tee niille lyhyet aliakset.  Sijoita kyseiset aliakset
kotihakemiston \verb".bashrc""-tiedostoon käyttämättä editoria.
\item Miten saat selville, kuinka monta tiedostoa yhdessä hakemistossa
ja sen kaikissa alihakemistoissa yhteensä on?
\item 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.
\item Tiedostossa \verb"/usr/share/dict/words" on pitkähkö lista englannin
kielen sanoja.  Mitä hyötyä tästä voisi olla?
\item 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.
\item Selvitä kokeilemalla, mitä merkkejä unix-tiedoston nimessä ei voi
olla.
\item emacs tekee varmuuskopiotiedostoja, jotka loppuvat tilde-merkkiin
($\sim$).  Katso diffillä, mitä olet muuttanut viimeksi kotisivustasi.
\end{enumerate}

\subsection {Etäkäyttö, käyttäjätietojen selvitys, prosessit}

Käydään viidennellä opetuskerralla.

Kokonaisuudet:
\begin{itemize}
\item Unix monen käyttäjän ympäristönä
\item Prosessien tarkastelu ja hallinta
\item Miten verkko toimii (perusteet)
\item ssh-etäyhteydet
\item Tietojen hakeminen itsestä ja muista
\item Ympäristömuuttujat
\item man-sivujen sisällön ymmärtäminen
\item Käyttäjien välinen keskustelu
\end{itemize}

Uudet komennot: ssh, scp, finger, w, who, last, write, mesg, ytalk, ps,
kill, passwd, groups, id, (screen), export, (host, ping, traceroute).
Uudet shell"-ominaisuudet: muuttujasubstituutio, (for).

Tehtävät:
\begin{enumerate}
\item Kirjaudu esim.~marsille sisään useita kertoja yhtaikaa.
Tarkastele, millaisia prosesseja sisäänkirjautumisesi aiheuttavat.
\item Anna komento \verb"yes".  Mitä se tekee?  Miten sen saa
lopettamaan?
\item Komennolla \verb"uptime" voi tarkastella koneen kuormitusta.
Käynnistä taustalle muutamia \verb"yes >/dev/null" "-prosesseja,
tarkastele koneen kuormituksen kehittymistä, ja tapa prosessit.
\item Käynnistä esim.~marsissa taustalle yksi \verb"yes >/dev/null" ja
yksi \verb"nohup yes >/dev/null".  Kirjaudu ulos, kirjaudu taas
sisään, ja katso, selvisivätkö prosessit hengissä.
\item Miten ssh suhtautuu Ctrl"-Z:an?  Katso man"-sivuilta, miten ssh:n
saa pysäytetyksi.
\item Sopikaa sähköpostilla jokin aika, jolloin kirjaudutte
esim.~marsiin ja alatte keskustella keskenänne \verb"ytalk""-ohjelmalla.
Noudattakaa sopimusta.
\item Katso, keitä kaikkia käyttäjiä laitoksella on, joilla on sama
sukunimi kuin itselläsi.
\item Muodosta komento, jolla voit katsoa, kuinka monta kertaa olet
ehtinyt kirjautua sisään marsiin / venukseen.
\item Löydätkö man"-sivuja, joiden BUGS"-osiossa olisi jotain hauskaa?
\item Katso, onko kurssin vetäjiä kirjautuneena mars"- tai
venus"-palvelimelle, ja lähetä heille häiritseviä viestejä
\verb"write""-komennolla.
\end{enumerate}

\subsection {Kivoja ja hyödyllisiä juttuja, kertausta}

Kokonaisuudet:
\begin{itemize}
\item Säännölliset lausekkeet puolikunnolla
\end{itemize}

Tällä kerralla kerrotaan, mitä kaikkea kivaa Unix-ympäristö tarjoaa
lisäksi, ja mahdollisesti käydään vähän läpi näitä järjestelmiä.
Lisäksi kerrataan vanhastaan epäselviksi jääneitä asioita.  Mahdollisia
uusia aihepiirejä ovat cron, latex, skriptit, versionhallinta, make,
ohjelmien asentaminen, wget, rsync, XML"-työkalut ja niin edelleen.  Tai
sitten voisi käydä läpi uutisryhmien ja mahdollisesti myös IRC:n
käyttöä.

\end{document}

