Komentorivityöskentely - UNIX/DOS - Luento 2

Tämän luennon aiheena on komentorivityöskentely UNIX-ympäristöissä.

Luentotaltiointi

Ongelmia videon katselussa?

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

Missä komentoriviin törmää?

Mikä on UNIX?

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

Komentorivin hyötyjä

Yhteydenotto palvelinkoneeseen

Merkkipohjaisessa järjestelmässä työskentely

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

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/

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

Korvausmerkit

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)

[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]$

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

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

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

Ongelmatilanteet

Unixin komentoriviympäristössä tulee yleensä ongelmaksi ohjelma, joka jää jumiin tai jonka toiminta muusta syystä halutaan keskeyttää. Ensimmäinen tapa katkaista ohjelman toiminta on CTRL-C-näppäinyhdistelmä.

Joskus pääteyhteys Unix-koneeseen menee jumiin. Tämän aiheuttaa mahdollinen CTRL-S-näppäinyhdistelmän painaminen, joka pysäyttää pääteohjelman toiminnan. Tästä selviytyy painamalla CTRL-Q. Jos jumiutuminen johtuu verkkoyhteyden pätkimisestä niin ei auta kuin odotella.

Mahdollisesti taustalle jäävät ongelmalliset ohjelmat voi lopettaa kill-komennolla. ps-komennolla näkee listauksen omista ohjelmistaan ja näiden ohjelmien prosessinumerot. Prosessonumeron 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!

UNIX-komentoja

Muita hyödyllisiä komentoja tai ohjelmia

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/tyovaline/luennot2/luento2/
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
2012-08-13 12:33:01
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta