Unix-opas

Tämä opas kuvaa Unix-tietokoneiden hyväksikäytön perusteita kuten komentojen antaminen, tiedostojärjestelmä tavallisen käyttäjän näkökulmasta ja joidenkin tavallisten ohjelmien (Pine, Emacs) yksinkertainen käyttö.

Päivitetty viimeksi 2003-10-18. Teknisiä korjauksia 2004-02-16. Jukka K. Korpela.

Opas kuuluu sivuston Datatekniikka ja viestintä osaan Ohjelmistot ja dataformaatit.

Lukijalle - lue ensin lukuohje

Lukuohje

Tämä opas kuvaa Unix-tietokoneiden hyväksikäytön perusteita eikä edellytä erityisiä esitietoja. Lukijan täytyy kuitenkin hankkia muualta tiedot käyttämänsä Unix-koneen käytön erilaisista järjestelyistä kuten käyttäjätunnuksen hankkimisesta ja yhteydenotosta koneeseen sekä käytettävän Unix-järjestelmän erityispiirteistä.

Tämä opas on siis tarkoitettu ns. peruskäyttäjille ("loppukäyttäjille", end users), ei ns. ylläpitäjille. Toisaalta ylläpitäjä toki tarvitsee hyvät peruskäyttäjän tiedot, ja siksi tästä oppaasta lienee hyötyä myös ylläpitäjäksi aikoville - ja jopa ylläpitäjänä jo toimivillekin tietojen täydentämiseksi.

Tämän oppaan ajantasaisin versio on Webissä osoitteessa
http://jkorpela.fi/unix/
Opas jakautuu lukuihin ja luvut osiin, joista kukin on oma Web-sivunsa, jolta on linkki seuraavaan sivuun ja sisällysluettelosivulle. Lisäksi on tarjolla koko opas yhtenä Web-sivuna; tästä voi olla apua, jos haluat esimerkiksi etsiä jotakin sanaa oppaasta (selaimen Find-toiminnolla tms.).

Jos sinulla on kiire päästä käyttämään Unix-konetta johonkin erityiseen käyttötarkoitukseen, esimerkiksi meilin ("sähköpostin") lukemiseen ja lähettämiseen, voit aluksi lukea vain

Jos tarvitset Unixia vain hoitaaksesi Web-sivujen tekemiseen liittyviä teknisiä toimenpiteitä kuten tiedostojen suojausten asettamista, niin keskeisessä asemassa on luku Tiedostot ja hakemistot.

Myöhemmin kannattaa lukea opasta systemaattisemmin, jotta oppisit tuntemaan erilaisia mahdollisuuksia ja apuvälineitä, jotka helpottavat työtäsi (esim. komentojen editointi).

Yleinen lukuohje ilmenee seuraavasta jäsennyksestä: Opas jakautuu, tätä esipuhetta ja liitteitä lukuun ottamatta, seitsemään lukuun:

Liitteinä on oppaan lyhyt historiikki ja muuta selittelyä, tietoja siitä, mistä saa lisätietoja Unixista, ohjeita salasanan valinnasta ja ohjeita muutamista tavallisista pääteongelmista selviämiseen.

Merkistöt ja merkinnät

Isot ja pienet kirjaimet

Unix-tietokoneiden käytön kannalta on olennaista muistaa, että näissä koneissa yleisesti ottaen isojen ja pienten kirjainten ero on merkitsevä. Jos oppaassa tai manuaalissa puhutaan esim. pine-komennosta, niin komentosana on kirjoitettava nimenomaan pine eikä esim. Pine tai PINE. Sama koskee muun muassa tiedostonnimiä: esimerkiksi sekä tkk että TKK ovat Unixissa mahdollisia tiedostonnimiä, mutta ne tarkoittavat aivan eri tiedostoja.

Tässä suhteessa Unix poikkeaa mm. Windowsista. Erittäin tavallinen ongelma siirrettäessä tiedostoja Windows-koneesta Web-palvelimena toimivaan Unix-koneeseen on se, että ei tiedetä tai ei muisteta, että tiedostonnimissä on Unixin puolella oltava tarkempana. Jos Web-sivuun on liitetty kuva rakenteella <img src="foo.gif" alt="">, niin Windowsissa se toimii, vaikka kuvatiedoston nimi olisi FOO.GIF, mutta Unixissa sen pitää olla tasan foo.gif. (Tällaisissa yhteyksissä kannattaa tiedostot yleensä nimetä niin, että kaikki kirjaimet ovat pieniä. Ks. Web-julkaisemisen oppaan kohtaa Web-osoitteet ja muut URLit.)

Toivottavasti lukijaa ei häiritse, että tässä oppaassa on noudatettu erisnimien oikeinkirjoitussääntöä. Niinpä ohjelmien nimet on kirjoitettu isolla alkukirjaimella (esim. Pine), vaikka komento, jolla ohjelma on käynnistettävä, on yleensä sellainen, jossa kaikki kirjaimet ovat pieniä (esim. pine). Yleisemmin on syytä huomata, että se komento, jolla ohjelma käynnistetään, voi olla muutenkin erilainen kuin se nimi, jolla ohjelmasta puhutaan.

Skandinaaviset kirjaimet ja erikoismerkit

Unix-tietokoneissa käytettiin pitkään ns. Ascii-merkistöä, jossa ei ole omia merkkejä skandinaavisille kirjaimille å, ä ja ö. Suomessa noudatettiin yleisesti sopimusta, jonka mukaan skandinaavisten kirjainten esittämiseen käytettiin merkkipaikkoja, jotka Asciissa vastaavat erikoismerkkejä. Seuraavassa taulukossa kukin rivi sisältää kirjaimen sekä erikoismerkin, jonka tilalla se on:

