Hakemistot ja tiedostot


Hakemistorakenne, Tiedostot, Tiedostojen nimeäminen, Piilotiedostot, Korvausmerkit, Erikoismerkityksen peittäminen, Suhteellinen ja absoluuttinen polkunimi

Hakemistot

Linuxissa hakemistorakenne noudattaa Unixeista tuttua ideaa, eli kaiken yläpuolella on juurihakemisto (/), engl. root, josta kaikki järjestelmän sisältämät hakemistot haarautuvat. Huomaa, ettei hakemistojen tarvitse olla samalla levyosiolla eikä edes fyysisesti samalla levyllä, ne näkyvät kuitenkin aina vain yhtenä hakemistopuuna.

hakemistorakenne

Kuva 1: Linuxin hakemistorakenne

Ylläolevassa kuvassa näkyy vain osa hakemistoista. Yleensä järjestelmästä löytyvät ainakin seuraavat hakemistot:

/ Juurihakemisto, englanniksi root. Puu alkaa tästä ja kaikki hakemistot ovat aina saman yhden juuren alla. Pääkäyttäjän (super user) käyttäjätunnus on lisäksi unixeissa aina root.
/bin Linuxin yleisimmät komennot, kuten ls löytyvät täältä
/usr/bin Lisää Linuxin komentoja. Mitä eroa näillä kahdella sitten on? Ei oikeastaan mitään, mutta aikoinaan, kun levytilaa oli vähän, voitiin jakaa komennot kahdelle levyosiolle tällä konstilla. Lisäksi jos järjestelmään tulee levyongelmia, on enemmän mahdollisuuksia yrittää korjata tilannetta, kun kaikki ohjelmat eivät ole samalla osiolla.
/usr/sbin Komennot, joita käyttää yleensä pääkäyttäjä.
/boot Linuxin ydin (kernel) ynnä muut Linuxin käynnistämiseen tarvittavat tiedostot ovat yleensä täällä
/etc Linuxin asetustiedostoja yms.
/tmp Ohjelmien käyttämä hakemisto tilapäistiedostoille.
/var Järjestelmään liittyviä tiedostoja, kuten lokitiedostot
/var/spool Kirjoitinjonot yms. tilapäistä talletusta tarvitsevat tiedostot
/usr/lib Standardikirjastot. Kirjastot ovat tiedostoja, joita eri ohjelmat tarvitsevat.
/usr/include C-kääntäjien standardikirjastot, kuten vaikkapa stdio.h
/usr/lib/X11 X-window Systemin hakemisto. X on Linuxin ikkunointijärjestelmä.
/home Käyttäjien kotihakemistot. Voi toki sisältää eri alihakemistojakin, jos on tarvetta ryhmitellä käyttäjiä. Jokainen käyttäjätunnus saa nimellään varustetun hakemiston tänne. Yllä olevan kuvan järjestelmässä on kaksi käyttäjää, ake ja make.
/dev Laitetiedostot. Jokaisella oheislaitteella, mitä koneessa on kiinni, on täällä tiedosto. Yleensäkin Unixeissa toimii periaate "kaikki on tiedostoja". Näin ollen laitetta ei ole olemassakaan, jos sille ei ole tiedostoa täällä.
/lost+found Jos järjestelmä kaatuu syystä tai toisesta, joissain tapauksissa voi palauttaa tiedostoja. Jos Linux ei tiedä, minne tiedostot kuuluvat, ne sijoitetaan tänne uudelleenkäynnistyksen yhteydessä. Täältä voi sitten käydä etsimässä omia tiedostojaan.
/mnt Kun käytetään ulkoisia asemia, kuten korppu- tai romppuasemaa, voidaan mount-komennolla liittää nämä hakemistot mnt-hakemiston alle. Kaikki hakemistothan pitää Linuxissa "mountata" jonnekin hakemistopuuhun. Sen jälkeen ne ovat vasta käytettävissä. (ihan normaalisti cd-komennolla)
/proc Hakemisto sisältää tiedostoja, jotka edustavat järjestelmässä tapahtuvia aktiivisia prosesseja ja niiden ohella tiedostoja, jotka sisältävät tietoja järjestelmän parametreistä ja tilasta. Tiedostojen sisältöä voit lukea vapaasti, mutta tänne ei pidä missään tapauksessa mennä kirjoittamaan mitään!

