Peruskäsitteitä ja historiaa

Linuxin komentotulkki on etenkin kännyköihin ja webiin tottuneelle ihmiselle ensi alkuun aika eksoottinen kokemus.

Linux ≠ komentotulkki

On hyvä heti alkuun tehdä selväksi, että Linux ei ole pelkästään terminaalissa pyörivä komentotulkki, eikä toisaalta terminaalissa pyörivä komentotulkki ole mitenkään Linuxin erityispiirre. Jos taskussasi on Android-kännykkä, kaikki siinä pyörii Linuxin päällä. Kun selailet webiä, haet verkkosivuja palvelimilta, jotka useimmiten ajavat Linuxia. Ja toisaalta Windows-koneessakin voit käynnistää terminaalin, jossa ajat Windowsin omaa komentotulkkia.

Linuxissa terminaali ja komentotulkki ovat kuitenkin poikkeuksellisen hyödyllisiä välineitä. Linux-konetta voi parhaiten käyttää tehokkaana työkaluna, jos osaat tarvittaessa sujuvasti käyttää myös komentotulkkia. Näemme tämän kurssin muissa moduuleissa paljon lisää esimerkkejä Linuxin komentotulkin käytöstä — esimerkiksi data-moduulissa analysoimme hyvin isoja tietomassoja muutaman näppärän komennon avulla. Tekstimuotoiset komennot ovat hyvin ilmaisuvoimaisia, ja rutiiniasioita on helppo automatisoida ja toistaa. Yksinkertaisimmillaan voit painaa nuolta ylös ja enteriä ja saat kaivettua komentotulkin historiasta mahdollisesti mutkikkaankin toimintosarjan ja toistettua sen muutamalla näppäimellä.

Käytännössä ihmiset käyttävät rinnakkain sekä komentotulkkia että erilaisia hiukan nykyaikaisempia graafisia ohjelmistoja. Moni esimerkiksi ohjelmoi niin, että koodia kirjoitetaan VS Coden kaltaisella graafisella kehitysympäristöllä, mutta rinnalla on koko ajan komentotulkki, jossa voi nopeasti kokeilla esimerkiksi ohjelman ajamista erilaisilla syötteillä.

Pääte

Moni asia avautuu paremmin, kun tuntee hiukan Unix-tyylisten järjestelmien ja niiden edeltäjien varhaishistoriaa. Pääte tarkoitti laitetta, jolla tietokoneen käyttäjä pystyi antamaan tietokoneelle komentoja ja näki näiden komentojen tuottaman tulosteen. Joskus 1960-luvulla tämä oli usein sähkökirjoituskoneen kaltainen laite: näppäimistöllä sai syötettyä komentoja tietokoneelle ja tietokoneen tuottama vastaus tulostui paperille. 1970-luvulla tällaisten sähkömekaanisten laitteiden tilalle alkoi tulla päätteitä, joissa tulostimen tilalla oli kuvaruutu, mutta nämä tietysti yrittivät parhaansa mukaan olla yhteensopivia paperille tulostavien päätteiden kanssa: kun ruutu tulee täyteen tekstiä, uusia rivejä lisätään ruudun alaosaan ja vanhoja rivejä vieritetään ylöspäin. Koko toimintalogiikka perustuu siihen, että ruudulla on "kursori", joka vastaa kohtaa, johon tulostin tulostaisi seuraavan merkkinsä, ja esimerkiksi yhden merkin tulostaminen siirtää kursoria automaattisesti eteenpäin ja rivinvaihto taas vie kursorin uuden rivin alkuun.

Vähitellen kuvaruudulla varustettuja päätteitä alettiin hyödyntää paremmin: päätteet ymmärsivät erilaisia ohjauskomentoja, joilla esimerkiksi kursoria voi siirtää vapaammin ympäri ruutua. Näin pystyttiin tekemään merkkipohjaisia tietokoneohjelmia, joissa koko ruutua saatiin vapaasti hyödynnettyä. Vähitellen mukaan tuli myös mahdollisuus korostaa tekstiä eri tavoin. 1970-luvun lopulla markkinoille tulleen VT100-päätteen käyttäjä saattoin nauttia esimerkiksi hienouksista, joita seuraavassa tehtävässä kokeilemme:

