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

\slidesection{Komentotulkin kätevä käyttö}

\begin{slide}

\slideheading{Komentotulkin apuja}

Komentotulkissa on monta asiaa, jotka hidastavat tai vaikeuttavat sen
käyttöä.  Yksi on komentojen ja varsinkin valitsimien muistaminen.
Toinen on se, että pitkien komentojen ja pitkien tiedostonimien
kirjoittaminen on hidasta ja virheille altista.

Tässä osiossa paneudutaan komentotulkissa oleviin erilaisiin
apuominaisuuksiin.  Niiden tehokas käyttö tekee komentotulkista lähes
tilanteessa kuin tilanteessa nopeamman ja vaivattomamman käyttää kuin
vastaavat hiiren klikkailuun perustuvat graafiset ohjelmat.

\end{slide}

\begin{slide}

\slideheading{Apua: \cmdln{man}"-sivut}

\unix{}in perinteinen \newterm{online}"-apu.

\commandscheme{man}{\textit{aihe}}{MANual}
tietoa tietystä ohjelmasta (tms.), esimerkiksi tietoa
\cmdln{date}"-ohjelmasta saa komennolla \cmdln{man date}.  Käyttää
\cmdln{less}"-ohjelmaa tiedostojen näyttämiseen (katso
``\cmdln{less}"-komennon lyhyt käyttöohje'' aiempana).

\commandscheme{apropos}{\textit{aihe}}{APROPOS} etsii
\cmdln{man}"-sivuja, jotka liittyvät tiettyyn aiheeseen, etsimällä
aihesanaa sivujen tiivistelmistä.  Esimerkiksi \cmdln{apropos editor}.

\notebox{Tätä jaksoa ennen tulleet komennot on syytä muistaa ulkoa,
mutta valitsimet ja tämän jakson jälkeen tulevat komennot voi yhtä hyvin
tarkistaa \cmdln{man}"-sivuilta aina tarvittaessa.}

\end{slide}

\begin{slide}

\slideheading{Komento"- ja tiedostotäydennys}

\bi
\item \cmdln{tab}"-näppäin (sarkainnäppäin, näppäin \cmdln{q}:n
vasemmalla puolella) on maaginen komentotulkissa.  Sen painaminen
täydentää sillä hetkellä kirjoitettavan komennon / tiedostonimen niin
pitkälle kuin voi.
\item Molempien täydennys toimii periaatteessa samalla tavalla:
komentotulkki etsii komennon(/t) / tiedoston(/t), joka alkaa jo
kirjoitetuilla kirjaimilla, ja lisää loput kirjaimet puolestasi.
\item Jos annetulla alulla löytyy useampia vaihtoehtoja, komentotulkki
täydentää vain ensimmäiseen eroavaan kirjaimeen asti.
\item Toinen \cmdln{tab}"-näppäimen painallus heti perään näyttää kaikki
vaihtoehdot, jotka komentotulkki näkee.

\newslide

\item Täydennystä oppii käyttämään paremmin kokeilemalla kuin lukemalla.
\item Käytännössä tee näin: kirjoita haluamastasi komennosta /
tiedostosta pari ensimmäistä merkkiä, paina \cmdln{tab}.
\item Jos täydentyi loppuun asti, sano ``jee'' ja jatka kirjoittamista.
\item Jos ei täydentynyt, anna seuraava kirjain ja paina uudestaan
\cmdln{tab}.  Toista kunnes saat koko sanan kirjoitetuksi.
\item Jos et muista / tiedä seuraavaa kirjainta, paina toisen kerran
\cmdln{tab} heti perään ja katso vaihtoehtoja.
\item Lyhyihin sanoihin ei ole yleensä järkeä käyttää täydennystä.
\ei

\end{slide}

\begin{slide}

\slideheading{Komentohistoria}

\bi
\item Komentotulkki tallettaa kaikki annetut käskyt (nekin, joista on
tuloksena vain virheitä).  Näitä talletettuja komentoja sanotaan
\newterm{komentohistoriaksi}.
\item Yksinkertaisin tapa liikkua komentohistoriassa on käyttää ylös"-
ja alas"-nuolia: ylös"-nuoli antaa aiempia komentoja, alas"-nuoli
myöhempiä.
\item Näppäinkomento \cmdln{C-r} (eli pidä \cmdln{ctrl}"-näppäin
pohjassa, paina \cmdln{r}) aloittaa tekstihaun historiasta.  Kirjoita
jokin osa vanhasta komennosta ja paina enter.
\ei

\commandscheme{history}{}{HISTORY}
Tulostaa komentohistorian.  Komentohistoriasta voi suorittaa jonkin
komennon uudestaan kirjoittamalla \cmdln{!\textit{n}}, jossa \textit{n}
on komennon historianumero.

\end{slide}

\begin{slide}

\slideheading{Komentorivimuokkaus}

\bi
\item Olet varmaan huomannut, että komentorivillä voi kulkea
edestakaisin nuolinäppäimillä, poistaa kirjaimia
\cmdln{backspace}"-näppäimellä (enterin yläpuolella) ja lisätä
kirjaimia haluamaansa kohtaan.
\item Itse asiassa komentotulkki tarjoaa hyvin monipuolisen valikoiman
näppäinkomentoja komentorivin muokkaukseen.  Komennot muistuttavat
\cmdln{emacs}"-tekstieditorin (esitellään tuonnempana) komentoja.
\item \cmdln{backspace}:n jälkeen hyödyllisin komento on edeltävän sanan
poisto, joka tehdään \cmdln{C-w}:lla (muistathan: ctrl pohjassa ja
\ldots)
\item Muita hyödyllisiä ovat \cmdln{C-a} ja \cmdln{C-e}, jotka hyppäävät
rivin päihin.
\item \cmdln{C-d} poistaa kohdistinta seuraavan kirjaimen.
\ei

\end{slide}

\begin{slide}

\slideheading{Tositoimiin: komentotulkin tehokas käyttö}

\begin{enumerate}
\item Kirjaudu sisään ja käynnistä uusi komentotulkki.  Anna
\cmdln{history}"-komento ja tarkastele tulosta.
\item Katso, mitä \cmdln{man history} sanoopi.  Entä \cmdln{apropos
shell}?
\item Hae vanhoja käskyjäsi eri tavoin (nuolinäppäimet, \cmdln{C-r}) ja
muuttele niitä.  Esim.~muuta jostain \cmdln{cat} \cmdln{less}:ksi tai
päin vastoin.
\item Tarkastele jotain kotihakemistosi alihakemistossa olevaa tiedostoa
\cmdln{less}:lla.  Käytä tiedoston nimeämiseen \cmdln{tab}"-täydennystä.
Tarkkaile, kuinka paljon täydentyy aina yhdellä painalluksella.
\item Kokeile, mitä tapahtuu, jos painaa \cmdln{tab}"-näppäintä
kahdesti, ennen kuin on kirjoittanut komennosta mitään.  Entä, kun itse
komento (esim. \cmdln{cat}) ja välilyönti on kirjoitettu, muttei vielä
mitään muuta?
\end{enumerate}

\end{slide}

\begin{slide}

\slideheading{Tiedostolavennus}

\bi
\item Usein halutaan antaa komennolle argumenteiksi iso määrä
(mahdollisesti tietynlaisia) tiedostoja.  Tähän tarkoitukseen
komentotulkissa on \newterm{tiedostolavennus}.
\item Lavennus toimii siten, että kun käyttäjä on antanut komentonsa ja
painaa enter, komentotulkki tutkii kaikki komennon sanat, joissa on
tiettyjä maagisia merkkejä, ja korvaa nämä sanat olemassa olevien
tiedostojen nimillä.
\item Tämäkin on helpompi selittää esimerkeillä.  Olkoon meillä
seuraavansisältöinen hakemisto:
\begin{verbatim}
[atehwa@maim ~/proj/sed/Stx/common]$ ls
begin.m4    common.m4     end.m4      quote.sed
block.sed   CVS           inline.sed  quote_us.sed
cleanup.m4  emphasis.sed  markup.m4
\end{verbatim}

\newslide

\item Tärkein maaginen merkki (\newterm{jokerimerkki}) on asteriski
(\cmdln{*}).  Sanat, joissa on tähti, sovittuvat kaikkiin tiedostoihin,
joissa tähden kohdalla on mikä tahansa merkkijono:
\begin{verbatim}
[atehwa@maim ~/proj/sed/Stx/common]$ echo *.m4
begin.m4 cleanup.m4 common.m4 end.m4 markup.m4
[atehwa@maim ~/proj/sed/Stx/common]$ echo b*
begin.m4 block.sed
[atehwa@maim ~/proj/sed/Stx/common]$ echo quote*ed
quote.sed quote_us.sed
\end{verbatim}
\item Tähti toimii myös hakemistojen kanssa:
\begin{verbatim}
[atehwa@maim ~/proj/sed/Stx]$ echo */make.m4
html/make.m4 latex/make.m4 man/make.m4
\end{verbatim}

\newslide

\item \cmdln{echo}"-komento on köyhä muuhun kuin testaamaan, mitä se
komentotulkki sinne oikein laventaa (kuten yllä).  Mutta esimerkiksi
komennolla \cmdln{cat *.txt} voin tulostaa yhtenä pötkönä kaikki
\cmdln{.txt}"-loppuiset tiedostoni.
\item Pelkkä tähti laventuu kaikiksi hakemistossa oleviksi tiedostoiksi.
\item Tähti \emph{ei} sovitu tiedostonimen alussa olevaan pisteeseen
(\cmdln{.}), koska se on piilotiedoston merkki eivätkä ihmiset yleensä
halua piilotiedostojen tulevan mukaan lavennukseen.
\item Piilotiedostot saa lavennetuksi kirjoittamalla \cmdln{.*} ---
tämän lavennuksen kanssa on kuitenkin syytä olla varovainen, sillä
siihen sisältyvät mm.~pseudohakemistot \cmdln{.} ja \cmdln{..}.
\ei

\notebox{Erityisesti ei koskaan, koskaan pidä kirjoittaa komentoa
\cmdln{rm -r .*}  (Miksi?  Tämä on harjoitustehtävä.)}

\newslide

\bi
\item Jokerimerkki \cmdln{?} sovittuu tasan yhteen mihin tahansa
merkkiin.  Tätä ei tarvitse kovin usein; lähinnä tietynmittaisten
tiedostonimien listaamiseen:
\begin{verbatim}
[atehwa@maim ~/proj/sed/Stx/common]$ echo ?????????
block.sed common.m4 markup.m4 quote.sed
\end{verbatim}
\item Seuraavaksi tärkein jokerirakenne on vaihtoehtoisuus, jota
merkitään aaltosulkeiden (\cmdln{\{} ja \cmdln{\}}) sisässä olevalla
listalla.  Se laventuu vuorollaan kuksikin listassa olevaksi kohdaksi:
\begin{verbatim}
[atehwa@maim ~/proj/sed/Stx/common]$ echo ?????.{m4,sed}
begin.m4 block.sed quote.sed
\end{verbatim}
\item Aaltosulkeet ovat siitä erikoinen rakenne, etteivät ne piittaa,
onko tiedostoa oikeasti olemassa:
\begin{verbatim}
[atehwa@maim ~]$ echo {cat,dog}{,s,like}
cat cats catlike dog dogs doglike
\end{verbatim}
\ei

\end{slide}

\begin{slide}

\slideheading{Tositoimiin: tiedostolavennus}

\begin{enumerate}
\item Yhdistä kaikki jonkin hakemistosi tiedostot yhdeksi suureksi
tiedostoksi (\cmdln{cat} ja \cmdln{>}"-ohjaus).
\item Muuta kaikki tekstiä sisältävät tiedostosi
\cmdln{.txt}"-päätteisiksi ja siirrä ne sitten yhdellä komennolla
johonkin toiseen hakemistoon.  (Molempiin \cmdln{mv} on oikea komento.)
\item Komennolla \cmdln{wc} (katso \cmdln{man wc}) voi laskea
tiedostosta rivit, sanat ja kirjaimet.  Tulosta tiedostoon, mitä
viisikirjaimisia tiedostoja \cmdln{/etc}"-hakemistossa on, ja katso
\cmdln{wc}:lla, kuinka monta niitä on.
\item Laske \cmdln{wc}:lla 2"-kohdan tiedostoista sanat (\cmdln{*}).
\item Muodosta aaltosulkeilla jokin vähintään 50"-sanainen sanajoukko.
(Liitä vaikkapa kaikki omistusliitteet erilaisiin yhdyssanoihin.)
\end{enumerate}

\end{slide}

\begin{slide}

\slideheading{Vielä pari hengissäselviytymisasiaa}

\bi
\item Parhaillaan toiminnassa olevan käskyn saa keskeytetyksi
näppäinkomennolla \cmdln{C-c} ja pysäytetyksi \cmdln{C-z}:lla.
\item Jos kaikki näyttää pysähtyneen eikä ruudulle tule mitään,
kannattaa painaa \cmdln{C-q}.  Kyseessä saattaa nimittäin olla
komentotulkin typerä tulosteenkeskeytysominaisuus.
\item Jos ruutusi on jotenkin omituisessa tilassa (esim. pelkkää
merkkimössöä tai kirjoittamasi komennot eivät näy), kannattaa antaa
komento \cmdln{reset}.  Tämä palauttaa normaaliasetukset.
\item Ruudun saa tyhjennetyksi komennolla \cmdln{C-l}.
\item Jos jokin komento odottaa sinulta syötettä (esim. \cmdln{cat}, jos
sille ei anna yhtään tiedostoa argumentiksi), voit kertoa ohjelmalle
syötteen loppumisesta \cmdln{C-d}:lla.  Ei tarvitse ymmärtää (vielä).
\ei

\end{slide}

