[Ratkaisu] Komentojen ja niiden ulostulon tallentaminen tiedostoon

Lähtökohta
Aion suorittaa monimutkaisen, paljon eri komentoja sisältävän tehtävän komentorivitulkissa.
Ongelma
Haluan tallentaa ajamani komennot ja kaiken niiden komentotulkkiin tuottaman ulostulon tiedostoon, jotta voin jälkeenpäin käyttää sitä muistiapuna kuvaillessani miten tehtävän suoritin.
Ratkaisu
Voin tallentaa komentorivitulkkiin kirjoittamani komennot ja niiden ulostulon script-komennolla.
Seuraavassa esimerkissä suoritan kaksi echo-komentoa ja yhden cat-komennon niin, että komennot ja niiden ulostulo tallentuvat testi.txt -nimiseen tiedostoon. Tällainen, tavallaan script-komennon sisällä ajettava lohko on nimeltään istunto, ja olen lihavoinut sen sisällön seuraavassa:

jani@shuttle-xpc:~/tmp$ script testi.txt
Skripti käynnistetty, tiedosto on testi.txt
jani@shuttle-xpc:~/tmp$ echo "tämä on testi."
tämä on testi.
jani@shuttle-xpc:~/tmp$ echo "voisin ajaa tässä mitä hyvänsä komentoja" > foo.txt
jani@shuttle-xpc:~/tmp$ cat foo.txt
voisin ajaa tässä mitä hyvänsä komentoja
jani@shuttle-xpc:~/tmp$ exit
Skripti suoritettu, tiedosto on testi.txt
jani@shuttle-xpc:~/tmp$ 

Aloitin istunnon tallentamisen script testi.txt -komennolla ja lopetin sen exit-komennolla. Testi.txt -tiedostoon tallentui kaikki mitä näiden kahden komennon suorituksen välissä tapahtui eli yllä olevassa lihavoimani istunto, sekä lisäksi istunnon aloitus- ja lopetusaika. Tulostan seuraavassa cat-komennolla testi.txt -tiedoston sisällön ja lihavoin sen:

jani@shuttle-xpc:~/tmp$ cat testi.txt
Skripti käynnistetty to 28. helmikuuta 2008 09:36:31
jani@shuttle-xpc:~/tmp$ echo "tämä on testi."
tämä on testi.
jani@shuttle-xpc:~/tmp$ echo "voisin ajaa tässä mitä hyvänsä komentoja" > foo.txt
jani@shuttle-xpc:~/tmp$ cat foo.txt
voisin ajaa tässä mitä hyvänsä komentoja
jani@shuttle-xpc:~/tmp$ exit

Skripti suoritettu to 28. helmikuuta 2008 09:37:19
jani@shuttle-xpc:~/tmp$ 
Huomautuksia
  • Istunnon lopettamiseen voi käyttää exit-komennon sijasta näppäinyhdistelmää Control + D.
  • Script-komennon ohjesivu varoittaa, että jotkin interaktiiviset komennot (kuten vi) saattavat kirjoittaa tallennustiedostoon roskaa, eli satunnaiselta vaikuttavia merkkejä. Niiden käytöstä ei välttämättä jää tallennustiedostoon ymmärrettäviä kirjauksia.
  • Ratkaisussa oleva ensimmäinen esimerkki on sekin tallennettu scriptiä käyttäen; ajoin siis script-komennon istunnossa, jota suoritin toisessa script-komennolla aloitetussa istunnossa. Istuntoja voi siis sisäkkäistää.
  • Kaikki komennot tallentuvat Bash-komentotulkissa käyttäjäkohtaiseen historiaan, jota voi hallita HISTSIZE, HISTFILE ja HISTFILESIZE -muuttujien avulla. Komentohistoriaan tallennetaan kuitenkin vain komennot, ei niiden ulostuloa. Lisäksi komentohistorian koko on rajoitettu.

Kolumni: Tietokoneesi on vaarassa!

Toverini Juha linkkasi minut kuvaan hauskasti mönkään menneestä huijausyrityksestä: Linux-käyttäjä oli saanut Skypen kautta ilmoituksen, jonka mukaan hänen Windowsinsa tietoturva oli vaarantunut, ja missä häntä kehotettiin lataamaan paikkaustiedosto ongelman korjaamiseksi. Kyse on tietysti Windows-haittaohjelman levityksestä valheellisen tietoturvailmoituksen avulla.

