Komentorivi (Command Line Interface, CLI)

Tämän luennon aluksi käsitellään kurssin kannalta olennaiset paikalliset järjestelmät (verkkolevyasemat) mutta pääaiheena on komentorivityöskentely Linux-ympäristöissä. Hyvää lisämateriaalia ovat artikkelit Unix-käyttöjärjestelmän alkeita, Windowsin käyttäminen komentotulkin avulla, Tietokone työvälineenä -kurssin komentorivimateriaali, Sormet Unixiin ja Sormet syvemmälle Unixiin, joista on lainattu osia myös tähän dokumenttiin.

Hyvä englanninkielinen perusmateriaali on The Unix Shell

Voit kokeilla komentoriviä suoraan selaimessasi jslinux-emulaattorilla.

WinSCP-ohjelman käyttäminen ja komentorivin aloitus:

Luennon loppuosa, komentoriviasioita:

Paikalliset järjestelmät

Tällä kurssilla tarvitset seuraavia:

Mikä on komentorivi (CLI, Command Line Interface)?

Komentorivi (CLI) vs Graafinen käyttöliittymä (GUI)

Kumpi on parempi käyttöliittymä?

Command Line Interface (CLI)Graphical User Interface (GUI)
Helppous alussaVaikea oppia, vaatii enemmän muistamistaHelppo oppia, intuitiivisempi
KäyttöliittymäJokaisen ohjelman käyttöliittymä samanlainenKäyttöliittymät erilaisia
MoniajoMoniajo on hankalaaMoniajo on helppoa
NopeusOsaavan käsissä erittäin nopeaHitaahko
KontrolliAntaa laajan kontrollinRajatumpi, ohjelmakohtaista
ResurssitVaatii vähän resurssejaVaatii paljon resursseja
SkriptausKomentojonot (Skriptaus) - erittäin helposti ohjelmoitavissa ja automatisoitavissaRajatusti mahdollista, ohjelmakohtaista
EtäkäyttöYleisimmin etäkäyttö tapahtuu CLIn avullaRajoitetusti mahdollista

Kummassakin käyttötavassa on puolensa. Tehokkainta on käyttää molempia.

graphical user interfaces make easy tasks easy, while command line interfaces make difficult tasks possible

Missä komentoriviin törmää?

Komentorivin hyötyjä

Mikä on UNIX?

Jyväskylän yliopistossa opiskelijat saavat tunnuksen Linux-palvelimelle. Yleinen periaate palvelimen toiminnassa on seuraava:

Yhteydenotto palvelinkoneeseen

Yhteydenotto palvelinkoneeseen Mac-ympäristössä

Macilla ei tarvitse asentaa mitään lisäohjelmia

Merkkipohjaisessa järjestelmässä työskentely

Tutustua ympäristöösi

Kokeile seuraavia komentoja:

[tjlahton@charra ~]$ whoami
tjlahton
[tjlahton@charra ~]$ uname
Linux
[tjlahton@charra ~]$ uname -n
charra.it.jyu.fi
[tjlahton@charra ~]$ uname -nmo
charra.it.jyu.fi x86_64 GNU/Linux
[tjlahton@charra ~]$

Merkinnät, pikanäppäimet, erikoisnäppäimet, erikoismerkit

Bash-shell-ympäristön tärkeimmät pikanäppäimet

NäppäinyhdistelmäToiminto
Ctrl + A Siirry rivin alkuun
Ctrl + E Siirry rivin loppuun
Ctrl + L Puhdistaa näytön
Ctrl + U Tyhjentää rivin kursorin paikasta rivin alkuun
Ctrl + H Sama kuin backspace-näppäin
Ctrl + R Selaa edellisiä komentoja
Ctrl + C Tappaa suorituksessa olevan ohjelman
Ctrl + D Sama kuin exit eli lopettaa shell-istunnon
Ctrl + Z Siirtää suorituksessa olevan ohjelman taustalle odottamaan. fg-komento jatkaa ohjelman suoritusta. bg-komento jatkaa ohjelman suoritusta mutta taustalla.
Ctrl + W Poistaa kursoria edeltävän sanan
Ctrl + K Tyhjentää rivin kursorista eteenpäin
Ctrl + S Pysäyttää pääteyhteyden toiminnan
Ctrl + Q Aktivoi pääteyhteyden uudelleen jos on painettu CTRL+S
Tab Sarkain-näppäin, täydentää automaattisesti tiedostojen ja kansioiden nimiä

Kts. Bash Shell Keyboard Shortcuts ja Table of keyboard shortcuts

