komentorivityöskentely - UNIX, Linux, DOS

Tämän materiaalin pääaiheena on komentorivityöskentely DOS- ja Linux-ympäristöissä. Hyvää lisämateriaalia ovat artikkelit Unix-käyttöjärjestelmän alkeita, Windowsin käyttäminen komentotulkin avulla ja Komentojonotiedostot.

# PLUGINNAMEHERE

Mikä on komentorivi ([*CLI, Command Line

Interface*](http://en.wikipedia.org/wiki/Command_line_interface))?

  • Komentorivi on eräs mahdollisuus käyttöjärjestelmän ja ohjelmien käyttöliittymäksi.

  • Komentoriville kirjoitetaan käskyjä, joilla voidaan hallita koneen resursseja.

  • Komennon nimi on muistettava (vrt. valikot). Komento annetaan muodossa:

    komento vivut parametrit

Tämän voi ehkä ymmärtää paremmin jos ajattelee komennon yksinkertaisimmassa muodossa:

TeeJotain Mille

Yleensä kuitenkin pitää hieman tarkemmin kertoa mitä tehdään jolloin muoto on:

TeeJotain Miten mille

tai jos jotakin tiedostoa muokataan uuteen muotoon:

TeeJotain Miten LähtöTiedosto TuotettuTiedosto

Kaikista yksinkertaisin muoto on kuitenkin pelkkä:

TeeJotain

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

Kumpi on parempi käyttöliittymä?

CLI GUI
Helppous alussa Vaikea oppia, vaatii enemmän muistamista Helppo oppia, intuitiivisempi
Käyttöliittymä Jokaisen ohjelman käyttöliittymä samanlainen Käyttöliittymät erilaisia
Moniajo Moniajo on hankalaa Moniajo on helppoa
Nopeus Osaavan käsissä erittäin nopea Hitaahko
Kontrolli Antaa laajan kontrollin Rajatumpi, ohjelmakohtaista
Resurssit Vaatii vähän resursseja Vaatii paljon resursseja
Skriptaus Komentojonot (Skriptaus) - erittäin helposti ohjelmoitavissa ja automatisoitavissa Rajatusti mahdollista, ohjelmakohtaista
Etäkäyttö Yleisimmin etäkäyttö tapahtuu CLIn avulla Rajoitetusti 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ää?

  • DOS / Windowsin komentokehote (command prompt) tai modernimpi Windows PowerShell
  • Unix/Linux-koneiden päätekäyttö (SSH-yhteydellä) eli shell-käyttö
  • Apple Terminal
  • Joidenkin ohjelmien yhteydessä esim. AutoCAD, R (tilastotiede), MATLAB (matematiikka), tietokannanhallintajärjestelmät, LaTeX, ohjelmointityökalut
  • Käytämme kurssilla lähinnä yliopiston Linux-koneita, koska kaikilla on niihin pääsy ja käytössä samanlainen komentoriviympäristö

Mikä on UNIX?

  • UNIX on käyttöjärjestelmä (vrt. Windows). Erilaisia versioita UNIXista ovat muun muassa seuraavat (vrt. Windows XP/7/10):
    • Linux (eri versioita mm. Ubuntu, Debian, Knoppix, Mandrake jne.)
    • NetBSD
    • HP-UX
    • Solaris
  • UNIX on monen käyttäjän käyttöjärjestelmä. Samaa konetta ja siinä olevia ohjelmistoja voi siis samanaikaisesti käyttää jopa satoja henkilöitä.
  • UNIXia voi käyttää joko merkkipohjaisena (vrt. DOS) tai Windowsia vastaavan graafisen käyttöliittymän kautta (X-windows).

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

  • Palvelin tarjoaa palveluja (esim. WWW-palvelu tai SSH-palvelu)
  • Palveluja voidaan käyttää asiakasohjelmalla (esim. WWW-selain tai SSH-ohjelma).

[*Komentorivin

hyötyjä*](http://www.softpanorama.org/OFM/gui_vs_command_line.shtml)

  • "Tehdäänkö nopeasti vai tehdäänkö hiirellä?"
  • Etäkäyttö komentorivipohjaisella käyttöliittymällä ei ole yhtä raskasta kuin graafisella
  • Osaava käyttäjä toimii merkkipohjaisessa ympäristössä (CLI, command line interface) usein tehokkaammin kuin graafisessa käyttöliittymässä (GUI, Graphical User Interface). Esimerkkejä tehokkaista komentorivityökaluista ja toimenpiteistä:
    • Usean videotiedoston yhdistäminen yhdeksi tiedostoksi
    • Linux-koneen ohjelmistojen päivittäminen ja asentaminen
    • Kuvatiedoston muuntaminen kuvaformaatista toiseen kuvaformaattiin
  • Komentoriviohjelmien käyttäminen on aina (lähes) samanlaista.
    • Opit kerran käyttämään komentoriviä ja komentoriviohjelmia niin osaat sen jälkeen käyttää kaikkia komentoriviohjelmia
    • Graafisessa käyttöliittymässä joudut opettelemaan jokaisen ohjelman käyttöliittymän erikseen. Poikkeuksena tietyt asiat, jotka toimivat (yleensä) kaikissa ohjelmissa.
  • Käteviä ja tehokkaita merkkipohjaisia ohjelmia on edelleen käytössä
    • Ohjelmointityökalut
    • LaTeX
    • Komentojonot - Voit tehdä itse!
  • Aina ei voi valita!. Joidenkin toimenpiteiden tekeminen vaatii merkkipohjaisten ohjelmien käyttöä esim. järjestelmien ylläpitotehtävissä
  • Joitain asioita ei pysty tekemään graafisella käyttöliittymällä. Esim. putkitus.
  • Yhdellä komennolla voidaan käsitellä useampia tiedostoja.
    • Valitsetko 10 kertaa valikoista File|Open ja muita toimenpiteitä vai teetkö yhdellä rivillä saman asian komentorivillä?
  • Komentorivillä voidaan ohjata monipuolisesti ohjelman toimintaa.
  • Toiminto- ja komentohistoria
    • Voit hyvin nopeasti toistaa aiemmin tehdyt komennot samanlaisina tai pienillä muutoksilla
  • Usein toistuvista toimenpidesarjoista voidaan tehdä käteviä komentojonoja. Seuraavassa muutamia esimerkkejä ongelmista, joissa komentojono voi olla ratkaisu:
    • Tietyntyyppisten tiedostojen kopiointi yhdellä komennolla www-palvelimelle tai muulle tietokoneelle
    • Varmuuskopiointi CD-levylle
    • Roskapostiohjelman opettaminen lajiteltujen viestien perusteella
    • 100 valokuvan koon muuttaminen
    • Kymmenien videotiedostojen muuntaminen toiseen muotoon
    • Usean tiedoston tulostaminen samanaikaisesti
    • Luentovideolistauksen lisääminen luentosivulle

Yhteydenotto palvelinkoneeseen

  • Unix-käyttöoikeus pitää olla aktivoituna salasana.jyu.fi-palvelun kautta
  • Pääteyhteys otetaan Putty -ohjelmalla (Start | All Programs | Putty SSH tools | Putty SSH Client) tai muulla yhteyden salaavalla ohjelmalla.
  • Host Name: halava.cc.jyu.fi (muita vaihtoehtoja: jalava.cc.jyu.fi)
  • User Name: käyttäjätunnus (sama tunnus kuin kaikkiin muihinkin yliopiston järjestelmiin)

Merkkipohjaisessa järjestelmässä työskentely

  • Kirjaudutaan sisään omilla tunnuksilla ja luetaan alkutekstit.

  • Työskentely tapahtuu pelkän näppäimistön avulla, joten hiirtä ei voi käyttää juuri ollenkaan.

    • SSH-ohjelman valikoista ei ole apua. SSH-yhteysohjelma vain näyttää mitä UNIX-koneessa tapahtuu.
  • Sisäänkirjautumisen jälkeen UNIX-kone kertoo päivän viestin (Message of the day, MOTD)

  • Komentokehote jää odottamaan käyttäjän komentoja. Komentokehotteen alussa saattaa lukea esim. kellonaika ja käytetyn koneen nimi ja sijaintikansio.

    [tjlahton@halava ~]$

  • Käyttöjärjestelmälle syötetään komentoja komentoriville. esim:

    [tjlahton@halava ~]$ ls

Komento päätetään enterin painalluksella.

  • Käyttöjärjestelmä antaa vasteen syöttöihin vain tarvittaessa. Jos mitään vastetta ei tule niin oletuksena kaikki on mennyt oikein. Usein vain virheistä ilmoitetaan.

  • Isoilla ja pienillä kirjaimilla on merkitystä UNIXissa! ls on eri komento kuin Ls tai LS

  • Komennon eri osien väliin tulee välilyönti.

    [tjlahton@halava ~]$ ls -al

  • Väliviiva (-) on usein komentoon liittyvän valitsimen eli vivun etumerkki.

  • Komennon perään kirjoitetaan yleensä parametrejä joita komento tarvitsee toimiakseen

    • esim. man-komennolla saa avustuksen halutusta komennossa esim.

    [tjlahton@halava ~]$ man ls

ls on nyt man-komennolle annettu parametri eli tässä tapauksessa sen komennon nimi, jonka manuaalia halutaan lukea.

  • Parametrit erotetaan komennosta ja toisistaan välilyönnillä
  • Tiedostojen nimeämisessä kannattaa noudattaa seuraavaa (pätevät myös Windowsissa):
    • Tiedostojen nimeen ei välilyöntejä!
    • Tiedostojen nimeen ei skandeja (äöå) tai erikoismerkkejä (&,? jne.) paitsi alaviiva (_)

Kotihakemisto

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

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)

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.

Suhteellista 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

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!

Komentorivi Windows-ympäristössä, komentojonot, hyödyllisiä komentoriviohjelmia

# PLUGINNAMEHERE

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 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ä komentorivitulkki jonne pääsee valinnalla Start|Program|Accessories|Command Prompt

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ä.

UNIX-komentoja ja -ohjelmia

  • Oikeuksien muuttaminen - chmod go+r tiedosto
  • Poistuminen - exit tai logout
  • Sähköpostiohjelma - pine tai alpine tai mutt
  • Englannin sanakirja morse kukka
  • ps2pdf - muuntaa postscript-tiedoston pdf-tiedostoksi
  • pdf2ps - muuntaa pdf-tiedosto´n postscript-tiedostoksi
  • tin - ohjelma Usenet-ryhmien lukemiseen
  • irc ja irssi - irc-ohjelmia
  • Tekstieditori nano tai pico

nano on useimmista Unix-koneista löytyvät yksinkertainen tekstieditori jolla voi muokata esim. www-sivuja.

  • Dokumentin avaaminen- nano dokumentti

  • Rivin leikkaaminen - CTRL-K

  • Liittäminen - CTRL-U

  • Tallentaminen - CTRL-O

  • Poistuminen ja tallentaminen- CTRL-X

  • Etsiminen - CTRL-W

  • Selainohjelma - lynx 'http://mot.kielikone.fi/mot/jyu/netmot.exe?UI=fi80' tai links 'http://mot.kielikone.fi/mot/jyu/netmot.exe?UI=fi80' tai w3m 'http://mot.kielikone.fi/mot/jyu/netmot.exe?UI=fi80'

  • imagemagick - ohjelmistopaketti kuvankäsittelyyn

    • convert
    • mogrify
    • identify
  • screen - mahdollistaa useamman yhtäaikaisen päätteen ja ohjelmien pitämisen käynnissä vaikka pääteistunto ei olisikaan käynnissä.

  • LaTeX

  • tidy

  • wget

  • find

  • locate

  • rsync

  • du

  • df

  • nice

  • sed

  • awk

  • top

  • bc

  • cal

  • wc

  • sqlite3

  • Linux command library

scp

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

  • Nykyisessä hakemistossa olevan tiedoston siirtäminen palvelimelle:

    scp tiedosto tunnus@kone.verkkoalue:hakemisto

  • Tiedoston siirtäminen paikalliselle koneelle nykyiseen hakemistoon:

    scp tunnus@kone.verkkoalue:hakemisto/tiedosto .

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.c

SCP:n saat omalle koneelle hakemalla Putty SCP:n.

DOS-komentoja

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

  • start käynnistää dokumentin tyypistä riippuvan ohjelman ja avaa dokumentin
  • taskkill tappaa prosessin (ohjelman)
  • netstat näyttää verkkoyhteydet
  • ping testaa verkkoyhteyden toiminnan
  • tracert diagnosoi verkkoyhteyksiä
  • ipconfig näyttää verkkokonfiguraation

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

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)

    • tarkoittaa nollaa tai useampaa mitä tahansa merkkiä
    • rm *.txt tuhoaa kaikki .txt-päätteiset tiedostot
    • mogrify -resize 640x480 -format jpeg *.tif pienentää .tif-päätteiset kuvatiedostot ja muuntaa ne jpeg-muotoon
  • ? tarkoittaa mitä tahansa yksittäistä merkkiä
    • rm ???.txt tuhoaa kaikki tiedostot joiden nimi on enintään kolme merkkiä pitkä ja pääte on .txt

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

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
.tr
|-- 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 esivuttaa näytvana olevalle ohjelmalle.

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

sort-komento järjestää sille annetun tiedon. Esim. ls-komennon tulosteen voi putkittaa sortille:

[tjlahton@jalava ~/tyovaline]$ ls | sort

Putkituksia voi olla useita putkeen esim. seuraava tulostaa .doc-päätteisistä tiedostoista ne joiden nimestä löytyy a-kirjain ja järjestää ne aakkosjärjestykseen

[tjlahton@jalava ~/tyovaline]$ ls *.doc | grep a | sort

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

Komentojonot

Komentojonoilla voidaan:

  • Tehdä usein toistuvia toimintoja, kuten varmuuskopiointia
  • Tehostaa ja yksinkertaistaa komentoriviohjelmien käyttöä
  • Tehdä yhdellä komennolla sama toiminto usealle tiedostolle
  • Yksinkertaisimmat komentojonot ovat vain listaus komentoja peräkkäin. Monimutkaisimmat vaativat jo ohjelmointitaitoa.

Komentojonot unixissa

Komentojonot voivat unixissa olla minkänimisiä tahansa kunhan kyseiselle tiedostolle annetaan suoritusoikeus:

chmod a+x tiedosto

Tiedostojen oikeuksia voi muuttaa chmod-komennolla tai FileZillalla.

Lisätietoa komentojonoista

Hyvien komentojonojen tekeminen edellyttää ohjelmointitaitoa. Lisätietoa aiheesta löytyy osoitteista:

Miten komentojono tehdään Windows-ympäristössä?

Komentojonotiedosto on tavallinen pelkkää tekstiä sisältävä tekstitiedosto (ASCII), joka nimetään päätteelle .BAT tai .CMD.

Komentojonotiedosto sisältää tavallisia DOS-komentoja sekä ajettavien ohjelmien nimiä ja muutamia erityisesti komentojonoja varten tehtyjä komentoja.

Jokainen yksittäinen komentojonotiedoston rivi sisältää jonkin DOS-komennon.

Hello World -esimerkki

Seuraava komentojono tulostaa näytölle tekstin "Hello World".

Seuraava rivi on tallennettu hello.bat nimiseen tiedostoon.

Tiedoston ajaminen onnistuu kirjoittamalla komentoriville pelkkä komentojonon nimen alkuosa eli esimerkin tapauksessa hello.

ECHO Hello World!

Komentojono sisältää ainoastaan echo-komennon, jonka perään on kirjoitettu teksti, joka halutaan tulostaa näytölle.

C:\cmd>hello
C:\cmd>echo Hello World!
Hello World!
C:\cmd>

Ajettaessa tehty komentojono täytyy olla oletushakemistossa tai PATH-ympäristömuuttujasta täytyy löytyä viittaus hakemistoon, jossa komentojonot sijaitsevat. Ympäristömuuttujia voi käsitellä set-komennolla.

Monimutkaisempi esimerkki

  1. Komentojonon alussa tulostetaan näkyville viesti käyttäjälle

  2. tulostetaan yksi tyhjä rivi.

  3. kopioidaan E-levyaseman (esim. USB-tikku) juuresta kaikki tiedostot U-levyaseman juuressa sijaitsevaan tikku-hakemistoon.

    ECHO Kopioidaan levykkeen tiedostoja kovalevylle ECHO. COPY E:*.* U:

Edellisen esimerkin komentojono on tallennettu nimelle kopioi.bat.

C:\cmd>kopioi
C:\cmd>ECHO Kopioidaan tikun tiedostoja U:-asemalle

Kopioidaan tikun tiedostoja U:-asemalle

C:\cmd>ECHO.
C:\cmd>COPY e:\*.* u:\tikku
e:\selkkarit.html
e:\Esipuhe.doc
e:\kysely.html
e:\WindowsVista.doc
e:\index.html
5 file(s) copied
C:\cmd>

Esimerkkejä

Muuntaa wmv-muodossa olevan ruutukaappausvideon mp4-muotoon:

mencoder -priority idle video.wmv -idx -of lavf -lavfopts format=mp4 -quiet -nosound -noautoexpand -ovc x264 -x264encopts bitrate=50:global_header:keyint=1000:pass=1:threads=auto:subq=5:qp=0:me=umh:frameref=25:bframes=16:b_adapt:weight_b:no-dct-decimate:no-fast-pskip -o video.mp4

mencoder -priority idle video.wmv -idx -of lavf -lavfopts format=mp4 -quiet -noautoexpand -oac mp3lame -lameopts vbr=0:q=0:br=32:mode=0 -srate 16000 -ovc x264 -x264encopts bitrate=50:global_header:threads=auto:pass=2:subq=5:qp=0:me=umh:frameref=15:bframes=16:b_adapt:keyint=1000:weight_b:no-dct-decimate:no-fast-skip -o video.mp4

mencoder kelpuuttaa normaalista poikkeavassa muodossa olevia parametreja.

Nappaa videotiedoston äänen mp3-tiedostoon:

mplayer -priority idle -vc dummy -vo null -dumpaudio video.mp4 -dumpfile video.mp3

Luentovideotiedostojen yhdistäminen ja muuntaminen eri muotoihin sekä linkkilistauksen lisääminen luennot-sivulle:

P:\>cd tyovaline\luennot\luento14

P:\tyovaline\luennot\luento14>c:

C:\MyTemp\luennot\sovellukset\uusi>copy c:\mytemp\tjlahton2011-11-10* p:
c:\mytemp\tjlahton2011-11-10_1153.wmv
c:\mytemp\tjlahton2011-11-10_1214.wmv
c:\mytemp\tjlahton2011-11-10_1228.wmv
c:\mytemp\tjlahton2011-11-10_1235.wmv
c:\mytemp\tjlahton2011-11-10_1239.wmv
c:\mytemp\tjlahton2011-11-10_1244.wmv
c:\mytemp\tjlahton2011-11-10_1250.wmv
c:\mytemp\tjlahton2011-11-10_1310.wmv
c:\mytemp\tjlahton2011-11-10_1332.wmv
c:\mytemp\tjlahton2011-11-10_1340.wmv
       10 file(s) copied.

C:\MyTemp\luennot\sovellukset\uusi>P:

P:\tyovaline\luennot\luento14>dir *.wmv /od
 Volume in drive P is appro
 Volume Serial Number is 02C5-0421

 Directory of P:\tyovaline\luennot\luento14

10.11.2011  12:12        14 217 837 tjlahton2011-11-10_1153.wmv
10.11.2011  12:17           825 927 tjlahton2011-11-10_1214.wmv
10.11.2011  12:35         1 914 807 tjlahton2011-11-10_1228.wmv
10.11.2011  12:39         1 717 313 tjlahton2011-11-10_1235.wmv
10.11.2011  12:44         1 857 579 tjlahton2011-11-10_1239.wmv
10.11.2011  12:50         1 927 359 tjlahton2011-11-10_1244.wmv
10.11.2011  13:08         8 717 371 tjlahton2011-11-10_1250.wmv
10.11.2011  13:31         9 771 103 tjlahton2011-11-10_1310.wmv
10.11.2011  13:40         3 694 223 tjlahton2011-11-10_1332.wmv
10.11.2011  13:52         4 774 091 tjlahton2011-11-10_1340.wmv
              10 File(s)     49 417 610 bytes
               0 Dir(s)  32 871 809 024 bytes free

P:\tyovaline\luennot\luento14>
P:\tyovaline\luennot\luento14>c:join.pl tjlahton2011-11-10_1153.wmv tjlahton2011
-11-10_1214.wmv tjlahton2011-11-10_1228.wmv tjlahton2011-11-10_1235.wmv tjlahton
2011-11-10_1239.wmv tjlahton2011-11-10_1244.wmv tjlahton2011-11-10_1250.wmv tjla
hton2011-11-10_1310.wmv tjlahton2011-11-10_1332.wmv tjlahton2011-11-10_1340.wmv
c:\mytemp\luennot\sovellukset\uusi\asfbin.exe -i tjlahton2011-11-10_1153.wmv -i
tjlahton2011-11-10_1214.wmv -i tjlahton2011-11-10_1228.wmv -i tjlahton2011-11-10
_1235.wmv -i tjlahton2011-11-10_1239.wmv -i tjlahton2011-11-10_1244.wmv -i tjlah
ton2011-11-10_1250.wmv -i tjlahton2011-11-10_1310.wmv -i tjlahton2011-11-10_1332
.wmv -i tjlahton2011-11-10_1340.wmv -o tjlahton2011-11-10_1358.wmv
ASFBIN - version asfbin 1.8.2.903. Copyright 2001-2011 by RadioActive.
<poistettu pitkä listaus ohjelman turhia tulosteita>
Writing output file P:\tyovaline\luennot\luento14\tjlahton2011-11-10_1358.wmv:
0-100%:.....10.....20.....30.....40.....50.....60.....70.....80.....90.....100
Stream [2]: Avg sample distance = 1599 ms
Indexing output file:
0-100%:.....10.....20.....30.....40.....50.....60.....70.....80.....90.....100

P:\tyovaline\luennot\luento14>c:encode.pl tjlahton2011-11-10_1153.wmv tjlahton20
11-11-10_1214.wmv tjlahton2011-11-10_1228.wmv tjlahton2011-11-10_1235.wmv tjlaht
on2011-11-10_1239.wmv tjlahton2011-11-10_1244.wmv tjlahton2011-11-10_1250.wmv tj
lahton2011-11-10_1310.wmv tjlahton2011-11-10_1332.wmv tjlahton2011-11-10_1340.wm
v tjlahton2011-11-10_1358.wmv

Unixissa:

[tjlahton@halava luennot]$ videot.pl luento14/tjlahton2011-11-10_1*&gt; apu.txt

ja tuotettu apu.txt-tiedosto vain lisätään luentosivulle...

Lisätietoa

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.