Huomioni kiinnittyi blogimerkinnän perässä olleeseen kommenttiin, jonka mukaan yrityksen kohteeksi joutunut käyttäjä voisi aivan hyvin ollakin vaarassa, koska hän käyttää Ubuntua, joka muistuttaa niin paljon Windowsia. Auts!

Olen kyllä miettinyt, että Ubuntun (ja tietysti muidenkin vastaavien distrojen) tapa kysellä järjestelmänhallinnan salasanaa tuon tuostakin on pikkuisen huolestuttava sikäli, että siinä turtuu hyvin pian toimenpiteen ratkaisevuudelle. Olen itsekin asentanut Gutsyyni järjestelmänhallinnan oikeuksia käyttäen pari pakettia tutkimatta niiden alkuperää näin jälkikäteen ajateltuna riittävän hyvin. Kun web-sivuilla jaeltujen ohjelmapakettien asentaminen järjestelmänhallinnassa vaadittavin oikeuksin on näin suoraviivaista, ollaan jo käytännössä samalla viivalla Vistaa varhaisempien Windowsien kanssa siinä, että tietoturvan mahdollisesti vaarantavien ohjelmien asentelusta tulee liian helposti jokapäiväistä kauraa.

Tähän järjestelmänhallinnan helppouteen tottuneena en kuitenkaan kovin mieluusti enää luopuisi siitä. Ja sikäli uskoisin Linux-käyttäjänä vielä olevani vanhojen Windowsien käyttäjiä paremmassa turvassa, että ainakaan niin kauan kuin en ole onnistunut vaarantamaan järjestelmääni, ohjelmat eivät pääse järjestelmääni käsiksi omine nokkinensa, siis minun siitä tietämättä. Vaarantuminen vaatii periaatteessa aina minulta sen virheen, että annan vaaralliselle ohjelmalle ne järjestelmänvalvojan oikeudet. Mutta miten tätä järjestelmänhallinnan oikeuksien jatkuvaan peräämiseen liittyvää tietoturvariskiä voisi vähentää?

En ole perehtynyt SELinuxiin, mutta se voisi ehkä olla avuksi. Sen lisäksi en kyllä keksi äkkiseltään muuta ratkaisua kuin sen, että perusjärjestelmän päälle ei asenneta mitään muuta kuin virtualisointi, ja käyttäjä päästetään sen jälkeen vain virtuaalihiekkalaatikkoon, jossa saa asennella mitä huvittaa. Isäntäjärjestelmä tarjoaa palomuurin ja muita tietoturvaominaisuuksia, jotka valvovat tätä hiekkalaatikkoa, ja jos isäntä havaitsee hiekkalaatikossa epäilyttävää toimintaa kuten vaikkapa viruksen aiheuttamaksi epäiltyä liikennettä, se puuttuu peliin. Käyttäjää varoitetaan, ja vasta uhan torjumisen tai tietoturvan vaarantumisen paikkaamisen yhteydessä kysytään tarvittaessa oikeita järjestelmänvalvojan oikeuksia, eli oikeuksia isäntäjärjestelmän hallintaan.

Siinä tapauksessa sitten kylläkään käyttäjää ei hiekkalaatikkonsa tyhjäksitekemisen takia välttämättä enää paljoa lohduta se, ettei isäntäjärjestelmä ole vaarantunut. Isäntäjärjestelmä voisi kuitenkin pelkän valvonnan ohella tehdä hiekkalaatikosta myös varmuuskopioita tai järjestelmäkuvatiedostoja (snapshot) säännöllisesti, jolloin kokonaan puhtaalta pöydältä aloittamisen sijasta käyttäjä voisikin valita aiempaan, vielä vaarantumattomaan hiekkalaatikkoon palaamisen eikä siten menettäisi ihan kaikkea.

Lopuksi täytyy vielä todeta, että tähän ehdotukseeni voi olla sisältyä ammottavia aukkoja, sillä en ole tietoturva-asiantuntija, en virtualisointiasiantuntija enkä pidä itseäni edes Linux-asiantuntijana, vaikka siitä kokemukseni näistä kolmesta aiheesta lieneekin kaikkein laajin.

All In Wonder ja xawtv: grabbing: not supported [try -noxv switch?]