Erikoismerkit

Jotkut komennoissa tarvittavat merkit ovat hieman yllättäviä ja harvemmin käytettyjä muualla kuin shelleissä. Lisäksi ne on joskus vaikea erottaa toisistaan paperilta tai näytöltä. Tässä on mallikappaleet vaikeammin toisistaan erottuvista erikoismerkeistä, joita shelleissä käytetään:

MerkkiSelitys
~ Tilde, "mato", aaltoviiva; tavallisesti Alt Gr:n ja enterin viereisen näppäimen yhdistelmänä. Tämän jälkeen pitää painaa vielä välilyöntiä, että varsinainen matomerkki tulee. Kyseessä on aksenttimerkki, joka tulee halutun merkin yläpuolelle eli tässä tapauksessa välilyönnin. Samaan tapaan voisi kirjoittaa myös esim. mañana
^ "hattu", caret; tavallisesti Shiftin ja enterin viereisen näppäimen yhdistelmänä. Sama juttu kuin tilden kanssa eli pitää painaa vielä välilyöntiä tai muuta näppäintä, jonka päälle aksenttimerkki halutaan esim. ê tai î
" Lainausmerkki, "double quote"
' Heittomerkki, "single quote", apostrophe
` gravis eli vasemmalle kallistuva aksenttimerkki, "back-tick"; tulee usein Shiftin ja BackSpacen vieressä olevan napin yhdistelmänä. Tämäkin on àksènttimerkkì, joten pitää painaa perään välilyöntiä. Muista Shift, ettei tule vahingossa ´ eikä `
{ Aaltosulku, curly bracket; tulee yleensä näppäilemällä Alt Gr + 7
} Vastaava aaltosulku toisin päin; tulee yleensä näppäilemällä Alt Gr + 0
| Pystyviiva, tolppamerkki, putkimerkki; tulee Alt Gr + vasemmasta alakulmasta, jossa mm. >

Muita tavallisesti käytettyjä erikoismerkkejä ovat |<>*?#!;& -- ne erottuvat toisistaan vähän helpommin.

Ongelmatilanteet

" Apua! Painelen näppäimiä, mutta mitään ei tapahdu shellissä "

Jotkut normaalit tilanteet voivat näyttää siltä, että shell jumittui eikä tee mitään. Alla on pieni ongelmanselvitysohje pääteyhteydelle silloin kun se "lakkaa vastaamasta". Tärkeintä on olla menemättä paniikkiin; näppäimiä ja varsinkaan enteriä ei saa hakata hullun raivolla, koska voi tulla lisätuhoja. Todennäköisesti kyseessä on ihan normaali ilmiö.

" Apua! Komentoni menevät läpi ja tulosteet tulevat, mutta en näe, mitä kirjoitan. "

Pääteyhteys on jotenkin seonnut. Kokeile auttaako CTRL+L. Kokeile myös auttaako pääteohjelmastasi valinta "Reset terminal". Jos ei kumpikaan auta niin ota uusi yhteys.

" Täysi paniikki! Kaikki on jumissa "

Jotkut ohjelmat voi olla pirullisia käyttää ennen kuin on lukenut niiden kryptiset ohjeet. Yksi esimerkki on Vi-tekstieditori, jossa pitää osata painella järjestyksessä napit ESC : q ! ja enter, että pääsee pois. Muitakin ehkä on.

Joskus ohjelmat kysyvät jotakin, johon pitäisi osata vastata jotakin. Jos et ole kiinnostunut opettelemaan asiaa manuaalista, tai ei ole aikaa, kokeile seuraavia näppäilyjä, jotka useissa ohjelmissa peruuttavat aloitetun interaktiivisen toiminnon:

Mahdollisesti taustalle jäävät ongelmalliset ohjelmat voi lopettaa kill-komennolla. ps-komennolla näkee listauksen omista ohjelmistaan ja näiden ohjelmien prosessinumerot. Prosessinumeron perusteella voi kill-komennolla lopettaa ohjelman.

Jos mikään muu ei auta niin kill -9 -1 tappaa kaikki käynnissä olevat prosessisi mukaanlukien pääteyhteytesi. Käytä varoen!

Kotihakemisto

Kuva kotihakemistosta

Käyttäjän kotihakemisto (~) on kansio, joka toimii käyttäjän oletuskansiona heti sisäänkirjautumisen jälkeen. Käyttäjän kotihakemisto ilmaistaan yleensä matomerkillä eli tildellä (~).

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3

Oletushakemisto