å  }  (oikea aaltosulku, right brace)
ä  {  (vasen aaltosulku, left brace)
ö  |  (pystyviiva, vertical line eli vertical bar)
Å  ]  (oikea hakasulku, right bracket)
Ä  [  (vasen hakasulku, left bracket)
Ö  \  (kenoviiva, backslash)

Tämä menettely, joka on vielä jossain määrin käytössä, on aiheuttanut paljon ongelmia etenkin kansainvälisissä yhteyksissä. Syynä on muun muassa se, että muissa maissa on toisenlaisia sopimuksia .

Yleisesti on (länsimaissa) siirrytty laajempaan merkkikoodiin ISO-Latin-1 (virallisimmalta nimeltään ISO 8859-1). Se on Ascii-koodin laajennus, jossa skandinaavisille kirjaimille on omat merkkipaikat. Se vastaa melko tarkoin Windowsissa käytettyä merkistöä.

Vaikka siirtyminen laajempaan merkistöön on erittäin tarpeellista, siitä on aiheutunut ja jossain määrin vieläkin aiheutuu monenlaista hankaluutta, koska monet ohjelmat (käyttöjärjestelmien komentotulkit, tietoliikenneohjelmat, sovellusohjelmat) sekä monet päätelaitteet on tehty Ascii-koodia ajatellen, eivätkä ne siksi toimi kunnolla ISO-Latin-1:tä käytettäessä ainakaan ilman muutostöitä. Edelleenkin monet tulevat vielä pitkään käyttämään edellä mainittuja erikoismerkkejä skandinaavisten kirjainten tilalla. Joudut siis luultavasti silloin tällöin näkemään t{llaista teksti{. Lisäksi saatat törmätä sellaisiin teksteihin, joissa skandinaavisten kirjainten tilalla on mitä kummallisimpia merkkejä, koska tekstit on kirjoitettu käyttäen jotakin merkkikoodia, joka ei ole Ascii eikä ISO-Latin-1, ja koska merkistönmuunnosta ei ole hoidettu kunnolla.

Toisaalta jos joudut käyttämään näppäimistöä, josta ei tunnu löytyvän sellaisia erikoismerkkejä kuin pystyviiva | (jota usein tarvitaan Unixin komennoissa), voit kokeilla käyttää skandinaavisia kirjaimia (kuten ö) niiden asemesta edellä olevan taulukon mukaan. On nimittäin mahdollista, että laite tällöin käyttää Ascii-merkistön suomalaistettua muunnelmaa, jolloin näppäinhatussa lukee ja ruudulla näkyy ö-kirjain mutta kyseinen merkki silti "oikeasti" on pystyviiva.

Vaikka skandinaavisten kirjaimien käyttö tiedostonnimissä on mahdollista, se on yhä epäsuositeltavaa, koska se voi aiheuttaa erilaisia ongelmia. Sen sijaan tiedostojen sisällössä niitä voi toki käyttää.

Kontrollimerkit

Unix-tietokoneiden käyttämisessä tarvitaan melko usein myös nk. kontrollimerkkejä (control characters). Niillä vaikutetaan käytetyn tietokoneen toimintaan eri tavoilla eli kontrolloidaan sitä, mitä kone tekee. Vaikutus on ohjelmakohtainen, mutta joitakin yleisiä käytäntöjä on vakiintunut. Tässä oppaassa on esitetty muutama kontrollimerkki, ja niistä on sellaisia merkintöjä kuin control-c. Muissa dokumenteissa kontrollimerkeistä saatetaan käyttää sentapaisia merkintöjä kuin CTRL-C, C-C tai ^C.

Esimerkiksi control-c saadaan aikaan siten, että painetaan control-näppäin alas ja pidetään se alaspainettuna kun painetaan c-näppäintä. (Control on se näppäin, jossa on merkintä CTRL tai CONTROL tms. ja joka usein on näppäimistön vasemmassa alakulmassa.) Ei siis tarvitse yrittää näpäyttää kyseisiä näppäimiä yhtä aikaa, eikä niitä pidä näpäyttää peräkkäin. Menettelytapa on siis samanlainen kuin isojen kirjainten kirjoittaminen tasonvaihtonäppäimen (SHIFT) avulla. Pelkkä control-näppäimen painallus ei vaikuta yksinään mitään, vaan sen pitäminen alhaalla muita näppäimiä paineltaessa muuttaa niiden merkitystä (esim. c-kirjaimesta control-c:ksi).

Sellaisia kontrollimerkkejä, joita Unixissa tarvitaan varsin yleisesti, ovat juuri edellä esimerkkeinä mainitut

Oppaan merkintätavoista ja termistöstä

Tässä oppaassa on kirjoitettu Unixille annettavat komennot ja koneen tulostamat tekstit tavallisesta tekstistä poikkeavalla kirjasinlajilla tähän tapaan: passwd ja Incorrect password. Toisaalta tilanteen mukaan vaihtuvat tekstit on kirjoitettu tähän tapaan: tiedostonnimi. Esimerkiksi ilmaisu
rm tiedostonnimi
kuvaa erään komennon yleistä muotoa kun taas
rm foobar
esittää yhden konkreettisen esimerkin kyseisestä komennosta.

Komentojen esittelyjen yhteydessä mainitaan usein, mistä englannin sanoista komennon nimi on peräisin, esim. cp (copy). Tämä ehkä helpottaa komentojen nimien muistamista, koska monien Unix-komentojen nimet aluksi tuntuvat hämäriltä konsonanttirykelmiltä.

Tässä oppaassa käytetään eräitä sellaisia termejä, joita ei ole yleensä ollut tapana käyttää painetussa tekstissä vaikka ne ovat alan puhekielessä tavallisia, esimerkiksi meili ja nyysit. Tällä menettelyllä on omat perustelunsa, mutta selvyyden vuoksi sellaisia termejä ensimmäisen kerran käytettäessä mainitaan myös niiden "kirjakieliset" vastineet kuten sähköposti ja newsit.

Mistä apua?

Kun tietokonetta käyttäessäsi törmäät ongelmiin ja vaikeuksiin, yritä ensin selvitä itse käyttäen hyväksesi tarjolla olevia kirjallisia ja koneella luettavissa olevia ohjeita ja oppaita. Hyvin usein ongelmat ratkeavat etsimällä oikea dokumentti ja lukemalla se, tarvittaessa pari kertaa, sillä ensi lukemalla jää hyvin usein jokin olennainen seikka huomaamatta. Tässä oppaassa on luku, jossa kerrotaan, mistä löydät lisätietoja Unixista.

Jos tunnet joutuneesi umpikujaan, saat usein nopeimman avun opiskelu- tai työtoverilta, jos toimit ympäristössä, jossa voi esim. viereisen päätteen käyttäjältä kohteliaasti kysyä, ehtisikö ja voisiko hän auttaa.

Käytettävissäsi saattaa olla joitakin neuvontapalveluja. Silloin on tärkeää antaa neuvojalle olennaiset tiedot ongelmasta. Neuvonta etenkin puhelimitse tai meilitse on aina hankalaa, mutta mahdottomaksi sen tekee, jos käyttäjä ei kerro muuta kuin että "tietokone ei toimi".

Unixin lyhyt esittely

Mikä Unix on?

Unix on perhe samantyyppisiä (mutta ei keskenään täysin samanlaisia) tietokoneen käyttöjärjestelmiä. Käyttöjärjestelmä (englanniksi operating system) on yleisesti sanottuna tietokoneen eri toimintoja ohjaava ja tukeva ohjelma tai ohjelmisto. Käyttäjälle näkyvin osa ovat käyttöjärjestelmän komennot, joilla hän mm. käynnistää ohjelmia, tulostaa tiedostoja jne. Muista käyttöjärjestelmistä kuin Unixit mainittakoon esimerkkinä PC-mikroissa tavalliset Windows-järjestelmät sekä etenkin aiemmin käytetty MS-Dos.

Käyttöjärjestelmä on olemassa sitä varten, että tietokoneessa voitaisiin suorittaa ohjelmia, sovelluksia. Useimmiten käyttäjät "keskustelevat" pääasiassa muutaman sovelluksen kanssa, ja käytön opettelu on lähinnä niiden sovellusten käytön opettelua. Sovellus on kuitenkin osattava käynnistää, ja Unixissa siihen tarvitaan käyttöjärjestelmän komento. Lisäksi voidaan tarvita komentoja esimerkiksi käyttäjän tietoaineistojen (tiedostojen) hallintaan.

Jatkuvasti aiheuttaa sekaannuksia se, että käyttäjät ajattelevat joidenkin ohjelmien tai muiden asioiden kuuluvan Unixiin, koska ovat tutustuneet niihin Unix-koneissa. Siksi on syytä korostaa, että esimerkiksi tässä oppaassa kuvattavista tai mainittavista ohjelmista editori Emacs, eri Web-katseluohjelmat ja meiliohjelma Pine eivät ole osa Unixia. Ne vain ovat ohjelmia, jotka ovat saatavissa Unix-koneisiin ja niissä yleisesti käytettyjä, mutta niitä ei suinkaan löydy kaikista Unix-koneista. Toisaalta näitä ohjelmia voi olla käytettävissä muissakin koneissa kuin Unix-koneissa.

Ohjelmat on myös saatettu toteuttaa toisistaan hyvinkin riippumattomasti, joten yhden ohjelman sisällä toimivat käskyt ja temput yleisesti ottaen eivät toimi ollenkaan tai eivät toimi samalla tavalla toista ohjelmaa käytettäessä.

Miksi Unix?

Useimmille ihmisille Unixin tai Unix-tietokoneen käyttö ei ole itsetarkoitus vaan väline: Unix-kone valitaan käytettäväksi siksi, että siinä on sellaisia ohjelmia, joita halutaan käyttää. On myös mahdollista, että käyttäjälle on esimerkiksi työ- tai opiskelupaikassa tarjolla vain Unix-koneita.

Unix-koneita käytetään jossain määrin "keskuskoneina", jotka on kiinteästi kytketty tietoliikenneverkkoon ja joihin voi ottaa yhteyden muualta, esimerkiksi käyttäjän mikrolta. "Keskuskoneita" saatetaan käyttää raskaaseen numeeriseen laskentaan tai muihin vaativiin sovelluksiin taikka pelkästään datojen keskitettyyn tallentamiseen (ns. tiedostopalvelimina).

Jos sinulla on käyttäjätunnus Unix-koneeseen, joka on kiinteästi Internetissä, voit päästä käyttämään koneessa olevia aineistojasi, ohjelmia yms. mistä tahansa päin maailmaa. Toki tällaisessa koneessa voisi olla muukin käyttöjärjestelmä kuin Unix, mutta käytännössä Unix on tavallisin.

Unixia käytetään yleisesti myös erilaisissa palvelimissa (servers), esimerkiksi Web-palvelimissa ja FTP-palvelimissa. Oikeastaan "keskuskoneet" ovatkin nykyisin palvelimia pikemminkin kuin vanhanaikaisia keskitettyjä järjestelmiä. Varsin tavallista tätä nykyä on, että käyttäjä, joka muutoin toimii vain Windows-ympäristössä, joutuu Unixin kanssa tekemisiin vain halutessaan tehdä Web-sivuja. Silloinkin itse tekemisen voi hoitaa omalla mikrolla, ja Unixissa tehdään vain muutamia melko yksinkertaisia toimenpiteitä.

Hiukan eri Unixeista

UNIX on The Open Groupin (aiemmin X/Openin, sitä ennen AT&T:n) rekisteröity tavaramerkki. Tässä oppaassa ja yleisesti muutoinkin käytetään sanaa hUnix tarkoittamaan erilaisia UNIX-tyyppisiä käyttöjärjestelmiä. Niillä on monia erilaisia tuotenimiä, jotka on usein valittu x-loppuisiksi, esim. "Aix" ja "HP-UX".

Vaikka siis nimi "UNIX" sinänsä on varattu järjestelmille, jotka täyttävät eräät vaatimukset, ei ole mitään yleisesti hyväksyttyä määritelmää sille, millaiset käyttöjärjestelmät ovat "UNIX-tyyppisiä". Usein sanaa "Unix" (näin kirjoitettuna) käytetään väljästi tarkoittamaan "UNIX-tyyppisiä" järjestelmiä, jopa niin, että esim. Linuxiakin saatetaan sanoa Unixiksi.

Unixeja voidaan monin tavoin "viritellä" niin, että koneet, joissa on saman valmistajan toimittama Unix, voivat silti näyttää käyttäjälle melko erilaisilta ainakin päällisin puolin. Kääntäen voidaan eri valmistajien Unixeista tehdä näkyviltä osiltaan samanlaisiksi sopivilla asetuksilla, jos halutaan.

Unixin yleispiirteitä

Muun muassa seuraavia ominaisuuksia voidaan pitää kaikille Unixeille ominaisina:

Tässä oppaassa kerrotaan Unix-koneiden tiedostojärjestelmään ja komentoihin liittyvistä asioista; tietokonelaitteistoon sen sijaan ei puututa.

Unix on alun perin suunniteltu yksinkertaiseen päätekäyttöön: käyttäjä istuu tekstipäätteen ääressä ja "komentaa" konetta tekstikomennoilla. Tekstipääte tarkoittaa tällöin ns. tyhmää päätettä, joka pystyy näyttämään kuvaruudulla vain merkkejä, ei grafiikkaa, ja jossa käytetään vain näppäimistöä, ei hiirtä. Nykyisin paljon monipuolisempikin käyttö on mahdollista. Perustilanne on kuitenkin edelleen seuraava:

Keskeisiä peruskäsitteitä

Seuraavassa selitetään muutama peruskäsite, joita tarvitaan jo opeteltaessa tavallisimpien sovellusohjelmien käyttöä Unix-koneissa. Kaikkia näitä kuvataan yksityiskohtaisemmin muualla tässä oppaassa.

Tiedosto (engl. file) tarkoittaa data-aineistoa, joka on suhteellisen pysyvästi talletettu tietokoneeseen. Tiedostolla on nimi, jolla siihen viitataan. Nimi on käyttäjän valittavissa. Varminta on ainakin aluksi käyttää vain sellaisia tiedostonnimiä, jotka koostuvat seuraavista merkeistä: englannin kirjaimet a:sta z:aan, numerot ja piste. Esimerkiksi opintosuunnitelma ja ajat5.txt ovat mahdollisia tiedostonnimiä. Tiedostoja voidaan perustaa ja tiedostojen sisältöä muuttaa sekä komennoilla että ohjelmilla, mm. Emacs-editorilla. Lisäksi tiedostoja voidaan luoda monilla muillakin tavoilla, ja monet ohjelmat tuottavat tiedostoja automaattisesti, käyttäjän tietämättäkin.

Edellä käytetty ilmaisu suhteellisen pysyvästi tarkoittaa, että tietoaineisto ei häviä, kun käyttäjä lopettaa yhteyden tietokoneeseen. Periaatteessa tiedosto ei häviä, ellei sitä erikseen hävitetä. Käytännössä tähän ei voi täysin luottaa, koska esim. laiteviat voivat tuhota tiedostoja.

Hakemisto (engl. directory) voidaan ymmärtää kokoelmaksi tiedostoja tai tiedostoja koskevien tietojen kokoelmaksi tai "paikaksi", jonne tiedostoja voi tallentaa. Kokoelma voi myös olla monitasoinen siinä mielessä, että hakemisto sisältää hakemistoja, joita sanotaan alihakemistoiksi.

Jokaisella käyttäjällä on kotihakemisto. Tämä tarkoittaa käyttäjätunnukseen liitettyä hakemistoa, jota käyttäjä itse hallitsee. Aluksi voit tallettaa kaikki tiedostosi ajattelematta hakemistoja ollenkaan, jolloin tiedostot menevät kotihakemistoosi. Mutta kun tiedostoja alkaa kertyä, kannattaa opetella perustamaan ja käyttämään alihakemistoja, jotta voit sijoittaa tiedostosi aihepiirin mukaisiin hakemistoihin (kotihakemistosi alihakemistoihin).

Luettelon kotihakemistossasi olevista tiedostoista saat komennolla ls (list).

Tiedostojen ja hakemistojen suojaukset määräävät, keillä on oikeus käsitellä tiedostoja ja hakemistoja eri tavoin. Suojausten oletusarvot ovat eri Unix-koneissa erilaiset; on esimerkiksi mahdollista, että käyttäjän tiedostoja voivat kaikki muut lukea, ellei käyttäjä ole erikseen suojannut niitä. Järkevä oletusarvo on yleensä se, että käyttäjän tiedostoihin ei muilla käyttäjillä (paitsi ylläpidolla) ole mitään oikeuksia, ja käyttäjä itse voi päättää antaa joitakin tiedostojaan muidenkin luettavaksi. Kaikkialla oletusarvot eivät kuitenkaan aina ole järkeviä, joten uuden järjestelmän käyttöä aloittaessaan kannattaa tarkistaa tällaiset asiat.

Edellä käytetty ilmaisu oletusarvo (engl. default) on atk-alan slangia ja tarkoittaa alkutilaa, joka vallitsee, kunnes käyttäjä itse muuttaa tilannetta komennoilla tai muuten.

Yhteydenotto Unix-koneeseen

Käyttäjätunnus ja salasana

Unix-tietokonetta (jatkossa "konetta") pystyy käyttämään monta ihmistä yhtä aikaa. Jokainen käyttäjä tarvitsee oman käyttäjätunnuksen (username tai user id), jolla käyttäjä ilmoittaa itsensä yhteydenotossa ja jonka "omistuksessa" käyttäjän tiedostot ovat. Jokaisella käyttäjällä on myös oma, salainen avaimensa eli salasana (password), jolla käyttäjän henkilöllisyys varmistetaan.

Omaa salasanaa ei saa kertoa kenellekään. Salasanan on tarkoitus olla vain omassa muistissa - ei edes paperilapulla, josta joku voi sen nähdä. Salasanaa ei pidä kertoa edes ylläpitäjäksi esittäytyvälle, sillä ylläpitäjä ei salasanaasi tarvitse. Sen sijaan käyttäjätunnuksesi voit toki kertoa keille haluat. Katso salasanan valintaohjeita tämän oppaan liitteestä. Ks. myös Tietokoneen käyttäjän turvaopas, etenkin kohdat Salasanat ja Vainoharhaisuus on hyväksi.

Ilman käyttäjätunnusta ja salasanaa ei Unix-koneita saa käyttää, eikä luvatonta käyttöä pidä yrittää. Käyttäjätunnuksen eli tietokoneluvan myöntää kunkin tietokoneen omistaja tai tämän valtuuttama koneen ylläpitäjä.

Saadessaan käyttäjätunnuksen käyttäjä sitoutuu noudattamaan järjestelmän ylläpitäjän antamia sääntöjä ja ohjeita.

Usein käyttäjätunnuksia luodaan "massoittain" tai muuten enemmän tai vähemmän automaattisesti, esimerkiksi oppilaitoksissa ehkä kaikille uusille opiskelijoille ilmoittautumisen yhteydessä taikka työpaikoilla osana työsuhteen perustamisen rutiineja. Tällöin konekohtaisia tietoja järjestelyistä ei kerrota henkilökohtaisesti, mutta sitä tärkeämpää on tutustua jaettavaan aineistoon ja tallettaa se huolellisesti.

Yhteydenotto (login)

Yleistä yhteydenotosta

Kuten kohdassa Unixin yleispiirteitä kerrottiin, Unix-koneita aluksi käytettiin yleensä päätteen (terminal) kautta. Pääte oli alkujaan (ja joskus yhä on) "tyhmä" laite, joka osasi lähinnä lähettää näppäimistöltä kirjoitettavat merkit tietokoneelle ja näyttää tietokoneelta tulevat merkit kuvaruudulla (tai tulostaa ne paperille). Pääte voi olla kaukana itse koneesta, jonne päätteeltä menee vain dataa (merkkejä) kuljettava johto. Yhteen koneeseen menee yleensä monta tällaista päätelinjaa. (Päätettä, jonka kautta koneen perusylläpito hoidetaan ja joka on yleensä lähellä konetta, sanotaan konsoliksi.) Itse kone pysyy käynnissä, vaikka päätteistä katkaistaisiin virrat.

Alkujaan kukin pääte oli kiinteästi kytketty yhteen koneeseen. Myöhemmin kehitettiin erilaisia vaihteita, joiden kautta päätteeltä saattoi kytkeytyä eri koneisiin.

Nykyisin on erittäin tavallista, että päätteen asemesta käytetään mikrotietokonetta tai työasemaa, jossa toimii jokin päätettä matkiva eli emuloiva ohjelma, pääte-emulaattori. Turvallisuussyistä kannattaa yleensä käyttää kehittynyttä ohjelmaa, joka hoitaa siirrettävän datan salauksen, esim. SSH.

Seuraavassa käsitellään yhteydenottoa vain siltä osin, kuin se vastaa toimintaa "tyhmällä" päätteellä. Tämä on yhteydenoton ydin, ja muusta asiaan liittyvästä kerrotaan eri pääte-emulaattorien yms. käyttöohjeissa.

Toimintaa, joka alkaa yhteydenotosta ja päättyy yhteyden katkaisuun, kutsutaan pääteistunnoksi tai lyhyesti istunnoksi (session). Osa käyttäjän tekemistä asioista vaikuttaa koko istunnon ajan, osa taas lyhytaikaisemmin esim. vain yhden komennon suorituksessa, tai pitkäaikaisemmin myös käyttäjän myöhemmissäkin istunnoissa.

Perustilanteessa Unix-kone tulostaa päätteelle (tai pääte-emulaattorin ikkunaan) tekstin
login:
merkiksi siitä, että se on valmis yhteyteen. Jotta tähän tilaan päästäisiin, saatetaan tarvita erilaisia toimenpiteitä kuten return- tai enter-näppäimen painamista muutaman kerran. Kirjoita käyttäjätunnuksesi ja paina sitten return- tai enter-näppäintä. Ruudulle pitäisi tulostua
nn's password:
missä nn:n tilalla on käyttäjätunnuksesi. Tällöin kirjoita salasanasi ja paina lopuksi return- tai enter-näppäintä Salasana ei tule ruudulle näkyviin, jottei selkäsi takaa ehkä kurkkiva ihminen saisi sitä liian helposti tietoonsa. Siksi sen kirjoittaminen vaatii erityistä huolellisuutta.

Jos käyttäjätunnus (jatkossa tunnus) ja salasana on kirjoitettu täsmälleen oikein, kone käynnistää istunnon, "päästää käyttäjän sisään". Jos käyttäjä on tehnyt jonkin kirjoitusvirheen, kone ilmoittaa esim. login incorrect ja kysyy samat asiat uudestaan.

Koska Unix-koneet ymmärtävät isot ja pienet kirjaimet eri merkeiksi, käyttäjätunnus pitää antaa juuri sellaisina kuin sen on saanut ja salasana sellaisena, joka on ilmoitettu tai jollaiseksi sen on itse asettanut. Jos tämä ei toimi, kannattaa kokeilla molempien kirjoittamista kokonaan pienillä kirjaimilla. Jos lomake, johon olet kirjoittanut haluamasi tunnuksen, tai paperi, jossa sinulle annettu tunnus on ilmoitettu, on kirjoitettu käsin, tunnus ja salasana voivat olla siinä isoilla kirjaimilla, vaikka lupaa luotaessa ne itse asiassa kirjoitettu pienillä.

Jos kaikki menee hyvin, niin yhteys muodostuu. Tosin joskus yhteyden muodostuminen voi kestää jonkin aikaa.

Yhteyden muodostuttua ruudulle voi tulostua

Näiden ilmoitusten jälkeen pitäisi tulostua koneen ns. kehote (prompt) merkiksi siitä, että kone on valmis ottamaan vastaan komentoja. Kehote voi olla esim. seuraavanlainen:
alpha ~ 1 %
tai se voi olla pelkkä %- tai $-merkki.

Kehote (prompt) ja komentotila

Koneeseen sisäänpääsy kestää yleensä hetken, koska kone suorittaa erilaisia tarkistuksia ja alustuksia. Kun nämä ovat valmiit, kone ilmoittaa olevansa käyttövalmis tulostamalla kehotteen (prompt).

Kehote voi olla hyvinkin erinäköinen eri koneissa ja eri käyttäjillä. Seuraavassa on muuan tavallinen kehotteiden rakenne:
kone hakemisto nro %
esimerkiksi
alpha ~ 1 %
Tällöin kehotteen ensimmäinen osa kertoo, missä koneessa ollaan, toinen osa (alkutilassa ~ eli kotihakemisto) kertoo, missä hakemistossa ollaan ja kolmas osa kertoo, monesko komento on menossa. Lopussa on vielä prosenttimerkki ja välilyönti.

Kehotteen näkyminen ilmoittaa, että kone on komentotilassa eli valmis ottamaan vastaan komentoja. Teknisemmin sanoen: tällöin sen, mitä käyttäjä näpyttelee, käsittelee Unixin komentotulkki (engl. shell), joka yrittää tulkita näpyttelyt komennoiksi ja suorittaa ne. Kone voi myös olla esim. jonkin ohjelman käskytilassa, siis valmiina vastaanottamaan kyseisen ohjelman sisällä annettavia käskyjä mutta ei Unixin komentoja. Tällöin kehote on erinäköinen, esim. ftp>.

Komentotilassa eli kehotteen perään voidaan kirjoittaa Unixin komento tai sellaisen ohjelman nimi, joka halutaan käynnistää. Jokainen komento tai ohjelman nimi päätetään return- tai enter-näppäimellä. Tätä ei jäljempänä enää yleensä erikseen mainita.

Komentoja kirjoitettaessa tehtyjä näppäilyvirheitä voi korjailla eri tavoin. Esimerkiksi viimeksi kirjoitetun merkin voi yleensä poistaa DEL-näppäimellä.

Seuraavassa on pieni esimerkki siitä, miltä komentojen antaminen näyttää. Yksityiskohdat kuten kehotteen muoto tietysti vaihtelevat. Esimerkissä käyttäjä antaa kolme komentoa: date (tulostaa päiväyksen ja kellonajan), cal 2 1996 (tulostaa helmikuun kalenterin vuonna 1996) ja rm logfile (hävittää, engl. remove, tiedoston logfile):


epsilon ~ 51 % date
Tue Feb  6 10:42:55 EET 1996
epsilon ~ 52 % cal 2 1996
       February 1996      
Sun Mon Tue Wed Thu Fri Sat  
                 1   2   3
 4   5   6   7   8   9  10
11  12  13  14  15  16  17
18  19  20  21  22  23  24
25  26  27  28  29

epsilon ~ 53 % rm logfile
epsilon ~ 54 % 

Huomaa erityisesti, että komennon onnistuneesta suorituksesta ei useinkaan tule mitään palautetta vaan tulostuu vain uusi kehote. Esimerkissä kävi näin komennon rm logfile tapauksessa.

Poistuminen (logout)

Pääteistuntoa ei saa lopettaa vain sammuttamalla virta päätteestä. Virran sammuttaminen ei useinkaan ole tarpeen, mutta tärkeämpää on, että se ei suinkaan takaa pääteistunnon katkeamista. Jos seuraava käyttäjä virran kytkettyään huomaa olevansa sinun pääteistunnossasi, se aiheuttaa hänelle turhaa hämminkiä - ja mahdollisesti sinulle ikäviä seuraamuksia.

Pääteistunto lopetetaan komennolla

logout

Tähän järjestelmä yleensä vastaa ilmoituksella, joka kertoo istunnon päättymisestä. Tämän jälkeen voit luovuttaa päätteen toiselle, sammuttaa pääte-emulaattorin tms.

Tiedonhaku ja viestintä Unix-koneissa

Yleistä

Tämä luku käsittelee tiedonhakua ja viestintää tietokoneiden avulla lähinnä siltä kannalta, miten eräitä siihen sopivia ohjelmia käytetään Unix-koneissa. Tässä ei juurikaan käsitellä esim. sellaisia kysymyksiä kuin mikä Web järjestelmänä on ja miten sitä hyödynnetään tehokkaasti tai miten nyyseissä (newseissä) tulisi käyttäytyä. Sellaisia yleisiä aiheita käsittelevät mm. Web-julkaisemisen opas. ja Nyysiopas.

Kuvattavia tiedonhaku- ja viestintävälineitä voi usein käyttää hyväkseen etsittäessä ratkaisuja atk-alan ongelmiin ja kysymyksiin. Välineet ovat kuitenkin luonteeltaan yleisiä, ja niistä on usein suurta apua eri alojen ongelmissa ja tarpeissa.

Esittelemme tiedonhaun ja viestinnän mahdollisuuksia seuraavassa järjestyksessä, joka on eräs näkemys niiden tärkeysjärjestyksestä:

Tiedonhaku Webillä (WWW:llä)

Mikä on Web?

World Wide Web eli lyhyesti Web [lausutaan suomessa yleensä veb tai vep] tarkoittaa erästä kehittynyttä ja erittäin nopeasti laajenevaa informaatiojärjestelmää. Sen nimestä käytetään myös lyhenteitä WWW ja W³. Se tarjoaa ihmisille ja organisaatioille tehokkaan tavan tarjota tietoja muiden luettavaksi. Web tarjoaa monipuolisia mahdollisuuksia kuvien, kuvioiden, värien ja eri kirjasintyyppien käyttöön, edellyttäen että käyttäjän laite tukee niitä. Myös ääntä voi siirtää, jos käyttäjän laitteessa on sopiva äänigeneraattori. Tekstipäätteelläkin voi käyttää Webiä mutta kuvia ei silloin tietenkään näe.

Web tukee ns. hypertekstiä. Tämä tarkoittaa mm. sitä, että tiedon tuottaja voi merkitä dokumentin tekstin sanoja linkeiksi, jotka viittaavat toisiin dokumentteihin (tai saman dokumentin toiseen kohtaan). Tiedon lukija näkee linkit muusta tekstistä poikkeavina, esim. alleviivattuina tai värillisinä, ja hän voi hiirtä käyttäen tai muulla tavalla valita linkin seuratakseen sitä, siis saadakseen ruudulle sen dokumentin, johon linkki viittaa.

Jotta Webiä voisi käyttää, tarvitaan jokin Web-katseluohjelma (eli lukuohjelma eli käyttöliittymä eli selain eli browser eli ...). On olemassa varsin monia erilaisia katseluohjelmia eri tietokoneille; suureksi osaksi ne tarjoavat samoja mahdollisuuksia ja toimintoja, mutta usein eri nimillä. Suosituin Unix-koneissa lienee Netscape. Tässä oppaassa kuvataan kuitenkin lyhyesti toisentyyppinen, tekstipohjainen ohjelma: Lynx.

Tiedon osoite Webissä: URL

Webin yhteydessä keskeinen käsite on URL (Uniform Resource Locator), jonka avulla voidaan yksiselitteisesti ja suhteellisen lyhyesti ilmaista, missä jokin tieto on Webissä taikka jossakin muussa informaatiojärjestelmässä, johon on yhteys Webistä. URL on eräänlainen tiedostonnimen laajennus: se ilmoittaa, missä tietokoneessa dokumentti sijaitsee ja missä tiedostossa se siinä on. (Lyhenne URL luetaan suomessa milloin sanana, url(i), milloin lyhenteenä, uu är äl.)

Esimerkki URL:stä on http://www.vtt.fi/, joka viittaa Valtion teknisen tutkimuskeskuksen (VTT) Webiin panemien tietojen pääsivuun.

Jos tietää (esim. lehdessä julkaistun jutun perusteella) jonkin dokumentin URL:n, siihen pääsee suoraan käsiksi ilmoittamalla URL:n Web-katseluohjelmalle. Ilmoittamisen tapa vaihtelee ohjelman mukaan. URL:ää kirjoitettaessa on syytä olla huolellinen muun muassa siksi, että niissäkin yleensä isojen ja pienten kirjainten ero on merkitsevä. Onneksi URL:ien kirjoittamisen käsin voi useimmiten välttää.

Webin yhteydessä puhutaan "Web-sivuista", joihin URL:t viittaavat, mutta nimitys ei ole kovinkaan onnistunut: "Web-sivu" ei suinkaan välttämättä mahdu kuvaruudulle yhdellä kertaa vaan voi olla sivu-sanan arkimerkityksessä useita sivuja (jopa kymmeniä tai satojakin sivuja) pitkä.

Katseluohjelmien yleisiä toimintaperiaatteita

Kun Web-katseluohjelma käynnistetään, ruudulle tulee aloitussivu, joka voi eri koneissa ja eri käyttäjillä olla erilainen. Ruudulla näkyvästä dokumentista pääsee muihin dokumentteihin valitsemalla siitä linkkejä. Valinta tehdään eri katseluohjelmissa eri tavalla. Vaihtoehtoisesti käyttäjä voi, kuten edellä mainittiin, ilmoittaa suoraan URL:llä, minkä dokumentin hän haluaa seuraavaksi nähdä. Dokumentteja voi myös etsiä avainsanojen perusteella erilaisilla hakujärjestelmillä, esim. Google.

Jos ruudulla näkyvä dokumentti on sellainen, johon haluat ehkä myöhemmin palata, voit tallettaa tiedon siitä henkilökohtaiseen kiinnostavien dokumenttien listaasi. Tällöin voit myöhemmin vain poimia sen listasta ilman, että sinun tarvitsee kirjoittaa tai edes tietää dokumentin URL:ää. (Teknisesti kyllä nimenomaan dokumentin osoite eli URL tallentuu sinulle, ei itse dokumentti.) Kyseisestä listasta käytetään eri katseluohjelmien yhteydessä eri nimiä kuten hotlist, bookmarks ja quicklist, ja listan käsittelyn keinot ovat erilaisia.

Kun olet esim. seuraavien ohjeiden avulla hiukan tutustunut jonkin Web-katseluohjelman käytön perusteisiin, kannattaa ehdottomasti opetella lisäksi ainakin

Lynx

Lynx on tekstipohjainen Web-katseluohjelma, jota voi käyttää kaikenlaisilla päätteillä, modemiyhteyksillä jne. Perusasioita:

Meili (sähköposti), erityisesti Pine

Yleistä meilistä

Meili (tunnetaan myös mm. nimillä sähköposti, electronic mail, E-mail ja maili) on tietokoneviestinnän muoto, jossa viestin vastaanottajan ei tarvitse olla juuri sillä hetkellä käyttämässä konettaan, jotta viesti menisi perille. Lähettäjä kirjoittaa viestin omalla meiliohjelmallaan, joka lähettää sen tietokoneeseen, jossa vastaanottajalla on käyttäjätunnus. Vastaanottaja voi lukea meilin omalla meiliohjelmallaan hänelle sopivana ajankohtana.

Meilin käyttökelpoisuus perustuu sen nopeuteen ja tavoittavuuteen: jos käyttäjät lukevat meilinsä vähintään kerran päivässä, myös puhelimen tavoittamattomissa olevan työ- tai opiskelutoverin saa kiinni tehokkaasti.

Meili on henkilökohtaista, ts. viestiä lähetettäessä pitää erikseen nimetä jokainen vastaanottaja, ja jokainen heistä saa oman kopionsa viestistä. Tulleita viestejä pääsee normaalisti lukemaan vain oikea vastaanottaja omalla tunnuksellaan ja salasanallaan. Koska meilinlähetysohjelma voi kuitenkin joissain harvinaisissa tilanteissa toimia "väärin" ja koska toisten ihmisten meilien lukeminen saattaa olla teknisesti mahdollista (vaikkakin laitonta), niin todella salaisiksi tarkoitettuja tietoja ei meilillä kannata lähettää.

Meilin käyttö ei edellytä mitään erillistä lupaa, vaan meiliä voivat lukea ja lähettää kaikki, joilla on lupa johonkin Unix-koneeseen. Meilin käytössä on kuitenkin noudatettava sitä koskevia sääntöjä, hyviä tapoja ja tervettä järkeä. Häiriköinti kuten ketjukirjeet ja summittaiset massalähetykset ("spämmäys") ovat kiellettyjä.

Lisätietoja meilistä yleensä (ei eri meiliohjelmien käytöstä) on Meilioppaassa.

Meiliosoitteet

Meili, kuten postikin, kulkee paremmin, jos osoite on oikein. Jos meilin osoitteessa on pienikin kirjoitusvirhe, se yleensä ei mene perille minnekään vaan palautuu lähettäjälle.

Meiliosoitteita on monenlaisia, vaikka rajoituttaisiinkin vain ns. Internet-osoitteisiin. Mitä paikallisempaa meili on, sitä yksinkertaisempi osoite riittää. Toisaalta täydellisempi osoite on aina varmempi. Osoite voi olla esimerkiksi jotakin seuraavista muodoista:

Näistä kaksi viimeksi mainittua ovat ns. Internet-osoitteita. Ne eivät suinkaan ole ainoita mahdollisia Internet-osoitteiden tyyppejä, mutta tavallisimpia. Yleensä on syytä käyttää juuri Internet-osoitteita, joissa siis lopussa on alueen eli domainin tunnus (joka loppuu esim. .fi tai .com). Kun kerrot meiliosoitteesi, kerro ehdottomasti täydellinen Internet-osoite!

Kun lähetät meiliä, niin meiliohjelma yleensä automaattisesti liittää viestiin tiedon omasta meiliosoitteestasi. Vastaanottaja voi yleensä jollakin helpolla tavalla (esim. Pineä käytettäessä jäljempänä kuvattavalla r-käskyllä) lähettää sinulle vastausviestin siten, että hänen meiliohjelmansa automaattisesti osaa lähettää sen sinun osoitteeseesi. Sinun ei siis yleensä tarvitse itse kirjoittaa osoitettasi lähettämiisi meileihin - paitsi jos jostain syystä haluat vastauksen eri osoitteeseen kuin siihen, josta lähetät viestisi.

Hyvin yleisesti kysytään: "Miten saan selville kaverini meiliosoitteen?" Varmin tapa on kysyä häneltä, ja yleensä se on ainoa kohtuullisen varmasti toimiva tapa. Monissa tapauksissa on muitakin keinoja kuten finger- ja whois-palvelu, mutta ne eivät ole yleispäteviä. Ks. myös ohjetta meiliosoitteiden etsimisestä.

Pine-ohjelman käytön perusteita

Useissa Unix-koneissa on helppokäyttöinen mutta silti melko monipuolinen meiliohjelma, Pine, joka esitellään seuraavassa. (Nimi Pine luetaan suomessa yleensä kirjoitusasun mukaisesti, mutta myös englanninmukaista ääntämystä pain esiintyy.) Lukuisia muitakin meiliohjelmia on olemassa.

Pinen käytön perusteiden alkeet:

Eka kerta

Kun ensimmäisen kerran käynnistät Pinen, näet ruudullasi Pinen tervetuloviestin (Welcome to Pine). Lisäksi Pine ehkä kysyy, haluatko lyhyehkön (englanninkielisen) käyttöohjeen. Vastattuasi myöntävästi (Y) tai kieltävästi (N) pääset Pinen normaaliin aloitustilaan. Jos vastasit myöntävästi (Y), saat hetken kuluttua meilitse ohjeen. Voit lukea sen Pinellä kuten minkä hyvänsä viestin. (Kuitenkin ohjeen tilaaminen on tuskin tarpeellista, koska sen sisältö on melko tekninen ja koska Pineä koskevia lisätietoja on luettavissa Webillä.)

Meilin lukeminen

Näin luet meiliä:

  1. Käynnistä Pine eli anna komento
    	pine
    
  2. Ruudulle ilmestyy Pinen päävalikko. Anna käsky i eli vain paina i-näppäintä.
  3. Pine näyttää nyt saapuvan meilin laatikossasi olevien viestien luettelon, jossa on yksi rivi kutakin viestiä kohti. Kursori on ensimmäisen lukemattoman viestin kohdalla tai, jos lukemattomia viestejä ei ole, viimeisen viestin kohdalla. Luettelossa on N-kirjain rivin alussa, jos et ole lukenut viestiä, ja A-kirjain, jos olet jo paitsi lukenut sen myös vastannut siihen.
  4. Paina returnia, jolloin Pine näyttää kyseisen viestin. Jos viesti on pitempi kuin ruudulle yhdellä kertaa mahtuu, paina välilyöntinäppäintä päästäksesi eteenpäin.
  5. Viestin luettuasi voit haluta tehdä erilaisia asioita, joita kutakin varten on ohjeet jäljempänä:
    1. vastata viestiin
    2. hävittää viestin
    3. siirtää viestin kansioon
    4. lähettää viestin eteenpäin toiselle henkilölle
    5. olla tekemättä viestille mitään.

Viestiin vastaamiseksi paina r-näppäintä. Pääset vastaamistilaan, joka on samantapainen kuin jäljempänä kuvattava normaali meilinlähetystila. Sitä ennen Pine kuitenkin kysyy, haluatko lainata saamasi meilin mukaan vastaukseen:

	Include original message in Reply? (y/n/^C) [n]:
Yleensä kannattaa painaa returnia, mikä merkitsee, ettet halua lainata. Jos kuitenkin haluat lainata, kirjoita y ja paina returnia. Kirjoita joka tapauksessa vastauksesi samaan tapaan kuin meiliä muuten lähetettäessä, mutta ottaen huomioon, että voit ruveta suoraan kirjoittamaan itse vastausviestiä. Vastauksen lähetettyäsi olet samassa tilanteessa kuin edellä kohdassa 5 kuvattiin.

Viestin hävittämiseksi paina d-näppäintä. Tällöin Pine automaattisesti siirtyy näyttämään seuraavaa lukematonta viestiä saapuneen meilin laatikostasi. Hävitettyä viestiä ei saa takaisin sen jälkeen, kun olet poistunut Pinestä. Jos siis et ole varma siitä, tarvitsetko viestiä ehkä myöhemmin, kannattaa hävittämisen asemesta siirtää se kansioon seuraavassa kuvattavalla tavalla.

Siirtääksesi viestin haluamaasi kansioon paina s-näppäintä. Tällöin Pine kysyy

SAVE to folder [saved-messages] : 
Jos vain painat returnia, viesti siirtyy kansioon nimeltä saved-messages. Voit myös kirjoittaa haluamasi kansion nimen ja painaa returnia. Jos kyseisennimistä kansiota ei ole, Pine kysyy varmistukseksi:

Folder "kansionnimi" doesn't exit. Create? (y/n/^C) [y]

Jos haluat, että Pine perustaa kansion, paina returnia. Jos taas kirjoitit kansion nimen väärin, kirjoita n ja paina returnia ja yritä uudestaan eli kirjoita s jne. Kansioiden käytöstä kerrotaan lisää jäljempänä.

Lähettääksesi viestin eteenpäin toiselle henkilölle eli "forwardoidaksesi" sen paina f-näppäintä. Tällöin pääset tilaan, joka vastaa normaalia meilinlähettämistilaa, mutta viestiosassa on valmiiksi lopussa teksti Forwarded message ja sen jäljessä alkuperäinen viesti. Kirjoita vastaanottajan osoite normaalisti, ja yksinkertaisimmassa tapauksessa voit sitten lähettää viestin control-x:llä. Saattaa kuitenkin olla hyvin aiheellista lisätä viestin alkuun (ennen tekstiä Forwarded message) oma selityksesi, lyhimmillään ehkä jotain sellaista kuin "Tiedoksesi vain" tai "Tämä asia kuulunee sinun alaasi" ja vasta sitten painaa control-x:ää.

Jos et halua tehdä viestille mitään, paina n-näppäintä päästäksesi lukemaan seuraavan lukemattoman viestin. Jos sellaista ei ole, tulee viesti No more messages. Tällöin voit esim. lopettaa Pinen käytön painamalla q-näppäintä (ja vastaamalla Pinen ehkä esittämiin kysymyksiin) tai mennä Pinen päävalikkoon i-näppäimellä. Huomaa, että jos et tee viestille mitään, niin Pine myöhemmin edelleenkin näyttää sen saapuneen meilin listassa, lukemattomien meilien joukossa, tosin luetuksi merkittynä (s.o. listan kyseisen rivin alussa ei enää ole N-kirjainta). Mitä enemmän jätät viestejä tällä tavoin kokonaan käsittelemättä, sitä kauemmin Pinen käynnistys kestää.

Meilin lähettäminen

Näin lähetät meiliä:

  1. Käynnistä Pine eli anna komento
    	pine
    
  2. Ruudulle ilmestyy Pinen päävalikko. Anna käsky c eli vain paina c-näppäintä.
  3. Pine menee nyt meilinkirjoitustilaan. Ruudulla näkyy mm. seuraava:
    	To	:
    	Cc	:
    	Attchmnt:
    	Subject :
    	----- Message Text -----
    
    ja kursori on näistä riveistä ensimmäisen lopussa, valmiiksi kohdallaan. Kirjoita vastaanottajan meiliosoite ja paina returnia. Tällöin Pine saattaa jollakin tavalla täydentää osoitetta. Joka tapauksessa kursori siirtyy seuraavan rivin (Cc :) loppuun. Paina returnia. Kursori siirtyy seuraavan rivin (Attchmnt:) loppuun. Paina taas returnia. Nyt olet Subject-rivillä. Kirjoita viestin otsikko ja paina returnia. Kursori siirtyy Message Text -rivin jälkeisen rivin alkuun, alueelle, johon itse viesti kirjoitetaan.

    Halutessasi voit antaa To:-rivillä useita vastaanottajia, osoitteet pilkulla toisistaan erottaen. Voit myös antaa Cc:-rivillä yhden tai useamman lisävastaanottajan. Attchmnt:-riviä käytetään silloin, kun halutaan lähettää viestin mukana esim. kuvatiedosto, mutta siihen ei tässä ohjeessa puututa.

  4. Nyt siis olet viestinkirjoitustilassa. Voit poistaa virheellisen merkin korjausnäppäimellä. Voit myös siirtyillä tekstin sisällä nuolinäppäimillä ja poistaa tai lisätä merkkejä. Olet itse asiassa käyttämässä Pico-nimistä editoria. Siihen ei kuitenkaan kannattane tutustua syvällisemmin, vaan jos haluat tehdä vaativampaa editointia, käynnistä Emacs-editori control-_:lla. (Koska alaviiva on yleensä ylätason merkki siinä näppäimessä, josta normaalisti tulee miinusmerkki, tämä merkitsee: paina sekä tasonvaihto- eli shift-näppäin että control-näppäin alas ja näpäytä miinusmerkkinäppäintä.) Emacsista voit sitten poistua esim. yhdistelmällä control-x control-c, jonka jälkeen vastaa y kysymykseen tiedoston tallentamisesta (Save file - -); näin pääset takaisin Pineen niin, että Emacsilla muokattu viesti on valmiina lähetettäväksi.
  5. Viestin kirjoitettuasi anna control-x, joka aiheuttaa viestin lähettämisen. Ennen lähettämistä Pine kuitenkin pyytää varmistuksen: Send Message? [y] : johon vastataan normaalisti painamalla returnia.
  6. Nyt palataan Pinen päävalikkoon. Voit lopettaa Pinen käytön painamalla q:ta tai jatkaa esim. lukemalla postejasi.

Kansioiden käytöstä

Kansio (folder) on väline meilien säilömiseen. Teknisesti kansio on tiedosto, mutta yleensä kaiken tarpeellisen kansioiden käsittelyn voi tehdä Pinen sisällä sen komennoilla.

Etenkin jos sinulle tulee paljon meiliä, sinun kannattaa säilöä saapunut meili kansioihin sopivasti ryhmiteltynä, esimerkiksi kuhunkin aihepiiriin liittyvä meili omaan kansioonsa, jolle annat aihepiiriä kuvaavan nimen. (Tietysti sellainen meili, jota ei enää tarvita, kannattaa hävittää.)

Pine tallettaa automaattisesti kaiken lähettämäsi meilin kansioon nimeltä sent-mail. Sitä voit käsitellä kuten muitakin kansioita.

Kun haluat lukea uudelleen sellaisen viestin, jonka olet tallettanut johonkin kansioon, anna Pinen sisällä käsky l (pikku ällä), jolloin saat listan kansioistasi. Mene nuolinäppäimillä sen kansion nimen kohdalle, jossa viesti on, ja paina returnia. Tällöin saat kansiossa olevien viestien listan, joka on samaa muotoa kuin normaali saapuneen meilin lista. (Itse asiassa saapunut meilikin on kansiossa. Sen nimi on INBOX.) Nyt voit lukea vanhoja viestejä aivan samaan tapaan kuin uusiakin. Sitten voit jatkaa Pinen käyttöä normaalisti, esim. antaa uuden l-käskyn, jos haluat käsitellä jotakin muuta kansiota, tai c-käskyn, jos haluat lähettää meiliä, jne.

Lisätietoja

Pinessä on hyvä sisäinen help-järjestelmä, johon pääsee kysymysmerkillä (?). Siitä pääsee takaisin Pinen normaalitilaan e-näppäimellä.

Edellä esitetty sisältää olennaisesti saman kuin erillinen Pinen käyttöohje. Ks. myös suomenkielisiä lisäohjeita, joissa viitataan englanninkielisiin lisätietoihin.

Nyysit (news)

Nyysit (Usenet, news) oli aikoinaan vahvasti Unix-painotteinen viestintäjärjestelmä. Edelleenkin sen käyttö myös Unix-koneissa on toki mahdollista. Käytössä on kuitenkin suhteellisen vähän käyttöjärjestelmästä riippuvia asioita. Enemmänkin on kyse toisaalta yleisistä käyttöperiaatteista ja -säännöistä, toisaalta ohjelmakohtaisista asioista.

Niinpä tässä vain viitataan laajahkoon Nyysioppaaseen. Sen kohdassa Nyysiohjelmia Unixissa mainitaan muutamia yleisesti käytettyjä ohjelmia ja viitataan niiden käyttöohjeisiin.

Tietoja käyttäjistä ja koneista: who, w, finger

Keitä on paikalla? who ja w

Koska koneessa voi olla yhtä aikaa monia muitakin, voi olla mielenkiintoista ja tarpeellista tietää, keitä he ovat ja mitä he ovat tekemässä. Esimerkiksi jos haluaisit "reaaliaikaisen" yhteyden johonkuhun esim. jäljempänä kuvattavalla talk-komennolla, kannattaa ensin tarkistaa, onko hän käyttämässä konetta ja jos on niin mitä konetta.

Yksi komento tähän tarkoitukseen on who, johon vastaukseksi kone näyttää listan kaikista koneessa olevista käyttäjistä. Esimerkki:

vipunen ~ % who
root     console   Sep 11  10:07 
teemu    tty02     Sep 11  14:09 
tiina    tty05     Sep 11  09:16 
matti    tty12     Sep 11  10:58 
root     ttyp0     Sep 11  09:34 
paivi    ttyp1     Sep 11  21:21 
anna     ttyp3     Sep 11  10:42 
antti    ttyq0     Sep 11  14:09
Tulostuksessa näkyy ensin henkilön käyttäjätunnus, sitten sen päätelinjan (tty) numero, jota kyseinen tunnus käyttää, ja lopuksi ajankohta (päivämäärä ja kellonaika), jolloin käyttäjä on aloittanut tämänkertaisen istuntonsa.

Myös komento w (joka ei toimi kaikissa Unix-koneissa) näyttää samantapaisen listan. Sen antama lista on hiukan monipuolisempi kuin who-komennon antama. Alla on esimerkki selityksineen.

vipunen ~ % w 
 12:23am up 15:30, 7 users, load average: 0.23, 0.07 
User     tty      login@   idle  JCPU   PCPU  what 
root     console  10:07am  14:03   18      4  -tcsh 
teemu    tty02    02:09pm     27    2      1  ls 
jukka    tty05    09:16am  03:26   34      7  emacs 
liisa    tty12    10:58am          16      2  cp 
root     ttyp0    09:34am  13:47   29      3  more  
paivi    ttyp1    09:21pm         4:24  2:53  w 
anna     ttyp3    10:42am      3  1:21    48  man
Ensimmäisellä tulostusrivillä näkyy Toisella rivillä olevien otsikoiden merkitys on seuraava:

Tietoja käyttäjistä finger-komennolla

Yleistä

Jos halutaan tietoja muista käyttäjistä, voi "fingeröidä" eli käyttää finger-komentoa, josta on muutama erilainen muoto. Sillä voi katsoa myös sellaisen käyttäjän tietoja, joka ei ole käyttämässä konetta juuri sillä hetkellä.

Tulostuksen asu on hiukan erilainen eri koneissa, ja eri käyttäjistä tulostuu erilaisia määriä tietoja. Osa tiedoista on nimittäin käyttäjän itsensä kirjoittamaa ja näkyville laittamaa, kun taas osa on koneen automaattisesti tuottamaa.

Tietosuojasyistä on finger-komennon käytettävyyttä saatettu rajoittaa.

Koneen sisällä: finger tunnus

Jos halutaan tietoja saman koneen toisesta käyttäjästä, käytetään komentoa finger tunnus. Esimerkki:

vipunen ~ % finger tsirkia 
Login: tsirkia                          In real life: Timo Sirkiä
Directory: /u/lai/lk/tsirkia            Shell: /bin/tcsh 
Site Info:  Lk, U257B,4514303 
No Plan.
Jos kyseisen käyttäjän kotihakemistossa on tiedosto nimeltä .plan, sen sisältö tulostuu finger-komentoa käytettäessä sen sijaan, että tulostuu No Plan. kuten edellä. Tämä kuitenkin edellyttää, että tiedoston suojaus sallii sen eli että muilla käyttäjillä on suoritusoikeus hänen kotihakemistoonsa ja lukuoikeus .plan-tiedostoon. Sama koskee tiedostoa nimeltä .project. Huomaa erityisesti, että näissä tiedostonnimissä piste kuuluu nimeen eikä sitä saa jättää pois.

On käyttäjän oma asia, perustaako hän tiedoston .plan ja .project ja mitä hän niihin kirjoittaa, mutta .plan on tarkoitettu antamaan yleensä tietoja käyttäjästä, .project taas kertomaan, mitä ajankohtaisia hankkeita hänellä on menossa.

Käyttäjä voi lisäksi muuttaa varsinaisia henkilötietojaan chfn-komennolla.

Tietoja toisen koneen käyttäjästä: finger tunnus@kone

Myös muiden koneiden käyttäjistä voi saada tietoja finger-komennolla. Tällöin kirjoitetaan argumenttiin tunnuksen perään @-merkki ja koneen nimi: finger tunnus@kone. Koneesta ilmoitetaan yleisessä tapauksessa Internet-nimi, mutta paikallisesti saattaa lyhempikin muoto toimia.

Esimerkki:

vipunen ~ % finger tiina@hila.hut.fi
[hila.hut.fi]
Login name: tiina                       In real life: Tiina Talvi
Office: U649, 451-4316                  Home phone: 451-0894
Directory: /u/users/tiina               Shell: /bin/tcsh
On since Nov 17 14:41:19 on tty2 from 130.111.222.30:
34 minutes Idle Time
No Plan.
Oman koneen käyttäjät: finger

Pelkkä komento finger ilman mitään argumentteja antaa tiedot siitä, ketkä kaikki käyttävät juuri sillä hetkellä sitä konetta, jossa komento annetaan. Saatava tulostus muistuttaa hiukan who-komennolla saatavaa.

Esimerkki:

vipunen ~ % finger
Login       Name           TTY  Idle    When    Site Info
jryynane Jari P Ryynänen    pa        Thu 10:28           
sasu     Sanna Suominen     ps4       Thu 11:17           
zeizei   Janne K Janhunen   p7  20:40 Wed 14:36 Y250D, 4514325
zeizei   Janne K Janhunen   pc    2d  Thu 10:55 Y250D, 4514325
Tässä listassa näkyvät käyttäjien nimet (pitkistä nimistä vain alkuosa) ja, mikäli he ovat niin halunneet, myös heidän työhuoneidensa osoitteet ja puhelinnumerot.
Toisen koneen käyttäjät:

finger @kone

On mahdollista kysyä toiselta koneelta, ketkä käyttävät konetta juuri sillä hetkellä. Tätä varten annetaan finger-komennossa argumenttina @-merkki ja koneen nimi tai Internet-osoite:

finger @kone

(Merkki @ on tarpeen, jotta tämä komento erottuisi tapauksesta, jossa argumenttina on käyttäjätunnus.)

Esimerkki:

lk-hp-8 ~ 122 % finger @sauna.cs.hut.fi
[sauna.cs.hut.fi]
Login   Name               TTY  Idle When      Office      Office Phone
haa     Hannu Aronsson      p2    2d Sun 18:45 U405B      451 3233
jvh     Johannes Helander   p0 11:07 Sun 18:05            
visti   Hannu Visti         p3 17:01 Sat 15:44 y249d      3231
zaphod  Seppo J Niemi       p1 20:17 Tue 13:45 y249d      4513231

Välitön viestintä: talk, write, rwrite

Yleistä: pikaviestit meiliin verrattuina

Seuraavassa kuvattavat viestit ovat sellaisia, joita voi lähettää vain, jos viestin vastaanottajalla on samaan aikaan yhteys koneeseen eli hän on "sisään loganneena". Meilin käyttöhän ei mitenkään edellytä sellaista.

Viestit päätteeltä päätteelle kulkevat välittömästi tai lähes välittömästi ja tulevat heti näkyviin vastaanottajan ruudulle. Tästä on etuja ja haittoja: tämä viestintämuoto mahdollistaa puhelinkeskustelun tai kasvotusten keskustelun tapaisen yhteydenpidon, mutta toisaalta se vaatii molempien osapuolten mukanaoloa samaan aikaan. Lisäksi toisen henkilön lähettämät päätteeltä päätteelle -viestit voidaan kokea häiriöksi (paljon suuremmassa määrin kuin meili).

Välittömän viestinnän komennoissa on käyttäjän "osoitteella" eri merkitys kuin meilissä. Yleisesti ei pidä olettaa, että meiliosoitetta voisi käyttää sellaisissa komennoissa; vain osa osoitteista toimii niissä. Tavallisesti on syytä erikseen selvittää (esim. meilitse kysymällä), onko käyttäjällä osoite, jolla hänelle voi "talkata".

Seuraavassa kuvattavien viestintämahdollisuuksien lisäksi mainittakoon irkki (Irc), joka mahdollistaa useiden käyttäjien välisen "keskusteluyhteyden" (ja myös henkilökohtaisen "keskustelun").

Pikaviesti saman koneen sisällä: write

Vanhin päätteitse viestimisen muoto Unix-koneissa on write-komento:

write tunnus

Komento toimii siis vain saman koneen sisällä. Komennon kirjoittamisen jälkeen jokainen rivi, joka näppäimistöltä kirjoitetaan, välittyy vastaanottajan päätteelle saman tien, kun rivi on lopetettu painamalla return-näppäintä. Viestien lähettäminen on sinänsä yksisuuntaista, mutta eräänlaisen keskusteluyhteyden saa aikaan, jos myös vastaanottaja antaa write-komennon.

Voit kirjoittaa rivejä vaikka kuinka monta ja jäädä vaikka välillä odottamaan toisen vastausta. Vaikka toisen vastaus tulisi oman kirjoituksen sekaan ruudulle, ei pääte silti ole sekaisin, vaan voit jatkaa oman viestisi kirjoittamista välittämättä ruudulle ilmestyneestä vastauksesta. Oma kirjoituksesi menee perille juuri sellaisena kuin sen kirjoitit, ilman sotkuja.

Kun et enää halua lähettää uusia viestirivejä, lopeta control-d:llä, jolloin palataan komentotasolle.

Keskusteluyhteys: talk

Komento talk luo keskusteluyhteyden kahden käyttäjän välille.

Sitä voi käyttää myös koneesta toiseen, ja se on Unix-koneissa yleinen niin Suomessa kuin ulkomaillakin. Kaikissa koneissa sitä ei kuitenkaan ole, ja lisäksi joskus eri koneiden talk-komennot ovat niin epäyhteensopivia, ettei yhteyttä saa aikaan.

Komento on muotoa

talk käyttäjätunnus@kone

missä kone on koneen Internet-osoite. Osa @kone voidaan jättää pois, jos kyse on saman koneen toisesta käyttäjästä.

Jos kyseisellä käyttäjällä on sillä hetkellä yhteys kyseiseen koneeseen, niin komento lähettää hänelle viestin, joka pyytää häntä hyväksymään yhteyden muodostamisen antamalla talk-komennon. Jos hän toimii pyynnön mukaisesti, syntyy käyttäjien välille "keskusteluyhteys", jossa kaikki käyttäjän kirjoittama näkyy saman tien toisen käyttäjänkin ruudulla. Näkyminen on välitöntä, merkki merkiltä tapahtuvaa, eikä siis riipu returnin painamisista. Tästä ei seuraa sellaista sotkua kuin voisi luulla, sillä talk jakaa käyttäjän kuvaruudun kahteen osaan, joista toisessa näkyy hänen kirjoittamansa ja toisessa toisen käyttäjän kirjoittama. Yhteys päättyy, kun jompikumpi kirjoittaa control-c:n.

Esimerkki. Jos Matti Meikäläinen on esim. koneessa vipunen.hut.fi Vipunen ja tietää, että hänen kaverillaan Tiinalla on tunnus koneessa alpha.hut.fi, hän voi ehdottaa keskustelua antamalla komennon

talk tiina@alpha.hut.fi
(Tässä erikoistapauksessa kävisi myös lyhyempi talk tiina@alpha.) Tällöin jos Tiinalla on pääteyhteys, hänen näytölleen ilmestyy viesti
Message from Talk Daemon...
talk request from masa@vipunen.hut.fi (Matti Meikäläinen)
respond with 'talk masa@vipunen.hut.fi'
joka toistuu noin kerran minuutissa. Samalla Matin kuvaruutu muuttuu sellaiseksi, että ylälaidassa on vastauksen odottamisesta kertova viesti Waiting for your party to respond. Jos vastausta ei tule noin minuutissa, tulee viesti Calling your party again. Kutsuminen jatkuu automaattisesti vastauksen saamiseen asti tai kunnes Matti keskeyttää kutsumisen control-c:llä. Jos Tiina haluaa aloittaa keskustelun, hän vastaa
talk masa@vipunen
eli tekee kuten ruudulle tulostuneessa kutsussa pyydetään tekemään.

Kumpikin osapuoli voi aloittaa viestien kirjoittelemisen heti, kun ruudun ylälaitaan on tullut teksti Connection established.

Joissakin tilanteissa talk-yhteys ei onnistu sen takia, että eri koneiden talk-järjestelmät eivät pelaa yhteen (eli käyttävät yhteensopimattomia talk-protokollia, ks. man talk, kohta BUGS). Tarkemmin sanoen tällöin käy niin, että talk ilmoittaa Checking for invitation on caller's machine ja sitten ei tapahdukaan mitään. Silloin voi ehkä käyttää ytalk-ohjelmaa (ks. man ytalk), joka myös tarjoaa monipuolisempia mahdollisuuksia kuin talk, mm. useamman kuin kahden käyttäjän välisen keskustelun. Voidaan toimia niinkin, että yhdessä koneessa käytetään ytalkia ja toisessa koneessa talkia.

Muita toimintoja ja sovelluksia Unix-koneissa

Paperitulostus

Yleistä

Paperitulostusten saamiseen on eri Unix-koneissa erilaisia laitteita ja erilaisia komentoja. Ei pidä yrittää tulostaa paperille mitään, ennen kuin ottanut selvää, miten se tehdään käytettävässä järjestelmässä. Esimerkki: Vanhastaan on Unix-koneissa käytetty paperitulostukseen lp- tai lpr-nimistä komentoa, mutta yritys tulostaa tiedosto niillä saattaa päätyä katastrofiin. Järjestelmä nimittäin saattaa olla sellainen, että esim. lpr-komennolla tulostetaan Postscript-muotoisia tiedostoja, joita monet ohjelmat tuottavat. Jos sillä sellaisessa ympäristössä yritetään tulostaa tavallinen tekstitiedosto suoraan, komento yrittää tulkita tekstin Postscript-komennoiksi - ja paperia tuhlaantuu usein paljonkin.

Paperitulostus on Unix-koneissa yleensä ns. spoolattua tulostusta, mikä tarkoittaa sitä, että tulostuskomento vain lähettää tulostustyön tulostimen jonoon. Tulostin sitten tulostaa jonoon saapuneita töitä yhden kerrallaan. Tämä mahdollistaa sen, että eri käyttäjät voivat joustavasti käyttää samoja kirjoittimia. Haittana on, että käyttäjä ei voi etukäteen arvioida, kuinka nopeasti hän saa tiedostonsa paperille. Tilannetta voi kuitenkin katsella lpq-komennolla.

Vaikka useiden tulostukseen liittyvien komentojen nimissä esiintyy historiallisista syistä kirjainyhdistelmä lp, joka johtuu englannin sanoista line printer, kyseessä ei kuitenkaan nykyisin juuri koskaan ole rivikirjoitin vaan yleensä lasertulostin, jonka jälki on korkeatasoinen, paino-originaaliksikin kelpaava.

Selvitä siis käyttämäsi järjestelmän tulostusjärjestelyt ja -komennot. Seuraavassa kuvataan vain muutama tulostustöiden hallintaan liittyvä peruskomento eikä siis puututa siihen, miten tulostustöitä voi lähettää jonoon.

Tulostusjonon tilanne: lpq

Jos halutaan tarkistaa, onko tiedosto jonossa tai tulostumassa, voidaan katsoa tulostusjonon tilanne lpq-komennolla (line printer queue).

Pelkkä lpq näyttää sen kirjoittimen jonon, joka on oletuskirjoittimena. Jos halutaan katsoa jonkin muun kirjoittiminen jonotilannetta, on komennolle annettava -P -valitsin, jonka jälkeen kirjoitetaan ilman välilyöntiä kirjoittimen nimi, esim.
lpq -Ppsu132

Jos lpq-komennon tuloste on vain no entries, se merkitsee, että kyseinen jono on tyhjä, joten jos lähetät kyseiselle kirjoittimelle työn, se luultavasti alkaa tulostua saman tien.

Tulostustyön poisto: lprm

Tulostuksen voi vielä peruuttaa sen jälkeen, kun sen on lähettänyt, jos se ei ole ehtinyt tulostua vaan on jonossa. Syitä peruutukseen voivat olla esim. tulostusjonon pituus (jos on kiire eikä jaksa odottaa oman tiedoston tulostumista) tai se, että lähetit vahingossa väärän tiedoston tai löysit tekstistä vielä jotain korjattavaa. Peruutuskomento on lprm (line printer remove).

Komennolle annetaan argumenttina työn (job) numero, joka katsotaan lpq-komennon antamista tiedoista. Kirjoitin ilmoitetaan lprm-komennolle -P-valitsimella, joka on samaa muotoa kuin lpq-komennossa.

Seuraavassa on esimerkki, jossa käyttäjä on koneessa nimeltä Vipunen. Ensin hän lähettää tiedoston tulostettavaksi maari2-nimiselle kirjoittimelle ja tuleekin sitten toisiin ajatuksiin...

Näin käyttäjä jkorpela lähettää kirje4.txt-nimisen tiedoston tulostimelle (tässä enscript on eräs eräissä järjestelmissä käytössä oleva komento tiedoston tulostamiseen)

vipunen ~ %  enscript -s -Pmaari2 kirje4.txt
{ 1 page * 1 copy } spooled to maari2
Tämän jälkeen hän löysi kirjeen osoitteesta vielä virheen ja haluaakin peruuttaa tulostuksen. Hän katsoo tulostuksen työn numeron lpq-komennolla:
vipunen ~ % lpq  -Pmaari2
Rank   Owner      Job  Queue   Files                 Total Size
active jjuujarv   590  maari2  /usr/tmp/ESa02988    45706 bytes
1st    jkorpela   591  maari2  /usr/tmp/ES9fMBxI     3398 bytes
Komennolla saatavista tiedoista näkyy, että työn numero on 591. Seuraavaksi käyttäjä peruuttaa tulostuksen:
vipunen ~ % lprm -Pmaari2 591
Removing 591
Halutessaan hän voi vielä tarkistaa lpq-komennolla, että peruutus todella tapahtui eli että hänen työnsä ei enää ole jonossa:
vipunen ~ % lpq -Pmaari2
Rank   Owner      Job  Queue       Files                Total Size 
active jjuujarv   590  maari2      /usr/tmp/ESa02988    45706 bytes
vipunen ~ % 

Valmisohjelmien käyttö, esimerkkinä Matlab

Yleistä valmisohjelmista

Eri Unix-koneissa on erilainen valikoima valmisohjelmia. Valikoima riippuu ennen muuta siitä, mitä ohjelmia ylläpito on katsonut tarpeelliseksi ostaa tai muuten hankkia. Käyttäjät voivat myös hankkia ohjelmia omaan käyttöönsä ja panna ne omaan kotihakemistoonsa. Lisäksi valmisohjelmat ovat sekä käyttötarkoitukseltaan että toimintaperiaatteiltaan ja käytöltään hyvinkin erilaisia. Lisäksi seuraavassa esitetään joitakin yleisiä asioita esimerkin avulla. Esimerkkiohjelmana on muuan varsin hyödyllinen ja käyttötavaltaan tyypillinen valmisohjelma, joka on käytettävissä useissa koneissa: "matemaattinen laboratorio" Matlab.

Matlab on tavallaan hyvin kehittynyt mutta helppokäyttöinen laskukoneohjelma. Tavallisten laskujen lisäksi sillä voi suorittaa mm. vektori- ja matriisilaskentaa ja signaalinkäsittelyä. Lisäksi ohjelmalla voidaan esittää matemaattisia suureita graafisesti erilaisina käyrinä ja kuvioina. Aiheemme kannalta ei käytettävän ohjelman luonne kuitenkaan ole olennainen, eikä seuraavan ymmärtämiseksi ole edes välttämätöntä, että koneessasi on Matlab.

Ohjelman käyttöönotto

Ennen kuin sovellusohjelmaa ryhdytään käyttämään, voi olla tarpeellista antaa jokin komento, jolla ohjelma "otetaan käyttöön". Tämä johtuu mm. siitä, että ohjelma voi sijaita sellaisessa paikassa, ettei se normaalisti "näy" käyttäjälle. Lisäksi ohjelman käyttö voi edellyttää joitakin alustustoimenpiteitä.

Yleisesti ottaen ohjelman käyttäminen edellyttää, että käyttäjän ns. hakupolkuun (path) lisätään se hakemisto, jossa ohjelma sijaitsee. Komentotulkki etsii määritellyistä hakupoluista suoritettavia ohjelmia. Esimerkiksi T-shell-komentotulkissa hakupolkuun lisääminen tapahtuu esim. komennolla

setenv PATH $PATH\:hakemisto

joka teknisesti sanottuna muuttaa ympäristömuuttujan $PATH arvoa.

Tällöin käyttäjän siis täytyy tietää, missä hakemistossa ohjelma sijaitsee käytettävässä koneessa. Tämä vaatii asian selvittämistä järjestelmäkohtaisista käyttöohjeista. On kuitenkin mahdollista, että näitä asioita on eri tavoin tehty helpommiksi käyttäjille. Esimerkiksi käyttäjälle valmiiksi perustettuun alustustiedostoon on saatettu panna polkumäärittely, jonka ansiosta tavallisimman sovellusohjelmistot ovat suoraan käytettävissä.

Ohjelman käynnistys

Kun ohjelma on tarvittaessa edellä kuvatulla tavalla "otettu käyttöön", se käynnistetään yleensä kirjoittamalla ohjelman nimi, esim.

matlab

Tätä ennen kannattaa kuitenkin tutustua käyttöohjeeseen ainakin sen verran, että tietää, miten ohjelmasta pääsee pois!

Se nimi, jolla ohjelma käynnistetään, on yleensä pienikirjaiminen. Dokumenteissa ja muissa teksteissä käytetään tämän takia usein myös pienikirjaimista asua, mutta tässä oppaassa noudatetaan yleensä sitä kieliopin yleistä sääntöä, että erisnimet kirjoitetaan isolla alkukirjaimella.

Tämän jälkeen ohjelma usein kirjoittaa päätteelle jonkin alkuilmoituksen ja tulostaa oman kehotteensa. Kehote voi olla monennäköinen, mutta joka tapauksessa se on merkki siitä, että nyt ollaan kyseisen ohjelman sisällä ja kelvollisia syötteitä ovat ohjelman omat käskyt. Unixin komentoja ei siis voi antaa. (Monissa ohjelmissa on tosin erityinen käsky, jolla voi välittää Unixin komentotulkin suoritettavaksi komennon.) Kehote on myös viesti siitä, että ohjelma on valmis ottamaan vastaan käskyjä (eikä esim. ole suorittamassa laskentaa).

Esimerkiksi Matlabin alkuilmoitus ja kehote voivat olla seuraavannäköiset (asiassa on hiukan vaihtelua tietokoneen ja Matlabin version mukaan):

                     < M A T L A B (R) >
           (c) Copyright 1984-93 The MathWorks, Inc.
                     All Rights Reserved
                         Version 4.1
                         Jul  1 1993
Commands to get started: intro, demo, help help
Commands for more information: help, whatsnew, info, subscribe
 
>> 
Tässä >> on Matlabin oma kehote. Kun olet antanut Matlabille jonkin käskyn ja se on suorittanut sen, kehote tulostuu uudelleen.

Käskyjen antaminen ohjelmalle

Kunkin valmisohjelman käskyjen rakenne on erilainen eikä välttämättä muistuta Unixin komentojen rakennetta mitenkään. Ohjelmaa ei suinkaan aina ole alun perin tarkoitettu toimivaksi (vain) Unix-koneissa, ja muutenkin ohjelman suunnittelu on yleensä melko riippumatonta käyttöjärjestelmien ja muiden ohjelmien suunnittelusta.

Matlabin ymmärtämistä käskyistä yksinkertaisimmat ovat kaavoja, joissa on muuttuja, yhtäläisyysmerkki ja matemaattinen lauseke. Matlabilla on myös sellaisia käskyjä, jotka enemmän muistuttavat valmisohjelmien käskyjen tyypillistä rakennetta: avainsana (käskysana) ja lista argumentteja.

Matlabille annettavat käskyt lopetetaan painamalla return-näppäintä. Tämä on tyypillistä esim. matemaattisissa valmisohjelmissa. On kuitenkin olemassa sellaisiakin ohjelmia, jotka reagoivat välittömästi käyttäjän näppäilemiin merkkeihin ja joiden käskyt saattavat olla esim. yksikirjaimisia; tällöin return-näppäimen painaminen saattaa olla erillinen käsky tai se voi olla täysin vaikutuksetonta.

Matlabille annetaan tehtäviä ratkottaviksi tähän tapaan:

>> x=2+2
x =
     4
>> 
Tässä siis käyttäjä kirjoitti Matlabin kehotteen >> perään käskyn x=2+2, ja Matlab vastasi laskemalla halutun lausekkeen ja kirjoittamalla vastauksen sekä oman kehotteensa merkiksi siitä, että nyt voi antaa uuden käskyn.

Matlabin yhtenä etuna laskukoneisiin verrattuna on se, että sillä voi tallettaa tuloksen muuttujan (edellä x:n) arvoksi, jota voi myöhemminkin (Matlabin saman käyttökerran aikana) käyttää uudelleen. Jos esimerkiksi kirjoitetaan

y = x^2
niin Matlab vastaa (tulkiten symbolin ^ potenssiinkorotuksen merkiksi)
y =
    16

Ohjelman käyttöohjeet

Eri ohjelmien käyttöohjeita on tarjolla hyvin eri muotoisina: painettuina alkuperäiskäsikirjoina (lähes aina englanninkielisinä), suppeampina monistettuina oppaina (usein suomenkielisinä), tietokoneella luettavassa muodossa ohjetiedostoina tai Web-dokumentteina jne. Joistakin ohjelmista saa tietoja man-komennollakin, mutta yleensä siten saatavat tiedot, jos niitä onkaan, ovat vain teknisiä ohjeita ohjelman käynnistämisestä, ei itse käytöstä.

Erityisesti on syytä mainita, että monissa ohjelmissa on "sisäänrakennettuja" käyttöohjeita, ns. on-line help. Tämä tarkoittaa sitä, että jollakin ohjelmalle annettavalla käskyllä käyttäjä saa päätteelleen käyttöohjeita, esimerkkejä, demonstraatioita jne.

Sovellusohjelmien sisäiset on-line helpit ovat keskenään erilaisia niin rakenteeltaan ja käyttötavaltaan kuin hyödyllisyydeltäänkin. Tavallisimmat ohjelmien sisäiset käskyt, joilla on-line help käynnistetään, ovat

? 
help 
h
Näitä siis voi kokeilla melko vaaratta. Joissakin ohjelmissa h saattaa kuitenkin olla käsky, joka tekee jotain ihan muuta kuin käynnistää on-line helpin. Kun Matlab käynnistetään, se ystävällisesti kertoo muutamista avustuskäskyistään. On-line helpin käyttöön pääsee käskyllä help help. Matlabin käskyllä intro voi käynnistää Matlabin esittelyn, jossa käyttäjän tarvitsee vain painella returnia ja katsella. (Jos alkaa kyllästyttää, voi antaa control-c:n, jolloin palataan Matlabin käskytasolle.) Enemmän esimerkkejä saa käskyllä demo.

Ohjelman käytön lopettaminen

Kun Matlabin käyttö halutaan lopettaa, kirjoitetaan käsky exit, jolloin palataan takaisin Unixin komentotulkin tasolle, t.s. seuraavaksi pitäisi tulostua komentotulkin kehote eikä Matlabin kehotetta.

Eri valmisohjelmien lopetuskäskyt ovat erilaisia, mutta ne löytyvät ohjelmien käyttöohjeista. Yleensä on myös vaaratonta kokeilla erilaisia järkeviltä tuntuvia vaihtoehtoja, mm. exit, end, quit, q, stop, fin, bye tai control-d; jos muu ei onnistu, niin control-c yleensä puree.

Editointi (Emacsin minimiohjeet)

Emacs on monipuolinen editori eli ohjelma, jolla voi perustaa ja muokata tekstitiedostoja. Editori on eri asia kuin tekstinkäsittelyohjelma: editorilla ei esimerkiksi voi (ainakaan suoraan) tuottaa tekstiä, jossa on erilaisia kirjasinlajeja.

Emacsin tärkeimpiä piirteitä kuvaa Emacs-opas.

Seuraavassa on hyvin lyhyet perusohjeet, joilla toivottavasti pääsee alkuun:

Ohjelmointi

Seuraavassa on aivan perusasioita omien ohjelmien tekemisestä ja suorittamisesta; tarkempia ohjeita on oppaassa Ohjelmointi Unixissa. Tässä käsitellään varsinaisilla ohjelmointikielillä kirjoitettuja käännettäviä ohjelmia, ei esim. ns. shell-skriptejä tai Awk- tai Perl-ohjelmia. Yleisesti huomattakoon, että kokonaisen oman ohjelman tekemistä kannattaa yleensä harkita vasta, kun homma ei hoidu yksinkertaisemmalla tavalla. (Ks. kohtaa Työkaluajattelu.)

Yleinen menettely

Jos halutaan käyttää eli ajaa ohjelmaa, jonka käyttäjä on itse kirjoittanut esimerkiksi C-, Fortran- tai Pascal-kielellä, menetellään näin:

  1. kirjoitetaan ohjelma tiedostoon
  2. käännetään ohjelma asianomaisen ohjelmointikielen kääntäjällä
  3. jos kääntäjä ilmoittaa virheistä ohjelmassa, korjataan ohjelmatiedostoa editorilla ja käännetään uudestaan
  4. käynnistetään ohjelma, oletusarvoisesti komennolla ./a.out
Ohjelman kirjoittaminen tiedostoon

Ohjelma kirjoitetaan tiedostoon editorilla, tavallisimmin Emacsilla. Tälle tiedostolle, ohjelman lähdekieliselle tiedostolle eli lähdekoodille (source code), annetaan nimi, jonka loppuosa vastaa käytettyä kieltä. Loppuosan ja kielen vastaavuus on järjestelmä- ja kääntäjäkohtainen mutta voisi olla esimerkiksi seuraavanlainen:

ohjelmointikieli tiedoston nimen loppuosa
C .c
FORTRAN .f
Pascal .p

Ohjelman kääntäminen

Kirjoittamastasi ohjelmasta, ns. lähdekoodista (source), tehdään suorittamiskelpoinen ohjelmatiedosto eli binaaritiedosto kääntämällä. Ohjelma käännetään komennolla, joka valitaan käytetyn ohjelmointikielen mukaan seuraavasti.

Tyypillisiä kääntämiskomennon nimiä ovat cc C-ohjelmille, f77 tai f90 Fortran-ohjelmille ja pc Pascal-ohjelmille. Joissakin koneissa on tarjolla joillekin ohjelmointikielille useita vaihtoehtoisia kääntäjiä. Erityisesti mainittakoon Gnu-C, joka saattaa olla käytettävissä nimellä gcc ja jota monet pitävät parempana kuin laitevalmistajien tekemiä C-kääntäjiä.

Kääntämiskomennossa ilmoitetaan ohjelmatiedoston nimi, esimerkiksi

cc omaohj.c
Kääntämiskomennon antamisen jälkeen kone saattaa tulostaa joukon kääntäjän virheilmoituksia. Usein ne ovat helposti ymmärrettäviä, joskus hyvinkin mystisen tuntuisia. Kääntäjä voi antaa paitsi virheilmoituksia myös varoituksia ja informatiivisia ilmoituksia.

Virheiden selvittelyssä kyseisen ohjelmointikielen oppikirja on tarpeellinen. Virheet korjataan editorilla, minkä jälkeen ohjelma käännetään uudestaan. Jos virheilmoituksia on paljon, kannattaa usein etsiä ja korjata vain muutama virhe ohjelman alusta ja kääntää ohjelma sitten uudestaan, koska yksi virhe voi sotkea kääntäjän toimintaa niin, että se saattaa valittaa asiattomiakin.

Ohjelman käynnistäminen

Kun käännös on onnistunut virheittä, ohjelma käynnistetään komennolla

./a.out

Se, mitä sitten tapahtuu, riippuu siitä, mitä ohjelma tekee. Ohjelman suorituksen päätyttyä pitäisi päätteelle tulostua komentotulkin kehote.

Jos ohjelma lukee päätteeltä syöttötietoja, niin yleisesti ottaen ei tulostu mitään kehotetta tms., ellei itse ohjelmassa ole tulostuslausetta, joka sellaisen kirjoittaisi.

Virheiden selvittely

Joskus ohjelma saattaa "kaatua" ajonaikaiseen virheeseen, koska siinä on sellainen virhe, jota kääntäjä ei ole havainnut. "Kaatuminen" tarkoittaa, että odotetun tulostuksen asemesta saadaan jokin enemmän tai vähemmän hämärä virheilmoitus kuten Bus error - core dumped. Virheilmoitusteksti ei useinkaan kerro mitään muuta hyödyllistä kuin että ohjelmassa on jokin vika.

On myös hyvin mahdollista, että ohjelma ei "kaadu" mutta ei myöskään tee ihan sitä, mitä oli tarkoitus - tällöin ohjelmassa on looginen virhe. Virheen voi yrittää paikallistaa esim. lisäämällä ohjelmaan välitulostuksia. Voit myös opetella käyttämään ns. debuggeria; erään debuggerin (dbx) suppeat käyttöohjeet ovat oppaassa Ohjelmointi Unixissa. Korjaamisen jälkeen ohjelma käännetään uudestaan ja kirjoitetaan taas ./a.out (ja pidetään peukkuja).

Entä jos itse ei mitenkään saa selvää kääntäjän virheilmoituksesta tai muuten törmää ylitsepääsemättömiltä tuntuviin ongelmiin oman ohjelmansa kanssa? Vrt. lukuun Mistä apua?. Ota huomioon, että hyväkään yleinen ATK-neuvoja ei ehkä osaa auttaa ohjelmointiin liittyvissä ongelmissa, ainakaan kaikkia ohjelmointikieliä koskevissa. Nyyseissä sopiva ryhmä ohjelmointiaiheisille ongelmille on yleensä sfnet.atk.ohjelmointi.alkeet.

Komentotulkki (shell), komennot ja ohjelmat

Kun käyttäjä on ottanut yhteyden Unix-koneeseen, ollaan ns. komentotilassa, jonka merkkinä on kehote ja jossa käyttäjän kirjoittamat rivit käsittelee komentotulkki eli shell. Komentotulkki voi käynnistää eri ohjelmia sen mukaan, mitä käyttäjä komennoilla käskee.

Unix-koneissa on käytettävissä useita erilaisia komentotulkkeja. Vanhin, eräänlainen perus-shell on Bourne shell, tiedostonimeltään sh. Tämän oppaan kirjoittaja suosii T-shelliä tcsh, joka kuuluu C-shellien perheeseen. Oletusarvoisesti eli jos et ole erikseen toisin pyytänyt tai itse järjestänyt, käytössäsi on T-shell. Sen hienouksiin kuuluu mm. mukava mahdollisuus käyttää hyväksi aiemmin annettuja komentoja nuolinäppäimillä sekä ns. tiedostonnimien tunnistus tabulaattorilla.

Komentotulkin voi mahdollisesti vaihtaa komennolla chsh; tämä riippuu paikallisista järjestelyistä. Sallitut komentotulkit näkee tiedostosta /etc/shells. Muutos tulee voimaan seuraavan yhteydenoton alusta ja on pysyvä (kunnes se erikseen muutetaan). Jos tarvitset vain tilapäisesti jonkin muun shellin kuin vakioshellisi piirteitä, voit käynnistää shellin toisen "alla" (aliprosessina); tämä onnistuu suoraan shellin nimellä (esim. zsh).

Komentotulkkia voi pyytää käynnistämään sekä itsenäisesti toimivia ohjelmia kuten Pine että yksinkertaisia ja lyhyitä ohjelmia, joilla ei ole omia sisäisiä käskyjä. Näitä lyhyitä ohjelmia kutsutaan joskus komennoiksi, joskus ohjelmiksi, mikä voi olla hämäävää. Tavallisimmin puhutaan esim. ls- tai cp-komennosta, mutta itse asiassa ne ovat ohjelmia, jotka komentotulkki käynnistää erilliseen prosessiin. Prosessi tarkoittaa lyhyesti sanottuna ohjelman suoritusta. Sen lisäksi, että komentotulkki käynnistelee prosesseja, prosessit voivat luoda uusia prosesseja. Jokin ohjelma voi esim. automaattisesti käynnistää jonkin editorin; esimerkiksi Pine käynnistää Pico-editorin meilin kirjoittamista varten.

Komentoja sanan varsinaisessa merkityksessä, siis sellaisia, jotka komentotulkki itse suorittaa, on Unixissa varsin vähän. Esimerkkinä sellaisista mainittakoon setenv. Varsinaisista komennoista ei saa ohjeita man-komennolla, vaan niiden ohjeet sisältyvät asianomaisen komentotulkin ohjeisiin; esimerkiksi setenv-komennon kuvaus löytyy siitä varsin laajasta dokumentista, jonka saa komennolla man tcsh.

Komennolla which voi selvittää, onko jokin komento komentotulkin "sisäänrakennettu" komento vai ohjelma. Esimerkki:

epsilon ~ 51 % which rm
/bin/rm
epsilon ~ 52 % which ps
/bin/ps
epsilon ~ 53 % which jobs
jobs: shell built-in command.
epsilon ~ 54 % which which
which: shell built-in command.
epsilon ~ 55 %

Ohjelman tai komennon keskeyttäminen ja uudelleen jatkaminen

Aiemmin on jo mainittu, että ohjelman tai komennon suorituksen voi katkaista kontrollimerkillä control-c, joka tosin ei kaikissa yhteyksissä toimi. Ohjelma nimittäin voi "omia" control-c:n käsittelyn itselleen. Tällöin control-c saattaa toimia vain ohjelman sisäisenä katkaisuna, joka lopettaa menossa olevan käskyn suorituksen ja aiheuttaa paluun ohjelman käskytasolle eikä Unixin komentotasolle. Vaihtoehtoisesti ohjelma voi käyttäjän annettua control-c:n esim. kysyä, haluaako hän todella lopettaa. Lisäksi mainittakoon, että Emacsia käytettäessä ei control-c:llä ole erikoismerkitystä vaan se on osa Emacsille annettavia käskyjä.

Ohjelman tai komennon suorituksen voi väliaikaisesti keskeyttää eli "suspendoida" kontrollimerkillä control-z.

Näin keskeytetyn ohjelman tai komennon suoritusta voidaan jatkaa komennolla
fg foreground ja ajatuksesta, että keskeytetty ohjelma on ikäänkuin ollut taka-alalla ja tuodaan fg:llä etualalle ja takaisin suoritukseen.

Jos esimerkiksi olet käyttämässä jotakin sovellusohjelmaa ja huomaat kesken kaiken, että sinun pitääkin esim. tarkistaa jokin asia jostakin dokumenttitiedostosta (tai vaikka Webistä), voit antaa control-z:n, lukea haluamasi dokumentin ja palata jatkamaan ohjelman käyttöä fg-komennolla.

Huomaa ero:

Tietoa prosesseista: jobs ja ps

Jos esim. olet keskeyttänyt control-z:lla useita eri ohjelmia, voit katsoa tilanteen komennolla
jobs
joka antaa listan niistä komennoista ja ohjelmista (yhteisnimitys: prosesseista), joiden suoritus on menossa tai keskeytettynä.

Seuraavassa on esimerkki, jossa Lynx ja Pine on keskeytetty control-z:lla. Silloin jobs-komennon tulostus näyttää tältä:

[1]  - Suspended                     lynx
[2]  + Suspended (signal)            pine
Plusmerkki + ilmaisee, että tätä ohjelmaa on käytetty viimeksi. Kun kirjoitetaan fg, niin plussalla merkityn ohjelman suoritus jatkuu. Yllä olevassa esimerkissä siis Pine käynnistyy kirjoitettaessa fg. Jos haluaakin käyttää seuraavaksi jotain toista keskeytettyä ohjelmaa kuin plus-merkillä ilmoitettua, kirjoitetaan prosenttimerkki % ja sen perään ilman välilyöntiä työnnumero, joka löytyy jobs-tulostuksen rivin alusta. Esimerkiksi jos halutaan edellisen esimerkin tilanteessa jatkaa Lynxin käyttöä, kirjoitetaan komento
fg %1

Jos käyttäjällä on pysäytettyjä töitä ja hän yrittää lähteä ulos koneesta komennolla logout, kone ilmoittaa there are stopped jobs. Tällöin on kaksi vaihtoehtoa:

Itse asiassa jobs on vain T-shellin komento. Aina on käytettävissä komento ps (process status), mutta sen toiminta on erilainen ja sen yksityiskohdissa on monia eroja eri Unixien välillä. Tärkeä ero jobs- ja ps-komennon välillä on se, että jobs näyttää vain käytössä olevan komentotulkin alaiset prosessit, kun taas ps voi näyttää muitakin prosesseja, myös esim. sellaisia, jotka on käynnistetty toiselta päätteeltä. Valitsimista mainittakoon

Esimerkki:

lk-hp-12 ~ 52 %	ps
   PID TTY      TIME COMMAND
  1236 ttyp3    0:00 tcsh
  1246 ttyp3    0:00 ps
  1241 ttyp3    0:00 emacs
lk-hp-12 ~ 53 %	ps -f
     UID   PID  PPID  C    STIME TTY      TIME COMMAND
jkorpela  1236  1235  0 17:49:52 ttyp3    0:00 tcsh
jkorpela  1247  1236  4 17:50:05 ttyp3    0:00 ps -f
jkorpela  1241  1236  0 17:49:55 ttyp3    0:00 emacs
lk-hp-12 ~ 54 %
Huomannet, että prosessien listassa näkyy myös se prosessi, joka on suorittamassa ps-komentoa (oik. ohjelmaa).

Prosessin tappaminen: kill

Prosessi voi "tappaa" eli (lopullisesti) pysäyttää toisen prosessin. Erityisesti voit komentotulkista käsin tappaa prosessin kill-komennolla. Tämä on äärimmäinen toimenpide, johon kannattaa ryhtyä vasta, kun prosessi on jumissa eikä mikään muu auta.

"Tapettava" prosessi saattaa ennen "kuolemaansa" tehdä joitakin lopetustoimia, esim. sulkea avoinna olevia tiedostoja. Tämä riippuu ohjelmasta, eikä siitä yleisesti ottaen ole mitään takeita.

Jos tuntuu siltä, että päätteellä ajettava ohjelma on jäänyt täysin jumiin eikä mikään normaali keino jumittumisen purkamiseksi tunnu tehoavan, voit menetellä näin:

Esimerkki. Käyttäjä on koneessa Alpha käynnistänyt oman ohjelmansa nimeltä loop, joka tuntuu jääneen ikuiseen silmukkaan, jota ei voi katkaista control-c:llä. Muun muassa siksi, että ohjelma koko ajan kuluttaa koneen resursseja, käyttäjä ottaa toisesta koneesta yhteyden Alphaan rlogin-komennolla ja toimii edellä kuvatulla tavalla:
epsilon ~ 51 % rlogin alpha
Last login: Wed Feb 21 18:09:38 from vipunen.hut.fi

Digital UNIX V3.2C  (Rev. 148); Thu Dec 21 19:51:53 EET 1995 
Digital UNIX V3.2C Worksystem Software (Rev. 148)

alpha ~ 51 % ps -f -u jkorpela
USER       PID  PPID %CPU STARTED  TTY             TIME COMMAND
jkorpela  4748  2380  1.0 18:10:27 ttyp1        0:00.69 -tcsh (tcsh)
jkorpela  2178 31264  0.0 18:09:38 ttyrb        0:00.69 -tcsh (tcsh)
jkorpela  3545  2178 43.0 18:10:01 ttyrb        0:16.72 loop
alpha ~ 52 % kill 3545
alpha ~ 53 % ps -f -u jkorpela
USER       PID  PPID %CPU STARTED  TTY             TIME COMMAND
jkorpela  4748  2380  0.0 18:10:27 ttyp1        0:00.72 -tcsh (tcsh)
jkorpela  2178 31264  0.0 18:09:38 ttyrb        0:00.70 -tcsh (tcsh)
alpha ~ 54 % logout
rlogin: connection closed.
epsilon ~ 52 %

Syötön ja tulostuksen ohjaus

Perusteita

Usein Unix-komennot ja Unixissa ajettavat ohjelmat lukevat ns. standardisyöttövirrasta (standard input, stdin) ja tulostavat normaalin tulostuksen standarditulostusvirtaan (standard output, stdout) ja virheilmoitukset mahdollisesti standardivirhevirtaan (standard error output, stderr). Oletusarvoisesti standardisyöttövirta tulee käyttäjän näppäimistöltä ja standarditulostusvirta ja standardivirhevirta menevät käyttäjän kuvaruudulle.

Edellä mainitut "virrat" voi kuitenkin eri tavoin määrätä toisenlaisiksikin, esimerkiksi siten, että komennon tulostus ei mene kuvaruudulle vaan tiedostoon.

Tulostuksen ohjaus

Kirjoittamalla komennon loppuun

>tiedostonnimi

saadaan aikaan, että komennon tulostus ei kirjoitu kuvaruudulle vaan ilmoitettuun tiedostoon.

Tämä tulostuksen uudelleenohjaus ei kuitenkaan välttämättä koske kaikkea sitä, mikä muutoin tulostuisi ruudulle, vaan virheilmoitukset saattavat silti tulostua päätteelle.

Annetun tiedostonnimen tulisi olla sellainen, että sennimistä tiedostoa ei ole ennestään olemassa. Jos tiedosto on jo olemassa, toiminta on erilaista eri Unixeissa: joissakin tiedoston vanha sisältö häviää, joissakin taas koko komennon suoritus epäonnistuu.

Esimerkiksi komento
ls -a mail/
tulostaa hakemiston mail/ kaikki tiedostojen nimet päätteen näytölle, mutta komento
ls -a mail/ >mail-hakemistoni
kirjoittaa kyseisen tiedostolistauksen tiedostoon nimeltä mail-hakemistoni.

On myös mahdollista ohjata tulostus olemassaolevaan tiedostoon sen vanhan sisällön perään. Tämä tehdään käyttämällä kahta peräkkäistä >-merkkiä. Esimerkki:

grep foo bar >>loydetyt
On mahdollista, että vaikka tulostus on ohjattu tiedostoon, osa tulosteista tulee silti kuvaruudulle. Tällöin käytettävä ohjelma ei tulostakaan standardisyöttövirtaan. Tavallisin tällainen tilanne on, että ohjelma tulostaa virheilmoitukset erilliseen "standardivirhevirtaan" stderr. Sekin on uudelleenohjattavissa, joskin eri shelleissä eri tavoin. T-shellissä menettely on, että käytetään >-merkin asemesta merkkiparia >&, jolloin sekä normaali tulostus että virheilmoitukset menevät ilmoitettuun tiedostoon. Esimerkki (jossa on kyse siitä, että C-kääntäjän virheilmoitukset halutaan ohjata tiedostoon):
cc prog.c >& prog.msg

Syötön ohjaus

Kirjoittamalla komennon loppuun

<tiedostonnimi

saadaan aikaan, että komento lukee syöttötietoja kyseisestä tiedostosta sen sijaan, että käyttäjä näpyttelisi tiedot näppäimistöltään.

Tätä mahdollisuutta voi käyttää myös yhdessä tulostuksen ohjauksen kanssa, esim.
omaohj <datat.txt >tulos.txt

Putkitus ja filtterit

Putkitus

Yhden komennon tulostuksen voi ohjata suoraan toisen komennon lähtötiedoiksi. Tämä tietysti saataisiin aikaan ohjaamalla ensimmäisen komennon tulostus tiedostoon ja sitten käskemällä toisen komennon lukea kyseisestä tiedostosta:

komento1 >aputiedosto
komento2 <aputiedosto

jonka jälkeen aputiedoston voisi hävittää. Paljon mukavampaa on kuitenkin käyttää putkitusta:

komento1 | komento2

Tämä merkitsee, että komento1:n tulostus ei tule päätteelle vaan menee suoraan syöttötiedoiksi komento2:lle. Tällöin siis tilanne on, hienosti sanottuna, sellainen, että järjestelmä suorittaa komento1:n ja komento2:n kahtena prosessina siten, että ensin mainitun stdout on jälkimmäisen stdin.

Putkituksen merkki on siis |, joka näkyy laitteen mukaan pystyviivana (joskus katkonaisena pystyviivana) tai pienenä ö-kirjaimena (ks. skandinaavisista merkeistä kertovaa kohtaa).

Hyvin tavallista ja suositeltavaa on käyttää putkitusta jonkin komennon tai ohjelman tulostuksen sivuttamiseen more-komennon avulla. Jos sinulla esimerkiksi on paljon tiedostoja, niin komennon ls -l tulostus ei mahdu yhdelle ruudulliselle. Koska ls-komento ei jaa tulostusta kuvaruudullisiin, asia kannattaa hoitaa seuraavaan tapaan:

ls -l | more

Tämä perustuu siihen more-komennon, kuten usean muunkin komennon, piirteeseen, että jos komennossa ei anneta argumenttia, se lukee standardisyöttövirrasta. Oletusarvotilanteessa, jossa kyseinen virta tulee näppäimistöltä, siinä ei juuri ole järkeä, mutta putken käytön takia tässä tapauksessa standardisyöttövirrasta lukeminen merkitseekin komennon ls -l tulostuksen lukemista.

Putkitusta voi jatkaa esim. niin, että toisen komennon tulosteet menevät edelleen syötteiksi kolmannelle:

komento1 | komento2 | komento3

Filtterit

Usein Unix-slangissa kutsutaan filtteriksi sellaista komentoa tai ohjelmaa, joka lukee syötteensä standardisyöttövirrasta ja kirjoittaa tulosteensa standarditulostusvirtaan.

Filtterien vastakohtana ovat sellaiset komennot ja ohjelmat, joille ilmoitetaan syöttö- ja tulostustiedosto käynnistyskomennossa argumenteilla. Toisaalta hyvin yleisesti tällöin oletusarvona (eli toimintatapana silloin, kun tiedostoja ei ilmoiteta) on se, että syöttötiedostona on standardisyöttövirta ja tulostustiedostona standarditulostusvirta. Sellaisessa tapauksessa komentoa tai ohjelmaa voi käyttää filtterin tapaan, vaikka se ei ole filtteri sanan suppeassa merkityksessä.

Esimerkki. Komento colrm (jota jäljempänä käytetään esimerkkinä) on tyypillinen filtteri: se poistaa syöttötietoriveiltä tietoja, ja se lukee syöttötiedot standardisyöttövirrasta. Kyseiselle komennolle ei voi antaa syöttötiedoston nimeä argumenttina. Sen sijaan se voidaan ohjata lukemaan standardisyöttövirran halutusta tiedostosta seuraavaan tapaan:

colrm 50 <foobar
Sama koskee tulostusta, esim.
colrm 50 <foobar >foobar2
Jos komennolle voidaan antaa syöttötiedoston nimi argumenttina ja jos toisaalta oletusarvona on, että syöttötiedostona on standardisyöttövirta, voimme kirjoittaa yhtä hyvin
more foo
kuin
more <foo
mutta jos kyseessä on filtteri sanan suppeassa merkityksessä, vain jälkimmäinen vaihtoehto toimii.

Se, onko kyseessä filtteri vai ei, ilmenee kunkin komennon ja ohjelman kuvauksesta, esim. man-sivulta.

Nimi filtteri voi olla varsin harhaanjohtava. Sehän johtuu englannin sanasta filter, jonka normaali suomenkielinen vastine on suodatin (tai suodin) Yleiskielessä, ja myös yleensä tekniikan kielessä, suodatin tarkoittaa jotakin laitetta tms., joka päästää lävitseen vain osan siihen tulevasta aineesta, energiasta tai informaatiosta, esim. vain nesteen mutta ei kiinteitä aineita. Tämän käsitteen alaan esim. edellä mainittu colrm-komento sopii hyvin, samoin grep-komennot, jotka "päästävät lävitseen" vain osan "niihin tulevista" riveistä. Mutta yleisesti Unixissa filtteri ei suinkaan aina ole tietoa suodattava vaan se voi myös muokata tietoja eri tavoin tai käyttää syöttötietoja vain lähtöarvoina laskennalle. Filtterin tulostusvirta voi aivan hyvin olla laajempi kuin syöttövirta.

Työkaluajattelu

Yleistä työkaluajattelusta

Unixin yhteydessä puhutaan usein työkaluajattelusta. Tällä tarkoitetaan suurin piirtein sellaista lähestymistapaa, että komentoja ja ohjelmia tarkastellaan työkaluina (tools), joista kullakin hoidetaan yksi tehtävä; kun halutaan tehdä monimutkaisempi asia, ei tehdä sitä varten uutta ohjelmaa, vaan pyritään ensisijaisesti hoitamaan se olemassaolevia työkaluja yhdistelemällä.

Syötön ja tulostuksen uudelleenohjaus ja erityisesti putkitus ovat keskeisiä välineitä työkalujen käytön yhdistämisessä. Putkituksella voidaan ikäänkuin muodostaa liukuhihna, jonka läpi käsiteltävä tietoaineisto kulkee. Kussakin vaiheessa sitä muokkaa jokin työkalu, jota voidaan verrata liukuhihnan äärellä työskentelevään robottiin. Kukin robotti saa raaka-aineensa (syötteensä) liukuhihnan edelliseltä robotilta, ja tuotteet (tulosteet) menevät raaka-aineiksi seuraavalle robotille.

Varsin usein, mutta ei välttämättä, työkalu on filtteri. Unix-komentojen ja -ohjelmien joukossa ei ole mitään erityistä työkalujen luokkaa, vaan lähes kaikkia niistä voidaan käyttää työkaluina - toisia paremmin, toisia huonommin.

Esimerkkejä

Seuraava hyvin yksinkertainen esimerkki havainnollistanee työkaluajattelua. Oletetaan, että meillä on tekstitiedosto puhlu, joka sisältää puhelinluettelon. Tiedoston kukin rivi sisältää yhden henkilön tiedot siten, että tiedot ovat kiinteästi samoissa sarakkeissa seuraavaan tapaan:

Hiiri, Mikki        4040  555 5555
Ankka, Roope        4300  123 4567
Ankka, Aku          4301  333 3333
...
Tässä sarakkeet 1 - 20 sisältävät nimen ja sarakkeet 21 - 24 sisäisen puhelinnumeron, ja sarakkeesta 25 alkaa kotipuhelinnumero. Oletetaan, että haluamme tuottaa uuden tiedoston, joka sisältää tiedot ilman kotipuhelinnumeroa nimen mukaan aakkosjärjestyksessä. Voisimme tehdä jollain ohjelmointikielellä (esim. C tai Fortran) ohjelman tähän tarkoitukseen, mutta se olisi tarpeettoman työlästä, varsinkin jos tehtävä on pieni ja kertaluonteinen. Ilman ohjelmointitaitoakin tehtävä onnistuu Unixin työkaluilla näin:
colrm 25 < puhlu | sort > puhlu2
Tällöin tiedosto puhlu ensin annetaan syötteeksi colrm-ohjelmalle, jonka argumentilla käsketään sitä poistamaan joka rivin loppu 25. merkistä alkaen. Tulos putkitetaan sort-ohjelmalle, jonka käyttö yleisesti ottaen on aika hankalaa mutta tällaisessa yksinkertaisimmassa tapauksessa hyvin helppoa. Tulos ohjataan tiedostoon puhlu2, jonka sisällöksi näin muodostuu seuraava:
Ankka, Aku          4301
Ankka, Roope        4300
Hiiri, Mikki        4040
Putkituksella muodostetut tiedon käsittelyn "liukuhihnat" voivat olla varsin pitkiäkin; edellisessä esimerkissähän oli vain kaksi "robottia" colrm ja sort. Seuraavassa on esimerkki putkituksesta, jonka yksityiskohtiin emme paneudu mutta joka hyvin kuvastaa työkaluajattelua:
tar -cf foo.tar goo | compress | uuencode foo.tar.Z | mail joe
Tässä alkuperäinen tietoaineisto (hakemisto goo) annetaan syötteeksi tar-ohjelmalle, joka paketoi hakemiston sisällön yhdeksi tiedostoksi. Tulos menee syötteeksi compress-ohjelmalle, joka eräällä menetelmällä tiivistää tiedon pienempään tilaan. Sen tulos taas menee uuencode-ohjelmalle, joka muuntaa tiedoston sellaiseen esitysmuotoon, että se voidaan ongelmitta lähettää meilitse. Ja tämä muunnettu tulos lopuksi meneekin syötteeksi mail-ohjelmalle, joka on yksinkertainen mutta tällaisissa tapauksissa näppärä meiliohjelma.

Esimerkkejä työkaluohjelmista

Edellä on jo käsitelty lyhyesti muutamia työkaluohjelmia. Seuraavassa kuvataan muutaman muun yksinkertaisen työkaluohjelman peruskäyttöä. Tarkempia tietoja kunkin ohjelman tarjoamista mahdollisuuksista ja niiden käytöstä saa man-komennolla. Tässä käsiteltävät työkaluohjelmat ovat sellaisia, että niitä voidaan käyttää filttereinä.

grep-ohjelmalla voidaan poimia tietoaineistosta määrätyt ehdot täyttävät rivit. Yksinkertaisimmassa tapauksessa ehto on sellainen, että rivillä tulee esiintyä jokin määrätty merkkijono, joka annetaan ohjelmalle argumenttina. Esimerkiksi komento

grep Unix <foo

tulostaa (standarditulostusvirtaan) ne ja vain ne foo-tiedoston rivit, joilla esiintyy merkkijono Unix (juuri näin kirjoitettuna, mutta mahdollisesti sanan osana, esim. sanassa Unixissa). Esimerkki grepin käytöstä putkituksessa on seuraava, missä who-komennon tulostuksesta (joka voi olla varsin pitkä) poimitaan vain ne rivit, joilla esiintyy merkkijono dio:

epsilon ~ 51 % who | grep dio
dio         ttyb7       Feb 20 20:27         
dio         ttya5       Feb 20 08:30         
dio         ttyb5       Feb 20 13:58         
dio         ttybd       Feb 20 22:47         
epsilon ~ 52 %
Ohjelmalla grep on myös "serkut" fgrep, joka rajoittuneempi mutta usein tehokkaampi kuin grep, ja egrep, joka on monipuolisempi kuin grep.

diff-ohjelmalla voi vertailla tiedostoja ja tulostaa niiden erot (differences). Tiedostojen nimet annetaan argumentteina. Jos tiedostojen sisällöt ovat täsmälleen samat, diff ei tulosta mitään. Jos eroja on, niin ja diff tarkastelee ensimmäistä tiedostoa perustiedostona tulostaen tiedot siitä, miten toinen tiedosto poikkeaa siitä. Tulostuksen muoto lienee paras selostaa esimerkin avulla:

epsilon ~/tmp 52 % diff tlo.old tlo
19c19
< Yksi pysyvä ongelma on muutosten nopeus. Tänään suositeltava ohjelma on
---
> Yksi pysyvä ongelma on muutosten nopeus, sillä tänään suositeltava ohjelma on
82d81
<     POP-palvelu
119a119,120
> 
> 27.2.1996
epsilon ~/tmp 53 %
Tässä tapauksessa löytyi tiedostosta tlo kolme eroa tiedostoon tlo.old verrattuna:
  1. Otsikkotieto 19c19 kertoo muutoksesta (change) rivillä, tarkemmin sanoen, että ensimmäisen tiedoston 19. rivi poikkeaa toisen tiedoston vastaavasta rivistä. Kummatkin rivit näkyvät tulosteessa siten, että ensimmäisen edessä on <-merkki ja toisen edessä >-merkki.
  2. Otsikkotieto 82d81 kertoo, että ensimmäisestä tiedostosta on poistettu (delete) 82. rivi; kyseinen rivi näkyy tulosteessa.
  3. Otsikkotieto 119a119,120 kertoo, että ensimmäisen tiedoston 119. rivin perään on lisätty (add) kaksi riviä; rivit näkyvät tulosteessa.
On mahdollista muuttaa erojen tulostuksen ulkoasua valitsimilla. Erityisesti mainittakoon valitsin -c, joka aiheuttaa sen, että tulostus on pitempi siten, että eroavuuksien yhteyteen tulostuu tiedostojen sisältöä laajemmin; silloin ehkä näkee helpommin muutettujen tekstien asiayhteyden (context).

tr-ohjelma tekee tietoaineistolle yksinkertaisen merkkimuunnoksen eli -translaation, jossa annetut merkit korvataan toisilla. Esimerkiksi komento

tr '{|}[\]' 'äöåÄÖÅ'
kopioi standardisyöttövirran standarditulostusvirtaan siten, että merkki { korvautuu merkillä ä, merkki | merkillä ö jne. Jos tällainen muunnos halutaan tehdä tiedostolle, toimitaan seuraavaan tapaan (koska tr on filtteri):
tr '{|}[\]' 'äöåÄÖÅ' <muistio.asc >muistio.iso

Työkaluista pieniin kieliin ja ohjelmointiin

Kun halutaan tehdä asioita, joita ei voi suoraan hoitaa yhdellä komennolla tai valmiilla ohjelmalla, voidaan valita jokin seuraavista toimintatavoista:

Putkitusta käsiteltiin juuri edellä ja käännettäviä ohjelmia aiemmin. Komentotiedostoista tulee puhetta myöhemmin. Seuraavassa kuvaillaan hiukan tulkittavia kieliä.

Valinta edellä mainittujen vaihtoehtojen välillä riippuu monista asioista kuten tehtävän mutkikkuudesta ja siitä, mitä välineitä käyttäjä osaa käyttää. Usein tilanne on se, että tehtävä hoituisi nopeimmin jollain sellaisella välineellä, jota käyttäjä ei tunne. Tällöin on tietysti otettava huomioon, että uuden välineen opetteluun voi kulua paljonkin aikaa - ja toisaalta siitä voi olla paljon hyötyä myöhemmin.

Tehokkuusseikat kannattaa myös ottaa huomioon. Kertaluonteisiin hommiin sopii yleensä hyvin työkaluista tehty putki tai vaativammissa tapauksissa komentotiedosto tai pienen kielen käyttö. Jos taas on kehitettävä tapa tehdä homma, joka joudutaan tekemään usein ja joka kuluttaa paljon tietokoneen aikaa, voi ohjelmointikielen käyttö olla hyvin perusteltua. Tällöin on olennaista, että ohjelma käännetään konekoodiksi, jota tietokone suoraan toteuttaa; sen sijaan pieniä kieliä käytettäessä suoritus on tulkitsevaa, jolloin tietokoneajan kulutus voi olla monikymmenkertainen.

Pienet kielet muistuttavat monessa suhteessa varsinaisia ohjelmointikieliä - niissä on yleensä mm. ehto- ja toistorakenteita - mutta toteutus on tulkitseva. Pienellä kielellä kirjoitettu ohjelma voidaan joskus kirjoittaa suoraan komentoriville (ns. one-liner, yhden rivin mittainen ohjelma), mutta tavallisempaa on, että se kirjoitetaan tiedostoon. Seuraavassa kuvaillaan lyhyesti muutamia pieniä kieliä luonnehtien niiden yleisiä ominaisuuksia ja esittäen pikku esimerkkejä. Pienien kielien oppimisessa on oma vaivansa, joten kannattaa harkita, mihin niistä perehtyy, sen mukaan, miten ne tuntuvat sopivan omiin tarpeisiin.

Sed (stream editor) on Unixin alkuperäisestä rivieditorista (Ed) kehitetty ohjelma, joka on monessa suhteessa lähempänä työkaluohjelmaa kuin pientä kieltä - näiden käsitteiden välillä ei ole tarkkaa rajaa. Sedillä voidaan muokata tiedostoa esimerkiksi korvaamalla merkkijonoja toisilla. Samanlaisia asioita voidaan tehdä editoreillakin, mutta editorin käyttö on vuorovaikutteista, Sedin käyttö taas sellaista, jossa käyttäjä vain kuvaa halutun muunnoksen ja käskee Sedin tehdä sen. Tämän takia Sed sopii käytettäväksi työkaluajattelun mukaisessa putkituksessa. Seuraavassa esimerkissä tehdään muunnos, jossa tiedostossa olevat merkkijonot Atk ja atk korvataan merkkijonolla ATK:

sed -e 's/[Aa]tk/ATK/g' <ohje >ohje.uusi
Tässä esimerkissä valitsin -e kertoo, että sen perässä, suoraan komentorivillä, tulee Sedille annettava käsky; käskyt voitaisiin kirjoittaa myös tiedostoon. Käsky on s-käsky, joka määrää suorittamaan korvauksen (substitution), ja sen lopussa oleva g määrää tekemään korvauksen kaikkialle, yleisesti (generally). Rakenne [Aa] on alkeellinen esimerkki Sedin tunnistamista säännöllisistä lausekkeista (regular expressions): se tarkoittaa kumpaa tahansa merkeistä A ja a, joten rakenne [Aa]tk tarkoittaa siis merkkijonoja Atk ja atk.

Awk on monipuolisempi väline, johon liittyy oma pieni kielensä, joka muistuttaa C-ohjelmointikieltä. Awk-kielellä käsitellään tietoaineistoa riveittäin ja määritellään malleja (patterns) ja niitä vastaavia toimenpiteitä. Tämä esitetään Awk-ohjelmassa seuraavassa muodossa:

malli { toimenpide }

Täten voidaan erilaisille, siis eri malleja vastaaville, riveille määritellä erilaisia muunnoksia tai muita toimenpiteitä. Oletustoimenpiteenä on (mallia vastaavan) rivin kopiointi standarditulostusvirtaan. Tämän ansiosta voidaan asiat usein esittää hyvinkin tiiviisti; esimerkiksi

awk 'length > 72' tied
tulostaa standarditulostusvirtaan ne ja vain ne tied-tiedoston rivit, joiden pituus on yli 72 merkkiä. Tässä length > 72 kuvaa mallin, ja sitä vastaavat rivit tulostuvat, muut eivät; tätä mallia vartenhan ei ole erikseen määritelty toimenpidettä, joten Awk oletusarvoisesti suorittaa kopioinnin, ja ne rivit, joiden pituus on enintään 72 merkkiä, eivät vastaa mitään mallia (muita mallejahan ei tässä tapauksessa) ole, joten niiden osalta Awk ei tee yhtään mitään. Seuraavassa on hiukan pidempi esimerkki: tiedostossa isot on Awk-ohjelma
BEGIN      { sum = 0; print "Isot tiedostot:" }
$5 > 10000 { sum += $5; print }
END        { print "Isoissa tiedostoissa yhteensä " sum " tavua" }
ja nyt käyttäjä voi katsoa, mitä isoja (tässä tapauksessa: yli 10000 tavua pitkiä) tiedostoja hänellä on työhakemistossaan, seuraavasti:
epsilon ~/tmp 51 % ls -l | awk -f isot
Isot tiedostot:
-rw-r--r--   1 jkorpela staff      52876 Jan 24 14:45 btxdoc.dvi
-rw-r--r--   1 jkorpela staff      41569 Jan 24 14:44 btxdoc.tex
-rw-r--r--   1 jkorpela staff      10990 Jan 18 12:46 pctex
Isoissa tiedostoissa yhteensä 105435 tavua
epsilon ~/tmp 52 %
Tässä esimerkissä siis Awk-ohjelma on erillisessä tiedostossa, jonka nimi ilmoitetaan -f-valitsimella. Syötteenä Awk saa tässä komennon ls -l tulostuksen, ja se poimii siitä ne rivit, joissa 5. kenttä eli tiedoston koko tavuina on yli 10000. Poiminta hoidetaan mallilla $5 > 10000. Awk-ohjelmassa on myös "mallit" BEGIN ja END, joihin liitetyt toimenpiteet Awk suorittaa vastaavasti tietoaineiston käsittelyn alussa ja lopussa.

Perl on erittäin ilmaisuvoimainen kieli, jonka monet piirteet on otettu C-ohjelmointikielestä. Sitä ei oikein voi lukea "pieniin kieliin", mutta sitä voi käyttää niiden tapaan, hyvinkin pienten työkalujen tekemiseen. Perlin "filosofia" on aika erikoinen ja vaatii totuttelua; yleensäkin kielten opettelussa alkuvaihe on hankala mutta sen jälkeen lisäoppiminen on aika helppoa. Perlistä on olemassa erillinen ohje Getting started with Perl ja myös suomenkielistä aineistoa. Seuraavassa on vain pieni esimerkki Perlin tarjoamista mahdollisuuksista:

#!/usr/bin/perl
while(<*.for>) {
  $oldname = $_;
  s/\.for$/\.f/;
  rename $oldname, $_;
}
Tämä Perl-ohjelma muuttaa kaikkien työhakemistossa olevat .for-loppuiset tiedostonnimet vastaaviksi .f-loppuisiksi. Tällaista uudelleennimeämistä ei Unixissa voi tehdä millään suoralla tavalla, esim. mv-komennolla! Ohjelman ensimmäinen rivi kertoo, että kyseessä on Perl-ohjelma. Toinen rivi määrää ohjelman käymään läpi kaikki .for-loppuiset tiedostonnimet, ja tämän silmukan sisällä sitten korvataan nimen loppuosa .for merkkijonolla .f ja suoritetaan uudelleennimeäminen tiedosto kerrallaan Perl-käskyllä rename, joka olennaisesti vastaa Unixin mv-komentoa.

Komennot

Miten löydät tietoja komennoista

Yleistä

Unixissa on hyvin paljon komentoja ja monissa niissä monia eri piirteitä ja mahdollisuuksia. Kukaan ei voi muistaa niitä kaikkia, eikä se olisi tarpeellistakaan. Monille käyttäjille riittää tuntea 10 - 20 erilaista komentoa ja niistäkin vain peruskäyttö.

Sen sijaan on tarpeellista osata etsiä tietoja komennoista silloin, kun on välttämätöntä tai ainakin hyödyllistä oppia uusi komento tai jonkin vanhan komennon uusi käyttötapa.

Man-sivut (man-komento)

Unix-kirjallisuudessa hyvin yleisesti kerrotaan, että komennoista saa tietoa man-komennolla (manual 'käsikirja'): komento

man komentosana

tulostaa päätteelle kuvauksen, "man-sivun", komennosta, jonka nimi on annettu argumenttina. Tämä on tietysti totta (pääosin) mutta suuressa määrin harhaanjohtavaa, sillä vaikka man-komennolla saatavat tiedot ovat usein hyvin hyödyllisiä, ne saattavat olla etenkin aloittelijalle hyödyttömiä, koska

Saatavat ohjeet tulostuvat kuvaruudullinen kerrallaan. Eteenpäin pääsee välilyönnillä (tai rivi kerrallaan return-näppäimellä) ja lopettaa voi q:lla (quit). Itse asiassa man-komennon toteutuksessa tulostuspuolen hoitelee more-komento, joten sen yhteydessä mainittavat lisämahdollisuudet ovat käytettävissä.

Jos haluat tietoja jostakin aiheesta, mutta et tiedä, onko sen nimistä tai siihen liittyvää komentoa olemassa, voit antaa komennon

man -k aihe

Tällöin aiheen nimi on ilmoitettava englanniksi. Valitsimen k-kirjain tulee sanasta keyword.

Seuraavassa on esimerkkinä muuan poikkeuksellisen lyhyt man-sivu, nimittäin komennolla man script eräässä koneessa saatu:

script(1)                                                       script(1)

NAME
  script - Makes a transcript of terminal session

SYNOPSIS

  script [-a] [file]

  The script command makes a transcript of everything printed on your termi-
  nal.

FLAGS

  -a  Appends the transcript to file rather than writing it to file.

DESCRIPTION

  The transcript is written to file, or appended to file if the -a flag is
  given.  If no filename is given, the transcript is saved in the file
  typescript.

  The script ends when the forked shell exits.

  This program is useful when you are using a CRT and want a hard-copy record
  of the dialog (for example, a technical writer might create an example of a
  working session this way).

RELATED INFORMATION

  Commands:  cat(1), echo(1), tee(1).
Esimerkistä näkyvät man-sivun perusosat: Mukana voi olla myös mm. seuraavanlaisia osia:

Muita tietolähteitä

Tässä oppaassa on erillinen luku Mistä löydän lisätietoja Unixista. Lyhyesti sanottuna parhaita tietolähteitä uusien hyödyllisten komentojen opetteluun ovat hyvät oppikirjat. Unix-oppikirjoja on paljon, ja erilaisia arvioita niiden hyvyydestä vielä enemmän.

Komentojen rakenne

Yleistä

Unixille on tyypillistä, että komennot ovat lyhyitä englanninkielisiä sanoja tai näiden lyhenteitä. Usein komennoille voi antaa lisämääritteitä eli tarkennuksia. Näitä lisämääritteitä kutsutaan valitsimiksi eli optioiksi (option) ja argumenteiksi (argument). Valitsin tarkentaa ja monipuolistaa komennon antamaa informaatiota. Argumentti taas on komennon kohde eli mille ollaan tekemässä jotakin; varsin usein argumentit ovat tiedostonnimiä.

Komennon perusrakenne

Unix-komennon yleinen rakenne on seuraava:

komentosana -valitsimia argumentti1 argumentti2 ... argumenttiN

missä valitsimet alkavat yhdysviivalla (-). Komennon osien erottimena on välilyönti.

Esimerkiksi komennossa ls -l mail/ ls on komentosana, -l on valitsin ja mail/ on argumentti. Esimerkkikomento listaa tiedostojen nimet ja tiedostoihin liittyviä muita tietoja hakemistosta mail.

Valitsimet tai argumentit tai molemmat voivat puuttua.

Valitsimet (optiot)

Valitsimet siis alkavat yhdysviivalla (-), jotta komentotulkki osaisi tulkita ne valitsimiksi eikä sotke niitä esim. argumentteihin. Tässä on selitys sille, miksi yhdysviiva tiedoston nimen ensimmäisenä merkkinä ei ole niin hyvä idea.

Valitsimet voidaan jättää pois, jolloin käytetään komentoa oletusarvoilla eli komennon "normaalia" toimintaa.

Kullakin komennolla on omat valitsimensa. Samantapaisilla komennoilla saattaa tosin olla samoja valitsimia, mutta sama valitsin voi merkitä aivan eri asioita eri komennoissa. Siksi valitsimia on usein hankala muistaa. Valitsinten tarkistaminen onkin tavallisimpia tarkoituksia, joihin man-komentoa käytetään.

Hyvin usein valitsin koostuu vain yhdysviivasta ja yhdestä kirjaimesta, tavallisimmin pienestä kirjaimesta. Muistathan kuitenkin, että esim. -C on eri valitsin kuin -c.

Yksikirjaimisia valitsimia voi yhdistää toisiinsa seuraavaan tapaan: komento

ls -l -t

voidaan kirjoittaa lyhyemmin näin:

ls -lt

eli kirjoittaen valitsimet yhteen ilman välilyöntiä ja jättäen yhdysviiva pois muista paitsi ensimmäisestä.

Argumentit

Komennon argumentit ovat tavallisimmin tiedostojen tai hakemistojen nimiä.

Myös argumentit ovat komentokohtaisia: niiden määrä ja merkitys riippuvat komennosta.

Argumentit eivät ole kaikissa komennoissa välttämättömiä. On komentoja, joille ei tarvitse eikä voi antaa lainkaan argumentteja. Tavallisempaa on, että komennolle kyllä voi antaa argumentteja mutta argumenteilla on oletusarvot.

Oletusarvotkin ovat eri komennoissa erilaiset. Esimerkiksi ls-komennossa oletusarvona on . eli nykyinen työhakemisto.

Komentojen editointi

Komentoa kirjoittaessasi tekemiäsi kirjoitusvirheitä voi korjata seuraavasti:

Edellä mainitut korjailumerkit eivät välttämättä toimi ihan kaikkialla, sillä korjaustoiminnot voidaan liittää eri kontrolli- tai muihin merkkeihin eri tavoin stty-komennolla. Edellä esitetty on kuitenkin melko tavallinen tilanne.

T-shellissä voidaan lisäksi käyttää huomattavasti monipuolisempiakin komentojen editoinnin mahdollisuuksia. Ne muistuttavat Emacsin käskyjä:

Näitä välineitä käyttäen voit helposti käyttää hyväksesi aiemmin kirjoitettuja komentoja. Tätä varten voi olla hyödyllistä ottaa lista viimeksi annetuista komennoista; sen saa komennolla history.

Tiedostonnimien tunnistus

T-shellissä voidaan komentoa kirjoitettaessa käyttää tiedostonnimien tunnistusta. Se on erittäin kätevä keino viitattaessa pitkiin tiedostonnimiin: kirjoitusvaivaa säästyy, ja ennen kaikkea vältetään ne tylsät tilanteet, joissa tehdään kirjoitusvirhe pitkässä tiedostonnimessä.

Tunnistus toimii seuraavasti: kirjoita tiedostonnimen alkuosa ja paina TAB-näppäintä; tällöin T-shell yrittää tunnistaa nimen ja jos se onnistuu yksikäsitteisesti, se täydentää nimen lopun ruudulle. (TAB-näppäimessä voi lukea TAB tai siinä voi olla oikealle osoittava nuoli; yleensä se on jossakin kohtaa näppäimistön vasemmassa reunassa.)

Esimerkki. Oletetaan, että työhakemistossasi on tiedostot hakemus, muistiinpanoja ja toimintasuunnitelma ja vain ne. Jos haluat tulostaa niistä päätteelle viimeksi mainitun, riittää kirjoittaa

more t
ja painaa TAB-näppäintä, jolloin T-shell täydentää komentorivin seuraavanlaiseksi:
more toimintasuunnitelma
jonka jälkeen voitkin vain painaa return-näppäintä.

Jos tunnistus ei onnistu yksikäsitteisesti, esim. jos sinulla edellä kuvatussa tilanteessa olisi toinenkin tiedosto, jonka nimi alkaa t-kirjaimella, niin T-shell antaisi äänimerkin. Silloin sinun täytyy itse kirjoittaa tiedostonimestä lisää merkkejä ja yrittää uutta tunnistusta. Voit myös control-d:llä kysyä, mitä sellaisia tiedostonnimiä on olemassa, jotka alkavat näppäilemilläsi kirjaimilla; tämä näyttää ruudulla seuraavantapaiselta:

epsilon ~/tmp 51 % more t
test                 toimintasuunnitelma  tyolista 
epsilon ~/tmp 51 % more t
Tässä käyttäjä kirjoitettuaan more t painoi TAB-näppäintä, jolloin T-shell antoi äänimerkin. Sitten käyttäjä kirjoitti control-d:n, jolloin T-shell näytti listan t-alkuisista tiedostonnimistä sekä kirjoitti komennonalun more t uudelleen näkyviin, jolloin käyttäjä voi suoraan jatkaa kirjoittamista.

Tunnistus voi myös onnistua osittain. Jos sinulla esimerkiksi on edellä mainittujen kolmen tiedoston lisäksi tiedosto toimintakertomus, niin yrittäessäsi edellä kuvattua tunnistusta T-shell täydentäisi näin

more toiminta
ja antaisi äänimerkin. Tässä tapauksessa riittäisi kirjoittaa yksi lisämerkki, s, ja painaa uudestaan TAB-näppäintä, jolloin tunnistus onnistuisi kokonaan.

Uusien komentojen ja synonyymien määrittely: alias

Unixissa voi helposti määritellä komentosanoille synonyymejä alias-komennolla. Sillä voi myös määritellä uusia komentoja vanhojen avulla, esimerkiksi peruskomentojen muunnelmia, joissa komennon toimintaa muutetaan valitsimilla.

Komento

alias uusinimi komento

määrittelee komennolle uuden nimen. Huomaa, että komennon argumenteissa kerrotaan ensin määriteltävä (uuden komennon nimi) ja sitten sen määritelmä. Kyseessä on shellin komento, joten sen kuvaus löytyy shellin man-sivulta (esim. man tcsh).

Määritelmä on voimassa pääteistunnon loppuun, joten pysyviksi halutut määritelmät kannattaa kirjoittaa sopivaan alustustiedostoon .cshrc.

Esimerkiksi komento

alias del rm

määrittelee komentosanalle rm synonyymin del. Tämän jälkeen voidaan käyttää del-komentoa aivan kuten rm-komentoa - samanlaisilla argumenteilla ja valitsimilla.

Vaikka voi olla houkuttelevaa määritellä Unixin komentosanoille tutumpia tai luonnollisemman tuntuisia synonyymeja, kannattaa hiukan hillitä itseään. Ajan mittaan saattaa ero Unixin komentojen ja omien synonyymien välillä hämärtyä, ja jos sitten joudutaankin esim. tilapäisesti käyttämään jotain vierasta Unix-konetta, jossa omat määrittelyt eivät ole voimassa, voi mennä sormi suuhun.

Komento voidaan alias-komennolla määritellä myös sellaiseksi, että sen merkitys on jokin vanha komento joillakin kiinteillä valitsimilla. Tällöin alias-komennon toinen argumentti kannattaa kirjoittaa heittomerkkeihin, esim.

alias L 'ls -lt'

Tällöin pelkkä L toimii kuten ls -lt, mutta sille voidaan antaa myös argumentteja ja lisävalitsimia; esimerkiksi L -a foo* tarkoittaisi samaa kuin ls -lt -a foo*.

Määrittelyssä voi myös käyttää putkea. Esimerkiksi komento

alias dir 'ls -lt | more'

määrittelee dir-komennon, joka toimii kuten ls -lt mutta tulostus menee more-komennon kautta, siis sivutettuna.

Huomaa, että edellä esitetyn alias-määrittelyn jälkeen et voi antaa dir-komennolle argumentteja, koska ne menisivät argumentiksi more-komennolle eivätkä ls-komennolle! Tämä rajoitus voidaan kyllä kiertää, mutta alias-komennon hienouksien opettelun asemesta saattaa olla järkevämpää opetella käyttämään esim. ns. pieniä kieliä.

Voimassaolevat alias-määrittelyt saa selville komennolla alias ilman argumentteja. Ota huomioon, että todennäköisesti on voimassa joukko oletusarvoisia alias-määrittelyjä itse antamiesi lisäksi.

Alias-määrittelyn, jossa määriteltävä komento on ollut kom, voi poistaa komennolla unalias kom.

Ympäristömuuttujat

Ympäristömuuttujat (environment variables) ovat shellissä määriteltyjä muuttujia, jotka ovat myös shellin aliprosessien eli shellistä käynnistettyjen ohjelmien käytettävissä. Otetaan aluksi aiheesta yksinkertainen esimerkki:

Jossakin järjestelmässä saattaisi olla vaikkapa enscript-niminen komento paperitulostusta varten ja siinä -P-valitsin, jolla voi määrätä, mille kirjoittimelle tulostus menee. Tällöin voisi olla käytännöllistä asettaa kirjoittimelle istuntokohtainen oletusarvo. Jos Tämä voidaan tehdä määrittelemällä ympäristömuuttuja PRINTER seuraavasti:

setenv PRINTER psy199

Tämän jälkeen sellainen enscript-komento, jossa ei ole -P-valitsinta, toimii ikäänkuin siinä olisi valitsin -Ppsy199. Tämä johtuu siitä, että enscript valitsee kirjoittimen seuraavien sääntöjen mukaan:

  1. Jos komennossa on -P-valitsin, käytä siinä ilmoitettua kirjoitinta.
  2. Muussa tapauksessa käytä sitä kirjoitinta, jonka ympäristömuuttujan PRINTER arvo ilmoittaa. (Jos käyttäjä ei ole sitä muuttujaa määritellyt, enscript käyttää muuttujan järjestelmäkohtaista oletusarvoa, jos sellainen on, ja antaa virheilmoituksen muussa tapauksessa.)
Edellä esitetty on vain esimerkki siitä, miten shellin ja ohjelmien vuorovaikutus voi toimia.

Riippuu komennosta tai ohjelmasta, käyttääkö se joidenkin ympäristömuuttujien arvoja jollakin tavalla ja miten se niitä käyttää. Periaatteessa asian pitäisi selvitä ainakin komennon tai ohjelman man-sivulta.

Järjestelmässä voi olla paljonkin valmiiksi määriteltyjä ympäristömuuttujia. Niiden tarkoituksena on osittain se, että jotkin ohjelmat toimisivat oletusarvoisesti jollakin järkeväksi harkitulla tavalla. Käyttäjä voi muuttaa oletusarvoja siten, että hän muuttaa ympäristömuuttujien arvoja.

Järjestelmässä ei ole mitään kiinteätä joukkoa ympäristömuuttujia. Voit periaatteessa määritellä minkä ympäristömuuttujan haluat ja antaa sille minkä arvon haluat. Jos mikään prosessi ei käytä kyseisen ympäristömuuttujan arvoa, ei määrittelyllä ole mitään käytännön merkitystä. Toisaalta jos itse teet ohjelman, voit ainakin joissakin tapauksissa tehdä siitä sellaisen, että se käyttää hyväkseen ympäristömuuttujien arvoja, t.s. ohjelman toimintaan voidaan vaikuttaa määrittelemällä jokin ympäristömuuttuja ennen ohjelman käynnistämistä. Esimerkiksi C-ohjelmointikielessä tähän tarkoitukseen voidaan käyttää standardifunktiota getenv.

Voimassa olevat ympäristömuuttujien arvot saa selville komennolla setenv ilman argumentteja. Tulostus voi olla aika pitkä. Seuraavassa näkyy vain tulostuksen alkuosa eräässä tapauksessa:

epsilon ~ 51 % setenv
ARCH=alpha
DECW_BOOK=/p/doc/dxbook
DISPLAY=yucca.hut.fi:0.0
EDITOR=emacs
GROUP=staff
HOME=/u/lai/lk/jkorpela
HOST=epsilon.hut.fi
HOSTTYPE=alpha
...
Kaikkien ympäristömuuttujien merkitystä ei suinkaan tarvitse tietää - vain niiden, joiden arvojen asettaminen tai muuttaminen on jotenkin hyödyksi esim. jonkin ohjelman käytölle. Ja tällöin yleensä ohjelman käyttöohjeissa kerrotaan, millä ympäristömuuttujilla on merkitystä. Esimerkissämme näkyvistä muuttujista mainittakoon EDITOR, jota jotkin ohjelmat käyttävät hyväkseen silloin, kun käyttäjä antaa ohjelman sisällä käskyn, joka käynnistää editorin; tällöin EDITOR-muuttujan arvo saattaa määrätä, mikä editori käynnistyy.

Ympäristömuuttujan arvon asettamisesta (tai muuttamisesta) oli jo esimerkki edellä. Komennon yleinen muoto on

setenv muuttuja arvo

missä osan arvo rakenne riippuu siitä, mikä muuttuja on kyseessä. Usein arvo on rakenteeltaan hakemiston nimi, mutta se voi olla muutakin.

Varsin tärkeä ympäristömuuttuja on PATH. Sen arvo on merkkijono, joka koostuu kaksoispisteellä toisistaan erotetuista hakemistonnimistä. Shelli käyttää PATHin arvoa ohjelmien hakupolkuna: jos käyttäjän kirjoittaman komennon ensimmäinen sana ei ole shellin itsensä komento, niin shelli etsii sennimistä niistä hakemistoista, jotka PATHin arvossa on lueteltu, ja nimenomaan siinä järjestyksessä, jossa ne on lueteltu. Hakupolkuun voidaan lisätä hakemisto seuraavaan tapaan:

setenv PATH $PATH\:hakemisto

(Tässä $PATH viittaa PATH-muuttujan vanhaan arvoon, ja merkki \ "lainaa" sitä seuraavan merkin eli \: tarkoittaa merkkiä :. Ilman "lainaamista" kaksoispisteellä olisi shellille erikoismerkitys.)

On melko tavallista, että järjestelmän perusasetusten mukaan ohjelmien hakupolussa on mukana . eli kunkinhetkinen työhakemisto. Tällöin esimerkiksi käyttäjän oma ohjelma voidaan käynnistää suoraan nimellään, esim. a.out pidemmän vaihtoehdon ./a.out asemesta. Sellaiseen käytäntöön totutteleminen voi kuitenkin olla vaarallista. Klassillinen esimerkki tästä on tilanne, jossa käyttäjä on antanut omalle ohjelmalleen nimen test. Vaikka työhakemisto olisi mukana hakupolussa, niin ohjelmaa ei välttämättä suinkaan voisi käynnistää komennolla test (vaan komennolla ./test), sillä on olemassa myös systeemiohjelma test ja se hakemisto, jossa se on, on todennäköisesti hakupolussa aiemmin!

Komennon setenv vaikutus loppuu, kun pääteistunto loppuu. Jos siis haluat pysyvästi asettaa joillekin ympäristömuuttujille (alku)arvot, kirjoita setenv-komennot alustustiedostoon .cshrc.

Komento setenv on nimenomaan T-shellin komento. Muissa shelleissä on muita välineitä ympäristömuuttujien käsittelyyn.

Komentotiedostot

Jos sinulla esiintyy toistuvasti tarvetta suorittaa sama komentojen jono, voit kirjoittaa komennot tiedostoon jollakin editorilla; tämän jälkeen komentojono on suoritettavissa source-komennolla, jonka argumenttina on kyseisen tiedoston nimi. Komentoja sisältävää tiedostoa kutsutaan tässä nimellä komentotiedosto; usein sellaisesta käytetään nimitystä shell script.

Seuraava esimerkki yksinkertaisesta komentotiedostosta liittyy TeX-ladontaohjelmiston käyttöön. Olennaista asiassa aiheemme kannalta on se, että TeXiä käytettäessä on käyttäjän usein annettava sama komentojono. Tämä johtuu siitä, että käyttäjän kirjoittama tiedosto käsiteltävä TeX-ohjelmalla, jotta se saataisiin haluttuun muotoon, ja lisäksi tulos on käsiteltävä toisella ohjelmalla, jotta se voitaisiin tulostaa paperille. Oletetaan, että käyttäjän kirjoittama tiedosto on nimeltään dityo.tex. Tällöin käyttäjä voisi kirjoittaa seuraavanlaisen komentotiedoston, joka olkoon nimeltään teksaa ja joka sisältää ne komennot, jotka käyttäjä muutoin naputtelisi käsin joka kerta:

use tex
latex dityo.tex
dvips dityo.dvi
Tämän jälkeen halutut asiat (TeXin käyttöönotto, tiedoston käsittely LaTeXillä ja sitten vielä tuloksen muuntaminen PostScript-muotoon mahdollista paperitulostusta varten) voidaan suorittaa komennolla
source teksaa
On mahdollista järjestää asiat niin, että komentotiedoston voi suorittaa kirjoittamalla vain sen nimi, esim. teksaa. Tämä edellyttää kahta asiaa:

Komentotiedostossa voi pelkkien komentojen lisäksi olla selittäviä kommentteja, jotka aloitetaan ristikkomerkillä #, sekä erilaisia ohjausrakenteita kuten ehdollisuuden aikaansaava if ja toiston aikaansaava while.

Tässä oppaassa käsittelemme komentotiedostojen kehittyneemmästä käytöstä vain yhtä tärkeää piirrettä: argumenttien käyttöä. Esimerkiksi edellä esitetystä komentotiedostosta teksaa saataisiin yleiskäyttöisempi seuraavasti:

use tex
latex $1.tex
dvips $1.dvi
Tällöin samaa komentotiedostoa voitaisiin käyttää erinimisten tiedostojen käsittelyyn. Esimerkiksi komento source teksaa dityo tällöin aiheuttaisi saman kuin aiempi teksaa-tiedoston versio. Tässä siis merkintä $1 tarkoittaa sillä komentorivillä olevaa argumenttia, jolla komentotiedosto käynnistetään. Lienee helppo arvata, että jos komentorivillä on useita argumentteja, niihin viitataan yleisesti järjestyksessä merkinnöillä $1, $2, $3 jne.

Ohjausrakenteissa on aika paljon eroja eri shellien välillä. Jos näitä aiheita ryhtyy opiskelemaan, kannattaa harkita, mitä shelliä silloin käyttää komentotiedostoissa. Toisaalta olisi luonnollista käyttää samaa shelliä kuin muutoinkin, siis T-shelliä, mutta toisaalta on melko vakiintunut tapa kirjoittaa komentotiedostot käyttämään Bourne shelliä muun muassa siirrettävyyden takia. Bourne shell löytynee jokaisesta Unixista, esim. T-shell ei suinkaan kaikista.

Oppaassa Ohjelmointi Unixissa on lisätietoja komentotiedostoista.

Alustustiedostot .login ja .cshrc

Tässä esitettävät asiat koskevat T-shelliä. Muissa shelleissä alustustiedostojen käyttö on periaatteessa samanlaista, mutta mm. tiedostojen nimissä on eroa.

Pääteistunnon alussa järjestelmä automaattisesti suorittaa

  1. käyttäjän kotihakemistossa olevan .cshrc-nimisen komentotiedoston, jos sellainen on olemassa, ja sitten
  2. käyttäjän kotihakemistossa olevan .login-nimisen komentotiedoston, jos sellainen on olemassa
Lisäksi järjestelmä suorittaa .cshrc-tiedoston (mutta ei enää .login-tiedostoa), kun shelli käynnistyy. Tämä on tärkeätä mm. siksi, että script-komennon suoritukseen sisältyy uuden shellin käynnistyminen aliprosessina.

Yhteyden ottaminen koneeseen X-ympäristössä xin-komennolla ei aloita pääteyhteyttä edellä tarkoitetussa muodossa. Toisin sanoen silloin järjestelmä suorittaa .cshrc-tiedoston mutta ei .login-tiedostoa.

Käytännössä tämä merkitsee, että halutut alustustoimenpiteet, esim. ympäristömuuttujien määrittelyt, kannattaa suorittaa nimenomaan .cshrc-tiedostossa, ellei kyseessä ole asia, joka halutaan todellakin suorittaa vain varsinaisen pääteistunnon alussa.

Varsin tavallista on, että luodessaan käyttäjätunnuksen järjestelmän hallinnoija (ylläpitäjä) automaattisesti perustaa käyttäjälle tiedostot .cshrc ja .login tai vastaavat. Niiden sisältönä saattaa olla esimerkiksi asetuksia, jotka ovat enemmän tai vähemmän välttämättömiä kyseisessä käyttöympäristössä, mutta myös sellaista, mikä on vain hallinnoijan näkemys siitä, millaiset komentojen synonyymit (aliakset) ovat kivoja jne. Valitettavasti tällaisten alustustiedostojen dokumentaatio on usein puutteellinen tai olematon, joten käyttäjän pääteltäväksi jää, mitä voi tai on syytä muuttaa.

Usein tarvittavia komentoja

Tiedostojen käsittelyyn liittyviä komentoja kuvataan seuraavassa luvussa. Tässä esitellään eräitä muita usein tarvittavia komentoja.

Salasanan vaihto

Salasana vaihdetaan komennolla passwd. Komennossa ei anneta argumentteja, vaan se kyselee tarvittavat tiedot. Vaihto näyttää tämäntapaiselta:

tunnus@kone hakemisto n % passwd
Changing password for tunnus...
Old password:

New password:

Retype new passwd:

Järjestelmä siis kysyy ensin vanhan salasanan ja sitten uuden salasanan kahdesti. Kirjoittamasi salasanat eivät tässäkään tule näkyviin.

Kun haluat seuraavan kerran käyttää konetta salasanan vaihdon jälkeen, niin login-kyselyn jälkeiseen password-kyselyyn annetaan vastaukseksi tietenkin uusi salasana.

Koneessa voi olla salasanojen kelvollisuustarkistus, joka ei hyväksy liian yksinkertaisia salasanoja. Silloin asiasta tulostuu ilmoitus, ja vanha salasana jää voimaan.

Kun vaihdat salasanasi yhdessä Unix-koneessa, niin se ei automaattisesti suinkaan muuta salasanaasi muissa koneissa. On mahdollista, että eri koneet käyttävät samaa salasanajärjestelmää, jolloin salasanan vaihto vaikuttaa useissa koneissa, mutta tätä koskevat mahdolliset järjestelyt ovat erilaiset eri paikoissa ja koneissa ja voivat muuttua ajan myötä.

Henkilötietojen ja osoitteen muuttaminen - chfn

Jos haluat muuttaa niitä tietoja sinusta, jotka näkyvät käytettäessä finger-komentoa, käytä komentoa chfn (change finger (information)).

Komennolla voi muuttaa esimerkiksi sukunimensä, jos sukunimi on vaihtunut naimisiin menon yhteydessä. Joissakin koneissa on rajoitettu nimen muutosmahdollisuuksia. Komento tulostaa ruudulle ohjeita; Seuraa niitä.

Seuraavassa esimerkissä käyttäjä tarkistaa omat finger-tietonsa, muuttaa niitä ja tarkistaa muutosten onnistumisen. Muutokset eli huoneennumeron ja puhelinnumeron lisäys näkyvät jälkimmäisen finger-komennon tulostuksen rivillä, jonka alussa lukee Office:

epsilon ~ 51 % finger jkorpela
Login name: jkorpela  			In real life: Jukka Korpela
Directory: /u/lai/lk/jkorpela       	Shell: /bin/tcsh
On since Feb 19 08:37:11		12 minutes Idle Time
   on ttys7 from yucca.hut.fi
Plan:
Please refer to URL ../index.html
epsilon ~ 52 % chfn
Default values are printed inside of '[]'.
To accept the default, type <return>.
To have a blank entry, type the word 'none'.

Name [Jukka Korpela]: 
Room number (Exs: 597E or 197C) []: U137A
Office Phone (Ex: 6426000) []: 4319
Home Phone (Ex: 9875432) []: 
epsilon ~ 53 % finger jkorpela
Login name: jkorpela  			In real life: Jukka Korpela
Office: U137A, x4319
Directory: /u/lai/lk/jkorpela       	Shell: /bin/tcsh
On since Feb 19 08:37:11		12 minutes Idle Time
   on ttys7 from yucca.hut.fi
Plan:
Please refer to URL ../index.html
epsilon ~ 54 %
Niihin tietoihin, jotka sinusta näkyvät fingerillä, voit vaikuttaa myös tiedostojen .plan ja .project sisällöllä.

Yhteydenotto Unix-koneesta toiseen: rlogin, xin

Kun olet yhteydessä Unix-koneeseen koneA, voit ottaa siitä yhteyden toiseen Unix-koneeseen koneB, jossa sinulla on tunnus, komennolla

rlogin koneB

tai, jos sinulla on koneB:ssä eri käyttäjätunnus, tunnusB, kuin koneA:ssa, komennolla

rlogin koneB -l tunnusB

Huomaa, että tällöin valitsin on, yleisestä Unix-käytännöstä poiketen, komennon argumentin jäljessä eikä ennen sitä.

Edellä tunnusB tarkoittaa koneen Internet-nimeä, esim. kyyppari.hkkk.fi.

Tietokoneen käyttö ilman asianmukaista lupaa on kiellettyä, ja sen yrityskin on rangaistava (rikoslain 38. luvun 8 §). Ei siis missään tapauksessa ole sallittua yrittää ottaa yhteys toiseen tietokoneeseen esim. salasanoja arvailemalla.

Otettaessa yhteyttä rlogin-komennolla järjestelmä ei kysy salasanaa, jos koneB:ssä tunnusB:n kotihakemistossa on tiedosto nimeltä .rhosts ja siinä on rivi
koneA tunnusA
missä tunnusA on se tunnus, jolta yhteys otetaan. Toisin sanoen perustamalla kotihakemistoosi .rhosts-tiedoston, jossa on mainitun muotoisia rivejä, voit sallia yhteydenotot ilman salasanaa kyseisiltä tunnuksilta. Tätä menettelyä tulee käyttää vain silloin, kun on kyse yhteyksien mahdollistamisesta niiden omien käyttäjätunnustesi välillä, joita sinulla on eri koneissa.

Rlogin-yhteys katkeaa normaalisti, kun yhteys toiseen koneeseen katkaistaan komennolla logout (tai exit). Yhteys voidaan lisäksi katkaista pakolla kirjoittamalla merkkiyhdistelmä <ret>~.<ret> missä <ret> tarkoittaa rivinvaihtoa eli return-näppäimen painamista. Tällainen voi olla tarpeen mm. silloin, kun yhteys toiseen koneeseen on jumissa esim. koneen "kaatumisen" tarkia. Yhteys voidaan myös jättää taustalle (suspend) kirjoittamalla merkkiyhdistelmä <ret>~control-z<ret> joka siis ikäänkuin palauttaa tilapäisesti siihen koneeseen, josta Rlogin-yhteys otettiin. Takaisin Rlogin-yhteyteen päästään komennolla fg (foreground).

Päätteen lukitseminen: lock

Jos joudut lähtemään päätteen äärestä lyhyeksi aikaa, pääte kannattaa lukita niin, ettei kukaan muu pääse vahingossa (tai ilkeyttään) käyttämään tunnustasi. Tämä tehdään komennolla lock. Se kysyy sinulta salasanan ja sitten varmistuksen vuoksi vaatii sinua kirjoittamaan sen uudestaan. Tämä salasana on vapaasti valittavissasi, eikä sen tarvitse olla sama kuin se salasana, jota käytä yhteydenotossa (login-salasanasi).

Lukitsemisen jälkeen pääte jää tilaan, josta pääsee jatkamaan vain antamalla em. salasanan. Huomaa kuitenkin, että 15 minuutin kuluttua lukitus purkautuu itsestään.

Lukitseminen on siis todellakin tarkoitettu vain muutaman minuutin (enintään varttitunnin) poissaoloja varten. Jos poistut pitemmäksi aikaa, katkaise yhteys normaalisti.

Päätteellä lukitseminen voi näyttää esim. seuraavalta - asiassa on hiukan konekohtaista vaihtelua. Salasanat eivät tietenkään tule näkyviin. Salasanan kirjoittamisen jälkeen painetaan aina returnia.

vipunen ~ 167 % lock
Key:
Again:
lock: /dev/pts/44 on vipunen.hut.fi. timeout in 15 minutes time
now is Wed Apr 28 14:08:22 EET DST 1993
Key:
Kun sitten tulet takaisin ja kirjoitat salasanan (ja painat returnia), tilanne palautuu normaaliksi ja päätteelle tulee komentotulkin kehote.

Tiedostot ja hakemistot

Yleistä tiedostoista ja hakemistoista

Tiedosto (file) on tiedon nimetty säilytyspaikka tietokoneessa. Tiedostoa voi verrata yhteen asiakirjaan, joka on isossa mapissa. Tiedosto voi syntyä joko ohjelmien tulostuksena tai ihmisten kirjoittamana tekstinä. Aloittelija on todennäköisesti eniten tekemisissä jälkimmäisen tiedostotyypin kanssa.

Tiedostolla on aina sekä nimi että sisältö. Mapissa olevalla asiakirjalla ei välttämättä ole nimeä, mutta tiedostolla siis on. Erona mappiin on myös se, että käyttäjän ei tarvitse käydä asiakirjoja läpi löytääkseen haluamansa, vaan riittää kertoa tiedoston nimi. Tietokoneen käyttöjärjestelmä nimittäin pitää kirjaa siitä, missä mikin tiedosto fyysisesti sijaitsee ja tekee hakemisen käyttäjän puolesta.

Tiedostoja voidaan järjestää hakemistoihin (directory). Hakemistoa voi verrata mappirivistön yhteen mappiin. Ja aivan kuten mappi voi sisältää välilehtiä, joilla mapin sisältämiä asiakirjoja ryhmitellään tarkemmin, voi hakemisto sisältää alihakemistoja (subdirectory).

Unixin tiedostojärjestelmässä hakemistoihin, alihakemistoihin, alialihakemistoihin jne. jakamista voidaan jatkaa niin pitkälle kuin halutaan. Tätä havainnollistetaan usein vertaamalla tiedostojärjestelmää puuhun, jossa puun oksat vastaavat hakemistoja, oksanhaarat alihakemistoja ja lehdet tiedostoja. Jos esimerkiksi olet tutkija, voit perustaa itsellesi kutakin tutkimushanketta varten erillisen hakemiston ja siihen tarvittaessa alihakemistoja hankkeen eri osia varten jne.

Puuvertaukseen liittyy se, että Unix-koneen tiedostojärjestelmän kaikkein ylimmän tason hakemistoa sanotaan juurihakemistoksi (root directory). Sen nimenä on vinoviiva /. Jos olet utelias, voit komennolla ls / katsoa, minkänimisiä alihakemistoja juurihakemistossa on käyttämässäsi koneessa.

Tiedoston perustaminen

Tiedoston voi perustaa monella tavalla. Kuten edellä on mainittu, tekstitiedostot perustetaan yleensä jollakin editorilla kuten Emacsilla; lisäksi monet ohjelmat luovat tiedostoja. Tiedostoja voi myös muodostaa toisista tiedostoista erilaisilla muokkaus- ja muunnosohjelmilla.

Jos haluat perustaa aivan pienen tiedoston, jota varten et viitsi käynnistää editoria, voit käyttää cat-komentoa seuraavasti:

cat >tiedostonnimi

Tällöin komento lukee päätteeltä naputeltavat merkit ja kirjoittaa ne tiedostoon, joka saa annetun nimen. Merkkien kirjoittaminen lopetetaan siten, että kun viimeinen rivi on kirjoitettu loppuun ja on painettu returnia, annetaan seuraavaksi control-d.

Tiedostojen ja hakemistojen nimet

Tiedostonnimien rakenne

Unix-järjestelmässä tiedoston tai hakemiston nimessä voi periaatteessa käyttää isoa valikoimaa merkkejä, mutta käytännössä kannattaa käyttää vain kirjaimia a-z ja numeroita sekä seuraavia erikoismerkkejä:

Näistä yhdysviivaa ei kannata käyttää tiedoston nimen ensimmäisenä merkkinä.

Skandinaaviset kirjaimemme å, ä ja ö yleensä aiheuttavat vain ongelmia, joten niitä ei kannata käyttää tiedostojen tai hakemistojen nimissä.

Muistathan, että Unixissa isot ja pienet kirjaimet ovat eri merkkejä, joten esim. TKK on aivan eri tiedostonnimi kuin tkk tai Tkk. Yleensä on tapana käyttää pääasiassa pieniä kirjaimia. Jotkut erottelevat tiedostojen nimet hakemiston nimestä kirjoittamalla tiedoston nimen pienellä alkukirjaimella, kun taas hakemiston nimen isolla alkukirjaimella. Silloin siis tkk olisi tiedosto ja Tkk hakemisto. Mutta on jokaisen itse päätettävissä, miten omat tiedostonsa ja hakemistonsa nimeää.

Nimen pituudella ei käytännössä ole rajoitusta, sillä tiedoston tai hakemiston nimi voi olla jopa 256 merkkiä pitkä. Pitkät nimet ovat kuitenkin hankalia käyttää.

Unix tulkitsee tiedostojen (ja hakemistojen) nimet seuraavasti:

Pisteellä alkavat tiedostonnimet

Piste on mahdollinen tiedoston (tai hakemiston) nimen ensimmäisenäkin merkkinä, mutta sillä on erikoismerkitys. Pisteellä alkavat tiedostonnimet eivät normaalisti näy tiedostolistoissa, jotka saadaan ls-komennolla. Sellaiset tiedostot ovat yleensä eri ohjelmien alustustiedostoja tai ohjelmien perustamia ja ylläpitämiä "kirjanpitotiedostoja", joista oletetaan, että käyttäjät eivät yleensä halua nähdä niitä.

Esimerkkejä: Emacs-editori suorittaa .emacs-nimisessä tiedostossa määritellyt toimenpiteet, jos sellainen tiedosto on käyttäjän kotihakemistossa. Nyysiohjelmat yleensä luovat tiedostoja, joiden nimet ovat sentapaisia kuin .newsrc, ja ylläpitävät niissä tietoja siitä, mitä nyysiryhmiä käyttäjä lukee ja mitä juttuja niistä hän on jo lukenut.

Muut erikoiset tiedostonnimet kuten foo~ ja #foo#

Jotkin ohjelmat saattavat automaattisesti luoda tiedostoja, joilla on erikoisia nimiä. Tavallisimmin käyttäjä huomaa sellaisten tiedostonnimien kuin foo~ ja #foo# syntymisen. Niitä luo Emacs-editori.

Kun Emacsilla editoidaan tiedostoja, se tallettaessaan tiedoston muokatussa muodossa automaattisesti tallettaa tiedoston aiemman sisällön tiedostoon, jonka nimen perässä on tildemerkki ~. Siis kun talletat tiedoston foo muokatussa muodossaan, Emacs panee vanhan version talteen tiedostoon foo~. Näitä "varmuuskopioita" ei yleensä kannata hävittää, ellei tiedosto ole hyvin suuri. "Varmuuskopiota" voit tarvita esimerkiksi silloin, kun huomaat tehneesi tiedostoon vääriä muutoksia.

Jos Emacsin toiminta päättyy epänormaalisti esimerkiksi tietokoneen (tai itse Emacs-ohjelman) "kaatumisen" tai modemiyhteyden katkeamisen takia, Emacs ainakin yrittää tallettaa editoitavan tiedoston senhetkisen tilan tiedostoon, joka koostuu tiedostonnimestä ristikkomerkkien # sisällä. Jos siis olet editoimassa tiedostoa foo ja Emacsin toiminta päättyy epänormaalisti, niin löydät tiedostosta foo tilanteen sellaisena, kuin se oli viimeisellä normaalilla tallennushetkellä, ja tiedostosta #foo# mahdollisesti uudemman version.

Joskus käyttäjä itse onnistuu saamaan aikaan hankalan tiedostonnimen, esimerkiksi sellaisen, joka alkaa yhdysviivalla tai sisältää kontrollimerkkejä. Sellaisiin tiedostoihin ei voi viitata normaalilla tavalla komennoissa, joissa haluttaisiin esim. poistaa näitä tiedostoja tai vaihtaa niiden nimiä. Muun muassa Unix-fakissa on ohjeita hankalien tiedostonnimien käsittelyyn. Tässä mainittakoon vain, että jos tiedostonnimi alkaa yhdysviivalla, esim. -foo, niin siihen voi viitata tyyliin ./-foo, jolloin komentotulkki käsittää sen tiedostonnimeksi eikä valitsimeksi.

Jokerimerkit * ja ? tiedostonnimissä

Unix-komennoissa voi tiedostonnimissä käyttää ns. jokerimerkkejä eli "villikorttimerkkejä" (wildcards). Nimitys johtunee canastan ja jokeripokerin tapaisista korttipeleistä, joissa joitakin kortteja kuten jokereita voi käyttää "villeinä kortteina" minkä hyvänsä kortin asemesta. Tarkkaan ottaen kyse ei tällöin ole varsinaisista tiedostonnimistä vaan rakenteista, joita voi käyttää komentojen argumentteina tiedostonnimien paikalla ja jotka komentotulkki laventaa tiedostonnimilistoiksi.

Unixissa jokerimerkkejä ovat

Esimerkiksi komennon argumenttina oleva marj? tarkoittaa kumpaakin tiedostonnimistä marja ja marjo ja myös mitä tahansa viisimerkkistä marj-alkuista merkkijonoa. Toisaalta marj* taas tarkoittaisi esimerkiksi tiedostonnimiä marjaana, marja, marjo, marj, marjukka jne., siis mitä tahansa merkkijonoa, mikä alkaa kirjaimilla marj.

Lisää esimerkkejä:

Rajoitus: tällainen lavennus ei tuota pisteellä alkavia tiedostonnimiä, ellei lavennettavassa nimessä itsessään ole pistettä. Esimerkiksi pelkkä * ei siis lavennu aivan kaikkien tiedostonnimien listaksi, vaan pisteellä alkavat jäävät pois.

Jokerimerkkien käyttö tehostaa työskentelyä, mutta siinä on omat riskinsä. Vahingossa saattaa tulla viitatuksi sellaisen tiedoston tai hakemiston nimeen, johon ei ollut aikomus puuttua. Jokerimerkkien käytössä on siis hyvä olla huolellinen, ettei esim. tiedostoja poistettaisi turhaan.

Suunnistaminen hakemistopuussa - pwd ja cd

Käsitteet "kotihakemisto" ja "työhakemisto"

Jokaisella käyttäjällä on Unix-koneessa hakemisto, joka on hänen omistuksessaan. Tätä hakemistoa sanotaan käyttäjän kotihakemistoksi (home directory). Kotihakemisto on normaalisti vain omistajan käytössä.

Kotihakemiston nimi sisältää omistajan käyttäjätunnuksen, mutta muutoin nimi on erilainen eri järjestelmissä. Yleensä ei ole syytä viitata kotihakemistoonsa suoraan sen nimellä, vaan kannattaa käyttää sen symbolista nimeä ~ (tämän merkin virallinen nimi on tilde, arkikielessä puhutaan usein "matomerkistä"). Tosin kaikissa shelleissä se ei ole mahdollista. Toinen, yleispätevämpi ratkaisu on käyttää symbolista nimeä $HOME.

Käyttäjä voi myös viitata muiden käyttäjien kotihakemistoihin. Riippuu hakemistojen suojauksista, onko tästä mitään hyötyä, mutta joka tapauksessa käyttäjätunnuksen tunnus kotihakemistoon voivat kaikki käyttäjät viitata symbolisella nimellä ~tunnus eli tilde-merkillä, jota seuraa (ilman välilyöntiä) käyttäjätunnus.

Työhakemistoksi (working directory) eli nykyiseksi hakemistoksi (current directory) kutsutaan sitä hakemistoa, "jossa käyttäjä juuri sillä hetkellä on". Täsmällisemmin sanottuna se tarkoittaa sitä hakemistoa, jonka tiedostoihin tiedostonnimet oletusarvoisesti viittaavat. Pääteistunnon alkaessa työhakemistona on kotihakemisto, mutta työhakemistoa voi vaihtaa cd-komennolla.

Tiedostonnimet siis viittaavat oletusarvoisesti työhakemistoon. Esimerkiksi kun olet hakemistossa mail/ ja tuhoat (komennolla rm foo) siellä tiedoston nimeltä foo, niin tuhoaminen ei vaikuta mitenkään kotihakemistossasi ehkä olevaan tiedostoon nimeltä foo.

Työhakemistollakin on symbolinen nimi, samoin sitä lähinnä ylemmällä hakemistolla:

Missä hakemistossa nyt olen? pwd kertoo

Komento pwd (print working directory) näyttää, missä hakemistossa ollaan eli mikä on senhetkinen työhakemisto.

Seuraavassa on kaksi esimerkkiä pwd:n tulostuksesta. Kummassakin tapauksessa käyttäjä jkorpela on kotihakemistossaan mutta eri koneissa; kuten nähdään, kotihakemistojen nimet voivat siis eri koneissa olla aivan erilaiset:

/m/fs/lai/lai/lk/jkorpela
/mnt/mds/univ2/tkk/jkorpela

Siirtyminen toiseen hakemistoon: cd

Komennolla cd (change directory) siirrytään toiseen hakemistoon eli vaihdetaan työhakemistoa. Komennon muoto on

cd hakemistonnimi

Argumentin oletusarvona on kotihakemisto.

Esimerkkejä:

Siirtyminen hakemistoon cd-komennolla ei sinänsä edellytä hakemiston suojauksilta muuta kuin että siihen on "suoritusoikeus" eli x-oikeus. Toisaalta cd-komento ei mitenkään lisää käyttäjän oikeuksia kyseiseen hakemistoon tai sen tiedostoihin.

Mitä tiedostoja on? ls kertoo

ls-komento

Aiemmin on jo mainittu, että komento ls (list) antaa yksinkertaisen listan senhetkisen työhakemiston tiedostoista. Jos työhakemistossa on alihakemistoja, ne näkyvät tiedostojen joukossa. Seuraavassa tutustutaan ls-komennon muihin muotoihin.

Komennossa voidaan antaa argumenttina

Lisäämällä komentoon ls valitsimia saa enemmän ja yksityiskohtaisempaa tietoa tiedostoista ja hakemistoista. Valitsimilla voi myös muutoin säädellä ls-komennon tulostusta. Kaikista valitsimista saa tietenkin listan man-komennolla: man ls.

Monissa Unix-koneissa on valmiiksi määritelty erilaisia ls-komennon muunnelmia. Tyypillisiä sellaisten muunnelmien nimiä ovat l, ll, L, LL. Jos käyttää niitä, kannattaa muistaa, että ne eivät ole käytettävissä kaikissa Unix-koneissa.

Pitkä tulostus: valitsin -l

Tavallisimmin käytetty ls-komennon valitsin lienee -l, jolla saa pitkän (long) tulostuksen, jossa on yksi rivillinen tietoa kutakin tiedostoa kohti. Komennolla ls -l saatava tulostus voisi olla esimerkiksi seuraava:

total 42 
-rw-r--r--   1 jkorpela users        169 Mar 30 11:09 MAIL 
drwxr-xr-x   2 jkorpela users       1024 Apr 24 09:08 Kirjeet 
-rwxr-xr-x   1 jkorpela users      16384 Mar 30 11:07 a.out 
-rw-r--r--   1 jkorpela users         26 Mar 30 10:51 iku.c 
-rw-r--r--   1 jkorpela users         71 Mar 30 11:00 juttu 
-rw-r--r--   1 jkorpela users         31 Mar 30 10:57 juttu~
Aluksi tulostuva total-luku kertoo tiedostojen yhteenlasketun koon ns. blokkeina. Yksi blokki on eri Unix-järjestelmissä erilainen: 1024, 512 tai 256 tavua.

Tavu (engl. byte) puolestaan on tiedostotilan (ja muistinkoon) perusyksikkö, joka tekstitiedostojen osalta vastaa yhtä merkkiä. Yleisesti käytetään tavu-sanan edessä etuliitteitä kilo-, mega- ja giga-, joilla on melkein mutta ei ihan sama merkitys kuin SI-järjestelmän mittayksiköissä: kilotavu tarkoittaa 1024 tavua, megatavu tarkoittaa 1024 kilotavua eli reilut miljoona tavua, gigatavu 1024 megatavua jne. (Jos tämä kuulostaa hämäävältä, älä huolestu; se on hämäävää.)

Muista riveistä kukin kertoo tietoja yhdestä tiedostosta seuraavasti:

Kaikki tiedostot esiin: valitsin -a

Normaalisti ls:n tulostuksessa eivät näy sellaiset tiedostot, joiden nimi alkaa pisteellä, paitsi jos komennossa erikseen annetaan sellainen tiedostonnimi.

Esimerkiksi tiedosto .cshrc ei näy komennon ls tulostuksessa. Sen sijaan komento ls .cshrc kyllä näyttää sen, samoin esimerkiksi ls .c*. (Komento .* joka ehkä tulee mieleen ei ole kovin hyvä ajatus, sillä erinäisistä syistä se näyttää paljon muitakin tiedostoja kuin luulisi.)

Jos ls-komennossa on valitsin -a, siis esim. ls -a, niin se tulostaa myös ne tiedostonnimet, jotka alkavat pisteellä.

Esimerkki:

epsilon ~/test 51 % ls
awktest     scr         testfile    tex.tex     typescript
epsilon ~/test 52 % ls -a
.           .foo        scr         tex.tex
..          awktest     testfile    typescript
epsilon ~/test 53 %

Esimerkistä ilmenee se valitsimen -a hiukan hämäävä piirre, että tulostuksessa näkyvät myös . ja .. jotka ovat työhakemiston ja sitä ylemmän hakemiston symbolisia nimiä.

Tulostus aikajärjestyksessä: valitsin -t

Jos ls-komennossa on valitsin -t (time), niin se tulostaa tiedostolistan aikajärjestyksessä tiedoston viimeisimmän muuttamishetken mukaan, uusimmasta vanhimpaan. (Oletusarvona ls-komennossa on tulostaminen aakkosjärjestyksessä nimien mukaan.)

Tiedoston tulostaminen kuvaruudulle: cat, more, less

cat

"Perinteinen" mutta huono tapa tulostaa tiedosto kuvaruudulle Unixissa on cat-komento: cat tiedostonnimi. Se on käytettävissä kaikissa Unixeissa. Se onkin sen ainoa hyvä puoli seuraaviin vaihtoehtoihin verrattuna, sillä cat-komento ei esim. sivuta tulostusta vaan pitkä teksti yleensä vilahtaa katseen ohi liian nopeasti.

Komennon nimi cat johtuu englannin sanasta catenate 'liittää yhteen'. Tämän taustalla on se, että komennolla voi liittää yhteen tiedostojen sisältöjä seuraavaan tapaan:

cat aa bb cc > foo

Esimerkkikomento tuottaa tiedoston foo, joka sisältää tiedostojen aa, bb ja cc sisällöt tässä järjestyksessä (hävittämättä alkuperäisiä tiedostoja).

more

Komento

more tiedostonnimi

tulostaa tiedoston sisällön ruudullisen kerrallaan: jos sisältö on pitempi kuin ruudulle mahtuu, tulostuu ensimmäinen ruudullinen, ja tulostus jatkuu vasta käyttäjän painettua välilyöntinäppäintä.

Välilyönnin painamisen asemesta voit myös mm.

less

Komento less on hyvin samantapainen mutta monipuolisempi kuin more, mutta sitä ei välttämättä löydy kaikista koneista, joissa more on käytettävissä.

Komennon nimi on tarkoitettu vitsiksi (less is more than more). Myös less-komennon man-sivulla oleva "kuvaus" less - opposite of more on olevinaan vitsi.

Tiedoston kopiointi, siirto ja poisto - cp, mv ja rm

Tiedoston kopiointi: cp (copy)

Komento

cp tiedosto1 tiedosto2

tekee tiedosto1:n sisällöstä kopion uuteen tiedostoon, joka saa nimen tiedosto2.

Jos tiedosto2 on jo olemassa, sen vanha sisältö häviää. Joissakin koneissa toiminta tässä tilanteessa voi olla erilaista, esim. cp-komento saattaa kysyä, halutaanko todella kirjoittaa vanhan tiedon päälle.

Komennosta on myös muoto

cp tiedosto1 tiedosto2 ... tiedostoN hakemisto

joka kopioi kaikki luetellut tiedostot ilmoitettuun hakemistoon. Tällöin kunkin kopion suhteelliseksi nimeksi (siis varsinaiseksi nimiosaksi, ilman hakemistopolkua) tulee sama kuin vastaavan alkuperäisen tiedoston varsinainen nimi. Esimerkiksi komento

cp /usr/include/limits.h /usr/include/float.h .
tekisi mainituista tiedostoista kopiot senhetkiseen työhakemistoon nimillä limits.h ja float.h.

Tiedoston nimen muuttaminen: mv (move)

Komento

mv vanhanimi uusinimi

muuttaa olemassaolevan tiedoston vanhanimi nimeksi uusinimi.

Jos ennestään on olemassa tiedosto nimeltä uusinimi, sen vanha sisältö häviää.

Jos olet esim. vahingossa perustanut tiedoston, jolla on eri nimi kuin haluaisit, voit vaihtaa sen mv-komennolla. Jos vaikka haluaa vaihtaa vahingossa väärin kirjoitetun tiedostonnimen tetsi nimeksi testi, niin sen voi tehdä komennolla mv tetsi testi.

Komentosana mv johtuu englannin sanasta move, mikä liittyy siihen, että usein mv-komentoa käytetään siirtämään tiedosto hakemistosta toiseen. Sellainen siirto voidaan seuraavaan tapaan:

mv foo alihak/foo

taikka lyhyemmin niin, että toinen argumentti on alihak/ tai alihak, jolloin tiedoston nimeksi kyseisessä hakemistossa tulee foo. Yleisemmin sanottuna mv-komennosta on myös muoto

mv tiedosto1 tiedosto2 ... tiedostoN hakemisto

joka siirtää kaikki luetellut tiedostot ilmoitettuun hakemistoon.

Tiedoston hävittäminen: rm (remove)

Komento

rm tiedostonnimi

hävittää (poistaa, tuhoaa) ilmoitetun tiedoston. Sekä tiedoston sisältö että sen nimi häviävät heti. Komennolle voidaan antaa argumentteina myös lista tiedostonnimiä välilyönnillä toisistaan erotettuina.

Komennon rm vaikutus on peruuttamaton. Ole tämän takia erityisen tarkka käyttäessäsi rm-komennossa jokerimerkkejä. Jos esimerkiksi haluat hävittää kaikki ne tiedostot, joiden nimi alkaa a-kirjaimella, mutta kirjoitat oikean komennon rm a* asemesta rm a *, niin tulet hävittäneeksi kaikki (senhetkisen työhakemistosi) tiedostot!

Vahingossa hävitetyn tiedoston palauttaminen saattaa joskus olla mahdollista, jos järjestelmästä otetaan varmuuskopioita. Palauttaminen vaatii kuitenkin operaattorin toimenpiteitä, ja se, miten tuore tilanne saadaan palautetuksi, riippuu varmuuskopioiden ottamisen tiheydestä.

Voit käyttää rm-komennossa valitsinta -i (esimerkiksi rm -i a*), jolloin komento kysyy "interaktiivisesti" kustakin tiedostosta erikseen, haluatko todella hävittää sen. Valitsimen -i käyttö on erityisen suositeltavaa aina kun käytetään jokerimerkkejä.

Hakemiston luominen ja poistaminen - mkdir, mv ja rmdir

Vaikka Unixissa hakemistot ovat tiedostoja ja näkyvät esim. ls-komennolla saatavissa tiedostolistoissa, niitä ei luoda, käsitellä ja poisteta samalla tavalla kuin normaaleja tiedostoja. Sen sijaan käytetään erityisiä komentoja, jotka on tarkoitettu nimenomaan hakemistojen käsittelyyn.

Hakemiston luominen: mkdir

Hakemisto luodaan komennolla mkdir (make directory). Argumenttina annetaan se nimi, joka luotavalle hakemistolle halutaan.

Esimerkiksi

mkdir Harjoitustyot

perustaa hakemiston nimeltä Harjoitustyot työhakemistoon. Nimi siis tulkitaan suhteellisena suhteessa senhetkiseen työhakemistoon.

Hakemiston voi perustaa myös muualle kun työhakemistoon. Esimerkiksi

mkdir Harjoitustyot/C-kurssi

perustaa äsken luodulle Harjoitustyot-hakemistolle alihakemiston nimeltä C-kurssi. Saman olisi voinut tehdä siten, että ensin siirtyy Harjoitustyot-hakemistoon komennolla cd Harjoitustyot ja antaa sitten komennon mkdir C-kurssi.

Tiedoston siirto hakemistosta toiseen: mv

Edellä mv-komennon kuvauksessa jo kerrottiin, että sillä voi myös siirtää tiedoston hakemistosta toiseen. Tässä annetaan vain muutama lisäesimerkki.

Jos haluat siirtää tiedoston nimeltä docu edellisessä luvussa luotuun Harjoitustyot-hakemistoon, niin kirjoita

mv docu Harjoitustyot/

Jos taas haluaisitkin muuttaa docu-tiedoston nimeksi c-docu ja samalla siirtää sen Harjoitustyot-hakemiston C-kurssi-alihakemistoon, kirjoittaisit

mv docu Harjoitustyot/C-kurssi/c-docu

Hakemiston nimen muuttaminen: mv

Myös hakemiston nimeä voi muuttaa mv-komennolla, sillä kyseiset komennot voivat olla paitsi tavallisia tiedostonnimiä myös hakemistonnimiä.

Esimerkiksi jos halutaan muuttaa hakemiston nimi Harjoitustyot lyhyemmäksi nimeksi Harjtyot, voidaan - kun työhakemistona on se hakemisto, jonka alihakemisto uudelleennimettävä hakemisto on - kirjoittaa vain

mv Harjoitustyot Harjtyot

Tämän jälkeen uudelleennimetyn hakemiston tiedostot ja mahdolliset alihakemistot löytyvät uuden nimen kautta.

Toinen esimerkki: halutaan siirtää hakemiston Harjoitustyöt alihakemisto C-kurssi suoraan työhakemiston alihakemistoksi. Tällöin kirjoitetaan

mv Harjoitustyot/C-kurssi C-kurssi

On kuitenkin huomattava, että jos mv-komennon ensimmäinen argumentti on hakemistonnimi, niin sen toiminta riippuu siitä, onko toinen argumentti olemassaolevan hakemiston nimi. Jos on, niin

mv a b

siirtää a:n hakemiston b alihakemistoksi (nimellä b). Mutta jos b-nimistä hakemistoa ei ole, niin kyseinen komento vain muuttaa a:n nimen b:ksi säilyttäen sen samalla hakemistotasolla, jolla se ennestään on.

Hakemiston poistaminen: rmdir

Hakemistoja voi myös poistaa, mutta normaalisti vasta kun ne ovat tyhjiä, ts. niistä on poistettu kaikki tiedostot ja alihakemistot. Komento on rmdir (remove directory). Argumenttina annetaan hakemiston nimi.

Jos sinulla on hakemisto Pascal ja sen tiedostot samoin kuin itse hakemisto ovat tarpeettomia, tuhoa ensin tiedostot hakemistosta rm-komennolla ja sitten itse hakemisto rmdir-komennolla:

rm Pascal/*
rmdir Pascal
Tämä edellyttää, että hakemisto Pascal ei sisällä alihakemistoja, sillä niiden poistaminen ei onnistu rm:llä. Jos siis poistettava hakemisto X sisältää alihakemistoja, pitää ensin poistaa X:n kustakin alihakemistosta kaikki tiedostot (rm:llä), sitten nämä hakemistot (rmdir:llä), sitten X:n itsensä sisältämät tiedostot (rm:llä) ja vasta lopuksi itse X (rmdir:llä).

On kyllä olemassa rm-komennon valitsin -r, joka mahdollistaa komennon kohdistamisen hakemistoihinkin, vieläpä rekursiivisesti, jolloin se poistaa myös sen hakemistot alihakemistoineen jne. ja niiden kaikki hakemistot. Sellainen komento voi tehdä paljon tuhoa, jos käyttäjä on vähänkään huolimaton!

Automaattisesti syntyvät alihakemistot, esim. mail

Jotkin ohjelmat luovat automaattisesti alihakemistoja, tavallisesti käyttäjän kotihakemistoon. Yleensä niistä ei tarvitse välittää eikä niihin ole syytä koskea.

Kerromme kuitenkin uteliaille aiheesta hiukan esimerkin avulla. Esimerkkinä on Pine-ohjelma. Se perustaa käyttäjän kotihakemistoon alihakemiston, jolle se antaa nimen mail. Sinne Pine perustaa tiedostoja, jotka vastaavat Pinen kansioita (folders) kuten lähetettyjen meilien kansio sent-mail. Käyttäjä voi katsella mail-hakemistonsa sisältöä tavallisilla komennoilla, esim. ls mail. Yleensä siihen ei kuitenkaan ole mitään aihetta, vaan kansioiden ja niiden sisällön käsittely hoidetaan Pinen sisällä sen omilla käskyillä.

Toisena esimerkkinä mainittakoon Netscape-ohjelma, joka perustaa .netscape-nimisen alihakemiston. Siellä se ylläpitää mm. tiedostoa bookmarks.html, joka sisältää käyttäjän määrittelemät ns. kirjanmerkit - joita voi aivan hyvin käyttää tietämättä mitään em. alihakemistosta ja tiedostosta.

Tiedostojen suojaaminen - chmod

Suojaukset ja niiden vaikutus

Sen listan alussa, jonka esim. komento ls -l antaa, on kunkin tiedoston suojauksista kertova koodi. Seuraavassa on esimerkki:

total 42 
-rw-r--r--   1 jkorpela users     169 Mar 30 11:09 RMAIL 
-rwxr-xr-x   1 jkorpela users   16384 Mar 30 11:07 a.out 
drwxr-xr-x   2 jkorpela users    1024 Apr 24 09:08 Yhdistystoiminta
-rw-r--r--   1 jkorpela users      26 Mar 30 10:51 ikiliikkuja.c 
-rw-r--r--   1 jkorpela users      71 Mar 30 11:00 notes 
-rw-r--r--   1 jkorpela users      31 Mar 30 10:57 notes~
Yritä hahmottaa rivin alussa oleva merkintä --rw-r--r-- 1+3+3+3 merkin ryhminä; esim. RMAIL-tiedoston osalta merkit pitäisi hahmottaa seuraavasti:
1.   2.     3.     4.  ryhmä
-    rw-    r--    r--       1 jkorpela users     169 Mar 30 11:09 RMAIL
Mainittujen merkkiryhmien merkitykset ovat seuraavat: Kussakin kolmen merkin ryhmässä ensimmäinen merkki voi olla r tai -, toinen w tai - ja kolmas x tai -. Niiden vaikutukset ovat seuraavat: Jos jonkin oikeuden kohdalla on kirjaimen r, w tai x asemesta viiva (-), kyseistä oikeutta ei ao. henkilöllä tai ryhmällä ole.

Otetaan esimerkiksi RMAIL-tiedosto:

-rw-r--r--   1 jkorpela users        169 Mar 30 11:09 RMAIL 
Ensimmäinen merkki on -, joten RMAIL on siis tiedosto eikä hakemisto. Toinen merkkien ryhmä on rw-, joka siis tarkoittaa, että tunnuksella jkorpela on luku- ja kirjoitusoikeus, mutta hän ei voi ajaa tiedostoa ohjelmana. Kolmas merkkiryhmä on r--, joka tarkoittaa sitä, että users-ryhmällä on lukuoikeus, mutta ei kirjoitus- tai ohjelman ajo-oikeutta. Neljäs ryhmä on r--, joka tarkoittaa, että muillakaan käyttäjillä ei ole muita oikeuksia kuin lukuoikeus.

Usein ryhmäjärjestelyjä ei käytetä, vaan kaikki käyttäjät kuuluvat samaan ryhmään. Silloin suojaus ryhmän suhteen on ratkaiseva, ja suojaus "kaikkien muiden" suhteen on syytä asettaa samaksi kuin ryhmän suhteen.

Hakemistojen suojaukset

Hakemistolla on muodollisesti samanlaiset suojaustiedot kuin tavallisella tiedostollakin, mutta niiden merkitykset ovat toisenlaiset: hakemiston suojauksissa

Tilanne on siis melko mutkikas. Huomaa erityisesti seuraavat seikat: Jos hakemistoon on vain r-oikeus, niin voit vain nähdä hakemiston tiedostojen nimet mutta et käsitellä (edes lukea) itse tiedostoja mitenkään. Jos taas hakemistoon on vain x-oikeus, voit käsitellä tiedostoja niiden omien suojausten sallimalla tavalla, mutta vain, jos tiedät tiedostojen nimet tarkasti; käytettävissäsihän ei tällöin ole ls-komentoa eikä tunnistusta.

Suojausten numerokoodit

Suojaukset voi esittää paitsi kirjaimilla myös numerokoodeilla seuraavasti:

Numerokoodien käyttö suojausten esittämisessä ei ole suositeltavaa. Joskus sen kanssa kuitenkin joutuu tekemisiin etenkin sen takia, että Unixin ilmoitukset saattavat viitata suojauksiin numerokoodein. Tällöin siis esim. koodi 751 tarkoittaa samaa kuin rwxr-x--x.

Oletussuojaukset

Hakemistojen ja tiedostojen oletusarvoiset suojaukset ovat erilaisia eri Unix-koneissa. Varsin tavallista on, että käyttäjillä on oletusarvoisesti lukuoikeudet toistensa hakemistoihin ja tiedostoihin, ja heidän siis täytyy itse suojata tiedostonsa, jos eivät halua niiden sisällön näkyvän muille.

Esimerkiksi jos oletussuojaus on sellainen, että käyttäjillä ei ole mitään oikeuksia toistensa kotihakemistoihin, mutta toisaalta tiedostojen oletussuojaus on sellainen, että muilla käyttäjillä on niihin luku- ja suoritusoikeus, niin muilla ei ole mitään oikeuksia tiedostoihisi, koska kotihakemistosi suojaus estää sen. Mutta toisaalta jos tällöin haluat antaa muille lukuoikeudet (tai suoritusoikeudet) joihinkin tiedostoihisi, sinun pitää antaa muille x-oikeus kotihakemistoosi ja muuttaa kaikkien muiden tiedostojesi suojaukset, jotta ne eivät myös tulisi kaikkien nähtäville.

Tilanne on selvin silloin, kun käyttäjillä ei oletusarvoisesti ole mitään oikeuksia muiden käyttäjien tiedostoihin. Tällöin riittää, että käyttäjä vain lisää muille oikeuksia siinä määrin kuin haluaa.

Suojausten muuttaminen: chmod

Tiedoston suojaus muutetaan chmod-komennolla. Nimi tulee sanoista change mode; suojauksia kutsutaan Unixissa yleisesti tiedoston moodiksi (mode).

Esimerkki chmod-komennosta:

chmod go+r foobar
Tämän komennon argumentit voidaan lukea seuraavasti: samaan ryhmään kuuluville (g, group) ja kaikille muille (o, others) lisätään (+) lukuoikeus (r, read) tiedostoon foobar.

Yleisesti chmod-komennossa ilmoitetaan tässä järjestyksessä

  1. kirjaimella tai kirjainyhdistelmällä, keiden oikeuksia muutos koskee:
  2. merkillä + tai -, halutaanko lisätä vai poistaa oikeuksia
  3. kirjaimilla (r, w, x), mitä oikeuksia muutos koskee
  4. tiedostonnimi tai lista tiedostonnimiä, jotka ilmoittavat, mitä tiedostoja muutos koskee.
chmod-komennolle siis kerrotaan vain, mikä muuttuu. Muilta osin suojautukset pysyvät ennallaan. Jos chmod-komennolla yritetään lisätä (+) oikeus, joka jo on olemassa, tai poistaa (-) oikeus, jota ei ole, mitään virheilmoitusta ei tule eikä mikään muutu tältä osin.

Korostettakoon, että chmod-komennolla voi muuttaa vain olemassaolevien tiedostojen suojauksia. Mikään chmod-komento ei vaikuta niiden tiedostojen suojauksiin, jotka luot komennon antamisen jälkeen, vaan niiden suojaukset määräytyvät oletusarvojen mukaan. On kyllä mahdollistaa muuttaa näitä oletusarvoja, joskin välineen eli umask-komennon oppimisessa on käsitteellisiä vaikeuksia. Kyseisessä komennossa (joka on shellin komento) ilmaistaan suojaukset numerokoodilla ja käänteisesti: esim. umask 022 aiheuttaa sen, että vastedes syntyviin tiedostoihin ryhmällä ja muilla ei ole koodia 2 vastaavaa oikeutta eli kirjoitusoikeutta. Komennon vaikutus on istuntokohtainen, joten jos se todella halutaan pysyväksi, se on kirjoitettava sopivaan alustustiedostoon.

Käyttäjä voi myös ottaa itseltään pois kirjoitusoikeudet johonkin tiedostoon, esim. chmod a-w tiedosto poistaa kaikilta, myös itseltä, kirjoitusoikeuden. Jotkut käyttävät tätä turvatoimena estääkseen itseään vahingossa hävittämästä tai muuttamasta jotakin tärkeää tiedostoa. Jos käyttäjä yrittää esim. hävittää näin suojatun tiedostonsa, tulee kysymys override protection 544 for foo? ja käyttäjä voi vastata y tai n sen mukaan, haluaako todella hävittää sen. (Tiedoston suojaus näkyy siis edellä esitetyllä tavalla numerokoodina.) Jos tiedostolle yrittää tehdä jotain muuta, niin toiminto epäonnistuu ja tulee virheilmoitus Permission denied. Käyttäjä voi tiedoston omistajana muuttaa näin suojatun tiedoston suojauksia ja sitten tehdä sille mitä haluaa.

Seuraavassa on pieni esimerkki. Käyttäjällä on tiedosto, jolla on sellainen suojaus, että kaikilla, myös käyttäjällä itsellään, on siihen vain lukuoikeus. Kun käyttäjä yrittää hävittää tiedoston, järjestelmä kysyy, halutaanko ohittaa (override) sen suojaus; kun tähän vastataan y, toiminto onnistuu. (Tässä ei tarkkaan ottaen ole kyse suojauksen suoranaisesta vaikutuksesta, koska periaatteessa hävitysoikeus riippuu sen hakemiston suojauksesta, jossa tiedosto on. Mutta käytännössä rm-komento tarkistaa lisäksi tiedoston suojauksen ja kysyy käyttäjältä varmistuksen.)

epsilon koe 51 % ls -l huuhaa
-r--r--r--   1 jkorpela staff          0 Feb 20 11:28 huuhaa
epsilon koe 52 % rm huuhaa
rm: override protection 444 for huuhaa? y
epsilon koe 53 % ls -l huuhaa
huuhaa not found
epsilon koe 54 %

Levytilan käyttö - df, du, quota

Tiedostot sijaitsevat käytännössä levyllä (disk). Samaan tietokoneeseen voidaan liittää useita levy-yksiköitä ja niillä olevia tiedostojärjestelmiä. Toisaalta asiat voidaan järjestää niin, että useat koneet käyttävät samoja levyjä. Yhä yleisemmin menetellään niin, että käytössä on erityisiä levy- eli tiedostopalvelimia (file server), jotka ovat erikoistarkoitukseen varattuja tietokoneita: tiedostopalvelin hallitsee suurta määrää levytilaa ja tarjoaa levypalveluita eri tietokoneille. Normaalisti käyttäjä ei juuri huomaa sitä, että hänen tiedostonsa ovat levypalvelimen hallitsemilla levyillä - paitsi jos palvelin tai tietoliikenneyhteys siihen ei toimi.

Vaikka nykyisissä tietokoneissa on käytettävissä suuri määrä levytilaa ja levy on suhteellisen halpaa, kyseessä on kuitenkin rajallinen resurssi. Koska suuri määrä käyttäjiä käyttää samoja levyjä, saattaa käydä niin, että yksi käyttäjä vahingossa (tai ilkivaltaisuuttaan) täyttää levytilan estäen siten muita tekemästä koneella juuri mitään. Tällaisten syiden takia monissa järjestelmissä on käytössä levytilan kiintiö (quota). Olipa kiintiöinti käytössä tai ei, käyttäjän on syytä silloin tällöin tarkistaa levytilan käyttönsä. Jotkin ohjelmat saattavat käyttäjän tietämättä luoda varsin isojakin tiedostoja, jotka ehkä jäävät tarpeettomasti kuluttamaan tilaa.

Komento df (disk free) tulostaa tietoja koko järjestelmän levytilan käytöstä. Koska koneissa on usein monia levyjä, komennolla voi saada pitkän listan, josta aloittelija ei välttämättä ymmärrä mitään. Tässä esimerkki df-komennon tulostuksesta eräässä koneessa:

vipunen ~ % df 
Filesystem    Total KB    free %used   iused %iused Mounted on
/dev/hd4         28672    7676   73%    1272    17% /
/dev/hd2        323584   54840   83%   17233    21% /usr
/dev/hd9var      20480    6544   68%     538    10% /var
/dev/hd3         20480   12640   38%     472     7% /tmp
/dev/lv03       131072    1544   98%    5077    15% /var2
/dev/lv01      2007040   19928   99%  183684    36% /u
/dev/lv02       950272   16948   98%   43544    18% /u1
/dev/lv00      1015808   89132   91%   59858    23% /m/vipunen/u2
/dev/fslv00     507904   35068   93%    3654     2% /m/vipunen/scratch
leka.hut.fi:/u/. 1982464   53844   97%   -       -    /m/leka/u
leka.hut.fi:/u1/.  851968   57660   93%   -       -    /m/leka/u1
leka.hut.fi:/u2/. 1982464  259092   86%   -       -    /m/leka/u2
leka.hut.fi:/usr/lpp/info/.  503808   72456  85%  - -  /m/leka/usr/lpp/info
Useimmiten eniten käyttöä on komennolle df ., joka kertoo levytilan käyttöasteesta juuri sillä levyllä, jossa työhakemistosi on. Esimerkki komennon df . tulostuksesta:
vipunen ~ % df  .
Filesystem    Total KB    free %used   iused %iused Mounted on
/dev/lv01      2007040   20276   98%  183685    36% /u
Tästä selviää, että levyn nimi on lv01 ja sille on sijoitettu /u-niminen hakemisto. Toisin sanoen kaikki /u-hakemiston alihakemistot (joihin kyseisen käyttäjän työhakemistokin kuuluu) ovat tällä fyysisellä levyllä. Levyn koko on tässä tapauksessa 2007040 kilotavua eli n. 2000 megatavua, josta on vapaana 20276 kilotavua eli noin 20 megatavua. Levystä on käytössä 98 %. Tällöin on aika lähellä se tilanne, jossa levy on aivan täynnä, jolloin kukaan käyttäjä ei voi perustaa uusia tiedostoja (eikä vanhojen tiedostojen uusia versioita) - siitä riippumatta, onko heidän oma levytilankäyttönsä heidän henkilökohtaisen kiintiönsä rajoissa. Ja tällöin olisi kaikkien käyttäjien syytä tarkistaa, onko heillä tarpeettomia isoja tiedostoja, joiden poistaminen parantaisi tilannetta.

Komennolla du (disk usage) taas voit seurata omaa levytilan käyttöäsi tai yleisemmin hakemistojen viemää tilaa. Komennolle annetaan argumenttina hakemiston nimi, ja komento tulostaa koko hakemiston (alihakemistot mukaan luettuina) levytilan käytön. Argumentin oletusarvona on työhakemisto. Jos siis työhakemistonasi on kotihakemisto, niin antamalla pelkän komennon du saat selville, paljonko tiedostosi kaikkineen vievät tilaa.

Levytilan mittayksiköt voivat olla erilaiset eri koneissa. Usein, mutta ei välttämättä, yksikkönä on edellä mainittu kilotavu. Joissakin koneissa du ilmoittaa levyn käytön varausblokkeina, jotka ovat puolen kilotavun (512 tavun) kokoisia. Kyseisissä koneissa saa du-komennon tulostamaan koon kilotavuina antamalla valitsimen -k (esim. du -k).

Usein kiintiöinti on sellainen, että kunkin käyttäjän levynkäytöllä on "pehmeä" ja "kova" kiintiö. Jos levytilankäyttösi ylittää "pehmeän" kiintiön, niin saat aina istunnon alussa ilmoituksen siitä, montako päivää sinulla on aikaa poistaa ylimenevä osa. Jos et poista ylimäärää, tietokonelupasi poistuu käytöstä ilmoitetun ajan umpeutuessa. Pehmeän rajan siis voi ylittää väliaikaisesti (muutamia päiviä). On olemassa myös "pehmeää" kiintiötä korkeampi "kova" kiintiö, jota ei voi hetkellisestikään ylittää: kun "kova" kiintiö on täynnä, kaikki tiedostojen perustamis- tai päivittämisyritykset epäonnistuvat, kunnes käyttäjä on poistanut tiedostoja tarpeellisessa määrin. - Perustellusta syystä käyttäjä voi ehkä saada lisäkiintiötä.

Kiintiöiden rajoissa pysymistä on helppo seurata: komennolla quota näet, oletko ylittänyt kiintiön. Tarkemmin sanoen quota ei tulosta mitään, jos olet "pehmeän" kiintiön alapuolella. Muussa tapauksessa se kertoo tilanteen: käytössäsi olevan levytilan määrän (sarakkeessa usage) "pehmeän" kiintiön (sarakkeessa quota) ja "kovan" kiintiön (sarakkeessa limit. Voit myös seurata levynkäyttöäsi siten, että annat quota-komennossa valitsimen -v, siis quota -v. Tällöin komento aina tulostaa tiedot tilanteesta, vaikka olisit "pehmeän" kiintiön rajoissa. Tulostus voisi olla seuraavanlainen:

Filesystem     usage   quota  limit    timeleft  files  quota  limit   timeleft
/m/fs/user0     3998    8192  15360                194   5000  10000
Tässä tapauksessa tilaa on melko paljon käytössä, mutta ollaan vielä selvästi pehmeän kiintiön alapuolella. Lopussa oleva sarake files ja sitä seuraavat sarakkeet liittyvät tiedostojen määrään, joka myös on kiintiöity, mutta näillä kiintiöillä on merkitystä erittäin harvoin.

Tiedostojen etsiminen: locate, find

Jos tiedät tai epäilet, että tietynniminen tiedosto on koneessa olemassa jossakin, voit etsiä sitä locate- tai find-komennolla. Näistä find on yleensä kaikista Unixeista löytyvä, locate taas Gnu-ohjelmistoa eikä siis välttämättä kaikkialle asennettu mutta huomattavasti nopeampi.

locate-komennosta on lyhyt ja ytimekäs man-sivu. Yksinkertaisimmillaan sitä käytetään yksinkertaisesti seuraavaan tapaan: locate f90 etsii koko tiedostojärjestelmästä tiedostonnimiä, joissa esiintyy merkkijono f90, ja tulostaa ne. Tulostus on usein hyvin laaja. Etsintä perustuu siihen, että järjestelmä aika ajoin luo tietokannan, johon se kokoaa tiedostojen nimet. Tämän takia haku on varsin nopea.

find-komento on siis hitaampi, ja sen käyttö tulee kyseeseen toisaalta niissä koneissa, joissa ei ole locate-komentoa, toisaalta etsittäessä tiedostoja joistakin nimenomaisista hakemistoista. Käyttöesimerkki:
find . -name 'posts*' -print
etsii työhakemistosta ja sen alihakemistoista (ja niiden alihakemistoista jne.) ne tiedostot, joiden varsinainen nimi alkaa merkkijonolla posts, ja tulostaa niiden täydelliset nimet kuvaruudulle. Käyttö on siis hiukan mutkikkaampaa kuin locate-komennon käyttö.

Liitteet

Oppaan historia ja muuta selittelyä

Tämän oppaan varhainen edeltäjä oli TKK:n atk-keskuksen Unix-alkeisopas, jota kehittelemässä oli varsin monia ihmisiä, joista on syytä erikseen mainita Päivi Hyvärinen ja Sanna Suominen. Sitä laajentamalla minä (Jukka Korpela), pyrkien noudattamaan oman oppaani Kirjoita asiaa oppeja, kehittelin Unix-oppaan.

Kun TKK oli irtisanonut työsuhteeni tammikuussa 2001 ja saman tien estänyt minulta TKK:n tietokoneiden käytön, jouduin miettimään, mitä tehdä erilaisille Web-sivuilleni. Minusta riippumattomista syistä Unix-opasta ei ollut pitkähköön aikaa julkaistu painettuna vihkosena, ja osittain tämän takia sen Web-version kunnossapito oli jäänyt vähälle. Toisaalta oppaan sisältö on pääosin sellainen, että sen ei pitäisi kovin aktiivista ylläpitoa tarvitakaan. Päätin sitten (toukokuussa 2001) muokata oppaasta suunnilleen minimimuutoksin yleisen Unix-oppaan, jossa ei ole enää TKK:hon erityisesti liittyviä seikkoja ja josta on poistettu tai korjattu selvästi vanhentuneet kohdat (esimerkiksi muinaisen Mosaic-selaimen lyhyt kuvaus!), ja panna sen uuteen Web-sivustooni.

Osassa esimerkeistä esiintyy edelleen TKK:n tietokoneiden käyttöä. Näitä en ole pitänyt tarpeellisena muuttaa vain muuttamisen vuoksi, koska kyse on kuitenkin vain esimerkeistä.

Käsitykseni mukaan tekijänoikeus oppaaseen on minulla. TKK:lla olisi käyttöoikeus niihin versioihin, jotka olen laatinut työsuhteessa ollessani. (Ks. tarkemmin tekijänoikeusfakkiani, erityisesti kohtaa Kenellä on oikeus työ- tai virkasuhteessa tehtyyn teokseen?) Kuten edellä mainitsin, monet ihmiset ovat eri tavoin vaikuttaneet oppaan muotoutumiseen, mutta tekijänoikeus on sillä, joka on luonut teoksen johonkin kirjalliseen asuun.

Eräiden termien valinnoista ks. dokumenttia Perusteluja termeille netti, nyysit yms.

Atk-alan oppaissa ja opetuksessa yksi ikuisuuskysymys on, esitetäänkö ensin käyttöjärjestelmään liittyviä asioita vai sovelluksia. Yleisten asioiden järjestelmällinen esittäminen muodostaa hyvän pohjan sovellusten käytön opettelulle mutta voi aiheuttaa vaikeitakin motivaatio-ongelmia. Tässä oppaassa on pääosin noudatettu Unix-alkeisoppaassa omaksuttua linjaa: aluksi kerrotaan yhteydenotosta Unix-tietokoneeseen ja sitten mennään sovelluksiin, ja niiden jälkeen kerrotaan "itse Unixista" kuten tiedostojärjestelmästä. Näitä kaikkia ennen on kuitenkin lisätty lyhyt johdanto Unixiin jonkinlaiseksi orientaatioperustaksi. Tämä jäsennys on tehty ajatellen erityisesti sellaisia käyttäjiä, joilla on vain vähän tai ei ollenkaan aiempaa tietoa ja kokemusta Unixista.

Mistä löydän lisätietoja Unixista

Webissä on mm. seuraavat varsin laajat Unixia käsittelevät tietopaketit:

Suomenkielisestä peruskäyttäjille tarkoitetusta Unix-aineistosta Webissä mainittakoon seuraavat:

Lähinnä Fortran- tai C-kielisten ohjelmien kääntämistä ja ajamista sekä yksinkertaisten komentotiedostojen tekemistä Unix-koneissa käsittelee edellä mainittu opas Ohjelmointi Unixissa.

Kokeneemmalle käyttäjälle on tarjolla mm.

Linuxia, joka eräs suosittu Unix PC-mikroille, kuvaa Linux-kotisivu.

Unixista on kirjoitettu varsin paljon kirjoja. Niiden joukosta tuskin voidaan poimia parasta, koska eri lukijat tarvitsevat hyvin erilaisia tietoja. Kannattaa ottaa huomioon, että maailman kaikki Unixit eivät suinkaan ole samanlaisia ja että kirjoissa ei välttämättä tuoda esiin, että sen tiedot eivät päde niihin kaikkiin.

Ohjeita salasanan valinnasta

Salasana kannattaa rakentaa sellaiseksi, että se on itselle helppo muistaa mutta kenenkään muun mahdoton arvata. Salasanassa pitää olla tarpeeksi merkkejä, vähintään kuusi. Salasanasta vain kahdeksan ensimmäistä merkkiä ovat merkitseviä, mutta se ei toki estä muodostamasta pitempiä, jos ne ovat sinulle helpompia muistaa. Salasanassa on syytä olla muitakin merkkejä kuin kirjaimia. On syytä muistaa, että isot ja pienet kirjaimet ovat Unixissa eri merkkejä myös salasanoissa.

Seuraavassa on muutamia esimerkkejä hyvistä tavoista muodostaa salasanoja:

Tietenkään ei pidä käyttää edellä mainittuja konkreettisia merkkijonoja salasanoina!

Erityisesti salasana ei saa olla esim.

Myöskään edellä mainitun laisten sanojen pinnallinen muuntelu esim. lisäämällä vain yksi merkki alkuun tai loppuun tai kirjoittamalla sana lopusta alkuun ei auta. On olemassa ohjelmia, joilla voidaan suhteellisen tehokkaasti murtautua tietokoneisiin kokeilemalla esim. isoista sanastoista poimittuja sanoja sellaisinaan tai muunneltuina salasanoiksi. Sellaiset murtoyritykset ovat laittomia, mutta niitä tehdään.

Monissa järjestelmissä salasanan asettaminen on tehty sellaiseksi, että salasanan pitää täyttää jotkin laatuvaatimukset, joilla pyritään estämään liian helposti arvattavien salasanojen käyttö.

Pika-apu pääteongelmiin

Päätteen käytössä esiintyy lukemattomia erilaisia ongelmia, joista suuri osa riippuu siitä, millainen pääte on käytössä. Seuraava ohjeisto on erittäin kaukana kattavasta, mutta niistä voi olla hyötyä joissakin tapauksissa. Osa vinkeistä on kyllä vanhoja, ehkä vain historiallisia näppäimistöjä koskevia.

DEL-näppäimen löytäminen

DEL-näppäin, jolla poistetaan viimeksi kirjoitettu merkki, on eri näppäimistöissä erilainen. Siinä voi olla teksti DEL tai teksti DELETE tai vain vasemmalle osoittava nuoli. (Tätä ei pidä sekoita nuolinäppäimiin, jotka ovat yhdessä neljän nuolinäppäimen ryhmässä.)

DEL-näppäimen asemesta voi komentoja kirjoitettaessa käyttää kontrollimerkkiä control-h.

Merkin ~ löytäminen

Merkin ~ (tilde, arkikielessä usein "mato") tuottaminen näppäimistöltä voi tuottaa vaikeuksia. Joissakin näppäimistöissä se lähtee näppäimestä, jonka näppäinhatussa on saksalainen ü. Tällöin merkki ~ saattaa myös päätteen ruudulla näyttää sellaiselta, mutta Unix silti tulkitsee sen oikein, tildeksi.

Tavallisessa ns. PC-näppäimistössä tilde lähtee Alt-näppäimen avulla näppäimeistä, jonka hatussa on symbolit ¨~^ ja joka on ns. kuollut näppäin (dead key): sen painamisesta ei vielä seuraa mitään - ei tule mitään merkkiä näkyviin eikä mitään merkkiä tule näkyviin. Tällöin auttaa se, että tilden kirjoittamisen jälkeen painetaan välilyöntinäppäintä. Mainitunlaisessa näppäimistössä on muitakin erikoisuuksia; ks. ohjetta Erikoismerkkien kirjoittaminen suomalaisella PC-näppäimistöllä.

Merkin @ löytäminen

Jos mistään näppäinhatusta ei löydy ät-merkkiä (@) tai se ei suostu tulemaan siitä näppäimestä, missä se lukee, kannattaa kokeilla seuraavaa:

Näpäytetään function- tai compose character -näppäintä kerran. (Huomaa, että kyseessä on näpäytettävä näppäin, ei alhaalla pidettävä näppäin kuten shift- tai control-näppäin!) Tämä näppäin löytyy - jos päätteessä sellainen on - päätteistä yleensä välilyöntinäppäimen vasemmalta puolelta. Tämän jälkeen (ei siis samanaikaisesti) näpäytetään a-näppäintä kahdesti. @-merkin pitäisi ilmestyä näytölle.

Jos käytät Macintosh-mikroa päätteenä, @-merkin pitäisi löytyä alt-näppäimen avulla siitä näppäimestä, josta saadaan ' ja * (return-näppäimen yläpuolelta).

Monilla X-päätteillä @-merkki saadaan shift-näppäimen avulla siitä näppäimestä, jossa näkyy pykälänmerkki §. Tektronixin X-päätteistä @-merkki saadaan Alt Gr -näppäimen avulla siitä näppäimestä, jonka näppäinhatussa on @-merkki.

Merkin # löytäminen

Jos näppäimistölle ei ole merkitty #-merkkiä (ristikkomerkki, arkikielessä usein "risuaita") tai se ei suostu tulemaan siitä näppäimestä, missä se lukee, kannattaa kokeilla seuraavaa:

Näpäytetään function- tai compose character -näppäintä kerran. Tämä näppäin löytyy päätteistä yleensä välilyöntinäppäimen vasemmalta puolelta. Tämän jälkeen (ei samanaikaisesti) painetaan +-näppäintä kahdesti. #-merkin pitäisi ilmestyä näytölle.

Nuolinäppäimet

Nuolinäppäimillä tarkoitetaan neljää toisiaan lähekkäin olevaa näppäintä, joissa on nuolet ylös, alas, vasemmalle ja oikealle. Yleensä ne ovat tavallisten kirjainnäppäinten oikealla puolella.

Jos näppäimistöstä ei löydy nuolinäppäimiä tai jos ne jostain syystä eivät toimi, niin useissa yhteyksissä (esim. Emacsissa ja komentojen editoinnissa) voi käyttää vaihtoehtoista tapaa eli kontrollimerkkejä:

Päätteen jumiutuminen

Jos pääte jostakin syystä jumiutuu eikä tunnu enää vastaavan näppäimistöltä annettuihin komentoihin, on olemassa hyvin monia mahdollisia syitä, ja ongelman ratkaisu tietysti riippuu syystä. Joskus syy on niinkin yksinkertainen kuin se, että päätteestä lähtevän johdon liitin on irronnut tai löystynyt.

Jumiutumistilanteessa voi kokeilla control-q:ta, joka on päätteen merkkivirran vapauttava kontrollimerkki. Jos tämä auttaa ongelmaan, pääte oli aiemmin reagoinut control-s:ään, joka yleensä tarkoittaa, että päätteen pitää pysäyttää ruudulle tulostaminen. (Tätä kutsutaan nimellä XON/XOFF flow control.) Jos control-q auttoi, niin jatkossa Emacs-editorin käyttö käy hankalaksi mm. siksi, että Emacsin normaali talletuskomento on control-x control-s. Täkköin ongelman voi kiertää käyttämällä Emacsin vaihtoehtoista talletuskomentoa control-x s. Tällöin tosin Emacs aina kysyy erikseen, halutaanko tosiaan tallettaa ja kysymykseen pitää vastata y (yes), mutta se on pieni haitta päätteen täydelliseen jumiutumiseen verrattuna.

Jumiutumisen syynä voi olla myös se, että jonkin komennon tai ohjelman suoritus kestää erittäin kauan - kenties ohjelma jopa on ikuisessa silmukassa. Tällöin voi yrittää katkaista toiminnan control-c:llä. Jos sekään ei auta, voit vielä yrittää "tappaa" sen kill-komennolla.

Kuvaruutu sekaisin

Jos päätteen ruutu menee sekaisin ja merkkejä tulostuu toinen toistensa päälle tai näyttö on muuten omituisen näköinen, näytön voi siivota (clear screen) control-l:llä. Tämä toimii yhtä hyvin komentotasolla kuin esim. Emacsin tai Pinen sisälläkin. Se pyyhkii ensin näytön puhtaaksi ja piirtää sitten näytön uudelleen eli näyttää sen, mikä oli näytön todellinen, häiriötön sisältö ennen ko. komentoa.