Lähtökohta
Näytönohjaimeni on Connect 3D:n valmistama, AGP-väylässä kiinni oleva Radeon 9600 -piirisarjalla varustettu All In Wonder. Olen valinnut näytönohjaimelle avoimen lähdekoodin ajurit käyttöön.
Olen kopioinut näyttökortin ajurilevyltä ativmc20.cod -nimisen mikrokooditiedoston /usr/lib/xorg/modules/multimedia/ -hakemistoon ja nimennyt sen rt2_pmem.bin -nimiseksi. Näytönohjaimen ajurit ja mikrokooditiedosto ladataan onnistuneesti X-ikkunointijärjestelmän käynnistymisen yhteydessä.
Pakettienhallinnassa xawtv on asennettuna.
Olen kytkenyt digitaalikamerani videoulostulon näytönohjaimen komposiittisisääntuloon ja käynnistänyt kameran, jolloin se alkaa välittömästi lähettää kuvasignaalia videoulostuloonsa. Olen käynnistänyt xawtv:n Päätteestä ja pystyn katselemaan komposiittisisääntuloon tulevaa kameran näkemää kuvaa xawtv:n ikkunasta.
Xawtv:n ikkuna on valittuna. Haluan tallentaa otoksen kameran näkemästä kuvasta, joten painan näppäimistöni g-näppäintä.
Ongelma
Kuva ei tallennu. Sen sijaan Päätteeseen tulostuu vain seuraavanlainen rivi:

grabbing: not supported [try -noxv switch?]
Ongelman syy
Xawtv käyttää komposiittisisääntuloon tulevan kuvasignaalin näyttämiseen Xvideo-laajennusta. Xvideo-laajennus ei tue kuvien kaappaamista.
Ratkaisu
Ei vielä tiedossa.

Huomautuksia
  • Xawtv:n käynnistäminen Päätteeseen tulostuneen ilmoituksen ehdottoman -noxv -valitsimen kanssa (ilman muita valitsimia) ei onnistu. Silloin xawtv antaa seuraavanlaisen virheilmoituksen:
    X Error of failed request:  XF86DGANoDirectVideoMode
      Major opcode of failed request:  136 (XFree86-DGA)
      Minor opcode of failed request:  1 (XF86DGAGetVideoLL)
      Serial number of failed request:  63
      Current serial number in output stream:  63
  • Mikäli annan xawtv:lle -noxv -valitsimen lisäksi -nodga -valitsimen, se käynnistyy, mutta silloin se ei näytä komposiittisisääntuloon tulevaa kuvaa. Xawtv kykenee ilmeisesti tarttumaan komposiittisisääntulon kuvaan ainoastaan Xvideo-laajennuksen avulla, eikä -noxv -valitsinta käytettäessä siksi päästä kuvaan lainkaan käsiksi, jolloin sitä ei myöskään pystytä tallentamaan.
  • Ruutukaappauksen ottaminen xawtv:n ikkunasta (Alt + Print Screen) ei toimi, eikä koko työpöydästä otettuun ruutukaappaukseen (Print Screen) sisältyvän xawtv:n ikkuna sisällä sen näytöllä sisältämää kuvaa.

[Ratkaisu] No matching Device section for instance (BusID PCI:3:0:1) found

Lähtökohta
Näytönohjaimeni on Connect 3D:n valmistama, AGP-väylässä kiinni oleva Radeon 9600 -piirisarjalla varustettu All In Wonder, jossa on kaksi VGA-ulostuloa. Olen kytkenyt ainoan käytössä olevan näyttöni ensisijaiseen VGA-ulostuloon. Olen valinnut näytönohjaimelle avoimen lähdekoodin ajurit käyttöön, ja ikkunointijärjestelmä ja työpöytä toimivat niiden kanssa hyvin.
Ongelma
Ikkunointijärjestelmän lokiin kirjautuu sen käynnistyksen yhteydessä seuraavanlainen varoitus:

(WW) RADEON: No matching Device section for instance (BusID PCI:3:0:1) found

Vaikka ikkunointijärjestelmä tuntuukin toimivan, virheilmoitus saa minut pohtimaan, olisiko sen asetustiedossa tehtävissä jotain sellaista, jonka jälkeen varoitusta ei enää tulisi.