Kuva oletushakemistosta

Oletushakemisto (.) on se kansio, jossa käyttäjä paraikaa toimii. Esimerkissä oletushakemistona toimii demot-kansio.

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3

Oletuskansion (oletushakemiston) vaihtaminen

Oletushakemistoa vaihdetaan cd-komennolla.

[tjlahton@jalava ~]$ cd tyovaline
[tjlahton@jalava ~/tyovaline]$

Isähakemisto (edellinen hakemisto)

Kuva isahakemistosta

Isäkansio (..) on hakemisto, joka on kansiohierarkiassa oletushakemistosta yhden tason ylöspäin. Esimerkissä luento1-kansio isähakemisto on luennot-kansio. Vastaavasti luento1 -kansio on luennot-kansio alikansio.

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3

Isäkansioon siirrytään cd-komennolla käyttäen kohdekansion nimenä ..-merkintää.

[tjlahton@jalava ~/tyovaline]$ cd ..
[tjlahton@jalava ~]$

Kansiorakenteessa navigoiminen

cd-komennolla voi siirtyä useamman kansion sisään tai peruuttaa kansiorakenteessa ylöspäin.

Kauttaviiva (/) on kansioerotin.

[tjlahton@jalava ~]$ cd tyovaline/demot/demo3/
[tjlahton@jalava demo3]$ cd ../../../
[tjlahton@jalava ~]$ cd tyovaline/
[tjlahton@jalava ~/tyovaline]$ cd demot/
[tjlahton@jalava demot]$ cd demo3/
[tjlahton@jalava demo3]$ cd ../../luennot/luento2/
[tjlahton@jalava luento2]$

Edellä nähtyä tapaa ilmaista kohdekansio kutsutaan suhteelliseksi viittaukseksi.

Suoraan kotihakemistoon pääsee aina pelkällä komennolla cd eli ei mitään parametreja

Suhteellinen viittaus

Harjoittele suhteellista viittausta

Suhteellinen viittaus tarkoittaa tapaa viitata tiedostoon tai kansioon lukien oletushakemistosta

Suhteellinen viittaus viittaa siis aina eri tiedostoon tai kansioon riippuen siitä mikä on oletushakemisto

Suhteellisessa viittauksessa kuljetaan kansiorakenteessa ylös ja/tai alaspäin oletushakemistosta aloittaen.

Absoluuttista viittausta joutuu käyttämään paljon mm. www-sivujen yhteydessä ja taulukkolaskennassa.

Kuvitellaan tilanne jossa oletushakemisto on demot

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3

Nyt haluamme viitata luento2-kansioon vaikkapa siirtyäksemme sinne cd-komennolla:

[tjlahton@jalava demot]$ cd ../luennot/luento2/
[tjlahton@jalava luento2]$

Jos oletushakemistomme olisikin ollut demo1 niin toimisiko sama suhteellinen viittaus kuin edellä?

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3

Edellä käytetty viittaus ei enää toimi vaan se pitää mukauttaa uuteen sijaintiin sopivaksi:

[tjlahton@jalava demo1]$ cd ../luennot/luento2/
../luennot/luento2/: No such file or directory.
[tjlahton@jalava demo1]$ cd ../../luennot/luento2/
[tjlahton@jalava luento2]$

Lyhin mahdollinen suhteellinen viittaus on pelkkä samassa kansiossa olevan tiedoston tai kansion nimi

[tjlahton@jalava demot]$ ls demo3
Tietokonevirukset ja muut nykyajan tuholaiset.doc

Jos halutaan viitata omaan oletushakemistoon niin käytetään .-merkintää. ls-komento antaa listauksen oletushakemistosta jos sille ei anneta mitään parametreja. Toiminta on siis sama kuin parametrina olisi .

[tjlahton@jalava demot]$ ls
demo1  demo3
[tjlahton@jalava demot]$ ls .
demo1  demo3
[tjlahton@jalava demot]$

Absoluuttinen viittaus

Absoluuttisessa viittauksessa tiedetään jokin sijainti, joka on oletushakemistosta riippumaton.

Absoluuttinen viittaus toimii samanlaisena aina.

Unix-koneissa voidaan absoluuttisen viittauksen aloituspaikkana käyttää joko koko tiedostojärjestelmän juurta / tai käyttäjän omaa kotihakemistoa ~

Kuvitellaan tilanne jossa oletushakemisto on demot

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3

Nyt haluamme viitata luento2-kansioon vaikkapa siirtyäksemme sinne cd-komennolla:

