Takaisin pääsivulle

Yleistä Linuxista

Linux ja muut avoimen lähdekoodin käyttöjärjestelmät

Linuxin ja useiden muiden avoimen lähdekoodin (engl. Open Source) käyttöjärjestelmien (FreeBSD, NetBSD, OpenBSD) synty ajoittuu 90-luvun alkuun, varhaisen Internetin aikaan. Sekä Linux että mainitut BSD-käyttöjärjestelmät noudattavat samoja POSIX-standardeja. Niillä voidaan käyttää hyvin pitkälti myös samoja ohjelmistoja, joten käyttäjä ei välttämättä edes huomaa käyttääkö hän Linuxia vai esimerkiksi FreeBSD-käyttöjärjestelmää. Karkeasti yleistäen Linux ja *BSD-järjestelmät ovat samanlaisia, ja vain niiden ydin (kernel) erottaa ne toisistaan. Loput eroavaisuudet ovat melko pintapuolisia.

Avoimen lähdekoodin käyttöjärjestelmien synty juuri Internetin varhaisvaiheessa ei ole pelkkä yhteensattuma. Nimenomaan Internet mahdollisisti ensimmäistä kertaa oikeasti globaalit ohjelmointiprojektit, jotka eivät olleet sidottuja paikkaan, aikaan ja rahaan.

Avoimen lähdekoodin ohjelmistot julkaistaan aina jollakin tietyllä lisenssillä. Ohjelman lisenssi määrittelee mm. mitä ohjelman lähdekoodilla voidaan tehdä ja millä ehdoin. Erilaisia avoimen lähdekoodin lisenssejä on useita kymmeniä, joista käytetyin on GPL (GNU General Public Licence). GPL-lisenssi antaa oikeuden käyttää lisenssillä julkaistua lähdekoodia omissa projekteissa, mutta vain jos itsekin julkaisee oman ohjelmansa lähdekoodin GPL:n alaisuudessa. Muut avoimen lähdekoodin lisenssit ovat enemmän tai vähemmän GPL:n kaltaisia.

Lähdekoodin puute ei useimmiten vähennä ohjelman toiminnallisuutta sinäänsä. Perinteinen kaupallinen ohjelmistokehitys onkin perustunut siihen, että ohjelma tuotetaan "talon sisällä" alusta loppuun. Kun ohjelma on valmis, se julkaistaan, mutta lähdekoodia ei näytetä kenellekään ulkopuoliselle. Käyttäjät näkevät miten ohjelma toimii, mutteivät tiedä miten toiminnallisuus on toteutettu. Kun joku toinen haluaa ohjelmoida vastaavan ohjelman, pitää hänen rakentaa se itse alusta loppuun: jo kerran kirjoitettua lähdekoodia ei voida hyödyntää, koska sitä ei julkaista.

Linuxin ja vapaiden BSD-käyttöjärjestelmien nousu tuntemattomuudesta valtavirtaan noin 10 vuodessa on uskoakseni nimenomaan avoimen lähdekoodin periaatteiden ansiota. Avoimen lähdekoodin ohjelmistot ja käyttöjärjestelmät ovat kehittyneet vaivihkaa aina vain paremmiksi ja paremmiksi, koska niiden kehitystä ei tarvitse aloittaa aina alusta kuten perinteisessä, suljetussa ohjelmistokehityksessä. Niiden kehittäjiltä ei myöskään vaadita valtavia taloudellisia resursseja, koska muiden tekemän lähdekoodin päälle voi rakentaa vapaasti.

Nykyisin useat avoimen lähdekoodin ohjelmistot ja käyttöjärjestelmät kilpailevat tasapäisesti parhaiden kaupallisten vastineidensa kanssa. Useilla alueilla kaupalliset sovellukset ovat jo hätää kärsimässä. Monet perinteiset ohjelmistoyritykset ovatkin joutuneet taipumaan paineen alla ja vapauttamaan omien sovellustensa lähdekoodia. Avoin lähdekoodi on mahdollisuus myös monille pienille ohjelmistoyrityksille, jotka voivat luoda laajojakin ohjelmistoja käyttämällä avoimen lähdekoodin palikoita. Monilla erityisaloilla kaupallinen ohjelmistokehitys puolustaa paikkaansa vielä pitkään, eivätkä avoimen lähdekoodin ohjelmistot välttämättä ikinä syrjäytä kaupallisia, suljettuja ohjelmistoja täydellisesti.