Unix-tiedostojärjestelmälle on määritelty standardi, mitkä hakemistot pitää olla olemassa ja missä mikin tiedosto sijaitsee. Tämän standardin löytää osoitteesta http://www.pathname.com/fhs/. Nykyiset yleisimmät Linux-distribuutiot noudattavat varsin tarkkaan tätä standardia.


Tiedostot

Linux noudattaa Unixeista tuttua periaatetta: "kaikki on tiedostoja". Näin ollen järjestelmässä ei voi olla esimerkiksi yhtään laitetta, jos sille ei ole tiedostoa hakemistossa /dev. Tämän idean hyvä puoli on siinä, että tarvitaan vain yksi syöttö- ja tulostuskäsky riippumatta siitä, minne tulostetaan tai mistä luetaan. Jos halutaan tulostaa jollekin laitteelle, ohjataan tuloste vain tälle tiedostolle. Tämä tiedosto sitten tietää laitteen ominaisuudet ja hoitaa tulostuksen.

Esimerkiksi /dev/tty1 on pääte ja /dev/ttyS0 taas sarjaportti. Näin ollen komentotasolla voidaan samalla komennolla kirjoittaa niin päätteelle kuin sarjaporttiinkin. Laite itse osaa käsitellä vastaanottamansa datan.

Hakemistokin on pohjimmiltaan erikoismerkityksen omaava tiedosto; oikeastaan tiedostolista.


Tiedostojen nimeäminen

Isot ja pienet kirjaimet käsitellään eri merkkeinä: tiedosto nimeltään esimerkki on aivan eri asia kuin ESIMERKKI tai Esimerkki!