Ratkaisu
Varsinkin Radeon-piirisarjalla varustetuille, useampia ulostuloja tarjoaville näytönohjaimille on tyypillistä, että ne näkyvät laitetasolla järjestelmälle kahtena eri laitteena. Toinen laite on kuitenkin täysin näennäinen ja se on läsnä vain, koska jotkin käyttöjärjestelmät tarvitsevat sen, jotta ensisijaisen lisäksi muutkin ulostulot toimisivat. X.org-ikkunointijärjestelmää käytettäessä varoituksen voi jättää täysin huoleti huomiotta.
Huomautuksia
  • Toisesta laitteesta saa sen näennäisyydestä huolimatta lisätietoja lspci-komennolla. Tiedot ovat melkein samat kuin silloin, kun lspci kohdistetaan lukemaan ensimmäistä näytönohjainlaitetta.
  • Lisäsin kokeeksi ylimääräisen Device-lohkon /etc/X11/xorg.conf -tiedostoon. Määrittelin laitteen portin varoituksessa annetun mukaisesti ja asetin sen käyttämään samaa avoimen lähdekoodin ajuria kuin mitä varsinainen näytönohjainlaitekin käyttää. Sama varoitus kirjattiin kuitenkin lokiin käynnistyksen yhteydessä sen jälkeenkin.

[Ratkaisu] Grep ja looginen TAI

Lähtökohta
Minulla on nimet.txt -niminen tekstitiedosto, joka sisältää seuraavat rivit:

Jussi
Matti
Pekka
Ville
Barbara
Eini
Lissu
Noora
Ongelma
Haluan etsiä ja tulostaa komentorivitulkissa tekstitiedostosta ne rivit, joilla esiintyy vähintään yksi kirjaimista a, b ja e.
Ratkaisu
Suoritan seuraavan komennon:

egrep -i '(a|b|e)' nimet.txt

Komento tulostaa komentorivitulkkiin haluamani rivit, tässä tapauksessa kaikki muut paitsi Jussi– ja Lissu-rivin.

Huomautus
-i -valitsin saa aikaan sen, että etsimieni kirjainten kirjainkoosta ei välitetä. Mikäli haluaisinkin etsiä rivit joilla esiintyy vähintään yksi isoista kirjaimista A, B ja E, pitäisi yllä olevassa ratkaisussa sulkumerkkien sisällä olevien kirjainten koon vaihtamisen lisäksi jättää -i -valitsin pois:

egrep '(A|B|E)' nimet.txt.

Tämä komento tulostaa ainoastaan Barbara– ja Eini-rivin.

[Ratkaisu] Mikä X.orgin versio on käytössä?

Lähtökohta
Pakettienhallinnassa xserver-xorg on asennettuna.
Ongelma
Haluan saada selville mitä X.orgin julkaisunumeroa järjestelmääni asennettu versio X-ikkunointijärjestelmästä vastaa.
Ratkaisu
Avaan Päätteen ja suoritan seuraavan komennon:

dpkg -s xserver-xorg | grep ^Version: \
| cut -d\  -f 2 | cut -d: -f 2 | cut -d- -f 1

Komennon antama tuloste, tässä tapauksessa 7.2, kertoo mikä versio X.orgista on asennettuna.

Huomautuksia

[Ratkaisu] MythTV ei pysty lukittautumaan signaaliin

Lähtökohta
Olen asentanut MythTV:n. Olen tehnyt tarvittavat sisääntuloasetukset, skannannut ja löytänyt kanavia ja tallentanut ne MythTV:n tietokantaan. Pystyn katselemaan signaalin ohjelmia.
Ongelma
Toisinaan käynnistettyäni MythTV:n ja valittuani sen päävalikosta kohdan Watch TV, näytön kuva muuttuu mustaksi eikä kanavan ohjelmaa näy. Näytöllä on vain kanava- ja ohjelmatiedot ja seuraava ilmoitusteksti:

You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with Up and Down, change  input's (C), capture cards (Y), etc.
Ongelman syy
Syöttösignaali on heikkolaatuinen.
Ratkaisu
Poistan signaalin lähtöpisteen ja sisääntulopisteen väliltä kaikki ylimääräiset sovittimet ja jatkojohdot. Kytken signaalin käyttäen vain yhtä, mahdollisimman lyhyttä ja hyvälaatuista kaapelia. Tämän jälkeen MythTV pystyy käynnistettäessä lukittautumaan signaaliin.

[Ratkaisu] Tallenteen trimmaaminen MythTV:llä