Anna seuraava komento (huolellisesti, tarkalleen näin kirjoitettuna!):

printf '\e[7mLapio\e[m\nLapio\n'

Mitä tulostuu (valitse lähinnä oikeaa oleva vaihtoehto)?

Lopulta päätteisiin tuli myös värit. Eri valmistajien päätteet tukivat vähän eri ohjauskoodeja, mutta hiljalleen ainakin tavallisimmista ohjauskoodeista päästiin jonkinasteiseen yhteisymmärrykseen.

Kertauksena: pääte siis oli fyysinen aparaatti, joka oli kaapelilla kytketty tietokoneeseen. Siinä oli näppäimistö ja näyttö. Näppäimistöltä syötettiin komentoja tietokoneelle ja pääte taas tulkitsi tietokoneelta tulevaa tekstiä ja näytti sen ruudulla.

Pääteohjelma

Nyt lopulta voimme ymmärtää, mikä on pääteohjelma eli pääte-emulaattori (terminal emulator): se on yksinkertaisesti tietokoneohjelma, joka matkii päätettä. Edessäsi oleva pääteohjelman ikkuna yrittää siis parhaansa mukaan käyttäytyä samaan tapaan kuin vanhanaikainen fyysinen pääte. Se lähettää näppäinkomennot tietokoneelle ja tulkitsee tietokoneelta tulevaa tekstiä ja näyttää sitä ruudulla. Pääteohjelma tukee erilaisia ohjauskomentoja esimerkiksi tekstin muotoiluun (kuten edellä näimme!), mutta oletuksena se toimii pitkälle samaan tapaan kuin 1960-luvun paperille tulostavat päätteet: mitä ikinä komento tulostaakaan, pääteohjelma näyttää sitä ruudulla rivi kerrallaan, ja ruutua vieritetään samaan tapaan kuin tulostin siirtyisi paperilla seuraavalle riville.

Unix jälkeläisineen syntyi maailmaan, jossa päätteet olivat normaali tapa kommunikoida tietokoneen kanssa. Vielä 1990-luvulla meillä Otaniemessäkin oli käytävillä "pystypäätteitä"; nämä olivat pikkuruisia seisomatyöpisteitä, joista löytyi koulun yleiskäyttöiseen Unix-keskuskoneeseen kytketty pääte. Teekkarit kävivät luentotauolla päätteellä kirjautumassa koulun koneelle ja esimerkiksi tarkastamassa sähköpostit.

Avoimen lähdekoodin Linux-käyttöjärjestelmä sai alkunsa Helsingin yliopistolla 1990-luvun alussa ja se peri kaupallisista Unix-järjestelmistä niiden keskeiset toimintaperiaatteet. Niinpä me tälläkin kurssilla käytämme Linuxia etupäässä pääteohjelman avulla.

Komentotulkki

Päätteen ja pääteohjelman kautta voi periaatteessa käyttää mitä tahansa Linux-ohjelmaa, mutta käytännössä nykyään Linux on konfiguroitu niin, että kun käynnistät pääteohjelman, samalla käynnistyy komentotulkki. Pääteohjelmalta tuleva syöte menee komentotulkille ja komentotulkin tuloste näkyy pääteohjelmalla. Komentotulkin avulla voi sitten käynnistää edelleen muita komentoja ja usein komentotulkin lopettaminen (esim. exit-komennolla) myös sulkee pääteohjelman.

Tärkeää on hahmottaa pääteohjelma ja komentotulkki kahdeksi erilliseksi asiaksi (jotka voivat jopa olla fyysisesti eri koneilla). Pääteohjelman tehtävänä on tarjota mahdollisuus syöttää tietoa näppäimistöltä ohjelmille ja katsella ohjelmien tulostetta ruudulla. Komentotulkki taas on yksi ohjelma muiden joukossa; sen avulla voi esimerkiksi käynnistää muita ohjelmia kirjoittamalla niiden nimiä komentokehotteeseen.

Katsotaan nyt seuraavaksi tarkemmin ohjelmien ajamista ja yleensäkin ohjelman käsitettä Linuxissa…

Palautusta lähetetään...