Linux- ja unix-maailmassa tiedostojen nimeäminen on varsin vapaata. Nimessä voi käyttää kirjaimia, numeroita sekä erikoismerkkejä käytännössä täysin mielivaltaisesti sekaisin. Myös erikoistarkoituksiin varattuja merkkejä (esimerkiksi \, *, ?, -, ", ') voi käyttää. Ainoastaan kauttaviiva (hakemistoerotin ja juurihakemiston nimi) sekä NULL-merkki ('\0') ovat kiellettyjä. Aloittelijan kuitenkin kannattaa pitäytyä "helpoissa" merkeissä (kirjaimet, numerot, kenties pari erikoismerkkiä, kuten alaviiva). Nimittäin jos käyttää erikoismerkkejä, pitää myös ymmärtää, miten niitä käytetään sekä miten ne käyttäytyvät.

Tiedoston nimen maksimipituus on 256 merkkiä. Jos katsellaan unix-järjestelmiä yleensä, tämä maksimipituus on versiokohtainen; pituus voi olla jotain ihan muutakin (yleensä vähemmän). Varsin yleinen käytäntö lienee se, että tietty määrä merkkejä tiedoston nimen alusta on merkitseviä ja sen jälkeen voi olla vaikka kuinka paljon merkkejä nimessä. (esimerkiksi "posti" ja "postitoimipaikka" olisivat saman nimiset tiedostot, jos viisi ensimmäistä merkkiä olisi merkitseviä)


Piilotiedostot

Jos tiedoston nimi alkaa pisteellä, se on ns. piilotiedosto, eli sitä ei näe normaalissa tiedostolistauksessa. Piilotiedostot saa kuitenkin näkyviin ls-komennon -a-optiolla, eli ls -a

[kuivanen@localhost kuivanen]$ ls -a
.              .bash_logout   .gnome-desktop  .sawfish          Desktop
..             .bash_profile  .gnome_private  .screenrc         asia
.ICEauthority  .bashrc        .kde            .sversionrc       office52
.Xauthority    .emacs         .kderc          .user52.rdb       puppu
.bash_history  .gnome         .mc             .xsession-errors	   

Usein piilotiedostot ovat eri ohjelmiin ja ympäristöihin liittyviä asetustiedostoja. Esimerkissä olevat .bashrc, .bash_profile ja .bash_logout ovat bash-komentotulkin asetustiedostoja.

Tiedoston "piilottamisella" näin pyritään siihen, ettei tiedostoja käsiteltäisi (esim. kopioitaisi tai poistettaisi) vahingossa korvausmerkkejä käytettäessä. Näin ne ovat vähän enemmän turvassa; mitään varsinaista piilottamistahan tämä ei ole.


Korvausmerkit

Joidenkin operaatioiden kohdalla täytyy käsitellä kerralla useita tiedostoja. Tällöin jos tiedostojen nimissä on yhteneväisyyksiä, voidaan käyttää ns. korvausmerkkejä (jokerimerkkejä). Linuxin korvausmerkit ovat *, ? sekä [], joiden väliin luetellaan käyvät merkit.

* korvaa useita merkkejä:

cat *.html

Listaa ruudulle kaikki .html-päätteisten tiedostojen sisällöt

ls -l f*

Näyttää hakemistolistauksessa kaikki f:llä alkavat tiedostonimet (sekä f-alkuisten hakemistojen sisällön. Mieti, miksi näin!)

? korvaa yhden merkin:

less ????.txt

Näyttää ruutu kerrallaan sellaiset tiedostot, joiden nimessä on neljä merkkiä ennen .txt-osaa.

Hakasulkujen välissä voit luetella merkit, joita saa esiintyä:

cat tied[1234]

Näyttää tiedostojen tied1, tied2, tied3 sekä tied4 sisällön, muttei esimerkiksi tiedx:n tai tied11:n sisältöä (tiedoston nimessä pitää siis olla täsmälleen viisi merkkiä annetun säännön mukaan).

Tarvittaessa voidaan myös käyttää väliä:

cat tied[1-4]

Huutomerkki alussa taas aiheuttaa negaation:

cat tied[!1-4]

Nyt kelpaa viimeiseksi (viidenneksi) merkiksi mikä tahansa muu paitsi numero 1-4.


Erikoismerkityksen peittäminen

Jos käytetään erikoismerkkejä nimissä, pitää osata peittää niiden erikoismerkitys. Se voidaan tehdä kirjoittamalla tiedoston nimi heittomerkkien sisään tai käyttämällä ns. peittomerkkiä, joka on kenoviiva ( \ ).

vi 'stara*'

Aloittaa vi-editorilla tapahtuvan editoinnin, jossa editoitavana on tiedosto nimeltään stara*. Asteriski on siis aivan tavallisena merkkinä mukana tiedoston nimessä.

Asian voi esittää myös näin:

vi stara\*

Kenoviivalla voi siis peittää yksittäisen merkin merkityksen. Luonnollisesti kenoviivankin peittämiseen käytetään kenoviivaa:

cat keno\\viiva

Näyttää tiedoston nimeltään keno\viiva sisällön ruudulla.


Suhteellinen ja absoluuttinen polkunimi

Samassa hakemistossa ei voi olla kahta samannimistä tiedostoa (muista nyt edelleen se, että ISOT ja pienet kirjaimet ovat eri asia!). Kuitekin levyllä voi olla useitakin samannimisiä tiedostoja. Tämä selittyy sillä, että tiedoston "todellinen" nimi on tiedoston koko polkunimi juuresta alkaen. Esimerkiksi tämän sivun ensimmäisessä kuvassa olevan public_html-hakemistossa olevan index.html-tiedoston koko nimi on

/home/ake/public_html/index.html

Tätä nimeä kutsutaan ns. absoluuttiseksi polkunimeksi. Se on tiedoston koko nimi alkaen juuresta. Huomaa, että kauttaviiva toimii myös hakemistoerottimena sen lisäksi, että se on juurihakemiston nimi.

Kuitenkaan tiedostoon ei tarvitse aina viitata absoluuttisen polkunimen avulla. Viittauksessa voidaan käyttää myös ns. suhteellista polkunimeä. Se on polku tiedostoon alkaen käyttäjän työhakemistosta (ts. siitä hakemistosta, jossa hän on tällä hetkellä). Esimeriksi jos käyttäjä ake on kotihakemistossaan (/home/ake, voidaan samaan tiedostoon viitata näin:

public_html/index.html

Huomaa, ettei alussa ole kauttaviivaa. Jos olisi, tarkoittaisi se sitä, että public_html-hakemisto pitäisi löytyä päähakemiston (juuren) alta!


Alkuun