Sisällys Johdatus Linuxiin/Unixiin: Osa 4 Tiedon arkistointi ja pakkaus Komentotulkki - tehokäyttöä Tekstin ladonta Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 9/12/2002 E. Hyvönen: Linux Osa 4 2 Arkistointi ja pakkaus Hakemistojen ja tiedostojen arkistointi ja pakkaus Arkistointia tarvitaan Hakemisto/tiedosto-kokonaisuuden tallettamiseksi kätevästi yhtenä tiedostona Tiedostojen pakkausta tarvitaan Levytilan säästämiseksi Tiedonsiirron nopeuttamiseksi Esimerkki Verkon välityksellä toimitettava kokonaisuus arkistoidaan tiedostoksi, joka pakataan. 9/12/2002 E. Hyvönen: Linux Osa 4 4 Arkistointi: tar tar [optiot][tiedostot] Arkistoi tiedostoja nauhalle/levylle tai kopioi tiedostoja arkistosta takaisin. Jos tiedostojen joukossa on hakemistoja, koko hakemistosta alkava alipuu kopioidaan. Tominto-optiot (vain yksi/komento): c tehdään uusi arkistotiedosto (compress) r liitetään tiedostot vanhaan arkistoon t tulostetaan arkistossa olevat tiedostonimet u lisätään tiedosto arkistoon, jos se ei ole vielä siellä x kopioidaan (avataan) tiedostot arkistosta (extract) 9/12/2002 E. Hyvönen: Linux Osa 4 5 Lisäoptiot: f arkisto talleta arkisto tiedostoon arkisto v näytä arkistoitavat tai palautettavat tiedostonmet (verify) tar-komentoa ei yleensä käytetä nauha-asemien kanssa. Sen sijaan sillä kopioidaan kokonaisia hakemistopuita yhdeksi arkistotiedostoksi. 9/12/2002 E. Hyvönen: Linux Osa 4 6
Tiedon pakkaus (kompressointi) Esimerkki tar cvf koe.tar joku Hakemisto joku ja sen alihakemistot kopioidaan arkistotiedostoon koe.tar (c=compress,v=verify,f=file) tar tvf koe.tar Tarkastetaan mitä tietoja tuli arkistoon (t=tulosta) tar xvf koe.tar Puretaan arkisto. Alkuperäinen arkistotiedosto jää jäljelle (x=extract) 9/12/2002 E. Hyvönen: Linux Osa 4 7 compress [optiot][tiedostot] Pakkaa tiedostot pienempään tilaan. Pakattu tiedosto saa.z -päätteen. Avaus komennolla uncompress tai zcat. Optiot: -c kirjoita tulos stdout:lle uncompress [optiot][tiedostot] Palauttaa compress-pakatut tiedostot. Optiot: kuten compress zcat [tiedostot] Sama kuin uncompress -c 9/12/2002 E. Hyvönen: Linux Osa 4 8 Pakkaus zippaamalla gzip [optiot][tiedostot] Kuten compress, mutta pakkaa paremmin. Tuloksilla on.gz -pääte Optiot: kuten compress gunzip [optiot][tiedostot] Kuten uncompress, mutta myös.gz -päätteisille tiedostoille. Tiedoston esitystavan muutokset uuencode [lähtötiedosto] tiedostonimi Muuntaa binääritiedoston ascii-muotoon, jolloin sen voi lähettää turvallisesti sähköpostitse. Uusimmat sähköpostiohjelmat (mm. pine) osaavat tämän muutenkin Tulostus menee aina stdout:lle. tiedostonimi-parametri tulee uudecodella avattavan tiedoston nimeksi. uudecode [tiedosto] Lukee uuencode:lla tehdyn tiedoston ja muuntaa sen takaisin alkuperäiseen muotoon. uudecode osaa poistaa sähköpostin otsikkorivit. 9/12/2002 E. Hyvönen: Linux Osa 4 9 9/12/2002 E. Hyvönen: Linux Osa 4 10 Komentotulkin tehtävät Komentotulkki - tehokäyttöä Komentotulkilla (shell) on kolme tehtävää, joista on tähän mennessä käsitelty ensimmäistä: Käyttöliittymä komentoihin. Sen avulla voidaan muokata omaa käyttöympäristöä. Se tarjoaa ohjelmointikielen, jolla voidaan tehdä uusia Unix-komentoja. Jokaisella komentotulkilla on omat komentonsa käyttöympäristöä ja shell-ohjelmointia varten. 9/12/2002 E. Hyvönen: Linux Osa 4 12
Käyttöympäristön muokkaus Tulkki (shell) määrittelee muuttujia, jotka kontrolloivat unix-istunnon toimintaa. Esimerkki: Kotihakemisto on määritelty muuttujassa HOME. Muuttujien asettaminen: Systeemi asettaa osan muuttujista automaattisesti. Osa voidaan asettaa itse istunnon alussa alustustiedostoissa, jotka luetaan ja suoritetaan istunnon alkaessa tai uutta tulkkia käynnistettäessä. Osa tulkeista (mm. tcsh ja bash) sallivat komennoille rinnakkaisnimiä (alias). Esim. komento "ls -l" on usein nimetty komennoksi dir ja ll. 9/12/2002 E. Hyvönen: Linux Osa 4 13 9/12/2002 E. Hyvönen: Linux Osa 4 14 Alustustiedostot: bash että tcsh käyttävät alustus-tiedostoja: Voidaan asettaa muuttujia. Voidaan nimetä komentoja uudelleen. Voidaan suorittaa ohjelmia. Alustustiedosto on komentotiedosto, jossa voidaan käyttää kaikkia shell:n tarjoamia ohjelmointiominaisuuksia. Komentotiedosto on rakenteeltaan tavallinen tekstitiedosto. Tekemiseen voi käyttää jotain tekstieditoria. 9/12/2002 E. Hyvönen: Linux Osa 4 15 Suoritettavat alustustiedostot: bash (TKTL:n Linux): ~/.profile istunnon alussa ~/.bashrc shell:n alussa, jos shell ei ole aloittanut istuntoa ~/.bash_logout istunnon lopussa ~/.login istunnon alussa ~/.cshrc uuden shell:n alussa ~/.logout istunnon lopussa 9/12/2002 E. Hyvönen: Linux Osa 4 16 Muuttujatyypit Sekä bash:ssa että tcsh:ssa on kahdenlaisia muuttujia: Ympäristömuuttujat, joihin voidaan viitata mistä tahansa prosessista. Sisäiset muuttujat, joita käytetään tulkin ohjaukseen. Ympäristömuuttujat Prosessit saavat kopiot ympäristömuuttujista, joten muuttujien arvon muutokset näkyvät vain prosessille ja sen aliprosesseille. Esim. jokainen tulkista käynnistetty ohjelma on tulkin aliprosessi, joten kaikki tulkissa tehdyt muutokset näkyvät kaikille käynnistetyille ohjelmille. Ympäristömuuttujat kirjoitetaan isoilla kirjaimilla, jotta ne eivät sekaannu muuhun unix-ympäristöön 9/12/2002 E. Hyvönen: Linux Osa 4 17 9/12/2002 E. Hyvönen: Linux Osa 4 18
Eräitä ympäristömuuttujia Muuttujien käyttäminen EDITOR oletuseditori HOME kotihakemisto HOST kone PAGER oletussivuttaja (esim. less) PATH ohjelmien hakupolku PRINTER oletuskirjoitin SHELL käytössä oleva komentotulkki TERM päätetyyppi USER käyttäjätunnus Muuttujat EDITOR, PAGER ja PRINTER voidaan muuttaa halutuiksi alustustiedostoissa. Kaikkien muuttujien listaus bash: export set printenv set kaikki muuttujat sisäiset muuttujat 9/12/2002 E. Hyvönen: Linux Osa 4 19 9/12/2002 E. Hyvönen: Linux Osa 4 20 Muuttujan asettaminen bash: export muuttuja=arvo muuttuja=arvo setenv muuttuja [arvo] set muuttuja [arvo] sisäiset muuttujat sisäiset muuttujat 9/12/2002 E. Hyvönen: Linux Osa 4 21 Muuttujaan viittaus $muuttuja sekä bash että tcsh Esim. echo "Kotihakemisto on $HOME" Huomaa kaksoislainausmerkit Muuttujan poisto bash: unset muuttuja unsetenv muuttuja unset muuttuja kaikki muuttujat sisäiset muuttujat 9/12/2002 E. Hyvönen: Linux Osa 4 22 bash:ssa voi määritellä alustustiedostoihin funktioita: nimi() { komennot } Huom. välilyönnit Esim. dir() { ls -l "$@" ; } Huom ";" Määriteltyjä funktioita voi käyttää kuten tavallisia unix-komentoja. Määrittelyyn on käytettävissä skriptikieli. muuttujat, ohjausrakenteineen, I/0-komennot jne. 9/12/2002 E. Hyvönen: Linux Osa 4 23 Osalla muuttujista on vain nimi. Tällaiset muuttujat ovat ns. lippuja (flag), jotka ovat joko päällä (muuttuja on asetettu) tai eivät ole päällä (muuttujaa ei ole asetettu). Lippu asetetaan päälle antamalla sijoituskomento ilman sijoitettavaa arvoa. 9/12/2002 E. Hyvönen: Linux Osa 4 24
Rinnakkaisnimet Sekä bash että tcsh sallivat komennoille rinnakkaisnimiä (alias), joiden avulla voidaan tehdä uusia komentoja. Rinnakkaisnimien asetus: bash: alias komento=suoritettava-komentojono Esim. alias rm='rm -i' Ilman välilyöntejä (=)! alias komento suoritettava-komentojono 9/12/2002 E. Hyvönen: Linux Osa 4 25 Komentotiedoston käyttö Kirjoita esim. tiedostoon "aliakset": # Alias-testi alias kotiin='cd ~' Komentotiedoston voi ajaa näin, jolloin määrittelyt jäävät voimaan tulkkitasolla:. aliakset Huom. väli pisteen jälkeen 9/12/2002 E. Hyvönen: Linux Osa 4 26 Rinnakkaisnimien listaus (bash, tcsh) alias Uuden komennon parametrit sijoitetaan loppuun, ellei paikkaa määritellä erikseen. Parametrien paikan määritys: bash: alias-komennossa ei parametreja Tehdään funktiolla: lstop() { ls -l "$@" more ; } Huom: erota { }-merkit välilyönnillä!! tcsh: \!* Esimerkki: alias lstop 'ls -l \!* more' 9/12/2002 E. Hyvönen: Linux Osa 4 27 Komentotiedostot Komentotulkit tarjoavat joukon erikoiskomentoja, joita voidaan käyttää komentotiedostoissa. Useita komentotiedostojen komentoja voidaan käyttää kuten normaaleja unix-komentoja ja komento-tiedostoissa voi olla normaaleja unix-komentoja. alias-määrittelyillä voidaan rakentaa yksinkertaisia uusia komentoja. Esimerkiksi (bash): alias tuhoa='rm -i' listaa() { ls -l "$@" more ; } 9/12/2002 E. Hyvönen: Linux Osa 4 28 Monimutkaisemmissa tapauksissa pitää käyttää shell:n ohjelmointiominaisuuksia luomalla komentotiedosto. Komentotiedoston ensimmäisenä rivinä voi olla joko #!/bin/tcsh tai #!/bin/bash sen mukaan kumpaa shellia käytetään. Jos riviä ei anneta, käytetään shelliä /bin/sh 9/12/2002 E. Hyvönen: Linux Osa 4 29 Komentotiedoston ohjausrakenteita: Peräkkäisyys Jokainen yksittäinen komento on omalla rivillään Ehdollisuus (tcsh): if (ehto) then komennot else komennot endif (else-osuus voi puuttua, endif päättää) 9/12/2002 E. Hyvönen: Linux Osa 4 30
Toisto (tcsh): repeat toistolkm komento while (ehto) komennot end foreach muuttuja (sanalista) komennot end Poistuminen(tcsh): exit tai exit(status) komentotulkin viimeisen rivin suoritus 9/12/2002 E. Hyvönen: Linux Osa 4 31 9/12/2002 E. Hyvönen: Linux Osa 4 32 Predikaatteja ehdoissa ==,!= Yhtä kuin/eri kuin <, >, <=, >= Pienempi, suurempi, ym. =~ Vasen puoli täsmää tiedostonimeen oikealla puolella (voi sis. jokerimerkkejä).!~ Vasen puoli ei täsmää tiedostonimeen oikealla puolella (voi sis. jokerimerkkejä). loogisia operaattoreita: && JA-operaattori TAI-operaattori! NEGAATIO-operaattori 9/12/2002 E. Hyvönen: Linux Osa 4 33 9/12/2002 E. Hyvönen: Linux Osa 4 34 tulostus (sekä tcsh että bash): echo teksti syötteen luku (tcsh): set muuttuja='$<' Viittaus komentorivin parametreihin (tcsh): $(#argv) Parametrien lukumäärä ${n} n:s parametri Parametrin korvaus komennon tuloksella: `komento` Huom: heittomerkit väärinpäin Esim. echo "Kotini on `echo $HOME`" 9/12/2002 E. Hyvönen: Linux Osa 4 35 Myös alustustiedostot ovat komentotiedostoja, joten niissä voi käyttää ohjausrakenteita. Lisätietoja: man tcsh ja man csh bash:n ja (sh:n) kontrollirakenteet eroavat hiukan tcsh:n vastaavista. Niitä ei käydä tässä läpi. 9/12/2002 E. Hyvönen: Linux Osa 4 36
Esim. tcsh-ohjelma, joka muuttaa syötteenä saamansa tiedostonimet pieniksi kirjaimiksi, paitsi tiedoston Makefile osalta: #!bin/tcsh foreach arg ($argv) if ($arg =~ *[A-Z]* && $arg!= "Makefile") then mv $arg `echo $arg tr '[A-Z]' '[a-z]'` end endif Komentotiedoston suoritus: Komentotiedosto voidaan suorittaa kahdella eri tavalla: Antamalla tiedoston nimi shell:n parametriksi, esim. tcsh puppu.sh Asettamalla tiedostolle halutut suoritus-oikeudet, esim. chmod g+x puppu.sh (suoritusoikeus ryhmälle), ja käyttämällä komentotiedostoa kuten tavallista komentoa. 9/12/2002 E. Hyvönen: Linux Osa 4 37 9/12/2002 E. Hyvönen: Linux Osa 4 38 Komentotiedosto käyttäytyy kuten tavallinen ohjelma, joten esim. ympäristömuuttujiin tehdyt muutokset eivät näy ulospäin. Jos komentotiedostoon tehdyt muutokset halutaan näkymään komentotulkissa, tehdään komento:. tiedosto source tiedosto bash, väli pisteen jälkeen tcsh Käyttöympäristön säilyvyys Kaikki käyttöympäristöön tehdyt muutokset, kuten muuttuja- ja aliasmäärittelyt, katoavat istunnon päättyessä. Määritykset saa pysyviksi lisäämällä ne sopivaan alustustiedostoon: bash:.profile tcsh:.cshrc 9/12/2002 E. Hyvönen: Linux Osa 4 39 9/12/2002 E. Hyvönen: Linux Osa 4 40 Komentotiedostojen tulkinnasta Jos haluaa tehdä kaikissa Unix-ympäristöissä toimivan komentotiedoston, tulee käyttää Unixin omaa sh-komentotulkkia. sh on hyvä komentotiedostojen toteutuskieli, mutta interaktiiviseen käyttöön siitä ei ole. Jos komentotiedostossa ei erikseen kerrota komentotulkkia, sh:ta käytetään oletustulkkina Tekstin ladonta 9/12/2002 E. Hyvönen: Linux Osa 4 41
Latex-ladontaohjelma latex tiedosto.tex Ladontaohjelma, jossa tiedostossa on sekä tulostettava teksti että komentoja (vrt. HTML). Matemaattisten alojen (esim. tkt) standardi. Tuottaa välitulostiedoston tiedosto.dvi, joka voidaan muuntaa mm. PostScript-muotoon. Lisätietoja kirjoista: Lamport, Latex: A Document Preparation System Goossens et al: The Latex Companion dvips tiedosto.dvi Tekee PostScript-tiedoston Latex-tulostiedostosta tiedosto.dvi Esimerkki: xemacs artikkeli.tex. latex artikkeli.tex dvips artikkeli.dvi lpr -Pps2 artikkeli.ps Kirjoitetaan artikkeli Tehdään välitiedosto PostScript muunnos Tulostetaan PostScript 9/12/2002 E. Hyvönen: Linux Osa 4 43 9/12/2002 E. Hyvönen: Linux Osa 4 44 PostScript-muotoilija mpage mpage [optiot][tiedostot] Monipuolinen PostScript-muotoilija, joka osaa mm. pistää monta sivua yhdelle paperiarkille. Komentoa voi käyttää esim. tavallisen tekstin muuttamiseen PostScript-kielelle. mpage -4 -Pps2 tiedosto.txt Tulostaa 4 sivua arkille Lisätietoja: man mpage Kalvoissa käyttyä materiaalia Juha Taina: Unix-perusteita -kalvomateriaali, 1998. Fred Hantelmann: Linux Start up Guide, Springer, 1999. 9/12/2002 E. Hyvönen: Linux Osa 4 45 9/12/2002 E. Hyvönen: Linux Osa 4 46