Tietokone työvälineenä: UNIX-harjoitukset 4
pagerit
Tutkimme tällä kertaa mm. listaa englannin kielen sanoista, joka löytyy
tiedostosta /usr/share/dict/words.
- Tutki kyseistä tiedostoa ohjelmalla more.
- Tutki kyseistä tiedostoa ohjelmalla less.
- Tutki molempien em. ohjelmien ominaisuuksia!
Mitä eroa näillä on?
grep
Etsi grepillä se englannin kielen sana, johon sisältyy maaginen
kirjainyhdistelmä 'erban'. Vinkki: man grep.
Hakemistosta /usr/share/dict/words löytyy lista englannin kielen
sanoista. Kokeile toki myös mitä grep tekee, jos sille ei anna tiedostoa.
diff
Tutki, miten NetBSD ip-paketin tarkistussumman laskentakoodi
in_cksum.c on muuttunut vuosien varrella. Tiedostosta
~pooka/netinet/in_cksum-1993.c lödät version vuodelta 1993,
in_cksum-2001.c on vastaavasti nykyaikainen.
- cd ~pooka/netinet
- diff -u *1993.c *2001.c | less
Huomaa kuinka kätevästi shelli globbaa tiedostot.
Voit myös halutessasi tutkia, miten ip checksum on kehittynyt alkuperäisestä
4.2BSD:ssä olleesta versiosta (in_cksum-4.2BSD.c). Huomaa kuitenkin, että
4.2BSD:n versio on VAX-arkkitehtuurille optimoitu, ja siksi siinä on
enemmän eroavuuksia.
On olemassa myös ohjelma nimeltä diff3. Mieti mitä tällä voi tehdä.
Ota kopio 1993 tiedostosta ja muuta sitä jollain tapaa (ei väliä vaikkei se
menekään syntaktisesti oikein, tärkeintä on tehdä vähän muutoksia). Käytä nyt
diff3:sta omien ja vuoden 2001 muutosten saattamiseksi yhteen tiedostoon.
Milloin tälläisestä ominaisuudesta on hyötyä?
patch
Tee diff-tiedosto edellisistä (jos olet samassa hakemistossa):
- diff -u *1993.c *2001.c > ~/in_cksum.1993-2001.patch
Sitten kopioi itsellesi vanha ip_cksum ja päivitä se äsken tekemälläsi
patchilla.
lopputulos näyttää:
- cp ~pooka/netinet/in_chksum-1993.c ~
- patch -p0 < ~/in_cksum.1993-2001.patch
- ls -l
Huomaa että patch teki sinulle vanhasta tiedostosta varmuuskopion.
troff
Joskus voi joutua formatoimaan käsin manuaalisivuja, jotka normaalisti man
formatoisi puolestasi. Se onnistuu komennolla groff -Tascii -man.
Formatoi tällä tavalla man-sivu /usr/share/man/man1/lpr.1.gz ja
uudelleenohjaa tulostus less:lle:
- gunzip -c /usr/share/man/man1/lpr.gz | groff -Tascii -man - | less
Jos haluat tehdä man-sivusta
postscript-tiedoston, se onnistuu sanomalla groff -Tps -man sivu.x.
Tee esimerkiksi scp:n manuaalisivusta postscriptiä komennolla:
- gunzip -c /usr/share/man/man1/scp.1.gz | groff -Tps -man - > ~/scp.ps
(tekee kotihakemistoosi scp.ps -nimisen tiedoston)
printtaaminen
"Printtaa" tiedosto scp.ps (postscript-tiedostoihin käytetään aina lpr:ää):
Jos haluat printata normaalin tekstitiedoston, esim. äskeisen
sanalistan, tekisit seuraavasti:
Muita komentoja joista on varmasti hyötyä:
- lpq [ -Pprintteri ] - listaa parhaillaan tulostuvat
työsi
- lprm työ [ -Pprintteri ] - lopettaa työn "työ"
säännölliset lausekkeet
Harjoittele säännöllisten lausekkeiden käyttöä esim. grepin avulla. Koita
etsiä tiedostosta ainakin seuraavat patternit:
- Rivit jotka alkaa b-kirjaimella
- Rivit jotka alkavat a-kirjaimella, sisältävät yhden c-kirjaimen, ja
loppuvat d-kirjaimeen
- Kaikki rivit jotka sisältävät vähintään kolme a-kirjainta (vinkki:
0 tai useampi mielivaltaista merkkia, a, 0 tai useampi mielivaltaista
merkkia, a...
- Rivit joilla on kaksi samaa isoa kirjainta perakkain
tiedostojen siirto
Opettele ohjelmien scp, ftp, wget ja lynx
kättö.
lopuksi
Tuhoa ylimääräiset tiedostot kotihakemistostasi rm:llä.