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: 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. 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.)

patch

Tee diff-tiedosto edellisistä (jos olet samassa hakemistossa): 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ää: 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: Jos haluat tehdä man-sivusta postscript-tiedoston, se onnistuu sanomalla groff -Tps -man sivu.x. Tee esimerkiksi scp:n manuaalisivusta postscriptiä komennolla: (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: Muita komentoja joista on hyö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.