Tekstitila ja graafinen tila

Linuxin perustila on ns. tekstitila (console mode). Kaikki sen päällä on pelkkää kilkettä. Tekstitilassa konetta voi käyttää aivan yhtä hyvin kuin graafisessakin sillä erotuksella, että graafisen tilan ohjelmat, kuten Firefox tai OpenOffice eivät tietenkään toimi. Graafinen tila ei siis - toisin kuin esimerkiksi Windowsissa - ole välttämättömyys järjestelmän käytölle. Graafisen ympäristön erottaminen varsinaisesta järjestelmästä lisää paitsi järjestelmän joustavuutta myös sen turvallisuutta.

Ongelmatilanteissa tekstitilan peruskomentojen tunteminen on erittäin hyödyllistä. Ainakin kone tulisi osata sammuttaa myös tekstitilasta käsin. Koska kaikki Unix-pohjaiset järjestelmät toimivat samoilla komennoilla, on perusasioiden tuntemisesta varmasti hyötyä muuallakin kuin Linuxissa.

Linuxissa ja muissa Unix-tyyppisissä järjestelmissä graafinen ympäristö syntyy useiden eri ohjelmien myötävaikutuksella.

  1. X-palvelin (Xserver)
    Raa-an piirtämisen hoitaa ns. X-palvelin (Xserver) - useimmiten joko Xfree86 tai Xorg. Palvelin siis ohjaa näytönohjainkorttia, joka lähettää kuvasignaalin näytölle. Palvelimen asetustiedostoista löytyvät paitsi näytönohjainkortin myös näytön asetukset.
  2. Näyttömanageri (Display Manager)
    Käyttäjien sisäänkirjautumisen (graafiseen tilaan) hoitaa näyttömanageri eli display manager. Näyttömanageri voidaan asettaa vastaamaan myös ulkopuolisiin yhteydenottopyyntöihin, jolloin koneelle voi kirjautua verkon kautta. Ratkaisu soveltuu lähinnä turvallisen lähiverkon läpi tehtyihin yhteyksiin, sillä siinä käytetyssä xdmcp-protokollassa tieto kulkee verkon läpi täysin salaamattomana. Internetin läpi käytettäessä xdmcp-liikenne on välttämätöntä ohjata salatun SSH-tunnelin kautta tai käyttää esimerkiksi IPSec-salausta. Erilaisia näyttömanagereita on useita, esimerkiksi xdm (X Display Manager), gdm (Gnome Display Manager) tai kdm (KDE Display Manager). Näistä xdm vie vähiten resursseja joten se soveltuu vanhemmissakin tietokoneissa käytettäväksi.
  3. Ikkunointimanageri (Window Manager)
    Varsinaisen graafisen ympäristön luonnin käyttäjälle hoitaa ikkunointimanageri (Window Manager, esim. WindowMaker tai MetaCity). Se pitää huolen ikkunoiden piirrosta, valikoista yms. Ikkunointimanageri ei ole tarkalleen ottaen välttämätön, mutta monimutkaisten ohjelmien käyttö ilman ikkunointia on käytännössä mahdotonta.
  4. Työpöytäympäristö
    Työpöytäympäristö (Desktop Enviroment, esim. Gnome, KDE tai Xfce) ei ole välttämätön, mutta luo käyttäjälle yhtenäisen ja helppokäyttöisen työympäristön. Työpöytäympäristöt käyttävät ikkunoiden piirtämiseen jotakin ikkunointimanageria. Ikkunointimanagerin lisäksi työpöytäympäristö käynnistää automaattisesti monia lisäsovelluksia kuten paneeleita, vimpaimia (engl. "widget") ja tiedostonhallintasovelluksia. Työpöytäympäristö tarjoaa käyttäjälle monipuolisemman ympäristön kuin pelkkä ikkunointimanageri. Toisaalta useimmat työpöytäympäristöt vievät runsaasti järjestelmän resursseja, jotka voisi käyttää johonkin hyödyllisempäänkin.

Graafiset ohjelmat käynnistetään yleensä ikkunointimanagerista tai työpöytäympäristöstä käsin.

Käyttäjät, ryhmät ja oikeudet tiedostoihin

Linux on monikäyttäjäjärjestelmä. Koneen ylläpitäjä on ns. pääkäyttäjä eli "root". Joissain jakeluissa, kuten Ubuntu Linuxissa, on pääkäyttäjän tili poissa käytöstä ja ylläpitotoimiin käytetään sudo-komentoa. Muiden käyttäjien oikeuksia koneeseen on rajoitettu - he ovat siis todella pelkkiä käyttäjiä.

Termi "käyttäjä" tarkoittaa Linux-järjestelmässä paitsi ihmisiä, myös erilaisia järjestelmäkäyttäjiä. Järjestelmäkäyttäjien avulla myös käynnissä olevien palveluiden (esim. www-palvelin) oikeuksia saadaan rajoitettua. Mahdolliset ohjelmointivirheet eivät ole näin yhtä vaarallisia kuin silloin, jos palvelulla on "root"-oikeudet.

Jokainen käyttäjä kuuluu myös yhteen tai useampaan käyttäjäryhmään. Ryhmien avulla voidaan hienosäätää oikeuksia kirjoittaa tiedostoihin ja hakemistoihin, mutta myös sallia ja estää oheislaitteiden käyttö. Esimerkiksi vain ryhmään "audio" kuuluvat saavat käytettyä tietokoneen äänikorttia. Muut saavat yritettäessä vain virheilmoituksen.

Jokaisella tiedostolla ja hakemistolla Linux-järjestelmässä on seuraavat perusominaisuudet:

Omistaja
Ryhmä
Lukuoikeudet (käyttäjä,ryhmä,muut)
Kirjoitusoikeudet (käyttäjä,ryhmä,muut)
Käynnistysoikeudet (käyttäjä,ryhmä,muut)
SUID (set-user-id) bitti päällä/pois
GUID (set-group-id) bitti päällä/poi
Sticky bitti päällä/pois

Lisäksi tiedostoilla on monia muita ominaisuuksia, mutta nämä ovat niistä olennaisimmat. Tiedostojen oikeuksilla voidaan rajoittaa sitä, mitä tiedostolle voidaan tehdä, ja kuka voi tehdä mitäkin. Alla esimerkki tiedoston ominaisuuksista "ls -l" -komennon tuottamana:

- rwx r-x ---  1 samuli users 391 2004-09-02 16:45 resizepics

Tämän tiedoston omistaa "samuli" ja omistava ryhmä on "users".

Ensimmäiset kolme kirjainta ("rwx") koskevat tiedoston omistajaa (owner): hänellä on lukuoikeudet ("r" eli "read"), kirjoitusoikeudet ("w" eli "write") sekä käynnistysoikeudet ("x" eli "eXecute") tiedostoon.

Seuraavat kolme kirjainta ("r-x") tarkoittavat, että tiedoston omistava ryhmä (group) voi lukea ("r") ja käynnistää ("x") tiedoston, muttei kirjoittaa siihen ("-").

Viimeiset kolme paikkaa ("---") ovat tyhjiä, ja koskevat muita käyttäjiä. Heillä ei tässä tapauksessa ole mitään oikeuksia tiedostoon.

Mainittujen tiedosto-oikeuksien lisäksi tiedostoille voi määrittää ns. erityisbittejä, joita on kolme erilaista. Bitit ovat järjestyksessä "Set-user-id (SUID)", "Set-group-id (SGID)" sekä "Sticky".

"Set-user-id" -bittiä käytetään normaalisti silloin, kun halutaan, että jokin ohjelma käynnistyy oletuksena "root"-oikeuksin. Perinteisesti tätä ominaisuutta on käytetty esimerkiksi pelien käynnistämiseen silloin, kun pelin on täytynyt päästä suoraan käsiksi esimerkiksi näytönohjainkortin resursseihin. SUID bitin käyttö on kuitenkin vaarallista, eikä sitä tulisi käyttää kuin viimeisenä oljenkortena.

"Set-group-id" -bitti on kätevä hakemistojen yhteydessä: kun se on asetettuna, kaikki hakemistoon luodut tiedostot ja hakemistot saavat omistavaksi ryhmäkseen saman kuin mainitun hakemiston omistava ryhmä on.

"Sticky -bittiä ei käytetä kovin usein, mutta Linuxissa sille on hyödyllinen käyttötarkoitus: sen avulla voidaan estää käyttäjiä poistamasta yleisessä käytössä olevasta hakemistosta muita kuin omia tiedostojaan.

Linuxin tiedostojärjestelmien rajoitukset ovat käytössä hyvästä syystä: ne parantavat järjestelmän tietoturvaa merkittävästi. Kunhan ohjelmia ajetaan normaalina käyttäjänä (ei pääkäyttäjänä), eivät esimerkiksi virukset tms. voi tehdä tuhojaan kuin käyttäjän omassa kotihakemistossa. Osin tästä syystä Linuxille ei käytännössä ole viruksia.

Windowsiin tottuneella tiedostojen rajoitteet ja käyttäjätilit voivat tuntua aluksi vaivalloisilta, mutta niihin tottuu, kunhan vain ymmärtää niiden periaatteet. Toisekseen jopa Windows-käyttäjien on todennäköisesti Windows Vistan myötä hiljalleen totuteltava rajoitettuihin käyttäjäoikeuksiin.

Linuxin tiedostojärjestelmän rakenne

Linuxissa tiedostojärjestelmä rakentuu hieman eri tavoin kuin Windowsissa. Windowsissahan eri kovalevyosiot, diskettiasemat, cd-asemat ja verkkolevyt saavat kirjaintunnuksen, esimerkiksi A, C tai X. Linuxissa tällaista jakoa ei ole, vaan kaikki löytyvät saman juurihakemiston alaisuudesta.

Linuxin juurihakemiston nimi on "/". Windowsissa jokaisella levyllä on oma juurihakemistonsa, esim. "A:/" tai "C:/". Linuxia käytettäessä ei tarvitse arvailla asemakirjaimia, vaan pikemminkin levyosion sijaintia hakemistopuussa. Kaikki levyt jäsentyvät juurihakemiston alaisuuteen.

Linuxin tiedostojärjestelmä on kolmitasoinen: ensimmäisenä tulevat suoraan hakemiston "/" alla olevat hakemistot. Vastaava hakemistorakenne on hakemiston "/usr" alla. Useimmissa järjestelmissä tiedostoja ja ohjelmia löytyy myös hakemiston "/usr/local" alaisuudesta.

Linux osaa etsiä ohjelmia ja ohjeita hakemistorakenteen näiltä kaikilta tasoilta, ja samannimisten ohjelmien eri versioita voi olla asennettuna eri paikkoihin eri tarkoituksia varten. Komennoilla whereis ja which saadaan selville mistä kaikkialta jokin ohjelma löytyy, ja mikä versio siitä käynnistyy oletuksena.

Myös ulkoiset massamuistit (CD-levyt, disketit, USB-muistit) liitetään johonkin hakemistoon, yleensä joko suoraan juurihakemiston alaisuuteen (esim. /cdrom) tai hakemistojen /mnt tai /media alaisuuteen (esim. /mnt/cdrom tai /media/cdrom).

Seuraavassa yleiskatsaus Linuxin hakemistorakenteeseen:

Suoraan juurihakemiston alla olevat hakemistot

Hakemiston /usr alaisuudessa olevat hakemistot Hakemiston /usr/local alla olevat hakemistot