\documentclass[finnish,a4]{seminar}

\include{slide-preamble}

\begin{document}

\slidepagestyle{sectslide}
\centerslidesfalse

\renewcommand{\thercsdate}{$ $Date: 2004/02/05 20:18:37 $ $}

\slidesection{Käyttäjät, prosessit, etäyhteydet}

\begin{slide}

\slideheading{Käsiteltävät asiat:}

\bi
\item Unix monen käyttäjän ympäristönä
\item Prosessien tarkastelu ja hallinta
\item Miten verkko toimii (perusteet)
\item \cmdln{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
\ei

\end{slide}

\slidesection{Unix monen käyttäjän ympäristönä}

\begin{slide}

\slideheading{Monikäyttäjäisyys --- yleiskuva}

\bi
\item Koneeseen voi kirjautua sisään eri reittejä: näyttö ja näppis,
vanhanaikaiset päätteet, verkon (esim. Internet) yli toimivat
etäyhteydet
\item Kaikilla sisäänkirjautumistavoilla periaatteessa sama ympäristö,
komentotulkki
\item Koneessa on yhtaikaa toiminnassa useita \newterm{prosesseja}, eli
käynnissä olevia ohjelmia (esim.~kunkin sisäänkirjautuneen käyttäjän
komentotulkki)
\item Prosessit toimivat suojattuina toisiltaan, mikä sallii useampien
käyttäjien ajaa helposti omia prosessejaan koneessa yhtaikaa
\ei

\end{slide}

\begin{slide}

\slideheading{Puuduttavat yksityiskohdat \extrastuff}

\bi
\item Kaikki prosessit toimivat jonkin käyttäjän oikeuksilla (tätä
käyttäjätunnusta kutsutaan prosessin \newterm{vaikuttavaksi
käyttäjätunnukseksi}, ``euid'')
\item Erilaiset koneeseen päästävät järjestelmät (ssh"-palvelin,
sisäänkirjautumisruutu) toimivat ylläpitäjän oikeuksilla
\item Käyttäjän tullessa sisään ne varmistavat, että hän on kuka
väittääkin olevansa (esim. salasana)
\item Tämän jälkeen ne käynnistävät käyttäjän oletuskomentotulkin (login
shell) käyttäjän oikeuksilla
\item Kaikki tästä komentotulkista käynnistetyt prosessit perivät
sen oikeudet, ts.~komentotulkista ajettu ohjelma toimii samoilla
oikeuksilla kuin komentotulkki
\ei

\end{slide}

\begin{slide}

\slideheading{Graafinen käyttöympäristö}

\bi
\item Periaatteessa yksi ohjelma muiden joukossa (mutta toimii
korotetuilla oikeuksilla voidakseen piirrellä näytölle suoraan)
\item Muut ohjelmat, \newterm{X-asiakkaat} (esim.~\cmdln{mozilla})
ottavat siihen yhteyttä \envvar{display}-ympäristömuuttujan perusteella
\slideref{Ympäristömuuttujat} \extrastuff
\item Tästä syystä graafista käyttöympäristöä kutsutaan
\newterm{X-palvelimeksi} ja siinä voi olla myös toisella koneella
toimivien ohjelmien ikkunoita
\item Graafisten ohjelmien kaatuessa havaittava ikkunoiden yhtäkkinen
katoaminen on seurausta siitä, että käyttöjärjestelmä sulkee kaatuneen
ohjelman kaikki yhteydet
\ei

\end{slide}

\slidesection{Prosessien tarkastelu ja hallinta}

\begin{slide}

\slideheading{Prosessit --- yleiskuva}

\bi
\item Prosessi tarkoittaa ohjelman yhtä käynnissä olevaa instanssia;
jokaisella prosessilla on yksiselitteinen tunnusnumero, ``pid''
\item Kaikkia prosesseja ajetaan periaatteessa toisistaan riippumatta
yhtaikaa, mutta ne voivat odotella toisia prosesseja
\item Omista ja muiden prosesseista on nähtävillä samat tiedot
\item Prosesseja hallitaan lähettämällä niille \newterm{signaaleja},
jotka ovat käytännössä pyyntöjä / käskyjä prosessille tehdä jotain
\item Käyttäjä voi lähettää signaaleja vain omille (eli omilla
oikeuksillaan toimiville) prosesseilleen
\item Reagointi signaaleihin vaihtelee jonkin verran ohjelmasta
riippuen, mutta on enimmäkseen arvattavaa
\ei

\end{slide}

\begin{slide}

\slideheading{Prosessilistaus}

\bi
\item Ensisijainen ohjelma prosessilistauksen tarkasteluun on \cmdln{ps}.
\item Kaziljoona komentolinjaoptiota listauksen muunteluun, jotka
(Linuxissa) annetaan ilman viivaa, esim.~\cmdln{ps auwx}
\item Listauksen pidennys: a = kaikki interaktiiviset prosessit, x =
myös taustaprosessit (esim. palvelimet)
\item Lisää tietoa: l = ``pitkä'' listaus, u = näyttää myös, kenen
oikeuksilla mikäkin prosessi toimii (pelkkä \cmdln{ps u} laajentaa myös
listauksen kaikkiin omiin prosesseihin)
\item Lisää rakennetta: w = näyttää pidemmätkin linjat, f = näyttää,
mikä prosessi on käynnistänyt minkäkin (eli prosessihierarkia)
\newslide
\item Itse asiassa \cmdln{ps}:lla on myös viivan kanssa annettavia
optioita, jotka aiheuttavat (joskus) eri asioita kuin viivattomat (huoh)
\item Useimmilla komentolinjaoptioilla ei tee mitään
\item Muita hyödyllisiä ohjelmia: \cmdln{pstree}, \cmdln{top}
\ei

\vfil

\notebox{\cmdln{alias psg='ps wuxa | grep'} on huomattavan hyödyllinen,
kun yrittää esim.~selvittää, onko jokin graafinen ohjelma käynnistynyt
vai ei}

\end{slide}

\begin{slide}

\slideheading{Signaalien lähettäminen}

\bi
\item Signaaleja tarvitaan esim.~jumittuneen ohjelman kaatamiseen,
joskus johonkin sivistyneempäänkin
\item Ensisijainen komento tähän on \cmdln{kill}, kehittyneempi versio
siitä \cmdln{killall}
\item Molemmat ottavat kaksi argumenttia: mikä signaali lähetetään ja
mille prosessille, esim.~\cmdln{kill -TERM 2094}
\item \cmdln{kill} ottaa prosessinumeron (pid), joita voi selvittää
\cmdln{ps}:lla; \cmdln{killall} ottaa prosessin ohjelman nimen ja
lähettää signaalin kaikille tästä ohjelmasta käynnistetyille
prosesseille.
\item Signaaleja lähtee prosesseille myös tietyissä tilanteissa
automaattisesti.
\ei

\end{slide}

\begin{slide}

\slideheading{Käyttäjän lähettämien signaalien merkitys}

Monilla signaaleilla on hyvin vakiintunut merkitys.

\begin{tabular}{lp{0.8\textwidth}}

Signaali & merkitys \\
\hline

TERM & pyyntö lopettaa \\
INT & Keskeytyspyyntö (Ctrl-C lähettää) \\
TSTP & Pysäytyspyyntö (Ctrl-Z lähettää) \slideref{Työnhallinta} \\
KILL & lopettaa ohjelman heti \\

\end{tabular}

Käytännössä, jos haluaa lopettaa ohjelman, sille kannattaa lähettää
ensin TERM- ja sitten KILL-signaali.  Joitain taustaprosesseja hallitaan
signaaleilla; merkitykset löytyvät kyseisten ohjelmien
\cmdln{man}-sivulta.

\end{slide}

\begin{slide}

\slideheading{Käyttöjärjestelmän lähettämiä \extrastuff}

\begin{tabular}{lp{0.4\textwidth}p{0.4\textwidth}}

Signaali & milloin & mitä tyypillisesti tekee \\
\hline

HUP & yhteys menee poikki & sama kuin TERM \\
PIPE & putken vastaanottava pää suljetaan & sama kuin TERM \\
SEGV & prosessi yritti käyttää muistialuetta, joka ei kuulu sille &
prosessin tilasta talletetaan kuva, ``core'', vikaselvitystä varten \\
WINCH & ikkunan kokoa on muutettu & ohjelma muuttuu uuteen ikkunaan
sopivaksi \\
TTIN & prosessi on taustalla \slideref{Työnhallinta} ja yritti lukea
syötettä & prosessi pysäytetään

\end{tabular}

\end{slide}

\begin{slide}

\slideheading{Työnhallinta}

\bi
\item ``Job control'', komentotulkin ja käyttöjärjestelmän yhteistyönä
toteutettu tapa ajaa nätisti useampia ohjelmia yhtaikaa
\item Useimmille ohjelmille läpinäkyvä
\item Yksittäisestä komennosta käynnistyneet prosessit ovat yksi
\newterm{työ} (job)
\item Työllä kolme tilaa: edustalla, taustalla ja pysäytetty
\item Vain yksi työ (tai komentotulkki itse) on edustalla kerrallaan
\item Komentotulkki odottaa edustalla olevan työn päättymistä, taustalla
olevat taas toimivat omia aikojaan (voit antaa muita komentoja sillä
välin).
\newslide
\item Työ käynnistetään komentotulkista taustalle panemalla komennon
perään \&-merkki
\item Edustalla olevan työn voi pysäyttää (ja palata komentotulkkiin)
painamalla Ctrl-Z
\item Komentotulkista työt voi listata komennolla \cmdln{jobs}, ja
niihin viitataan merkinnöillä \cmdln{\%1} \ldots \cmdln{\%n}
\item Taustalla olevan tai pysäytetyn työn voi tuoda edustalle (ja
käynnistää) komennolla \cmdln{fg} tai antamalla työn numeron
(esim.~\cmdln{\%2})
\item Pysäytetyn työn voi käynnistää taustalle komennolla \cmdln{bg}
\item Myös \cmdln{kill} ymmärtää \%-määrityksiä (esim.~\cmdln{kill \%1})
\ei

\end{slide}

\slidesection{Miten verkko toimii (perusteet)}

\begin{slide}

\slideheading{Verkko --- yleiskuva}

\bi
\item Tietokoneet / ohjelmat keskustelevat keskenään
\newterm{protokollilla}, jotka ovat tavallaan käyttötarkoitukseltaan
rajoitettuja kieliä
\item Unixissa (ja Internetissä) käytännössä kaikki tietokoneiden
välinen keskustelu hoidetaan TCP/IP"-protokollalla (ja UDP/IP)
\item TCP/IP-protokollassa jokaisella koneella on oma osoite, esim.
128.214.78.153, sekä jokaisessa koneessa 65536 mahdollista
\newterm{porttia}. \extrastuff
\item TCP/IP tarjoaa mahdollisuuden muodostaa \newterm{yhteyksiä} kahden
koneen kahden portin välille.
\item Yhteys syntyy, kun yksi ohjelma kuuntelee tiettyä porttia ja
toinen muodostaa yhteyden kyseiseen porttiin.
\newslide
\item Joitain portteja kuuntelee jatkuvasti \newterm{palvelinohjelma},
joka tarjoaa joitain tiettyjä palveluita ohjelmille, jotka ottavat
siihen yhteyttä.
\item Jokaisella palvelulla on oma protokolla, joka on suunniteltu
kyseisen palvelun tarjoamiseen, sekä määrätty porttinumero, josta
kyseinen palvelu tyypillisesti löytyy.
\ei

\extrastuff\ Esimerkkejä yleisesti tunnetuista palveluista:
\begin{tabular}{lll}

Palvelu & portti & protokolla \\
\hline

\www & 80 & HTTP \\
sähköpostin lähetys & 25 & SMTP \\
sähköpostin luku & 143 & IMAP \\
ssh"-etäyhteys & 22 & SSH \\
koneiden nimet & 53 & BIND

\end{tabular}

\end{slide}

\begin{slide}

\slideheading{Esimerkki: \www-sivun haku \extrastuff}

\begin{enumerate}
\item Naputtelen selaimeen osoitteen, esim.
\texttt{http://www.ling.helsinki.fi/atk/}
\item Selain ottaa yhteyttä nimipalvelimeen porttiin 53 ja kysyy
BIND-protokollalla, mikä osoite on koneella
\texttt{www.ling.helsinki.fi}
\item Saatuaan vastauksen (BIND-protokollalla) selain ottaa yhteyden
kyseiseen osoitteeseen porttiin 80 ja pyytää (HTTP-protokollalla) sitä
antamaan sivun \texttt{/atk/}
\item Vastauksena annetaan (HTTP-protokollalla) kyseinen sivu.
Tyypillisesti sivu on HTML-muotoista tekstiä, jonka selain sitten
näyttää ruudulla mielensä mukaan.
\end{enumerate}

\end{slide}

\slidesection{ssh"-etäyhteydet}

\begin{slide}

\slideheading{ssh --- yleiskuva}

\bi
\item Antaa käyttää komentotulkkia palvelimella verkkoyhteyden yli
\item Korvaa aiemmat etäyhteysprotokollat (rsh ja telnet)
\item Lisäominaisuuksia: salakirjoitus (verkkosalakuuntelun
estämiseksi), muiden yhteyksien salakirjoitettu tunnelointi, pöljoonat
uudet autentikointitavat (siis muutakin kuin käyttäjätunnus ja
salasana), tiedostonsiirto
\item Monet ohjelmat osaavat myös käyttää \cmdln{ssh}:a
yhteydenmuodostustapana omille protokollilleen (ja siten palveluilleen),
millä vältetään autentikoinnin ja salakirjoituksen uudelleentoteutus
joka protokollaan.
\ei

\end{slide}

\begin{slide}

\slideheading{Tunnelointi \extrastuff \extrastuff}

SSH-protokolla sallii \newterm{multipleksoida} yhteen SSH-yhteyteen
monta merkkivirtayhteyttä.  \cmdln{ssh} käyttää tätä toteuttaakseen
muiden yhteyksien ``läpinäkyvän'' salakirjoituksen, tunneloinnin.

\newcommand{\myhdr}[1]{\multicolumn{3}{l}{\tiny #1}}
\newcommand{\myline}[3]{
\fbox{\parbox{3.5cm}{\raggedleft\tiny #1}} & #2 &
\fbox{\parbox{3.5cm}{\raggedright\tiny #3}}}
\begin{tabular}{lp{1.1cm}l}

\mbox{\tiny Käyttäjän kone} & & \texttt{\tiny mars.ling} \\
\myline{\cmdln{bash}}{}
{22 \cmdln{sshd} kuuntelee \\
25 \cmdln{sendmail} kuuntelee} \\

\myhdr{\cmdln{ssh -L 2025:localhost:25 mars}} \\
\myline
{\cmdln{bash} \\
\cmdln{ssh} 3398 \\
kuuntelee \cmdln{ssh} 2025}{}
{22 \cmdln{sshd} kuuntelee \\
25 \cmdln{sendmail} kuuntelee \\
22 \cmdln{sshd, bash}} \\

\myhdr{\cmdln{telnet localhost 2025}} \\
\myline
{\cmdln{bash} \\
\cmdln{ssh} 3398 \\
kuuntelee \cmdln{ssh} 2025 \\
\cmdln{ssh} 2025 \\
\cmdln{telnet} 3399}{}
{22 \cmdln{sshd} kuuntelee \\
25 \cmdln{sendmail} kuuntelee \\
22 \cmdln{sshd, bash} \\
4980 \cmdln{sshd} \\
25 \cmdln{sendmail}}

\end{tabular}

\end{slide}

\begin{slide}

\slideheading{ssh"-avainautentikointi}

\bi
\item Autentikointi käy avainparilla: sisään pääsee, jos yksityinen
avain ja julkinen avain täsmäävät.  Avaimista ei voi päätellä toisiaan.
\item Avainpari muodostetaan komennolla \cmdln{ssh-keygen -t dsa}
\item Yksityinen avain on tallessa \cmdln{.ssh/id\_dsa}"-tiedostossa, sen
pari \cmdln{.ssh/id\_dsa.pub} lisätään kohdekoneen
\cmdln{.ssh/authorized\_keys}"-tiedostoon.
\item Yksityisen avaimen voi suojata salasanalla.
\item Salasanalla suojatun avaimen voi ladata muistiin komennoilla
\cmdln{ssh-agent} ja \cmdln{ssh-add}.  \cmdln{ssh-agent}:n on tarkoitus
olla käynnissä koko istunnon ajan.
\ei

\end{slide}

\begin{slide}

\slideheading{X-tunnelointi \extrastuff}

\cmdln{ssh} käyttää tunnelointia \slideref{Tunnelointi \extrastuff
\extrastuff} graafisten ohjelmien X-yhteyksien suojaamiseen
salakirjoituksella.  Tähän liittyy jonkin verran lisäsäätöä, joka saa
tunneloinnin toimimaan ilman, että tarvitsee tehdä mitään kummempaa.

X-ohjelmat ottavat yhteyttä käyttäjän X"-palvelimeen
\envvar{display}"-ympäristömuuttujan perusteella
\slideref{Graafinen käyttöympäristö}.  Tunneloitaessa \cmdln{ssh}
perustaa etäkoneelle pseudo"-X"-palvelimen, joka siirtää X"-yhteydet
kryptatun ssh"-yhteyden yli edelleen käyttäjän koneelle, ja asettaa
\envvar{display}"-muuttujan osoittamaan tähän pseudopalvelimeen, esim.
\cmdln{:10.0}.

X"-tunnelointia voi erikseen pyytää optiolla -X, siis esim.~\cmdln{ssh
-X}.

\end{slide}

\begin{slide}

\slideheading{ssh"-tiedostonsiirto}

\bi
\item Yksinkertainen tiedostonsiirto: \cmdln{scp} (kuten
\cmdln{cp}"-komento, mutta sallii koneennimiä lähteessä ja kohteessa,
esim. \cmdln{scp pkalliok@mars:foo /tmp/bar})
\item Myös \cmdln{scp -r} on mahdollinen
\item Monen tiedoston siirtoon \cmdln{sftp} on parempi (muistuttaa
\cmdln{ftp}:a)
\item Kokonaisten hakemistopuiden varmuuskopiointiin ssh"-putkitettu
rsync on parempi, esim. \cmdln{rsync -e ssh -avz dirika mars:kopiot}
\item Kielitieteellä ssh"-tiedostonsiirtoa ei tarvita kovin usein
jaettujen kotikansioiden takia
\ei

\end{slide}

\slidesection{Tietojen hakeminen itsestä ja muista}

\begin{slide}

\slideheading{Käyttäjätiedot --- yleiskuva}

\bi
\item Unixissa käyttäjistä on tietoja monessa vakiintuneessa paikassa:
\cmdln{/etc/passwd}, tietyt tiedostot käyttäjän kotihakemistossa,
sisään"- ja uloskirjautumislokit (\cmdln{/var/log/wtmp}),
prosessilistaus \slideref{Prosessilistaus}
\item Useimpia näistä voi tarkastella suoraan esim. \cmdln{less}:lla, ja
monet ohjelmat käyttävät niitä tietolähteinään.
\item Tietoja käyttäjätunnuksista ja niiden ryhmistä:
\cmdln{/etc/passwd}, \cmdln{/etc/group}, \cmdln{finger}, \cmdln{id},
\cmdln{groups}, \cmdln{.plan}, \cmdln{.project}, \cmdln{.signature}
\item Tietoja sisällä olevista / olleista käyttäjistä: \cmdln{w},
\cmdln{who}, \cmdln{ps}, \cmdln{last}
\ei

\end{slide}

\begin{slide}

\slideheading{Yleisen kielitieteen härdäystä}

\bi
\item Käyttäjätiedot levitetään yhteiseltä käyttäjätietopalvelimelta
\item Niinpä käyttäjätietoja muutettaessa pitää ottaa yhteys tähän
käyttäjätietopalvelimeen.  \cmdln{passwd}"-komento tekee tämän.
(Perinteisessä Unix"-ympäristössä \cmdln{passwd}"-komennolla vaihdetaan
paikallista salasanaa ja \cmdln{chfn}"-komennolla paikallisia
käyttäjätietoja.)
\item Käyttäjätiedot päivittyvät kaikkiin koneisiin noin tunnin sisällä
muutoksesta.
\ei

\vfil

\notebox{Tehkää itsellenne lyhyet ja kuvaavat \cmdln{.plan}- ja
\cmdln{.signature}"-tiedostot!}

\end{slide}

\slidesection{Ympäristömuuttujat}

\begin{slide}

\slideheading{Ympäristömuuttujat}

\bi
\item Jokaisella prosessilla on oma \newterm{ympäristönsä}, joka koostuu
useammista \newterm{ympäristömuuttujista}.  Esim.~komentotulkkini
ympäristössä muuttujan \envvar{shell} arvo on todennäköisesti
\cmdln{/bin/bash}.
\item Ympäristömuuttujat ovat tavallaan kolmas tapa antaa prosessille
syötettä.  (Muut kaksi ovat komentoriviargumentit ja stdin.)  Prosessi
perii ympäristönsä vanhemmiltaan.
\item Monien ohjelmien toimintaa voi muunnella tietyillä
ympäristömuuttujilla.  Esim.~useat ohjelmat katsovat, mikä editori
ajetaan tekstiä muokattaessa, ympäristömuuttujasta \envvar{editor}.
\ei

\end{slide}

\begin{slide}

\slideheading{Muuttujien käyttö komentotulkista}

\bi
\item Muuttujan voi viedä pysyvästi komentotulkin ympäristöön (josta se
sitten periytyy käynnistettäville ohjelmille) komennolla \cmdln{export
MUUTTUJA=arvo}.
\item Jos komennossa on merkkijono \cmdln{\$MUUTTUJA}, komentotulkki
korvaa sen \envvar{muuttuja}n arvolla. \extrastuff{}  Esim.~komento
\cmdln{echo \$MUUTTUJA} näyttää \envvar{muuttuja}n arvon.
\item Kaikki voimassa olevat ympäristömuuttujat voi listata komennolla
\cmdln{env}.  (Tai \cmdln{set}, joka näyttää muutakin.)
\item Yksittäiselle komennolle voi määrittää ympäristömuutoksia
näin:~\cmdln{MUUTTUJA1=arvo1 MUUTTUJA2=arvo2 komento...}
\ei

\end{slide}

\begin{slide}

\slideheading{Laajalti käytettyjä ympäristömuuttujia \extrastuff}

\begin{tabular}{lp{.8\textwidth}}
\envvar{path} & hakemistot, joista suoritettavaa ohjelmaa etsitään, jos
komentotulkille ei anneta täydellistä tiedostonimeä \\
\envvar{home} & käyttäjän kotihakemisto, sisältää useita ohjelmien
käyttämiä ."-alkuisia asetustiedostoja \\
\envvar{editor} & ohjelma, jota halutaan käyttää tekstin muokkaukseen \\
\envvar{pager} & ohjelma tiedostojen katseluun (esim.~\cmdln{less}) \\
\envvar{lang} & (ja kumppanit) määrittää kieliympäristön \\
\envvar{printer} & oletustulostin \\
\envvar{term} & Mitä terminaalia käytät.  Jos otat etäyhteyden eikä
jokin toimi, vika on todennäköisesti \envvar{term}"-asetuksessa. \\
\envvar{tmpdir} & mihin väliaikaistiedostot perustetaan
\end{tabular}

\end{slide}

\slidesection{man"-sivujen sisällön ymmärtäminen}

\begin{slide}

\slideheading{man"-sivut --- yleiskuva}

\bi
\item man"-sivut jakautuvat 9 \newterm{osioon} (ja alaosioihin) sen
perusteella, minkä tyyppistä asiaa käsittelevät
\item Jokainen sivu noudattaa verrattain vakiintunutta rakennetta
ainakin jonkin verran, man"-sivuissa on tusinan verran erilaisia
vakiintuneita \newterm{osia}
\item GNU"-ohjelmien man"-sivut ovat enimmäkseen roskaa (koska
GNU"-projektin ensisijainen dokumentaatiomuoto on info)
\ei

\vfil

\notebox{Psst. man"-sivuilta (ja muutenkin \cmdln{less}"-ohjelmassa)
voipi etsiä merkkijonoa kirjoittamalla /\emph{merkkijono}, enter.}

\end{slide}

\begin{slide}

\slideheading{man"-sivujen osiot}

\begin{tabular}{ll}
Osio & merkitys \\
\hline

1 & tavalliset komennot \\
2 & systeemikutsut (ohjelmoijille) \\
3 & kirjastokutsut (ohjelmoijille) \\
5 & tiedostomuodot \\
8 & systeemikomennot (ylläpitäjille)
\end{tabular}

man"-sivuja etsitään osiosta järjestyksessä pienestä suureen.  Jos
samanniminen sivu on useammassa osiossa, joutuu joskus antamaan osion
erikseen.  Esim.~komento \cmdln{man crontab} tuo
\cmdln{crontab}"-komennon man"-sivun, kun taas komento \cmdln{man 5
crontab} tuo crontab"-tiedostomuodon man"-sivun.

\end{slide}

\begin{slide}

\slideheading{man"-sivun osat}

\begin{tabular}{lp{0.7\textwidth}}
\textsc{name} & lyhyt yleiskuvaus ohjelmasta \\
\textsc{synopsis} & lyhyt kuvaus komennon muodosta --- hakasulkeissa
olevat asiat ovat valinnaisia \\
\textsc{description} & selitys siitä, mitä ohjelma tekee ja miten \\
\textsc{options} & komentorivivalitsimien merkitykset \\
\textsc{diagnostics} & ohjelman palautteen merkitys \\
\textsc{examples} & käyttöesimerkkejä (lue ensin!) \\
\textsc{environment} & toimintaan vaikuttavat ympäristömuuttujat \\
\textsc{files} & ohjelman käyttämät tiedostot \\
\textsc{see also} & muita ohjelmaan liittyviä man"-sivuja \\
\textsc{bugs} & omituisuuksia, tunnettuja ongelmia, varoituksia
\end{tabular}

\end{slide}

\slidesection{Käyttäjien välinen keskustelu}

\begin{slide}

\slideheading{Käyttäjien välinen keskustelu}

\bi
\item Toimii perinteisesti siten, että saman koneen käyttäjät
kirjoittelevat toistensa päätteille.
\item Muiden viestit omalle ruudulle voi sallia tai kieltää komennolla
\cmdln{mesg}. \extrastuff
\item Yksittäisen viestin kirjoittamiseen on ohjelma \cmdln{write},
argumentiksi kohdekäyttäjän tunnus.  Viesti lopetetaan Ctrl"-D:lla.
\item Pidempään keskusteluun on ohjelma \cmdln{ytalk} (tai
\cmdln{talk}).  Keskustelu lopetetaan Ctrl"-C:lla.
\item Jos tarvitset jotain vaativampaa, käytä esim.~IRC:a. \extrastuff
\ei

\end{slide}

\end{document}

