Tietokone työvälineenä: UNIX-harjoitukset 3
Muistutus
Käytä aina ohjelmaa man, jos et tiedä, miten jotain ohjelmaa
käytetään! man auttaa!
Linkit
Kopioi vanha tuttu ~pooka/ed.txt uudestaan kotihakemistoosi
cp:llä. Tee siitä kotihakemistoosi kova linkki ed.txt.hard
ja symbolinen linkki ed.txt.soft:
- cd
- cp ~pooka/ed.txt . <- huomaa perässä oleva piste
- ln ed.txt ed.txt.hard
- ln -s ed.txt ed.txt.soft
Miltä ne näyttävät? (Sano ls -l)
Tuhoa tiedosto ed.txt.hard. Sano uudelleen ls -l. Huomioi ero
alkuperäisessä ed.txt:ssä.
cron ja at
Tee crontab, joka ajaa joka päivä kello 3:50 ohjelman ~/bin/rmtemp, joka
tuhoaa kaikki tiedostot hakemistosta ~/tmp, jos sellainen on olemassa.
Käytä esim. valmista ohjelmaskriptiä ~jsykari/bin/rmtemp, varmistettuasi
ensin (cat ~jsykari/bin/rmtemp) että se on olemassa ja tekee
mitä pitääkin: (vihreällä kirjoitettu on se, mitä käyttäjä kirjoittaa)
ecstatic /u/5/jsykari > crontab
50 3 * * * /u/5/jsykari/bin/rmtemp
<Ctrl-D>
ecstatic /u/5/jsykari >
Crontabisi voit tarkistaa komennolla crontab -l. crontabista
ei ole kovinkaan paljon hyötyä, jos sinulla ei ole ~/tmp -hakemistoa ja
muutenkin muiden omistamien tiedostojen suorittaminen on hieman kyseenalaista,
joten poista crontabisi:
Sitten
ajasta at-ohjelmaa käyttäen kyseinen skripti ajettavaksi esim. 5
minuutin päästä:
ecstatic /u/5/jsykari > at now + 5 minutes
/u/5/jsykari/bin/rmtemp
<Ctrl-D>
warning: commands will be executed using /bin/sh
job 968076660.a at Mon Sep 4 17:11:00 2000
Prosessien ja töiden (jobit) hallinta
Käynnistä smuli (HOX! smuli on "simul", mutta typotettuna) taustalle.
Tcsh:ssa, kuten myös valtaosassa muista komentotulkeista se tapahtuu
kirjoittamalla ~jsykari/bin/smuli &. Varmista että se pyörii
taustalla sanomalla jobs. Käynnistä useampia smuleja samalla
tavalla ja huomioi (jobs) että niillä on eri työnumero (job
number). Kiinnity prosessiin takaisin fg:llä. Katso
ps:llä mikä on smulin PID (prosessinumero). Huomioi että PID ja
job number ovat eri asia! Lopulta päätät tappaa smulit. Siihen sopii
ohjelma kill, jolle voi toki antaa monia argumentteja. Monet
prosessinhallintaan liittyvistä komennoista ovat komentotulkin sisäisiä ja
niiden käytöstä löytyy ohjeita tcsh:n manuaalisivulta.
kill muun muassa on useissa järjestelmissä komentotulkin sisäinen
komento, jolloin sillä voi tappaa prosesseja seuraavalla tavalla:
ecstatic /u/5/jsykari > netscape &
[1] 475
ecstatic /u/5/jsykari > ~jsykari/bin/smuli &
[2] 477
ecstatic /u/5/jsykari > ~jsykari/bin/smuli &
[3] 486
ecstatic /u/5/jsykari > jobs
[1] running netscape
[2] - running ~jsykari/bin/smuli
[3] + running ~jsykari/bin/smuli
ecstatic /u/5/jsykari > kill %1 %2
[2] - terminated ~jsykari/bin/smuli
ecstatic /u/5/jsykari >
[1] - terminated netscape
ecstatic /u/5/jsykari > jobs
[3] + running ~jsykari/bin/smuli
ecstatic /u/5/jsykari >
Käynnistä myös ohjelma badsmuli, joka löytyy samasta paikasta kuin
edellinen. Koska tämä ohjelma on inha prosessorisyöppö, haluat varmistaa
ettei se syö muilta liikaa prosessointiaikaa, ja käynnistät sen sopivalla
nice-levelillä käyttäen ohjelmaa nice. Voit katsoa kuinka paljon
aikaa se oikein syö, ja ehkä vertailla sen käyttämää prosessointiaikaa eri
nice-leveleillä käyttäen ohjelmia top ja renice. Varmistu
siitä, että ohjelma kokee ansaitun kohtalon (kuoleman - kill!)
sessiosi päätteeksi. (Jos poistut välillä komentotulkista vahingossa tai
vahingotta, ps ei enää näytä smuleja automaattisesti. Komento
ps -fuuser, jossa user on oma käyttäjätunnuksesi,
tekee sen.
Unix-kommunikointivälineitä: write
Mene ssh:lla vierustoverisi koneelle, esim:
Katso, ketä koneella on sisällä:
Valitse joku sisällä olevista käyttäjistä ja kirjoita hänelle lyhyt viesti,
esim:
ice-age /u/5/jsykari > write pooka
pooka is logged on more than one place.
You are connected to "ttyq1".
Other locations are:
ttyq2
Heippa!
T: jsykari
<Ctrl-D>
Jolloin kyseinen käyttäjä, jos hänellä on "mesg" asetettu y:ksi,
näkee viestisi. (Ja keneltä se tulee, josta syystä "T: jsykari" ehkä lienee
hieman redundantti) Äskeisessä esimerkkitapauksessa write huomautti, että
käyttäjä on loggautuneena useammalla terminaalilla yhtäaikaa; yleensä
ihmiset ovat vain "kertaalleen" sisällä ja tällaista ei tapahdu.
mesg n estää viestien kirjoittamisen.
pagerit
Tutkimme seuraavaksi mm. listaa englannin kielen sanoista, joka löytyy
tiedostosta /usr/share/lib/dict/words.
- Tutki kyseistä tiedostoa ohjelmalla more.
- Tutki kyseistä tiedostoa ohjelmalla less.
Vinkki: molemmista pääsee eroon painamalla q-näppäintä.
Mitä eroa näillä on?
grep
Etsi grepillä se englannin kielen sana, johon sisältyy maaginen
kirjainyhdistelmä 'nepu'. Vinkki: grep <sana> <tiedosto>.
Hakemistosta ~jsykari/words/web2/2000 löytyy lista englannin kielen
sanoista.
diff
Tutki, miten sanalista web2 on muuttunut vuosien varrella:
(Hakemistosta ~jsykari/words/web2/1993 löytyy vanhempi versio.)
- cd ~jsykari/words/web2
- diff -r -u 1993/ 2000/ | less
patch
Tee diff-tiedosto edellisistä (jos olet samassa hakemistossa):
- diff -r -u 1993/ 2000/ > ~/web2.1993-2000.patch
Sitten kopioi itsellesi vanha sanalista ja päivitä se äsken tekemälläsi
patchilla, käyttäen ovelasti shellin tab-täydennystä, ja katso miltä
lopputulos näyttää:
- cp ~jsykari/words/web2/1993/web2 ~
- patch -p2 < ~/web2.1<tab>
- ls -l
Huomaa että patch teki sinulle vanhasta tiedostosta varmuuskopion
nimellä web2.orig.
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/local/man/man1/lpr.1 ja
uudelleenohjaa tulostus less:lle:
- groff -Tascii -man /usr/local/man/man1/lpr.1 | less
Jos haluat tehdä man-sivusta
postscript-tiedoston, se onnistuu sanomalla groff -Tps -man sivu.x.
Tee esimerkiksi scp:n manuaalisivusta postscriptiä komennolla:
- groff -Tps -man /usr/local/man/man1/scp.1 > ~/scp.ps
(tekee kotihakemistoosi scp.ps -nimisen tiedoston)
printtaaminen
Jos haluaisit printata tiedoston scp.ps (postscript-tiedostoihin käytetään
aina lpr:ää) paniikissa (eli printterille kenguru), kirjoittaisit:
Jos taas haluaisit printata "puhtaan" tekstitiedoston, esim. äskeisen
sanalistan, tekisit seuraavasti:
- enscript -P kenguru ~/words
Muita komentoja joista on hyötyä:
- lpq [ -Pprintteri ] - listaa parhaillaan tulostuvat
työsi
- lprm työ [ -Pprintteri ] - lopettaa työn "työ"
Extra: irc
Jos haluat, voit myös tutustua IRCin (Internet Relay Chat) käyttöön
ircII-nimisen ohjelman avustuksella (niksulassa: irc). Tee tämä
kuitenkin lopuksi jos jää aikaa.