Sisällys Johdatus Linux/Unixiin: Osa 2 Prosessien hallinta Syöttö ja tulostus Säännölliset lausekkeet Tiedostojen käsittelyä Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin Yliopisto 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 2 Prosessin tilat Prosessien hallinta Prosessi = itsenäinen tapahtuma, joka on suorituksessa (yleensä komento) Prosessi voi olla jossain seuraavista tiloista: Suorituksessa etualalla (foreground process) Suorituksessa taka-alalla (background process) Pysäytettynä (suspend) Taustaprosessi pysäytetään, jos se yrittää kirjoittaa näytölle 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 4 Prosessien monitorointi Prosessit ovat komentotulkkikohtaisia Vain yksi prosessi on etualalla kerrallaan. Se saa lukea näppäimistöä ja tulostaa näytölle. Tausta- ja pysäytettyjä prosesseja voi olla useita. ps [optiot] Näyttää suorituksessa olevat prosessit -a Näytä kaikki prosessit (oletus: omat) -l Näytä enemmän tietoja jobs Näyttää samasta tulkista käynnistetyt prosessit, jotka ovat taustalla tai keskeytyneet (tai status ei tiedossa) top Monitoroi ja näyttää prosessien kuormitustilanteen Lopetus q -komennolla 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 5 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 6
Prosessien hallintakomentoja Prosessin vienti tausta-ajoon & Vie aloitettavan komennon taustalle Esim. cc ohjelma.c & C-z Pysäyttää etualalla olevan prosessin Prosessin tuonti etu-alalle fg [%tunnus] Tuo pysäytetyn tai taustalla olevan prosessin etualalle bg [%tunnus] Siirtää pysäytetyn prosessin taustalle Tunnuksen (PID) saa selville komennolla ps. 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 7 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 8 Esimerkkejä Prosessin tuhoaminen: kill [-n]tunnus Lähettää lopetuskäskyn prosessille, jonka tunnus on "tunnus Optio -n: Määrää mikä lopetuskäsky lähetetään prosessille. -9 on vahvin Voit tuhota omia prosesseja toisista terminaaliikkunoista tai toisesta koneesta käsin (login) $ cc logfilt2.c & $ on kursori [1] 7063 $ jobs [1] + background cc logfilt2.c $ kill -9 %1 Huom. %-merkin käyttö [1] Killed cc logfilt2.c 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 9 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 10 $top & ps top-prosessi taustalle ja prosessilistaus PID TTY STAT TIME COMMAND 1009 p3 T 0:00 top $kill 1009 Syöttö ja tulostus: stdin, stdout, stderr Prosessin kolme syöttö- ja tulostuskanavaa: stdin on syöttökanava, jonka kautta prosessi saa tietoa ulkoa (yleensä näppäimistöltä) stdout on tulostuskanava, jonka kautta prosessi antaa tietoja toiminnastaan (yleensä näyttö) stderr on virheilmoituskanava, jonka kautta prosessi voi esim. tiedottaa poikkeustilanteista (eli tulostaa jotain, mutta eri kanavaa pitkin kuin stdout:n tapauksessa) 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 11 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 12
Syöttö ja tulostus: Oletuksia Oletusarvoisesti: stdin on yhdistetty näppäimistöön stdout ja stderr on yhdistetty näyttöön Sekä syöttö että tulostus voidaan uudelleenohjata (redirect) Voidaan lukea muuta kuin näppäimistöä ja kirjoittaa muulle kuin näytölle Syöttö ja tulostus: Uudelleenohjaus Komennon uudelleenohjausparametrit: komento >tiedosto stdout ohjataan tiedostoon "tiedosto komento >>tiedosto stdout lisätään tiedoston "tiedosto" perään (tuhoamatta alkua) komento <tiedosto stdin luetaan tiedostosta "tiedosto" 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 13 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 14 Esimerkkejä ls -l >tiedosto.txt Kokonaan uusi listaus tiedosto ls -l >>tiedosto.txt Tuplalistaus tiedoston loppuun sort < tiedosto.txt Tiedoston näyttö päätteelle sivu sivulta Syöte ja tulostus yhdistettynä Esim. sort < lista.txt > aakkostettu_lista.txt "((sort <lista.txt) >aakkostettu_lista.txt)" Syötteen loppumerkki on C-d päättää myös näppäimistöltä annetun syötteen Esim. cat > tiedosto Kirjoittaa tiedoston Tiedostosta luettaessa syötetiedostoa ei tarvitse lopettaa C-d-merkillä 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 15 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 16 Stderr uudelleenohjaus Komennon saama syöte on eri asia kuin komennon saamat parametrit. Parametrit annetaan komentorivillä Komento saa syötteensä suoritusaikana Yleensä stderr:a ei ohjata uudelleen Sen voi kuitenkin tehdä seuraavasti: komento >& tiedosto komento > tiedosto 2>&1 Molemmissa komennoissa sekä stdout että stderr ohjataan tiedostoon "tiedosto" 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 17 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 18
Putket (pipe) Komentojen syöttöä ja tulostusta voidaan putkittaa: Yhden prosessin tulostus on toisen syöte Komennon komento1 tulostus ohjataan komennon komento2syötteeksi putkimerkillä : komento1 komento2 Esimerkkejä ls -l wc Laske merkit, sanat ja rivit tiedostolistauksesta ls -l wc >tiedostolkm Kuten yllä, mutta tulos tiedostoon cat ~/src/*.c wc Kaikkien C-lähdekielisten ohjelmien merkkien, sanojen, rivien yhteislukumäärä 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 19 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 20 Tulostus putken keskeltä Putkia voi olla useita peräkkäin Putken alussa ja lopussa voi olla uudelleenohjausta who sort cat -b > kayttajat.txt numeroitu käyttäjälistaus Myös putken keskeltä voi saada tulosteen tiedostoon T-kappaleella : tee [optiot][tiedostot] Kopioi stdin:n stdout:lle ja tiedostoihin Optiot: -a lisää tulostus tiedoston loppuun sort tiedosto tee lajiteltu_tiedosto more Tiedoston lajittelu & tulostus sivuittain 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 21 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 22 Putki yhdistettynä unixin filosofiaan tehdä pieniä komentoja tarjoaa keinot koota monimutkaisia komentoja pienistä paloista Putkifilosofian johdosta lähes jokainen komento osaa käyttää syöttö- ja tulostuskanavia Säännölliset lausekkeet 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 23
Merkkijonojen kuvaaminen Tavallinen merkkijono Jono annettuja peräkkäisiä merkkejä Säännöllinen lauseke Keino kuvata merkkijonojoukkoja valinnaisuus, ehdollisuus ja toisto Eräiden komentojen ja apuohjelmien käyttämä yhtenäinen esitystapa mm. grep, less, more, awk, emacs 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 25 Säännöllinen lauseke Säännöllinen lauseke (regular expression) on hahmo (pattern), jolla voietsiä siihen sopivat merkkijonot. Monipuolisempi mekanismi kuin jokerimerkit (ja eri käyttöön) Säännöllisen lauseke sisältää: Tavallisia merkkejä: kuvaavat itsensä Erikoismerkkejä: kuvaavat rakenteita '-merkit alussa/lopussa (ei aina välttämätöntä) 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 26 Erikoismerkkejä. Mikä tahansa merkki (paitsi rivinvaihto) * 0-n kpl edellistä merkkiä \ Poista erityismerkitys [...] Mikä tahansa [...]:n sisällä oleva merkki - Väli, esimerkisi 0-9, a-c. ^ Rivin alku [^ ]Hyväksytään merkit, jotka eivät ole []:n välissä $ Rivin loppu 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 27 Eräät komennot (awk, egrep, less,...) ymmärtävät myös seuraavat erikoismerkit : + 1-n kpl edellistä merkkiä? 0-1 kpl edellistä merkkiä Vaihtoehdot () Ryhmittelysulut Säännölliset lausekkeet jokerimerkit : Säännöllisiä lausekkeita käytetään ohjelmien sisällä (yl. merkkijonojen tunnistamiseen tiedostoista). Jokerimerkkejä käytetään kuvaamaan ohjelmille annettavia parametreja (tiedosto/hakemistonimet). 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 28 Esimerkkejä teksti merkkijono teksti ^ teksti merkkijono teksti rivin alussa teksti$ merkkijono teksti rivin lopussa [Tt]eksti Tekstitai teksti t[aeiouyäö]ksti toinen kirjain vokaali t.ksti toinen kirjain mikä tahansa ^...$ kolmekirjaiminen rivi ^\. rivi alkaa pisteellä ^[^.] rivi ei ala pisteellä koe* koe, koee, koeee jne. [A-ZÅÄÖ][A-ZÅÄÖ]* Yksi tai useampi iso kirjain 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 29 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 30
egrep/awk/less -esimerkkejä [A-ZÅÄÖ]+ Ainakin yksi iso kirjain juh jeh joh Joko juh, jeh tai joh 80[234]?86 pentium 8086, 80286, 80386, 80486, pentium ju(ha)* ju, juha, juhaha, juhahaha,... Etsintä tiedostoista: grep Merkkijonon haku syötteestä: grep [optiot] lauseke [tiedostot] Hakee tiedostoista (tai stdin) rivit, joillaon säännöllistä lauseketta vastaava merkkijono Optioita: -c näytä vain osumarivien lukumäärä -i älä erottele isoja ja pieniä kirjaimia -l näytä pelkät tiedostonimet sellaisista tiedostoista, joissa on osumia -n näytä osumarivit rivinumeroineen -v näytä rivit, joilta ei löydy osumia 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 31 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 32 Esimerkkejä: grep egrep [optiot] lauseke [tiedostot] Kuten grep, mutta käyttää laajennettua säännöllisten lausekkeiden syntaksia (vertaa edellä) jaon useimmiten nopeampi kuin pelkkä grep Optiot: kuten grep:ssa, lisäksi: -e merkkijono Käytetään silloin, kun säännöllinen lauseke (merkkijono) alkaa "-"-merkillä fgrep [optiot] merkkijono [tiedostot] Kuten egrep, mutta ei käytä säännöllisiä lausekkeita. Merkkijonoa haetaan sellaisenaan ls -l grep '^d' Myös grep ^d Listaa vain hakemistot ls -l egrep 'Jan Feb' Listaa tammi- ja helmikuun tiedostot 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 33 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 34 Tiedoston lajittelu: sort Tiedostojen käsittelyä Lajittelu, vertailu, etsintä sort [optiot] [tiedostot] Järjestää yhden tai useamman tiedoston rivit Optioita: -f isoilla ja pienillä kirjaimilla ei eroa -m lomita lajitellut tiedostot yhdeksi -n lajittele numeerinen kenttä -r lajittele käänteisessä järjestyksessä 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 36
Tiedostojen vertailu: comm, diff, cmp -u identtiset rivit tuloksessa vain kerran -tc kenttien erotinmerkki on c +n [-m] Ohita n ensimmäistä kenttää ennen järjestämistä ja järjestä korkeintaan kenttään m asti. Jos m puuttuu, järjestä rivin loppuun asti. n ja m voivat olla muotoa a.b,missä a on käytettävä kenttä ja b on merkki ko. kentässä. jos b puuttuu, järjestetään 1.merkin mukaan 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 37 comm tiedosto1 tiedosto2 Vertaa kahta järjestettyä tiedostoa: 1. sarake: vain tiedosto1:n rivit 2. sarake: vain tiedosto2:n rivit 3. sarake: molemmissa olevat rivit diff [optiot] tiedosto1 tiedosto2 Listaa kahden tiedoston väliset erot. Lisätietojaman diff cmp tiedosto1 tiedosto2 Näyttää missä tiedosto1:n sisältö eroaa tiedosto2:n sisällöstä (ensimmäisen kerran) 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 38 Tiedostojen etsintä: find find hakemistot ehdot Tehokas komento tiedostojen etsintää varten Käy läpi annetut hakemistopuut: Hakee annetut ehdot täyttävät tiedostot. Ainakin yksi hakemisto ja ehto annettava Find: Hakuehtoja -print Toteutuu aina. Tulostaa tiedostonimen -name 'tiedostonimi' Toteutuu, jos haettavan tiedoston nimi täyttää ehdon tiedostonimi; ehdossa voi olla jokerimerkkejä -type c Toteutuu, jos tiedosto on tyyppiä c (f= tavallinen tiedosto, d=hakemisto) -ls Toteutuu aina. Näyttää yksityiskohtaiset tiedot hakemistosta tyyliin "ls -l" 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 39 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 40 Find: Esimerkkejä -exec komento '{}' ';' Aina tosi, komento suoritetaan kaikille osuneille tiedostoille. Komentoa suoritettaessa'{}' korvataan osuneen tiedoston tiedostonimellä. Koko komento päätetään yhdistelmään ';' -ok komento '{}' \; Aina tosi, käyttäytyy kuten -exec, paitsi että komento varmistetaan käyttäjältä ennen sen suoritusta find ~ -print listaa kaikki tiedostot ja alihakemistot kotihakemistosta find ~ -type d -name '.*' -ls listaa kaikki hakemistot, jotka alkavat pisteellä kotihakemistosta ja kaikista alihakemistoista find. -name '*.bak' -ok rm '{}' \; kysyy kaikista.bak -päätteisistä tiedostoista saako ne poistaa Lisää optioita ja esimerkkejä: man find 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 41 13.9.2000 E. Hyvönen: Linux/Unix Osa 2 42