[tjlahton@jalava demot]$ cd ~/tyovaline/luennot//luento2/
[tjlahton@jalava luento2]$

Jos oletushakemistomme olisikin ollut demo1 niin toimisiko sama absoluuttinen viittaus kuin edellä?

~
|
|-- tyovaline
|   |-- demot
|   |   |-- demo1
|   |   |-- demo2
|   |   `-- demo3
|   `-- luennot
|       |-- luento1
|       |-- luento2
|       `-- luento3
[tjlahton@jalava demo1]$ cd ~/tyovaline/luennot//luento2/
[tjlahton@jalava luento2]$

Absoluuttinen viittaus toimii, koska sen määrittelemän polun aloituspaikka on aina vakio.

Absoluuttista viittausta joutuu käyttämään paljon mm. www-sivujen yhteydessä ja taulukkolaskennassa.

Tiedostojen kopioiminen

Tiedostoja kopioidaan cp-komennolla. Komennolle kerrotaan kopioitavan tiedoston sijainti ja paikka (polku) jonne tiedosto halutaan kopioida. Voidaan käyttää sekä suhteellista että absoluuttista viittausta.

Kopioidaan tiedosto samassa kansiossa uudelle nimelle:

[tjlahton@jalava demo3]$ cp virukset.doc dokkari.doc

Kopioidaan tiedosto toiseen kansioon samalla nimellä

[tjlahton@jalava demo3]$ cp dokkari.doc ../
[tjlahton@jalava demo3]$ cp dokkari.doc ../demo1/
[tjlahton@jalava demo3]$ mkdir malli
[tjlahton@jalava demo3]$ cp dokkari.doc malli/

Kopioidaan tiedosto toiseen kansioon uudella nimellä

[tjlahton@jalava demo3]$ cp dokkari.doc ../virus.doc
[tjlahton@jalava demo3]$ cp dokkari.doc ../demo1/virus.doc
[tjlahton@jalava demo3]$ cp dokkari.doc malli/virus.doc

Kopioidaan tiedosto muualta oletushakemistoon

[tjlahton@jalava demo3]$ cp ../../testi.txt .

Kopioidaan muualla kuin oletushakemistossa oleva tiedosto muualle kuin oletushakemistoon

[tjlahton@jalava demo3]$ cp ../../testi.txt ../../luennot/luento2/

Sama kuin edellä mutta käyttäen absoluuttista viittausta

[tjlahton@jalava demo3]$ cp ~/tyovaline/testi.txt ~/tyovaline/luennot/luento2/

Sama kuin edellä mutta käyttäen sekä suhteellista, että absoluuttista viittausta

[tjlahton@jalava demo3]$ cp ~/tyovaline/testi.txt ../../luennot/luento2/

Manuaalit

Kukaan ei muista kaikkia komentoja ulkoa eikä varsinkaan kaikkia niiden vipuja. Ohjeita voi aina yrittää etsiä googlella mutta unixista löytyy myös man-komento jolla voi lukea komentojen ohjesivut

-k-vivulla voi hakea tiettyyn avainsanaan liittyvien komentojen avusteita

[tjlahton@jalava ~/tyovaline]$ man ls
[tjlahton@jalava ~/tyovaline]$ man -k www

Tekstieditori Nano

Yksinkertaisin Unix-ympäristöistä löytyvä tekstieditori on nano.

[tjlahton@halava tyovaline]$ nano foobar

Nano näyttää seuraavalta:

  GNU nano 2.0.9               File: foobar







                                  [ New File ]
^G Get Help  ^O WriteOut  ^R Read File ^Y Prev Page ^K Cut Text  ^C Cur Pos
^X Exit      ^J Justify   ^W Where Is  ^V Next Page ^U UnCut Text^T To Spell

Ikkunan yläreunassa näkyy Nanon versionumero sekä editoitavan tiedoston nimi. Keskellä ikkunaa on varsinainen tekstikenttä, jossa näkyy editoivan tiedoston sisältö. Alareunassa olevat kolme riviä kertovat käytössä olevat komennot sekä editorin tilan.

Komennot on merkitty hattu- eli ^ -merkillä, joka tarkoittaa Ctrl-näppäintä. Perässä on kirjain, jolla komento suoritetaan. Esimerkiksi poistumistoiminto toimii näppäinyhditelmällä Ctrl + X.

Monipuolisempia tekstieditoreita ovat Emacs ja Vim. Emacs osaa jopa keittää kahvia ja toimia psykoterapeuttina.

Korvausmerkit (jokerimerkit, wildcards)

Monesti halutaan tehdä sama toiminto useammalle tiedostolle samaan aikaan. Tämä edellyttää yleensä kaikkien tiedostojen nimien listaamista jonkun komennon parametreina. Jos tiedostoja on paljon tämä on vaivalloista. Usein ongelma kierretään käyttämällä korvausmerkkejä (jokerimerkkejä, wildcards)

Jokerimerkkejä on muitakin mutta tällä kurssilla riittää, kun ymmärtää *- ja ?-merkit.

Unix-ympäristössä komentotulkki tulkitsee jokerimerkit ennen komennon suorittamista. DOS-ympäristössä jokerimerkkien tulkinta on kunkin ohjelman omalla vastuulla.

[tjlahton@jalava ~/tyovaline]$ ls *.png
show_hide.png  testi.png  testikuva1.png  testikuva2.png  testikuva3.png
[tjlahton@jalava ~/tyovaline]$ ls *.doc
Testidokumentt1.doc  testi.doc  testi2.doc  testidokkari.doc  ~$testi2.doc
[tjlahton@jalava ~/tyovaline]$ ls *.???
Testidokumentt1.doc  power.zip         testidokkari.zip  tiedonhallinta.zip
esheep.exe           show_hide.png     testikuva1.png    tj.txt
itk010.zip           testi.doc         testikuva1.zip    tj2.txt
kansio.zip           testi.png         testikuva2.png    tyylit.css
malli.txt            testi.txt         testikuva2.zip    ~$testi2.doc
mallipaketti.zip     testi2.doc        testikuva3.png
paketti.zip          testidokkari.doc  testipaketti.zip
[tjlahton@jalava ~/tyovaline]$

Erikoismerkit tiedostojen nimissä

Jos tiedostojen tai kansioiden nimissä esiintyy erikoismerkkejä kuten välilyönti tai korvausmerkkejä voi niiden käsittely komentoriviltä olla hankalaa. Erikoismerkkien ongelmia voi kiertää sijoittamalla tiedoston nimi lainausmerkkeihin tai asettamalla erikoismerkkien eteen \-merkkejä.

[tjlahton@jalava ~/tyovaline]$ mv tämä\ on\ hankala\ nimi.png parempi_nimi.png
[tjlahton@jalava ~/tyovaline]$ mv "tämä on hankala nimi.png" uusi.png

Samaan tapaan pitää toimia jos jokerimerkki halutaan antaa komennon eikä komentotulkin tulkittavaksi:

find ./ -name \*\.htm -type f -print

Komentotulkki (shell) käsittelee ensimmäisenä komentorivin. Haluatko, että shelli purkaa regexpit vai haluatko, että ne tulkitsee find-komento? Jos haluat, että erikoismerkit (regexp) menee findille käsiteltäväksi, niin silloin laitat ympärille '' tai \-merkillä merkitse erikoismerkit. Jos haluat, että shelli purkaa ensin erikoismerkit (regexp) vastaaviksi tiedostonimiksi, niin et laita ''-merkkejä.

Jos kansion sisältö on:

[tjlahton@halava vt]$ ls -1
vt1
vt2
vt3
vt4
vt5
index.html

Haluan etsiä kaikista vt-alkuisista alikansioista kaikki .html-päätteiset tiedostot:

find vt* -name "*.html" -ls
Tässä on olennaista, että vt* on juuri tuossa muodossa ja "*.html" juuri näin. Komentotulkki käsittelee vt* ja muuntaa sen vastaaviksi tiedostonimiksi. *.html sen sijaan menee find-komennon käsiteltäväksi. Lopullinen suoritettava komento on oikeasti:
find vt1 vt2 vt3 vt4 vt5 -name "*.html" -ls
Jos tuon kirjoittaisi muodossa:
find vt* -name *.html -ls

niin komento onkin käytännössä:

find vt1 vt2 vt3 vt4 vt5 -name index.html -ls

koska shelli laajentaa tuon *.html vastaamaan kansiosta löytyviä tiedostoja. Tätä voi harjoitella esim. echo komennolla. Kokeile kirjoittaa echo komentorivisi eteen niin näet millainen rivi on shellin käsittelyn jälkeen. esim.

echo find vt* -name *.html -ls

vs

echo find vt* -name "*.html" -ls

Lisätietoa: Globbing

Ohjelman tulostuksen edelleenohjaus

Komentorivikäytölle on tyypillistä työkaluajattelu jossa monimutkaisemmat tehtävät suoritetaan yhdistelemällä yksinkertaisia työkaluja.

Yksi tyypillinen toimenpide on ohjelman tulostuksen ohjaaminen tiedostoon eikä näytölle. Tällä saadaan komennon antama tulos jatkokäsiteltäväksi. Tulostuksen ohjaaminen tapahtuu >- ja >>-merkinnöillä.

[tjlahton@jalava demo3]$ tree
.
|-- dokkari.doc
|-- malli
|   `-- dokkari.doc
|-- testi.txt
`-- virukset.doc

1 directory, 4 files
[tjlahton@jalava demo3]$ tree > malli.txt
[tjlahton@jalava demo3]$
[tjlahton@jalava demo3]$ cat malli.txt
.
|-- dokkari.doc
|-- malli
|   `-- dokkari.doc
|-- malli.txt
|-- testi.txt
`-- virukset.doc

1 directory, 5 files

> korvaa aina mahdollisen vanhan tiedoston.

>> lisää tulosteen tiedoston perään.

Putkitus

Komennon tulosteen voi ohjata myös suoraan toiselle komennolle |-operaattorilla eli putkittaa tulosteen jonossa seuraavana olevalle ohjelmalle. esim. ls-komennon tulosteen voi sivuttaa näytölle putkittamalle sen less-komennolle. esim.

[tjlahton@jalava ~/tyovaline]$ ls | less
[tjlahton@jalava ~/tyovaline]$ tree | less

grep

grep-komento on tärkeimpiä ja hyödyllisimpiä komentorivikomentoja. grep-komennolla voidaan poimia tiedostosta vain ne rivit joilla esiintyy haluttu merkkijono. esim. halutaan listata tiedoston rivit joista löytyy sana conf


ls /etc > tiedostot.txt
grep conf tiedostot.txt

Tiedostojen oikeudet

Montaa käyttäjää tukevissa käyttöjärjestelmissä on olennaista ymmärtää myös tiedostojen erilaiset oikeudet. Voi olla, että joitakin tiedostoja saa käyttää kuka tahansa, toisia vain tiedoston omistaja ja toisia vain jokin tietty ryhmä.

Tiedostojen erilaiset oikeudet näkyvät unix-ympäristöissä komennolla ls -l tai ls -al.

[tjlahton@halava tyovaline]$ ls -al
total 8
drwxr-xr-x.  3 tjlahton itappro   35 Aug 30 12:43 .
drwxr-x---. 13 tjlahton users   4096 Aug 29 17:06 ..
-rw-r--r--.  1 tjlahton itappro    0 Aug 30 12:43 foobar
drwxr-xr-x.  2 tjlahton itappro    6 Aug 29 17:06 tyovaline
[tjlahton@halava tyovaline]$

Oikeudet näkyvät ensimmäisessä sarakkeessa.

Sarakkeen ensimmäinen kirjain kertoo tiedostotyypin. Yhdeksän seuraavaa ovat varsinaiset oikeudet. Oikeudet ovat järjestyksessä seuraavasti:

Oikeuksien muuttaminen

chmod [-optiot] [asetettavat oikeudet symboleina] [tiedoston tai
hakemiston nimi]

Tiedostojen oikeuksien muuttaminen tapahtuu chmod-komennolla. Optio -R muuttaa oikeudet rekursiivisesti eli koko hakemistorakenteeseen. Varsinainen oikeustietoihin tapahtuva muutos annetaan joko oktaalinumeroina tai symbolisesti

Ensin annetaan tieto kenelle oikeuksia muutetaan.

Seuraavana kerrotaan miten oikeuksia muutetaan:

Viimeisenä kerrotaan mitä oikeutta muutetaan:

Esimerkiksi lisätään tiedostolle metsastys kaikille suoritusoikeus.


jane:~>chmod a+x metsastys

jane:~>

Lisätään käyttäjälle ja ryhmälle kirjoitusoikeus tiedostoon lintu.


jane:~>chmod ug+w lintu

jane:~>

Poistetaan rekursiivisesti ryhmältä ja muilta, luku- ja suoritusoikeus hakemistoon x-files.


jane:~>chmod -R go-rx x-files/

jane:~>

Määrätään rekursiivisesti hakemistolle omat käyttäjälle kaikki oikeudet ja poistetaan samalla mahdolliset muut oikeudet.


jane:~>chmod -R u=rwx omat/

jane:~>

Käytännön esimerkkinä toimii oman www-hakemiston oikeuksien muuttaminen. www-hakemistossa tulee itsellä olla kaikki oikeudet ja muilla lukuoikeus, jotta sivuja voidaan katsella www-selaimella. Eli esimerkiksi index.html-tiedoston oikeuksien muuttaminen oikeanlaisiksi tapahtuu seuraavasti.


jane:~>chmod a+r index.html

Omistuksen muuttaminen

chown [-optiot] [omistaja:ryhmä] [tiedoston tai hakemiston
nimi]

Komennolla chown voidaan muuttaa tiedoston omistusta. Komento on tarkoitettu pääkäyttäjälle (root). Kokemattoman käsissä komento on erittäin kätevä tapa saada omat tiedostot itsensä ulottumattomille!

Ympäristömuuttujat

Käyttöjärjestelmissä on tukku asetuksia, joiden tarkoitus on olla yhteisiä kaikille ohjelmille (vrt. jonkin ohjelman options-valinnat). Esim. kaikille ohjelmille on yhteinen Temp-kansio, jonne ohjelmat voivat tallentaa väliaikaisesti tiedostoja. Temp-kansion sijainti määritetään ympäristömuuttujalla.

PATH-ympäristömuuttuja

Yksi tärkeimmistä ympäristömuuttujista on PATH, jossa on lueteltu ne kansiot, joista ohjelmia etsitään silloin, kun ohjelman nimi annetaan komentoriviltä.

Jotta voit käynnistää komentorivillä vaikkapa itse tehdyn ohjelman, täytyy sinun viitata siihen kansioon jossa ohjelma sijaitsee esim.

~/bin/omaohjelma

Voit myös cd-komennolla siirtyä ohjelman kansioon. Tällöin ohjelmasi sijaitsee oletuskansiossasi ja voit käynnistää sen kirjoittamalla:

./omaohjelma

Koska usein on kätevää käynnistää ohjelma kirjoittamalla vain lyhyesti ohjelman nimi,tarvitaan PATH-ympäristömuuttujaa. PATH-ympäristömuuttuja kertoo shellille mistä kansioista suoritettavia ohjelmia pitää etsiä. Env-komennolla voi listata ympäristömuuttujat.

[tjlahton@charra luento1]$ env | grep PATH
PATH=/usr/local/texlive/2012/bin/x86_64-linux:/usr/local/texlive/2012/bin/x86_64-linux:/usr/local/texlive/2012/bin/x86_64-linux:/usr/local/texlive/2012/bin/x86_64-linux:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/nashome3/tjlahton/bin:/var/www/virtual.hosts/appro.mit.jyu.fi/bin:/nashome3/tjlahton/bin:/var/www/virtual.hosts/appro.mit.jyu.fi/bin

Jos haluat muuttaa PATH-muuttujan arvoa se tapahtuu lisäämällä entiseen arvoon uusia polkuja. Bash-shellissä tapahtuu seuraavasti:

export PATH=$PATH:/foobar/foo

Windowsin CMD- ja moni muu shell käyttää vastaavalla tavalla komentoa set tai setenv.

PATH-muuttujan arvo ei säily ellei sen asettamista lisää esim. ~/.bash_profile-tiedostoon. Windows-ympäristössä voi käyttää setx-komentoa, joka tekee pysyvän muutoksen ympäristömuuttujaan. Arvon voi myös asettaa Control Panelin -kautta.

Prosessien hallinta

Joskus ohjelma menee jumiin ja se pitää saada pysäytettyä. Joskus ohjelman suorittamisen haluaa taustalle.

screen-komennon avulla voi helposti suorittaa useita ohjelmia samaan aikaan ja jättää ohjelmat myös päälle vaikka kirjautuisi pois koneelta

Komentotulkit

Komentorivin käyttäminen riippuu paljon käytetystä komentotulkista.

Unix-ympäristöissä on tarjolla useita erilaisia komentotulkkeja eli shellejä

Windows-ympäristössä käytetään yleensä CMD.EXE-komentotulkkia jota monesti myös DOS-nimellä kutsutaan mutta myös nykyaikaisempi Windows PowerShell on käytettävissä.

CMD.EXE- ja UNIX-ympäristöjen vastaavuudet

CMD.EXE on Windowsin yhteydestä löytyvä komentorivi jonne pääsee valinnalla Start|Program|Accessories|Command Prompt

Windowsin CMD.EXE-tulkin saat valinnalla Start|All Programs|Accessories|Command Prompt tai Windows+R-näppäinyhdistelmän kautta suorittamalla komennon CMD. Parempi vaihtoehto on käyttää uudempaa Powershelliä, joka myös käynnistyy näppärimmin Windows+R-näppäinyhdistelmän kautta suorittamalla komento powershell.

Peruskomennot toimivat powershellissa kuten linux-shelleissä.

Introduction to the Windows Command Line with PowerShell

Windowssiin saa myös oikean Unix-Shellin asentamalla Cygwin-ohjelman. Windows 10 mahdollistaa myös oikean Linuxin asentamisen windowsin yhteyteen.

CMD.EXE-ympäristössä isoilla ja pienillä kirjaimilla ei ole merkitystä.

UNIX-ympäristössä isoilla ja pienillä kirjaimilla ON merkitystä!

Windows PowerShell -komentotulkissa toimivat yleensä sekä Unix- että CMD.EXE-komennot ja erikoismerkit.

Seuraavaan taulukkoon on merkitty UNIX-komennon yhteyteen myös esimerkki komennon käytöstä.

DOS UNIX UNIX-esimerkki TOIMINTA
\ / hakemistoerotin
/ - ls -al Komentojen valitsimien erotinmerkki
esim. DIR /p
. . cp ~/www/tyovaline/index.html . Oletushakemisto
.. .. cp ../luennot/index.html . Isähakemisto
D: Levyaseman vaihtaminen toiseksi
dir ls -la ls -la tyovaline Näyttää hakemistolistauksen oletushakemistosta tai annetusta hakemistosta
cd cd cd tyovaline/luennot/ Vaihtaa oletushakemiston toiseksi.
mkdir mkdir mkdir tyovaline/luennot/luento1 Tekee hakemiston
rmdir rmdir rmdir luento1 Tuhoaa tyhjän hakemiston
copy cp cp demot/demo1.txt luennot/luento1/luento1.txt Kopioi tiedostoja
type cat cat luento1.txt Tulostaa tiedoston sisällön näytölle
rename mv mv demot demoja Vaihdetaan tiedoston tai hakemiston nimi
del rm rm luento1.txt Tuhoaa tiedoston
move mv mv luento1.txt ../../demot/ Siirtää tiedoston uuteen paikkaan
chmod chmod go+r index.html Muutetaan tiedostojen ja hakemistojen oikeuksia
edit nano nano luento1.txt Yksinkertainen tekstieditori
find grep grep foo bar.txt Tulostaa halutun merkkijonon sisältämät rivit tiedostosta
help ohjelma tai ohjelma /? man ohjelma tai ohjelma ---help man ls Ohjelman avustus tai käyttöohje

UNIX-komentoja ja -ohjelmia

scp

scp on komentoriviltä toimiva FileZillaa vastaava ohjelma tiedostojen turvalliseen kopiointiin koneiden välillä.

Seuraavassa esimerkissä kopioidaan paikallisen koneen oletushakemistossa olevan tiedosto.txt-tiedoston jalava-koneeseen kimaitt-käyttäjän kotihakemiston alla sijaitsevaan temp-hakemistoon. Scp kysyy kopioinnissa tarvittavat salasanat.

scp tiedosto.txt kimaitt@jalava.cc.jyu.fi:temp/

Seuraavassa esimerkissä kopioidaan jalava-koneesta kimaitt-käyttäjän kotihakemistossa olevasta temp-hakemistosta tiedosto tiedosto.txt käyttämäsi koneen oletushakemistoon nimelle teksti.txt.

scp kimaitt@jalava.cc.jyu.fi:temp/tiedosto.txt teksti.txt

Seuraavassa esimerkissä kokonainen tyovaline-hakemisto siirretään palvelimen kotihakemistossa olevaan opinnot-hakemistoon:

scp -r tyovaline kimaitt@jalava.cc.jyu.fi:opinnot/

Uusimmissa windows- ja mac-koneissa scp löytyy valmiina powershell-komentoriviympäristöstä. SCP:n saat myös hakemalla Putty SCP:n.

rsync

rsync on komento jolla voi synkronoida tiedostoja palvelimien välillä. Mac-ympäristöissä rsync on valmiina. Windows-ympäristöön täytyy asentaa Linux, jotta pystyy käyttämään rsyncia.

rsync -avz kansio/ tunnus@halava.cc.jyu.fi:kansio/

Rsync synkronoi vain muuttuneet tiedostot.

DOS-komentoja

Seuraavat ohjelmat toimivat Windows-ympäristössä mutta useimmille löytyy vastine myös Unixista.

UNIX Command Line Tools For MS-Windows XP / Vista / 7 Operating Systems

Lisätietoa

Käyttäjien kommentit

Kommentoi Lisää kommentti
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta