Komentorivityöskentely - UNIX/DOS - Luento 2
- Luentotaltiointi
- Mikä on komentorivi (CLI, Command Line Interface)?
- Missä komentoriviin törmää?
- Mikä on UNIX?
- Komentorivin hyötyjä
- Yhteydenotto palvelinkoneeseen
- Merkkipohjaisessa järjestelmässä työskentely
- Kotihakemisto
- Oletushakemisto
- Oletuskansion (oletushakemiston) vaihtaminen
- Isähakemisto (edellinen hakemisto)
- Kansiorakenteessa navigoiminen
- Suhteellinen viittaus
- Absoluuttinen viittaus
- Tiedostojen kopioiminen
- Ohjelman tulostuksen edelleenohjaus
- Putkitus
- Korvausmerkit
- grep
- Manuaalit
- Erikoismerkit tiedostojen nimissä
- Ongelmatilanteet
- UNIX-komentoja
Tämän luennon aiheena on komentorivityöskentely UNIX-ympäristöissä.
Luentotaltiointi
- tyovaline02.avi 182M
- tyovaline02.mp3 35M
- tyovaline02.wmv 41M
Mikä on komentorivi (CLI, 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
Missä komentoriviin törmää?
- DOS / Windowsin komentokehote (command prompt)
- Unix-koneiden päätekäyttö (SSH-yhteydellä)
- Apple Terminal
- Joidenkin ohjelmien yhteydessä esim. AutoCAD, R (tilastotiede), MATLAB (matematiikka), tietokannanhallintajärjestelmät, LaTeX, ohjelmointityökalut
Mikä on UNIX?
- UNIX on käyttöjärjestelmä (vrt. Windows). Erilaisia versioita UNIXista ovat muun muassa seuraavat (vrt. Windows 95/98/NT/2000/XP/Vista):
- 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ä
- 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)
- Komentoriviohjelmien käyttäminen on aina (lähes) samanlaista.
- Käteviä ja tehokkaita merkkipohjaisia ohjelmia on edelleen käytössä
- Ohjelmointityökalut
- LaTeX
- Aina ei voi valita!. Joidenkin toimenpiteiden tekeminen vaatii merkkipohjaisten ohjelmien käyttöä (esim. verkkoasetuksien haku).
- Joitain asioita ei pysty tekemään graafisella käyttöliittymällä. Esim. putkitus.
- Yhdellä komennolla voidaan käsitellä useampia tiedostoja.
- Komentorivillä voidaan ohjata monipuolisesti ohjelman toimintaa.
- Toiminto- ja komentohistoria on usein saatavilla.
- Usein toistuvista toimenpidesarjoista voidaan tehdä käteviä komentojonoja. Seuraavassa muutamia esimerkkejä ongelmista, joissa komentojono voi olla ratkaisu:
- Tietyntyyppisten tiedostojen kopiointi yhdellä komennolla www-palvelimelle
- Varmuuskopiointi CD-levylle
- Roskapostiohjelman opettaminen lajiteltujen viestien perusteella
- 100 valokuvan koon muuttaminen
- Kymmenien videotiedostojen muuntaminen toiseen muotoon
- Usean tiedoston tulostaminen samanaikaisesti
Yhteydenotto palvelinkoneeseen
- Pääteyhteys otetaan Putty -ohjelmalla (Start | All Programs | Putty SSH tools | Putty SSH Client) tai muulla yhteyden salaavalla ohjelmalla.
- Host Name: jalava.cc.jyu.fi (muita vaihtoehtoja: halava.cc.jyu.fi)
- User Name: käyttäjätunnus (eli sähköpostitunnuksen alkuosa esim. tjlahton)
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)
.------------------------------------------------------------------------. | - Jos haluat sähköpostiohjelmasi toimivan NOPEASTI: tyhjennä INBOX!!!! | | - BOT yms. palvelijat kielletty, ainoastaan koneessa wildeast saa ajaa | | niitä, tunnus atk-keskuksen palvelupisteestä (MaD134) | | - Käyttölupa- ja käyttäjätunnusasiat, palvelupiste MaD134 puh 2603600 | | - Linux-ohjeita ja ajankohtaista tietoa komennolla help | | tai www.cc.jyu.fi/atk/unixtuki/linux | |------------------------------------------------------------------------| | - GSM-posti+numerohaku+, katso www.cc.jyu.fi/atk/sms | | - Roskapostin suodatukseen komento filter-email | | http://www.cc.jyu.fi/atk/email/index2.html#procmail | | - lisätty komento "stphone nimi" toimii kuten "phone nimi" | | - irssi, irc ja ident asennettu, ncftp:n korvaa lftp | | - Squirrelmail on 1.9.03 alkaen ainoa webmail -ohjelma | | Keksit eli Cookies oltava selaimessa sallittuna | | Salasanassa ei saa olla kirjaimia åäöÅÄÖ | |------------------------------------------------------------------------| | - /nobackup/31-34 tyhjennetään KOKONAAN 2 jaollisen kuukauden 1. päivä | .________________________________________________________________________. - Postisi ohjautuu osoitteeseen tommi.j.lahtonen@jyu.fi (tiedosto .forward) *** 2:54pm@verso:~%
- Komentokehote jää odottamaan käyttäjän komentoja. Komentokehotteen alussa saattaa
lukea esim. kellonaika ja käytetyn koneen nimi ja sijaintikansio.
2:55pm@verso:~%
- Käyttöjärjestelmälle syötetään komentoja komentoriville. esim:
2:55pm@verso:~% ls
Komento päätetään enterin painalluksella. - Käyttöjärjestelmä antaa vasteen syöttöihin 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.
2:55pm@verso:~% 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.
2:55pm@verso:~% 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ä
- esim. man-komennolla saa avustuksen halutusta komennossa esim.
- 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.
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)
- * 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
[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
- Kansion tekeminen - mkdir hakemisto
- Tiedoston nimen muuttaminen tai siirto - mv vanha_nimi uusi_paikka_nimi
- Tiedoston poistaminen - rm tiedosto
- Kansion poistaminen - rmdir tyhja_hakemisto
- Oikeuksien muuttaminen - chmod go+r tiedosto
- Poistuminen - exit tai logout
Muita hyödyllisiä komentoja tai ohjelmia
- Tekstieditori - pico tai nano
- Sähköpostiohjelma - pine
- Selainohjelma - lynx http://m.ilmainensanakirja.fi/ tai links http://m.ilmainensanakirja.fi/
- Englannin sanakirja morse kukka
- ps2pdf - muuntaa postscript-tiedoston pdf-tiedostoksi
- pdf2ps - muuntaa pdf-tiedoston postscript-tiedostoksi
- imagemagick - ohjelmistopaketti kuvankäsittelyyn
- convert
- mogrify
- identify
- tin - ohjelma Usenet-ryhmien lukemiseen
- irc ja irssi - irc-ohjelmia
Käyttäjien kommentit