Lähtökohta
Olen käynnistänyt MythTV Frontendin. Olen ohjelmoinut tallennuksen. Tallennus on onnistunut, ja pystyn katselemaan tallennetta MythTV:ssä. Tallenne on MPEG2-muotoinen videotiedosto.
Ongelma
Tallenteen alussa ja lopussa on lyhyet jaksot muuta materiaalia kuin varsinaisesti tallentamaani ohjelmaa. Haluan leikata tallennetta MythTV:ssä niin, että tallenne sisältää pelkästään itse ohjelman.
Ratkaisu
Muutan ensin yhden MythTV:n videonmuunnosprofiileista tekemään häviöttömiä muunnoksia. Sen jälkeen merkkaan tallenteen aloitus- ja lopetuskohdat niin, että ohjelman ulkopuolinen materiaali jätetään pois muunnetusta tallenteesta. Lopuksi muunnan tallenteen käyttämällä tekemiäni merkkauksia ja muunnosprofiilia.

  1. Muutan yhden videonmuunnosprofiileista tekemään häviöttömiä muunnoksia.
    1. MythTV:n päävalikosta navigoin seuraavasti: Utilities/Setup → Setup → TV Settings & Recording Profiles → Transcoding → Autodetect from MPEG2.
    2. Profiilin asetusikkunassa merkkaan Lossless transcoding -kohdan käyttöönotetuksi.
    3. Poistun profiilin asetusikkunasta valitsemalla kohdan Finish, minkä jälkeen palaan MythTV:n päävalikkoon.
  2. Merkkaan tallenteelle haluamani aloitus- ja lopetuskohdat.
    1. Valitsen MythTV:n päävalikosta kohdan Media Library, ja avautuvasta valikosta kohdan Watch Recordings.
    2. Valitsen tallenteen, jota haluan leikata.
    3. Tallenteen pyöriessä näytöllä painan näppäimistöni M-kirjainta, ja näytölle avautuvasta valikosta valitsen kohdan Edit Recording.
    4. Käytän nuolinäppämiä aloituskohdan etsimiseen: nuolinäppäin vasempaan vie ohjelmassa taaksepäin, nuolinäppäin oikeaan eteenpäin, ja ylös- ja alasnuolet muuttavat yhdellä vasemman tai oikean nuolinäppäimen painalluksella yli hypättävän ajan määrää isommaksi ja pienemmäksi.
    5. Kun olen kohdassa, josta haluan lopullisen tallenteen alkavan, painan näppäimistön rivinvaihtonäppäintä. Avautuvasta kyselystä valitsen vastausvaihtoehdon Delete before this frame.
    6. Käytän nuolinäppäimiä lopetuskohdan etsimiseen samalla tavalla kuin aloituskohdan etsimisessäkin (4.).
    7. Kun olen kohdassa, johon haluan lopullisen tallenteen päättyvän, painan näppäimistön rivinvaihtonäppäintä. Avautuvasta kyselystä valitsen vastausvaihtoehdon Delete after this frame.
    8. Poistun aloitus- ja lopetuskohtien merkkauksesta näppäimistön Esc-näppäimellä niin, että tallenne alkaa jälleen pyöriä.
  3. Muunnan tallenteen käyttämällä tekemiäni merkkauksia ja muunnosprofiilia.
    1. Painan näppäimistön P-kirjainta, jolloin tallenteen toisto keskeytyy.
    2. Painan jälleen M-kirjainta, ja valitsen avautuvasta valikosta kohdan Begin transcoding, ja edelleen avautuvasta valikosta kohdan Autodetect.
    3. Odotan tallenteen muuntamisen valmistumista.

Kun tämän jälkeen katson tallennetta, se sisältää vain ohjelman ilman ylimääräistä materiaalia sen edessä tai perässä.

Huomautus
Kun muunnos on valmis, M-kirjaimen painalluksella avautuvassa valikossa on jälleen kohde Begin Transcoding. Siihen saakka, eli muunnoksen tekemisen ollessa vielä meneillään, Begin Transcoding -kohteen tilalla on kohde Stop Transcoding. Kohteen nimi ei päivity mikäli valikko on auki, eli se täytyy sulkea Esc-näppäimellä ja avata uudestaan M-kirjaimella jotta muuntamisen etenemistä voi seurata. Tämä on varsin köykäinen tapa, mutta en ole löytänyt MythTV:stä muutakaan muuntamisen etenemisen ilmaisinta.