
Ymmärtämisen kautta tehokäyttöön
UNIXIN TEHOKÄYTTÖ
Shell, komentotulkki
Shelli on se ohjelma, jonka kautta käyttäjä käynnistää muita ohjelmia. Tässä mielessä se on lähellä DOSsin COMMAND.COMia. Unixin komentotulkit ovat kuitenkin paljon laajempia ja niissä on paljon käteviä ominaisuuksia.
Shelli on vain yksi ohjelma muiden joukossa Unixissa, ei mitenkään erikoinen osa käyttöjärjestelmää, joten yleensä kukin käyttäjä voi itse valita sen komentotulkin, mitä haluaa käyttää.
Tässä materiaalissa käytetään esimerkkinä bash -shelliä, joka on GNU-projektin /bin/sh -tyylinen komentotulkki. Linux-koneissa yleensä käytetään bashiä.
Muita komentotulkkeja on mm. C-shell -perhe (csh, tcsh) jotka poikkeavat hieman enemmän /bin/sh -tyyppisistä shelleistä. Muita /bin/sh -perheeseen kuuluvia shellejä on mm. ksh (korn shell), zsh (Z shell), ...Shellin toiminta
Unix-komennot ovat yleensä muotoa komento -optioita tiedostoja... . Optiot voidaan antaa eri muodoissa, yleensä ne ovat yksikirjaimisia ja niitä voi yhdistellä yhden - -merkin taakse. Joissakin ohjelmissa on kuitenkin erilainen käytäntö historiallisista syistä (tar, tail, dd).
-a -b -ab -ba --pitkäoptio (GNU-ohjelmat, Linux) -a 100 -a100 -ba100
Seuraavassa käydään läpi miten shell käsittelee sille annettuja komentoja.Komennon lukeminen
Unixissa shellin tehtävä on lukea käyttäjältä (tai komentotiedostosta, shell-scriptistä) komentoja, katsoa mitä komentorivillä on kerrotty ja suorittaa haluttu komento halutulla tavalla.Tiedostonimien laajennus
Jos käytetään tiedostonimissä villikortteja (wildcards), shelli laajentaa ne ennen komennon suorittamista listaksi tiedostojen nimiä.
Unixin tiedostonimien wildcardit ovat perusmuodossaan * (mitä tahansa merkkejä) ? (mikä tahansa yksi merkki) [a-z] (jokin annetuista merkeistä).
Kotihakemistoihin voidaan viitata ~tunnari muodossa. Tämä laajenee ko. käyttäjän kotihakemiston nimeksi. Kotihakemistot on mainittu /etc/passwd-tiedostossa muiden käyttäjien tietojen ohella.
Huomaa, että unixissa piste (.) on vain merkki muiden joukossa tiedostojen nimissä (ellei tiedoston nimi ala pisteellä). Tässä Unix toimii toisin kuin DOS, joka on muutenkin paljon yksinkertaisempi tässä mielessä (* -> ????????).
DOSissa tarvitset *.* jos haluat kaikki tiedostot (entä tiedostot ilman tarkennetta?). Unixissa * tarkoittaa kaikkia tiedostoja (paitsi pisteellä alkavia), *.* tarkoittaa tiedostoja joiden nimessä on ainakin yksi piste.Lainausmerkit
Komentotulkissa voidaan estää tiedostonimien ja muuttujien käsittely komentorivillä "quottaamalla" haluttu teksti.Yllämainitut lainaukset pitävät myös niiden sisällä olevan tekstin yhtenä argumenttina. Allaoleva lainaus ja tavallinen tapaus on, että syöte jaetaan sanoiksi ja joka sanasta tulee oma argumenttinsa.
- 'yksinkertainen lainaus'
- Estää tiedostonimien ja muuttujien laajennukset, eli teksti menee sellaisenaan komennolle.
- "tavalliset lainausmerkit"
- Estää tiedostonimien laajennuksen, mutta muuttujat käsitellään. Jos käytät tiedostonimiä muuttujissa, pitäisi ne aina laajentaa "$FILE" muodossa, jos tiedoston nimessä on välilyöntejä tms.
- `komento`
- Suorittaa annetun komennon ja käyttää sen tulostaman tekstin komentorivin osana.
Syötteen ja tulostuksen uudelleenohjaus
Shellin tehtävänä on myös hallita ohjelmien syöttö- ja tulostuskanavia (standard input < , output > >> , error 2> 2>> ).
Huomaa, että komentotulkki hoitaa tämän Unixissa, eikä komentojen itsensä tarvitse tietää mistä tiedot tulevat tai minne ne menevät.
Yleensä komennot toimivat niin, että jos tiedoston nimiä on annettu, komento lukee tiedot ko. tiedostoista. Ellei tiedoston nimiä anneta, komento lukee tiedot standard inputista.
Tulostus menee aina standard outputtiin, ja virheilmoitukset standard erroriin (yleensä käyttäjän pääte).



Usein halutaan jättää komennon tulostus tai virheet kokonaan huomiotta. Tällöin ne voidaan ohjata "laitteeseen" /dev/null joka vain syö kaiken tekstin. Haluttaessa tyhjä syöte (ei dataa), voidaan myös syöte ohjata devnullista.

Shell sallii myös komentojen ketjuttamisen piipuilla | ja komentojen ajamisen taustalle (eli niin, ettei odoteta komennon loppumista) & .
Näissä tapauksissa komennot ajetaan yhtäaikaa, ja niiden stdin ja stdout kytketään sopivasti toisiinsa. Tietomäärä voi siis olla suurikin, toisin kuin esim. DOSissa, jossa piippu käyttää väliaikaistiedostoa kludgeja.

Taustalla voi ajaa helposti kauan kestäviä operaatioita, joiden tulos menee esim. tiedostoon, vaikkapa grep haa * > /tmp/haaloytyi &
Komentoja voi myös ryhmitellä, esim. (who; date) | sort .Job control
Komennon voi pysäyttää painamalla ^Z . Pysäytetyt ja taustalla olevat komennot näkee jobs komennolla. Komennon voi antaa jatkaa taustalla bg %N tai nostaa sen taas etualalle fg %N
Tämä on joskus kätevää, jos on esim. editoimassa tiedostoa ja välillä haluaa ajaa jonkin toisen komennon tms.Muita shellin ominaisuuksia
Nykyaikaisissa shelleissä on myös muita interaktiivista käyttöä helpottavia ominaisuuksia, kuten komentorivin editointi (yleensä Emacs-tyylisesti), komentohistoria, tiedostonimien laajennus (tab), yms erittäin käteviä ominaisuuksia interaktiivisessa käytössä.