Osa 1 - Komentorivi
Tästä alkaa ensimmäisen osan materiaali. Ensimmäisen osan keskeisin tavoite on tutustua komentoriviin Unix-tyyppisessä ympäristössä.
Tämän osan oppimistavoitteet
Tämän osan tavoitteina on, että opiskelija
- Ymmärtää graafisen ja tekstikäyttöliittymän erot.
- Osaa navigoida tiedostohallinnassa komentorivillä.
- ls ja vivut -a ja -l
- cd
- mkdir
- Osaa luoda ja avata, tallentaa ja sulkea tiedoston jollain komentorivin tekstieditorilla.
- nano
- vim
- Osaa käyttää suhteellisia ja absoluuttisia polkuja viittaamaan tiedostoihin ja kansioihin.
- Ymmärtää kotihakemiston ja juurihakemiston eron.
- Osa kopioida ja leikata tiedostoja ja kansioita komentoriviltä
- Osaa antaa useita tiedostoja komentoriville argumenttina *-villikortin avulla
- Osaa käsitellä tekstiä komentorivillä
- cat
- tail ja head, myös n-vivun kanssa
- grep
- Tulosteen käsittely
- Putki |
- > ja >>
- Osaa luoda SSH-avainparin, sekä muodostaa SSH-yhteyden toiseen järjestelmään.
- Osaa hakea internetistä sisältöä komentorivillä
- Wget
- Osaa lukea komennon ls -l tulostusta.
- Osaa muokata tiedoston ja kansion oikeuksia.
- chmod
- Osaa kirjoittaa yksinkertaisen bash-skriptin ja ajaa sen.
- Ymmärtää sudo-komennon merkityksen ja vaarat.
- Osaa hakea tietoa komentorivityökalujen käytöstä internetistä.
Komentorivi
Tietokoneet ovat erottamaton osa nyky-yhteiskuntaa, ja jokainen tulee melko varmasti päivittäin käyttäneeksi useampaa erilaista ja eri kokoista tietokonetta. Tietokone on myös tietojenkäsittelytieteilijän tärkein työkalu.
Olet luultavasti varsin tottunut käyttämään tietokoneita tietyllä tavalla. Esimerkiksi tiedostojen etsiminen ja tarkasteleminen on melko varmasti mielestäsi helppoa: Osaat siirtyä kansioon kaksoisklikkaamalla sitä, avata tiedoston sopivalla ohjelmalla tai klikata tiedostoa oikealla näppäimellä ja valita vaihtoehdoista “poista” tuhotaksesi sen.
Edellä mainitussa tapauksessa kyseessä on graafinen käyttöliittymä: Toimintovaihtoehdot esitetään jonkinlaisessa valikossa, ja valinnat tehdään klikkailemalla. Tiedostoja ja kansioita voi esimerkiksi myös vain raahata haluttuihin paikkoihin. Komentorivi, eli terminaali sen sijaan on tekstikäyttöliittymä. Tällöin tietokoneelle annetaan käskyjä kirjoittamalla, komentojen ja näppäinyhdistelmien avulla. Vaihtoehtoja ei esitetä samalla tavalla, eikä hiirtä käytetä juuri ollenkaan.
Aikaisemmin tekstikäyttöliittymä oli ainoa mahdollisuus hallinnoida konetta. Vaikka nykyään graafiset käyttöliittymät ovat yleisiä ja toimivia, komentorivi on koodareille edelleen erittäin tärkeä työkalu. Monille koodareiden käyttämille ohjelmille ei ole edes olemassa graafista käyttöliittymää, vaan niitä käytetään pelkästään komentoriviltä.
Aloitetaan avaamalla komentorivi. Ubuntussa ja useissa Linux-käyttöjärjestelmissä voit tehdä sen painamalla CTRL + ALT + T
. MacOS:issa kirjoita Spotlightiin (⌘ + Välilyönti
) “terminal” ja paina Enter. Voit myös etsiä tietokoneen sovelluksista sanalla “terminal”. Eteesi tulisi joka tapauksessa avautua musta laatikko, jossa vilkkuu kursori ja lukee jotain seuraavanlaista (esimerkki on Linux-koneesta, macOSissa terminaali on hieman erinäköinen)
tunnus@tietokone:~$
@
-merkin edessä oleva teksti on käyttäjänimesi tietokoneella, ja sen jälkeen, ennen kaksoispistettä näkyvä teksti on tietokoneen nimi. Suoritettavan komennon voi kirjoittaa kursorin osoittamaan kohtaan, ja ajaa painamalla ENTER.
Yllä näkyy macOSin ja Ubuntun oletus-terminaalit.
Komennot
Tekstikäyttöliittymät toimivat komentoperusteisesti. Komento tarkoittaa kirjoitettua käskyä: komennolla tietokone saadaan tekemään jotain.
Itse komento määrittää, minkä operaation koneen halutaan suorittavan. Se voi olla tiedoston kopiointia, yhteyden ottamista, tai tietyn ohjelman ajamista. Vipu, englanniksi option tai flag, tarkoittaa komennolle annettavaa parametria, jonka avulla komennon toiminnalle voidaan määrittää ylimääräisiä asetuksia. Joillekin vivuille tulee antaa parametreja, toisille ei. Komento tai ohjelma itse määrittää, minkälaisia vipuja sille on mahdollista antaa. Vipu annetaan komennolle käyttäen väliviivaa (-).
Argumentti taas on käyttäjän vapaasti määrittelemä arvo, esimerkiksi tiedoston nimi. Argumentti on usein komennon toiminnan kohde.
Seuraavassa on esimerkki komennosta, jonka toimintaa on muutettu vipujen avulla:
ls -la Downloads/tiedosto
Kokeile ensin ajaa pelkkä komento ls
, sitten ls -la
ja lopulta ls -la ~/Downloads
. Ei tarvitse vielä ymmärtää, mitä tulostus tarkoittaa, tärkeintä on huomata, että tulostus on erilainen joka kerralla.
ls
on yleisesti käytetty komento, johon tutustumme tässä osassa. Oletuksena se näyttää nykyisen kansion tiedostojen nimet. Vivut -a
ja -l
(huomaa, miten kaksi vipua annetaan komennolle ylläolevassa esimerkissä) vaikuttavat siihen, mitä tietoa ls
näyttää. Kun komennolle ls
annetaan argumenttina jokin polku kansioon, se näyttää tietoa vain kyseisen kansion sisällöstä. Tällä tavalla vipujen ja argumenttien avulla voidaan muuttaa ja tarkentaa komennon toimintaa.
Kutsuttava ohjelma määrittää, mitä komentoja se tarjoaa. Usein mahdolliset komennot on mahdollista nähdä komentoriviltä lisäämällä ohjelman perään vivun --help
tai lyhyemmin -h
. Tarkan ohjeen ohjelman käytöstä saa komennolla man
ja antamalla parametriksi ohjelman nimen (esimerkiksi siis man ls
).
Mikäli tietokone ei tunnista kutsuttavaa ohjelmaa, tulostuu virheviesti:
tunnus@tietokone:~$ asdf
Command 'asdf' not found, did you mean:
command 'asdfg' from deb aoeui
command 'sadf' from deb sysstat
command 'sdf' from deb sdf
command 'adsf' from deb ruby-adsf
Try: sudo apt install <deb name>
tunnus@tietokone:~$
Tietokone ehdottaa yleensä samanlaisia ohjelmia, ja lopulta kehottaa asentamaan oikean paketin.
Tutkitaan seuraavaksi ls
-komennon man
-sivua. Ajetaan siis komentorivillä man ls
, jolloin aukeaa jotain seuraavannäköistä.
Vaikka man
-sivut eivät ole järin aloittelijaystävällisiä, ne tarjoavat yleensä kattavimman dokumentaation tietystä ohjelmasta.
“Name”-kohdasta saa yleiskäsityksen siitä, mitä komento tekee. “Synopsis” kertoo, miten komentoa voidaan kutsua. Esimerkiksi komennon ls
tapauksessa ensin annetaan komennolle vivut, ja viimeisenä kohdekansion polku. Molemmat ovat valinnaisia parametreja, eli komento toimii ilmankin, minkä takia ne ovat hakasulkujen sisällä.
Vivuille määritellään joskus kaksi muotoa: lyhyt, eli yleensä yhden kirjaimen pituinen, ja pitkä muoto. Lyhyt muoto annetaan yhden, ja pitkä muoto kahden väliviivan kanssa. man
-sivu listaa molemmat, kuten ylläolevassa kuvassa näkyy.
Huomaa, että jos haluat antaa komennolle argumentiksi jotain, mikä sisältää välilyönnin, se on annettava lainausmerkkien sisällä. Muuten komentorivillä tulkitaan, että erilliset sanat ovat omia komentojaan, eivätkä osa yhtä argumenttia.
ls "olen vähän hassusti nimetty tiedosto"
tai
ls 'olen vähän hassusti nimetty tiedosto'
Tiedostohallinta komentoriviltä
Komentoriviltä voi selata ja hallinnoida tiedostoja samaan tapaan kuin graafisesta ympäristöstä. Vertaillaan seuraavakasi tiedostohallintaa graafisella ja tekstikäyttöliittymällä.
Avaa graafinen tiedostoselain. Se löytyy Ubuntu-ympäristössä ohjelmana nimeltä “Files” tai kirjoittamalla komentoriville nautilus
ja painamalla ENTER. Windowsissa nautiluksen sijasta tulee kirjoittaa explorer.exe
. MacOSissa avaa finder, ja paina näppäinyhdistelmää Shift + Cmd + H
.
Tiedostoselaimessa tulisi näkyä kotihakemistosi. Kotihakemisto tarkoittaa hakemistoa, joka sisältää kaikki tietyn käyttäjän henkilökohtaiset tiedostot ja kansiot. Mikäli olet laitoksen koneella, kotihakemistosi sisältää samat asiat riippumatta siitä millä fyysisellä koneella satut olemaan: tietokoneen sisältö haetaan toisaalta. Jos taas luet materiaalia omalta koneeltasi, kotihakemistossasi on vain ne asiat mitkä sillä fyysisellä koneella on.
Huomaa, että jos avasit graafisen tiedostoselaimen komentoriviltä, komentorivi jäi ikään kuin lukkoon, ja sillä ei voinut tehdä muuta ellei graafista ohjelmaa suljeta. Voit aina sulkea käynnissä olevan ohjelman painamalla näppäinyhdistelmää CTRL + C. Joskus kerta ei riitä, ja voit huoletta painaa sitä monta kertaa.
Kotihakemistosi sisältää luultavasti paljon sälää, esimerkiksi Downloads ja Documents -nimiset kansiot. Haluamme nähdä samat asiat komentoriviltä, joten avaa viereen komentorivi, kirjoita siihen komento ls
, ja paina ENTER. Tilanne tulee näyttämään suurin piirtein tältä:
tunnus@tietokone:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
ls
siis listaa hakemistot ja kansiot joita hakemistosta löytyy. Komentorivin ja graafisen selaimen pitäisi näyttää samat tiedostot ja kansiot, mutta komentorivi esittää sisällön hieman yksinkertaisemmin.
Oletuksena uuden komentorivin avaaminen avaa sen nimenomaan kotihakemistoon, joten tarvitsemme tavan vaihtaa aktiivista kansiota jotta voimme vierailla muissa kansioissa ja tarkastella niiden sisältöjä. Tarvittava komento on cd
(change directory). cd
-komennolle annetaan parametrina se kansio, johon halutaan siirtyä. Mikäli et anna cd
:lle argumentteja, se siirtää sinut kotihakemistoosi.
Navigoi Downloads-kansioon antamalla komento cd Downloads
. Kansion nimi tulee aina olla täsmälleen kirjoitettu, sillä isoilla ja pienillä kirjaimilla kirjoitetut nimet ovat erilaisia. Muutos näkyy heti komentorivillä, sillä se näyttää nyt kutakuinkin tältä:
tunnus@tietokone:~/Downloads$
Windowsilla saatat nähdä sen sijaan:
dir: cannot access 'Downloads': No such file or directory
tunnus@tietokone:~$
Kokeile tällöin ensin cd /mnt/c/Users/käyttäjänimi
.
:
-merkin jälkeinen osa kertoo siis aktiivisen kansion. ~
viittaa käyttäjän kotihakemistoon.
Komenna jälleen ls
. Vaihdoimme aktiivista hakemistoa, ja koska ls
kertoo aina aktiivisen kansion sisällön, on tulos nyt eri.
Komento ls
voi näyttää myös tarkempaa tietoa. Pidä graafinen tiedostoselain vierellä, ja aja komentorivillä kotihakemistossa komento ls -a
. Huomaa, miten komentorivillä näkyy nyt paljon enemmän tiedostoja, kuin graafisessa ympäristössä. Tämä johtuu vivusta -a
. Sen avulla on mahdollista kaikki tiedostot, myös piilotetut tiedostot ja kansiot.
Unix-ympäristössä piilotettu tiedosto tai kansio tarkoittaa tarkoittaa sellaisia, joiden nimi alkaa pisteellä, esimerkiksi .config
. Tällaisia ovat usein tiedostot, jotka sisältävät joitain asetuksia tai tietoja, joita käyttäjän tarvitsee harvoin muuttaa. Linuxissa piilotetut tiedostot on mahdollista nähdä painamalla graafisessa tiedostoselaimessa CTRL + h
, macOSissa cmd + SHIFT + .
.
Graafisessa tiedostoselaimessa voi luoda kansioita käyttämällä hiiren oikeaa näppäintä. Unix-tyyppisissä järjestelmissä tämä tapahtuu komennolla mkdir
. Kyseessä on jälleen lyhenne, joka muodostuu sanoista make directory. Komennolle annetaan argumenttina luotavan kansion nimi.
Komentorivi toimii siis loppujen lopuksi hyvin samalla tavalla kuin graafinen tiedostoselain: cd
vastaa kansiota klikkaamista, ja ls
näyttää hakemiston tiedostot ja kansiot. Tässä osassa opitaan tekemään tekstikäyttöliittymässä asioita, jotka osataan jo tehdä graafisella käyttöliittymällä.
ls
Komentorivin käyttöä nopeuttavia seikkoja
Jos olet tottunut käyttämään graafista käyttöliittymää, mietit luultavasti nyt, miten hidasta ja raskasta komentorivin käyttäminen varmasti on. Kyseessä on luonnollisesti tottumiskysymys, mutta sen lisäksi komentorivillä on olemassa kirjoittamista nopeuttava seikka: tab-täydennys. Tab-täydennys osaa täydentää esimerkiksi tiedostojen nimiä parametreiksi sekä (joskus, ohjelmasta riippuen) ohjelmien komentoja.
Kokeile tab-täydennystä kirjoittamalla kotihakemistossa cd D
, ja painamalla sen jälkeen tabular-näppäintä (löytyy näppämistöstä caps-lockin yläpuolelta) pari kertaa. Terminaaliin tulostuu kaikki kotihakemiston D-kirjaimella alkavat hakemistot, ainakin siis “Downloads” ja “Documents”. Oletetaan, että haluat siirtyä Downloads-kansioon. Tällöin riittää kirjoittaa cd-komennon parametriksi vain Dow
ja painaa tab-näppäintä, jonka jälkeen Downloads-kansion nimi täydennetään komennon parametriksi (olettaen että kotihakemistossasi ei ole mitään muuta kansiota, jonka nimi alkaisi merkkijonolla Dow
).
Toinen nopeuttava apu on vanhojen komentojen selaaminen: voit tehdä sen painamalla nuolinäppäimiä ylös- ja alaspäin. Kun olet kirjoittamassa komentoa, et voi käyttää kursoria siirtyäksesi tekstissä taaksepäin: voit liikkua komentorivin tekstissä esimerkiksi vasemmalla ja oikealla nuolinäppäimellä. Komentorivi tukee valtavasti erilaisia käteviä näppäinyhdistelmiä, joista voit lukea esimerkiksi täältä.
Tekstinkäsittely
Gedit on yksinkertainen graafinen tekstieditori, jolla voi muokata mitä tahansa teksitiedostoja. Löydät geditin Linuxissa esimerkiksi kirjoittamalla “gedit” Launcheriin, johon pääset painamalla “windows-nappia”. MacOSilla kannattaa käyttää ohjelmaa TextEdit, jotta voit määrittää tiedoston tallennuspaikan ja löydät sen helposti jälkeenpäin.
Avaa graafinen tekstieditori ja luo sillä esimerkki.txt
-niminen tiedosto aiemmin tehtyyn lapio-hakemistoosi. Pääte .txt
kertoo, että tiedosto sisältää tavallista tekstiä, eikä esimerkiksi ajettavaa koodia. Lisää sen jälkeen tiedostoon jotain tekstiä.
Tehtyäsi esimerkki.txt
-tiedoston navigoi komentorivillä lapio
-kansioon, ja avaa se komentamalla nano esimerkki.txt
. Nano on tekstieditori, jossa on tekstikäyttöliittymä, eli jota käytetään suoraan komentoriviltä. Tämä tarkoittaa, että ohjelmaa hallinnoidaan tietyillä näppäinyhdistelmillä.
Muokkausikkunaa ei suljeta raksista, kuten vaikka geditissä, vaan se tehdään näppäinyhdistelmällä CTRL + X
. Jos tiedostoon on tehty muutoksia, on varmistettava halutaanko ne tallentaa vai ei painamalla näppäintä y
tai n
(valinnat tulevat sanoista “yes” ja “no”). Viimeisenä editori varmistaa, minkä nimisenä tiedosto tallennetaan.
Huomaa, että nano
kertoo joka askeleella, mitä valintaa mitkäkin näppäimet vastaavat. Tämä on varsin yleistä, ja siksi onkin tärkeää aina lukea käyttämäsi ohjelman tulostukset (niin tyhmän yksinkertaiselta neuvolta kuin se kuulostaakin). Yleensä ohjelma kertoo itse, mitä käyttäjän tulee tehdä seuraavaksi.
nano
toimii käyttämällä Googlea tai man
-komentoa. Selvitä seuraavat asiat:
- Miten voin tallentaa tiedoston sulkematta nanoa
- Miten voin kopioida ja liittää nanoon
esimerkki.txt
, lisää sinne tekstiä ja tallenna. Avaa sen jälkeen tiedoston jollain tekstieditorilla varmistaaksesi, että sisältö on tallentunut.
- Mitä ovat "insert mode" ja "command mode"
- Miten niiden välillä vaihdetaan
- Miten saat vimin suljettua
Polut
Polku (englanniksi path) tarkoittaa osoitetta tiettyyn tiedostoon tai kansioon. Se koostuu lähinnä kansioiden ja tiedostojen nimistä ja /
-merkistä. Polkuja käytetään komentojen argumenteissa.
Polku voi olla suhteellinen tai absoluuttinen: Suhteellinen polku merkitään suhteessa nykyiseen kansioon, absoluuttinen suhteessa järjestelmän juurikansioon (englanniksi root folder tai the root). Juurikansio sisältää kaikki tietokoneen tiedostot, eikä sitä tule sekoittaa käyttäjäkohtaiseen kotihakemistoon. Juurikansio sisältää siis kaikkien käyttäjien kotihakemistot.
Absoluuttinen polku alkaa aina /
-merkillä, sillä juurikansion absoluuttinen polku on /
. Jos polkua ei aloita merkillä /
, järjestelmä luulee, että viitataan kansioon joka on nykyisessä hakemistossa. Nykyisen kansion absoluuttisen polun näkee komennolla pwd
(print working directory). Kotihakemiston absoluuttinen polku on Linuxissa yleensä /home/tunnus/
ja macOSissa /Users/tunnus/
. Siihen voidaan myös viitata merkillä ~
. Esimerkiksi absoluuttinen polku kotihakemiston Downloads-kansioon olisi Linuxissa /home/tunnus/Downloads
tai ~/Downloads
.
Suhteellisissa poluissa käytetään usein merkkejä .
ja ..
. Yksi piste .
viittaa nykyiseen kansioon, kaksi pistettä ..
viittaa edelliseen kansioon tai ylä- eli äitikansioon. Esimerkiksi komennolla cd ../..
siirryttäisiin kaksi kansiota “ylöspäin”. Kotihakemistosta suhteellinen polku kansioon Downloads on ./Downloads
tai pelkkä Downloads
.
Tässä vielä esimerkki absoluuttisista ja suhteellisista poluista:
Oletetaan, että olet ladannut Downloads-kansioon kissakuvia jokaiselle vuoden kuukaudelle niin, että jokaisen kuukauden kuvat ovat omassa kansiossaan. Sen jälkeen olet siirtynyt komentorivillä “toukokuu”-nimiseen kansioon, jonka polku on ~/Downloads/kissakuvia/toukokuu/
. Voit nyt viitata toukokuu-kansion sisältä esimerkiksi “Downloads”-kansioon polulla ../..
, ~/Downloads
tai /home/tunnus/Downloads
Linuxilla ja /Users/tunnus/Downloads
macOSilla. Jos haluaisit viitata toukokuu-kansiosta esimerkiksi marraskuu-kansioon (joka on siis kissakuvia-kansion sisällä), voit tehdä sen polulla ../marraskuu/
. Kauttaviiva polun lopussa alleviivaa, että kyseessä on kansio, mutta se ei ole välttämätön.
tunnus@tietokone:~/Downloads/kissakuvia/toukokuu$ ls
kissa1.jpg
tunnus@tietokone:~/Downloads/kissakuvia/toukokuu$ cd ../../
tunnus@tietokone:~/Downloads$ cd kissakuvia/toukokuu/
tunnus@tietokone:~/Downloads/kissakuvia/toukokuu$ cd ../marraskuu/
tunnus@tietokone:~/Downloads/kissakuvia/marraskuu$ ls
kissa2.jpg
Oheisessa kansiorakenteessa siis koulu
-kansio sisältää kolme kansiota: lapio
, ohpe
ja ohja
. lapio
kansio sisältää tiedoston kmntorivi.txt`
, ohpe
kansio tiedoston luento1.txt
, ja ohja
tiedostot luento2.txt
sekä java.txt
.
Luo ensin koulu
-kansio, ja siirry sen jälkeen sen sisään. Tämän jälkeen luo kuvan mukainen tiedostorakennelma. Pyri luomaan osa tiedostoista suoraan koulu-kansiosta, ja osa niin, että siirryt alikansioon sisään ennen kuin luot sinne tiedoston.
Tiedostojen siirtäminen ja uudelleennimeäminen
Graafisessa ympäristössä kopiointi onnistuu näppäinyhdistelmällä CTRL + C, leikkaus yhdistelmällä CTRL + X ja liittäminen yhdistelmällä CTRL + V. Katsotaan miten vastaavat asiat saadaan tehtyä komentorivillä.
Kopiointia varten on komento cp
eli copy. Se ottaa argumenteiksi kopioitavan tiedoston polun ja uuden tiedoston polun: cp esimerkki.txt esimerkki2.txt
kopioisi siis esimerkki.txt
:n esimerkki2.txt
nimiseksi tiedostoksi samaan kansioon. Huomaa, että polkujen avulla voit viitata tiedostoihin tai kansioihin eri hakemistossa: cp esimerkki.txt ~/Documents/esimerkki2.txt
kopioisi tiedoston suoraan Documents
-kansioon nimellä esimerkki2.txt
. Mikäli toisena argumenttina annetaan olemassaoleva kansio, tiedosto kopioidaan muuttamatta sen nimeä. Esimerkiksi ajamalla cp esimerkki.txt ~/Documents/
tiedosto esimerkki.txt
siirretään Documents
-kansioon, mutta sen nimi ei muutu.
Tiedostoja voi siirtää käyttäen mv
-komentoa, joka tulee sanasta move. Komento toimii samalla tavalla kuin cp
, paitsi että alkuperäinen tiedosto poistetaan, ja jää vain uusi tiedosto. Tämä vastaa graafisen käyttöliittymän “leikkaa”-toimintoa. Komennolla mv
voi myös uudelleennimetä tiedostoja: jos toisena argumenttina annettu polku viittaa samaan kansioon kuin ensimmäinen polku, kopion nimeäminen ja alkuperäisen tiedoston poistamisen tuloksena on uudelleennimetty tiedosto.
Esimerkkejä mv
:n toiminnasta:
mv esmerkki.txt esimerkki.txt
uudelleennimeää tiedoston esmerkki.txt
tiedostoksi esimerkki.txt
.
mv esimerkki.txt ~
siirtää tiedoston esimerkki.txt
nykyisestä kansiosta kotihakemistoon.
mv esmerkki.txt ~/esimerkki.txt
muuttaa nykyisen kansion tiedoston esmerkki.txt
nimeksi esimerkki.txt
ja siirtää sen kotihakemistoon.
mv ~/esimerkki.txt ~/Downloads/
siirtää tiedoston esimerkki.txt
kotihakemistosta Downloads-kansioon.
mv
ja cp
seuraavan näköiseksi:
Huomaa, että kiusallinen kirjoitusvirhe tiedoston kmntorivi.txt
nimessä on korjattu. Tiedosto javasta.txt
on uudelleennimetty ja siirretty kansioon ohpe
.
Muista käyttää tab-täydennystä!
rm
, eli remove. Käyttäen komentoriviä, poista edellisessä tehtävässä luomasi tiedostot. Selvitä sitten, miten voit poistaa hakemiston komentoriviltä, ja poista koko koulu
-hakemisto.
Villikortit
Sekä mv
että cp
(ja melkein kaikki muutkin Unix-tyyppisen ympäristön komennot) tukevat ns. villikortteja, joiden avulla on kätevää suorittaa operaatioita useammalle tiedostolle samaan aikaan. Ehkä yleisin villikortti, eli *
, toimii siten, että se vastaa mitä tahansa määrää mitä tahansa merkkiä. Sitä voi käyttää missä tahansa kohdassa merkkijonoa. Esimerkiksi komento mv *.txt esimerkki/
siirtäisi kaikki nykyisen kansion .txt
-päätteiset tiedostot esimerkki-nimiseen kansioon nykyisen kansion alla. Samoin mv test* tests/
siirtäisi kaikki test
-alkuiset tiedostot ja hakemistot tests
-nimiseen kansioon.
tunnus@hal9000:~/esimerkki$ ls
kohde teksti.txt muistio.txt toinen.png
tunnus@hal9000:~/esimerkki$ mv *.txt kohde/
tunnus@hal9000:~/esimerkki$ ls
kohde toinen.png
jpg
-muotoinen, ja toinen png
-muotoinen. Lisää sen lisäksi kansioon joitain tiedostoja, esimerkiksi nimillä tiedosto.txt
ja en_ole_kuva.txt
. Luo lopuksi kansio nimeltä kuvat
ja kopioi sinne tutoriaalia hyödyntäen kaikki kuvat nykyisestä hakemistosta. Voit lukea muista mahdollisista villikorteista esimerkiksi täältä.
Muita hyödyllisiä komentoja
Joskus on hyödyllistä pystyä tarkastelemaan tekstitiedostoja suoraan komentoriviltä avaamatta erillistä editoria. Helpoin komento tätä varten on cat
(concatenate), joka tulostaa suoraan tiedoston sisällön:
tunnus@hal9000:~/esimerkki$ cat esimerkki.txt
olen
esimerkkitiedoston
sisältö
Jos tiedosto on kovin iso, tulee rivejä paljon. Usein niistä tarvitsee vain alun tai lopun, jossa auttavat komennot head
ja tail
. Molemmat komennot tulostavat vakiona 10 riviä, mutta sitä voi vaihtaa -n
-vivulla. Esimerkiksi vain ensimmäisen ja viimeisen rivin saa näin:
tunnus@hal9000:~/esimerkki$ tail -n 1 esimerkki.txt
sisältö
tunnus@hal9000:~/esimerkki$ head -n 1 esimerkki.txt
olen
Tässä siis vivulle -n
annettiin argumenttina luku 1.
On myös mahdollista etsiä tiettyjä rivejä tiedostoista. Tähän löytyy erittäin hyödyllinen grep
-komento (search globally for a regular expression and print), joka antaa käyttäjän filtteröidä rivejä tiedostoista annettujen ehtojen perusteella. Grep toimii perustapauksessa niin, että se palauttaa kaikki rivit joissa esiintyy annettu merkkijono juuri sellaisenaan kun se annettiin. Yksinkertaisimmillaan sen toiminta on siis seuraavanlaista:
tunnus@hal9000:~/esimerkki$ cat päiväkirja.txt
Lokakuun kuudes päivä.
Tämä on päiväkirjani, se sisältää paljon salaisuuksia.
Tämä rivi taas on vähemmän salainen.
tunnus@hal9000:~/esimerkki$ grep "salai" päiväkirja.txt
Tämä on päiväkirjani, se sisältää paljon salaisuuksia.
Tämä rivi taas on vähemmän salainen.
Huomaa, että osuma löytyy, vaikka se oli sanan keskellä. Useimmissa ympäristöissä komento myös maalaa (järjestelmästä riippuen) täsmätyn osan tiedostosta esimerkiksi punaisella:
grep
ei kohtele kirjaimia samana, jos ne ovat eri kokoisia. Esimerkiksi "a" ja "A" ovat sille siis erilaisia kirjaimia.
- Tarkastele
grep --help
apusivun tulosta taiman
-sivua, ja ota selvää miten pääset eroon kirjainkoon erottelusta. - Ota selvää esimerkiksi googlettaen, miten saat haettua vain merkkijonoja, jotka ovat rivin alussa. Tarkista, että osaat tehdä tämän. Voit tehdä sen kirjoittamalla tiedostoon esimerkiksi
Unix Linux macOS UNiX päivänkakkara-unix unIX Käyttöjärjästelmänä unix UNIX unix unisportja tarkistamalla, että saat
grep
in avulla valittua oikeat sanat.
Edellä mainitut ovat tärkeitä komentoja komentorivillä työskentelijän arsenaalissa, mutta niiden hyöty tulee kunnolla esille vasta kun ne yhdistetään muihin komentoihin. Komentorivillä komentojen yhdistäminen tapahtuu yleensä joko putkella |
, tai nuolella >
. Tarkastellaan seuraavaksi näitä operaattoreita.
Putki uudelleenohjaa ensimmäisen komennon tulosteen syötteeksi toiselle komennolle. Esimerkiksi ls
-komennon näyttämistä tiedostonnimistä voi helposti hakea grep
illä tiettyä tiedostoa putken avulla:
tunnus@hal9000:~/esimerkki$ ls
esimerkki.txt muistio2.txt muistio.txt
tunnus@hal9000:~/esimerkki$ ls | grep muistio
muistio2.txt
muistio.txt
Esimerkissä siis ls
-komennon tulostus ohjattiin putken avulla edelleen komennolle grep
. Ilman |
-operaattoria, ensimmäisen komennon tulostus olisi pitänyt ensin kirjoittaa tiedostoon ja sen jälkeen lukea ja filtteröidä grep
illä. Komentoa grep
käyttäen tulosteen pystyi suoraan jakamaan komentojen välillä.
Joskus voi kuitenkin olla hyödyllistä kirjoittaa tuloste tiedostoon esimerkiksi tallennusta varten, sillä terminaalin tulosteita voi selata taaksepäin vain rajallisen määrän. Tähän tarkoitukseen sopiva operaattori on nuoli oikealle >
, joka uudelleenohjaa komennon tulosteen tiedostoon. Esimerkiksi ls > listaus.txt
uudelleenohjaa tiedostolistauksen listaus.txt
-nimiseen tiedostoon, luoden kyseisen tiedoston jos sitä ei ole jo olemassa.
Samoin operaattorin <
avulla voidaan antaa tiedoston sisältö syötteenä ohjelmalle. Tämä on hyödyllistä käsiteltäessä suuria syötteitä, tai tehtäviä automatisoitaessa.
muistiinpanot.txt
komentorivillä. Kopioi sinne seuraava teksti, joka kuvailee erään opiskelijan ajatuksia tiettynä viikkona:
Eriytä tämän jälkeen viikon ruokalista omaksi tiedostokseen
unicafe.txt
. Ruokalistoja ei tarvitse poistaa muistiinpanot.txt
-tiedostosta. Eriytä myös kurssiin ohpe
liittyvät muistiinpanot.
SSH-yhteys
Olemme tähän asti käyttäneet komentoriviä lähinnä omalla koneella olevien asioiden tarkasteluun. Komentoriviltä voidaan kuitenkin ottaa myös yhteys toiseen tietokoneeseen. SSH on salattu yhteystyyppi, joka mahdollistaa järjestelmään kirjautumisen etänä komentorivin kautta. Salattu yhteys tarkoittaa, että tietoa ei siirretä suoraan luettavassa muodossa. Tarkoitus on, että vain valikoidut vastaanottajat pystyvät purkamaan salauksen ja lukemaan sisällön.
Unix-ympäristössä ssh-yhteyden voi luoda komennolla ssh
. Komennon perustoiminnalisuus on seuraava: ssh tunnus@palvelimen.osoite
ottaa yhteyden palvelimeen osoitteessa palvelimen.osoite
ja yrittää kirjautua tunnuksella tunnus
. Käyttäjältä pyydetään tunnuksen salasanaa, ja autentikoinnin onnistuessa yhteys avautuu. Tämän jälkeen komentoriviltä voidaan ajaa tavalliseen tapaan komentoja, mutta nykyinen kansio sijaitseekin palvelimella, johon yhteys on luotu.
Tietojenkäsittelytieteen osasto tarjoaa neljä eri palvelinta osaston koneisiin etäyhteyden luomiseksi. Näille palvelimille kirjaudutaan yliopiston tunnuksilla:
- melkki.cs.helsinki.fi
- melkinpaasi.cs.helsinki.fi
- shell.cs.helsinki.fi
- melkinkari.cs.helsinki.fi
Kaikki nämä palvelimet ohjaavat siis samaan käyttäjäkohtaiseen kotihakemistoon, johon pääsee kaikilta osaston koneilta.
Käytetään ssh
-komentoa osaston koneelle yhteyden ottamiseen:
tunnus@hal9000:~$ ssh tunnus@melkki.cs.helsinki.fi
tunnus@melkki.cs.helsinki.fi's password:
Kun SSH-yhteys muodostetaan ensimmäisen kerran, ilmestyy varoitusviesti, jossa kysytään luottaako käyttäjä palvelimeen, johon yhteyttä ollaan muodostamassa. Kun kirjoittaa yes
, muistaa tietokoneesi palvelimesta tietyn sormenjäljen. Vaikka SSH-yhteys on suojattu, se ei ole täysin immuuni hyökkäyksille (kuten ei oikeastaan mikään internetissä toimiva asia). Jos saat viestin käyttäessäsi SSH-yhteyttä esimerkiksi julkisessa internetissä, kannattaa yhteys jättää muodostamatta, sillä koneesi saattaa olla hyökkäyksen kohteena.
Kun yhteys on muodostettu, näyttää komentorivi erilaiselta:
tunnus@melkki:~$
Komentorivin nykyinen kansio on siis muuttunut osaston koneiden kotihakemistoksi ja pääset käsiksi kaikkiin osaston koneella sijaitseviin tiedostoihin. Yhteyden voi lopettaa komennolla exit
.
Voit lukea SSH:sta lisää esimerkiksi täältä tai täältä.
SSH-avainpari
Edellä yhteys osaston koneeseen autentikoitiin osaston tunnuksilla. SSH-yhteys tarjoaa kuitenkin myös toisen tavan tunnistaa käyttäjä: julkinen ja yksityinen avainpari. Käytännössä avaimilla tarkoitetaan kahta pitkää ja satunnaiselta vaikuttavaa merkkijonoa, joita käytetään yhdessä varmistamaan, että vain halutuilla henkilöillä on pääsy tiettyyn tietoon. Kyseessä on salauksen tekniikka, joka ei kuulu sen enempää tämän kurssin aihealueisiin, mutta voit etsiä asiasta lisää tietoa avainsanoilla public key encryption ja asymmetric cryptography. Riittää ymmärtää, että yksityisen avaimen tulisi olla vain sen omistajan tiedossa, ja julkista avainta voi jakaa huoletta.
SSH-avainparin voi luoda komennolla ssh-keygen
. Komento kysyy avaimelle salasanaa ja tallennuspaikkaa. Oletussijaintia tai tiedoston nimeä ei lähtökohtaisesti tarvitse muuttaa, jolloin avain luodaan kotihakemistossa sijaitsevaan .ssh
-kansioon.
tunnus@hal9000$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tunnus/.ssh/id_rsa): /home/tunnus/.ssh/id_rsa_test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tunnus/.ssh/id_rsa.
Your public key has been saved in /home/tunnus/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:asdasdadsfasdasdasdasdasdasd
The key's randomart image is:
+---[RSA 2048]----+
| . ..oo..|
| . . . . .o.X.|
| . . o. ..+ B|
| . o.o .+ ..|
| ..o.S o.. |
| . %o= . |
| @.B... . |
| o.=. o. . . .|
| .oo E. . .. |
+----[SHA256]-----+
Komento luo .ssh
-kansioon kaksi tiedostoa, joista toisen pääte on .pub
. Tämä .pub
-päätteinen tiedosto sisältää julkisen avaimen, jonka voit turvallisesti jakaa muille. Toinen, päätteetön tiedosto sisältää yksityisen avaimen, jota kannattaa kohdella samalla varovaisuudella kuin tavallista salasanaa.
Avainparilla kirjautuminen on mahdollista, kun julkinen avain lisätään palvelimelle, jolla avainparilla halutaan autentikoitua. Tällöin kyseiseen järjestelmään pääsee kirjautumaan, jos tietää julkista avainta vastaavan yksityisen avaimen. Julkinen avain lisätään polkuun ~/.ssh/authorized_keys
, siis kotihakemiston kansioon .ssh
, tiedostoon nimeltä authorized_keys. Mikäli käytät useita avaimia, jokainen lisätään omalle rivilleen. Yliopiston palvelimella joudut luultavasti luomaan kansion ja tiedoston itse.
Alla näkyy kuva avainten oikeista sijainneista, kun SSH-avainta käytetään osaston koneille kirjautumiseen.
Julkisen avaimen saa siirrettyä kohdepalvelimelle esimerkiksi komennolla scp
, jonka avulla on mahdollista kopioida tiedostoja palvelimelta toiselle (vertaa komentoon cp
). Komentoa käytetään seuraavasti:
scp polku/kopioitavaan/tiedostoon tunnus@palvelmen.osoite:polku/kohdekansioon
Huomaa palvelimen osoitteen jälkeen lisättävä kaksoispiste!
Julkisen avaimen kopioimisen voi myös delegoida komennolle ssh-copy-id.
Autentikaatio toimii oikein, kun otettaessa SSH-yhteyttä yliopiston koneisiin pääsee kirjautumaan SSH-avaimelle antamalla salasanalla yliopiston käyttäjätunnuksen sijaan.
Jotta et joudu kirjoittamaan salasanaa joka kerralla, kannattaa yksityinen avain lisätä ssh-agentille. Tällöin salasana tarvitsee kirjoittaa vain kirjauduttuasi järjestelmästä ulos. Tämä tapahtuu kahdella komennolla:
# varmistetaan, että ssh-agentti on toimintavalmiudessa
eval $(ssh-agent -s)
# olettaen, ettet muuttanut yksityisen avaimen polkua sitä luodessasi
# muuten anna argumentiksi yksityisen avaimen polku
ssh-add
Voit lukea lisää SSH:n konfiguroimisesta esimerkiksi täältä.
Wget
Graafisessa ympäristössä selain antaa tarkastella sivuja internetissä. Komentorivillä toimivien ohjelmien on vaikeaa näyttää internet-sivuja samoin kuin graafinen selain, (joskin se on mahdollista) mutta pohjimmiltaan nettisivu internetissä on vain tiedosto, jonka voimme toki ladata koneellemme tarkasteltavaksi.
Tarvittavan komennon nimi on wget
(alunperin world wide web get). Se toimii yksinkertaisimmillaan wget sivun.osoite
, joka lataa annetun sivun koneellesi. Internet-sivut on tehty HTML-kielellä, johon tutustumme seuraavassa osassa, joten saat kutsun tuloksena koneellesi .html
-päätteisen tiedoston.
- Lataa mieleisesi sivusto koneellesi
wget
-komennolla - Avaa tallennettu
.html
-päätteinen tiedosto selaimella, esimerkiksi Firefoxilla tai Chromella (saat tiedoston helpoiten selaimella auki graafisesta tiedostonhallinnasta). Sivu näyttää luultavasti hieman erilaiselta kuin yleensä. - Avaa tiedosto niin, että näet sen sisällä olevan HTML-koodin (toisin sanoen avaa se niin, että näet tiedoston sisällön koodina, eikä tiedosto aukea selaimessa). Tunnistat koodin tageista, jotka määritellään merkeillä ">" ja "<". Alussa pitäisi myös näkyä tagi, jonka sisällä lukee "html".
- Mikä oli ohjelma, jota käytit kussakin tapauksessa tiedoston avaamiseen? Mieti yleisellä tasolla, miten ohjelma käsitteli tiedoston sisällön.
Tässä tehtävässä lasketaan, monellako rivillä Linus Torvaldista kertovassa artikkelissa esiintyy sana "Linux".
- Hae wgetillä Linus Torvaldsista kertova Wikipedia-artikkeli koneellesi.
- Hae syntyneestä tiedostosta
grep
-komentoa käyttäen ne rivit, joissa lukee "Linux". Kirjoita nämä rivit tiedostoon. - Etsi sitten netistä, miten voit laskea tulosteen tai tiedoston rivien määrät, ja laske monellako rivillä sana "Linux" esiintyy.
Oikeudet
Unix-tyyppisissä järjestelmissä käyttäjät omaavat tiettyjä oikeuksia tiedostojen ja kansioiden muokkaamista ja katsomista varten. Esimerkiksi jos useampi ihminen käyttää samaa järjestelmää, kuten osaston koneita käytetään, on tarve määrittää mitä kukakin käyttäjä pystyy lukemaan, kirjoittamaan ja suorittamaan.
Lukuoikeus antaa käyttäjän tarkastella tiedoston sisältöä, kun taas kirjoitusoikeuden omaava käyttäjä pystyy muokkaamaan sitä. Suoritusoikeus taas tarkoittaa, että jos kyseinen tiedosto on esimerkiksi ohjelma, on se mahdollista ajaa. Kansioilla on oltava suoritusoikeus, jotta niiden sisään voidaan siirtyä esimerkiksi cd
-komennolla. Mikäli käyttäjällä ei ole tarvittavia oikeuksia yrittämäänsä operaatioon, antaa järjestelmä yleensä virheviestin Permission denied
.
Jokaisella tiedostolla ja kansiolla on omat oikeutensa. Lisäksi niillä on myös omistaja. Käyttäjä, joka loi tiedoston, on oletuksena sen omistaja (joskin omistajuutta voi myös vaihtaa).
Oikeudet ja omistajuudet selviävät ls
-komennon -l
-vivun avulla. Tältä näyttävää komennon tuloste “esimerkki”-kansiolla:
tunnus@hal9000:~/esimerkki$ ls -l
total 8
-rw-r--r-- 1 tunnus tunnus 16 touko 31 21:41 esimerkki.txt
-rwxr--r-- 1 tunnus tunnus 0 kesä 14 17:25 muistio.txt
-r--r--r-- 1 tunnus tunnus 0 touko 3 23:13 artikkeli.txt
drwx------ 2 tunnus tunnus 130 kesä 14 17:54 päiväkirjamerkinnät
Jokaisella kansion tiedostolla ja kansiolla on tulostuksessa oma rivinsä. Ensimmäinen sarake, joka sisältää hassuja sekoituksia kirjaimista ja merkeistä on kyseisen tiedoston oikeudet kertova merkkijono. Tässä sen ensimmäinen merkki on joko d
tai -
, joka kertoo onko kyseessä tiedosto (-
) vai kansio, eli directory.
Seuraavat yhdeksän merkkiä on varattu tiedoston tai kansion oikeuksille. Nämä oikeudet merkitään aina järjestyksessä lukuoikeus (r), kirjoitusoikeus (w) ja suoritusoikeus (x). Ensimmäiset kolme merkkiä kertovat sen omistajan oikeudet. Jos vastaavan kirjaimen tilalla on viiva, tarkoittaa merkintä, että oikeus puuttuu, eli sitä ei ole annettu.
Seuraavat kolme merkkiä kertovat samaan tapaan ryhmän oikeudet. Jokaiselle tiedostolle annetaan jokin ryhmä. Ryhmä on tapa, jolla samanlaisia käyttäjiä voi hallita - esimerkiksi kaikki opiskelijat saattaisivat olla osaston järjestelmissä yhdessä ryhmässä. Ryhmälle voidaan antaa tiettyjä oikeuksia, jotka pätevät kaikkiin sen jäseniin.
Viimeiset kolme merkkiä taas näyttävät kaikkien muiden käyttäjien oikeudet. Tähän sarakkeeseen kuuluvat kaikki käyttäjät, jotka eivät ole tiedoston omistajia, tai kuulu sen ryhmään.
Oikeuksien jälkeen näkyy tiedostoon johtavien linkkien määrä. Kansioissa linkkien lukumäärään sisältyy myös sen sisältämät tiedostot. Linkkien avulla voidaan viitata tiettyihin tiedostoihin.
Sen jälkeen on tiedoston omistajan nimi ja ryhmän nimi. Tässä tapauksessa ryhmän nimi on käyttäjänimi tunnus
. Viimeisenä tulostuksessa näkyy kansion tai tiedoston koko tavuina, sekä viimeinen muokkauspäivä, ja lopuksi sen nimi.
Yllä näkyvässä esimerkissä siis muistio.txt
-tiedostolle on omistajalla luku, kirjoitus ja ajo-oikeus, ryhmällä ja muilla taas on lukuoikeus. Kansiolla päiväkirjamerkinnät
taas on vain sen omistajalle luku, muokkaus ja ajo-oikeudet, eikä ryhmällä tai muilla käyttäjillä ole näitä oikeuksia. Tiedostoa artikkeli.txt
voivat kaikki lukea, mutteivät muokata tai ajaa.
Oikeuksia voi muuttaa tiedoston tai kansion omistaja, tai järjestelmän ylläpitäjä. Niiden muokkaamiseen komentoriviltä tarkoitettu komento on chmod
(change mode). Se ottaa argumenttina merkkijonon, joka kertoo lisätäänkö vai poistetaanko oikeuksia, kenelle oikeuksia annetaan, sekä tiedoston tai kansion jolle komento tulee suorittaa.
Annettu oikeus ja sen saaja voidaan määritellä kirjainten avulla:
- r = lukuoikeus
- w = kirjoitusoikeus
- x = ajo-oikeus
- u = tiedoston omistaja
- g = ryhmään kuuluvat
- o = kaikki muut käyttäjät
Jos oikeuden saajaa ei määritellä, chmod antaa kyseisen oikeuden kaikille käyttäjäryhmille (käyttäjälle, ryhmälle ja muille).
Väliviiva -
argumentti poistaa oikeuden, ja plussa +
antaa oikeuksia.
Esimerkkejä chmod
in käytöstä:
chmod u+x esimerkki.txt
antaa tiedoston omistajalle oikeuden ajaa tiedosto.
chmod o-w esimerkki.txt
poistaa muilta käyttäjiltä oikeuden kirjoittaa tiedostoon.
chmod go+r esimerkki.txt
antaa ryhmälle ja muille käyttäjille oikeuden lukea tiedoston.
tunnus@hal9000:~/esimerkki$ chmod -r esimerkki.txt
tunnus@hal9000:~/esimerkki$ cat esimerkki.txt
cat: esimerkki.txt: Permission denied
tunnus@hal9000:~/esimerkki$ chmod +r esimerkki.txt
tunnus@hal9000:~/esimerkki$ cat esimerkki.txt
paras
esimerkki
tunnus@hal9000:~/esimerkki$ chmod o+w esimerkki.txt
tunnus@hal9000:~/esimerkki$ ls -l
total 8
-rw-r--rw- 1 tunnus tunnus 16 touko 31 21:41 esimerkki.txt
-rw-r--r-- 1 tunnus tunnus 0 kesä 14 17:25 muistio2.txt
-rw-r--r-- 1 tunnus tunnus 0 touko 3 23:13 muistio.txt
drw-r--r-- 1 tunnus tunnus 130 kesä 14 17:54 päiväkirjamerkinnät
oikeus.txt
ja harjoittele sen avulla oikeuksien hallinnointia. Anna sille vuorotellen seuraavanlaiset oikeudet:
-rwxr--r--
-rw-r--r--
-rw-------
-r-xrw--w-
Voit lukea lisää oikeuksista esimerkiksi täältä.
Skriptit
Skriptit (englanniksi scripts) ovat tiedostoja, jotka sisältävät komentorivillä ajettavaa koodia. Niitä käytetään paljon erilaisten tietokoneella suoritettavien tehtävien automatisoinnissa. Skriptin voi ajaa kirjoittamalla terminaaliin sen polun. Jos ollaan skriptin kanssa samassa kansiossa, voidaan se ajaa komennolla ./skriptin_nimi
.
Skriptien kirjoittamiseen on olemassa niille tarkoitettuja ohjelmointikieliä. Yksi niistä on Bash. Se on Unix-käyttöjärjestelmien komentorivien oletustulkki, eli esimerkiksi Linuxin versioissa ja macOSissa voidaan oletuksena ajaa Bashilla kirjoitettuja skriptejä. Bash-skriptin aluksi tulee kirjoittaa seuraavanlainen taikarivi: #!/bin/bash
. Skriptitiedostojen nimet myös yleensä lopetetaan päätteellä .sh
.
Skripteihin voi kirjoittaa myös komentorivin ohjelmakomentoja. Esimerkiksi kansion sisällön näyttävä skripti kirjoitetaan seuraavasti:
Avataan tekstitiedosto nimeltä script.sh
, ja kirjoitetaan sisään:
ls
Tallennetaan sen jälkeen tiedosto. Kun skripti ajetaan, se tekee juuri, mitä sen sisältämä komento käskee:
hal9000:~ tunnus$ ./script.sh
Applications Library Pictures kissakuvia
Desktop Linus_Torvalds Public script.sh
Documents Movies Downloads Music
Huomaa kuitenkin, että jotkin asiat toimivat skripteissä eri tavalla kuin olettaisi. Esimerkiksi cd
-komento ei toimi sellaisenaan.
Jotta skriptin voi ajaa, käyttäjälle tulee ensin antaa siihen ajo-oikeudet komennolla chmod
.
- Etsi netistä, miten bash-kielessä voi tulostaa tekstiä terminaaliin.
- Kirjoita pieni skripti, joka tulostaa "Hello world!".
- Aja kirjoittamasi skripti.
- Selvitä sen jälkeen, miksi yleensä ensimmäisessä ohjelmointitehtävässä tulostetaan teksti "Hello world!".
Sudo
Tietoturvallisiin tapoihin kuuluu, että tietokoneessa erotellaan pääkäyttäjä (superuser) sekä tavalliset käyttäjät. Pääkäyttäjällä on kaikki oikeudet järjestelmään, ja kaikki pääkäyttäjän ajamat ohjelmat ajetaan etuoikeutetussa tilassa. Tämä voi olla vaarallista, jos pahantahtoista koodia päätyy ajoon, siksi tietokonetta tulee käyttää yleensä normaalina käyttäjänä.
Normaalikäyttäjä voi kuitenkin ajaa komentoja pääkäyttäjän oikeuksin, jos käyttäjä kuuluu (sudoers) ryhmään. Tämä tapahtuu lisäämällä komennon alkuun sudo
(alunperin superuser do). Tällöin ennen komennon ajamista käyttäjältä pyydetään käyttäjän oma salasana. Riippuen järjestelmästä, sudo
-oikeuksia voidaan tarvita esimerkiksi ohjelmien asentamiseen. Komennon käyttöä tulee kuitenkin välttää, jos mahdollista. Sudon käyttö on joskus tarpeellista, mutta älä esimerkiksi lisää sitä jokaisen komennon alkuun välttääksesi virheviestejä tiedostojen oikeuksista.
Yliopiston tai osaston koneilla, eli niillä joihin kirjaudut yliopiston tai osaston tunnuksilla esimerkiksi SSH-yhteyden kautta tai pajaluokissa, ei saa ajaa mitään sudo-komentoja - siitä lähtee ylläpidolle väärinkäyttöilmoitus.
Asentamisesta
Maailma on täynnä ohjelmia, jotka on suunniteltu käytettäviksi komentoriviltä. Helpoiten komentorivityökalujen asentaminen tapahtuu pakettienhallintajärjestelmien avulla. Tällaisia ovat esimerkiksi Apt (Linux) tai Homebrew (macOS).
Ubuntussa ja Cubblissa (osaston koneilla käytettävä Linuxin versio) pitäisi olla apt (tai hyvin samanlainen ohjelma apt-get) valmiina, mutta macOSissa joudut asentamaan homebrew:n erikseen täältä. Ohjeita aptin käyttöön löytyy täältä tai suomeksi täältä. Suosittelemme vahvasti pakettienhallintajärjestelmän käyttämistä.
Yksinkertaisimmillaan paketinhallintajärjestelmän avulla asennetaan paketti ajamalla komento install
, ja antamalla sille parametriksi asennettavan paketin nimen.
Esimerkiksi tekstieditori nano
asennettaisiin homebrew:n avulla ajamalla seuraava komento:
Homebrewin avulla:
brew install nano
ja Apt:in avulla ajamalla
apt install nano
Kun ohjelma on asennettu pakettienhallintajärjestelmän avulla, voidaan sitä yleensä kutsua komennolla suoraan komentoriviltä. Itse komennon nimi kannattaa tarkistaa käyttöohjeista.
Paketinhallintajärjestelmän avulla voidaan myös päivittää ja poistaa paketteja. Pakettien päivittämiseksi ajetaan ensin komento update
, joka hakee uusimmat tiedot asennetuista paketeista, ja upgrade
päivittää ne. Paketti voidaan poistaa komennolla remove
.
Usein pakettien asentaminen, päivittäminen ja poistaminen vaatii sudo-oikeudet, jolloin komentojen eteen on lisättävä sudo
.
Ohjelman asentaminen on myös mahdollista ilman pakettienhallintajärjestelmää. Prosessi on jonkin verran pidempi ja monimutkaisempi. Tällöin asentaminen sisältää usein PATH
-nimisen ympäristömuuttujan muokkaamista. Ympäristömuuttujien avulla voidaan määritellä järjestelmäkohtainen ympäristö. Käytännössä tämä tarkoittaa arvojen määrittelemistä koko järjestelmän laajuisille muuttujille. PATH
-muuttujaan määritellään, missä tietokoneessa sijaitsee suoritettavat ohjelmat, jolloin niihin voidaan viitata komennoilla tarkan sijainnin sijaan. Voit lukea ympäristömuuttujista lisää esimerkiksi täältä.
Järjestelmän ympäristö voidaan lisäksi määritellä skripteissä niin, että niitä ei tarvitse erikseen määritellä uudelleen aina session loputtua. Tällaisia on esimerkiksi ~/.bashrc
, joka ajetaan Linuxissa joka kerta, kun terminaali käynnistetään ja ~/.bash_profile
, joka ajetaan jokaisella kirjautumisella. MacOSin oletusterminaali ajaa ~/.bashrc
-tiedoston sijaan jokaisen uuden terminaali-ikkunan avautuessa ~/.bash_profile
-tiedoston.
Voit lukea näistä tiedostoista ja niiden käytöstä muun muassa täältä. Esimerkiksi PATH
-ympäristömuuttuja määritellään Linuxissa yleensä .bashrc
-tiedostoon.
Loppusanat
Tähän päättyy kurssin ensimmäinen osa. Komentorivin opettelussa voi mennä aikaa, mutta ajan kanssa uuteen työkaluun tottuu. Unix-yhteisö tarjoaa paljon apuja internetissä: Linuxille on muun muassa wiki-sivut linux.fi, sekä Unixille foorumi Stack Exchangessa. MacOSille on olemassa käyttäjäystävällinen virallinen dokumentaatio, sekä myös oma foorumi.
Komentorivin peruskäyttö kannattaa opetella, vaikka se tuntuisi aluksi turhalta. Komentorivi on edelleen erottamaton osa koodaajan työtä. Monen mielestä komentorivillä toimiminen on koodatessa lopulta nopeampaa, ja yleensä koodatessa käytettäville ohjelmille on olemassa komentoriviohjelma. Tällöin graafisen selaimen avaaminen tiedoston kopioimiseksi voi oikeasti vain hidastaa. Joskus graafista vaihtoehtoa ei ole olemassa. Loppujen lopuksi kyse on tietenkin tottumisesta ja mielipiteistä.
Pidä nyt pieni tauko: voit taputtaa itseäsi selkään, sait käytyä ensimmäisen osan läpi! Palaa sen jälkeen tämän sivun alusta löytyviin oppimistavoitteisiin, ja selvitä itsellesi, mitkä aiheet tarvitsevat vielä kertausta.
Tämä osa toimi esittelynä komentoriviin. Komentorivi tarjoaa kuitenkin vielä paljon erilaisia työkaluja ja komentoja, joita ei tässä käyty läpi. Tulet oppimaan ne tulevilla kursseilla sitä mukaan kuin niitä tarvitset. Alla vielä listaus hyödyllisistä komennoista, joihin kannattaa ehkä tutustua, vaikkei niitä käyty tässä läpi:
watch
: toista komentoa tietyin väliajoin&&
tai;
: ketjuta komentoja peräjälkeenalias
: määrittele komennoille aliaksia, joiden avulla voit kutsua niitä esimerkiksi nopeammin.&
: kirjoittamalla merkin komennon loppuun sen aloittama prosessi jää taustalle, eikä lukitse komentoriviähistory
: tarkastele komentohistoriaaCtrl + r
: etsi komentoja omasta historiasta hakusanoilla