Unixin tiedostojärjestelmä I

Esitiedot: Istunto

Tiedostot ja hakemistot

Kullakin käyttäjällä on oma kotihakemistonsa (home directory), johon hän voi tallettaa omia tiedostojaan. Istunto alkaa käyttäjän kotihakemistosta. Käyttäjän kotihakemiston sijainti on talletettu komentotulkin muuttujaan $HOME ja sen voi tulostaa käskyllä echo $HOME.

Unixin kaksi keskeisintä tiedostotyyppiä ovat hakemisto ja tiedosto. Hakemisto on siis tietyn tyyppinen tiedosto! Hakemisto voi sisältää tiedostoja ja uusia (ali-)hakemistoja. Hakemistot muodostavat puun, joka alkaa juurihakemistosta / (root directory). (Unixissa ei ole Windows.maailmasta tuttuja eri asemia kuten C:, vaan disketit ja cd:t "mountataan" osaksi hakemistorakennetta, tästä lisää myöhemmin.)

Hakemisto, jossa ollaan, on nimeltään työhakemisto (working directory).Hakemiston sisältöä voidaan katsoa käskyn ls avulla. Sellaisenaan käsky listaa työhakemiston sisällön eli siellä olevat tiedostot:

$ ls
file subdir

Optiolla -l näytetään tiedostoista enemmän tietoa:

$ ls -l
total 1
-rw-r--r--    1 nvolk    ykielo          0 Nov  6 15:34 file
drwxr-xr-x    2 nvolk    ykielo        512 Nov  6 15:34 subdir
$

Tarkka kuvaus selitetään tarkemmin luvussa Tiedostojärjestelmä II. Nyt riittää tietää, että rivin viimeinen sana kertoo tiedoston nimen, ja että rivin ensimmäinen merkki kertoo tiedoston tyypin. 'd' tarkoittaa hakemistoa ja - tavallista tiedostoa.

Optiolla -a näytetään kaikki tiedostot, mukaan lukien pisteellä alkavat tiedostot eli piilotiedostot.

$ ls -a
.  ..  .hidden  file  subdir
$ ls -a -l
total 11
drwxr-xr-x    3 nvolk    ykielo        512 Nov  6 15:35 .
drwx--x--x   76 nvolk    ykielo       8704 Nov  6 15:32 ..
-rw-r--r--    1 nvolk    ykielo          0 Nov  6 15:35 .hidden
-rw-r--r--    1 nvolk    ykielo          0 Nov  6 15:34 file
drwxr-xr-x    2 nvolk    ykielo        512 Nov  6 15:34 subdir
$

. tarkoittaa hakemistoa itseään, eli työhakemistoa ja .. hakemiston äitihakemistoa (eli hakemistoa, jonka alihakemistossa ollaan. Tiedosto .hidden on "tavallinen" piilotiedosto.

Liikkuminen hakemistorakenteessa

Hakemistosta toiseen voidaan siirtyä käskyllä cd. Jos käskyllä ei ole argumentteja, siirrytään käyttäjän kotihakemistoon (tai oikeammin komentotulkin muuttujan $HOME osoittamaan hakemistoon). Dollarimerkki tarkoittaa, että sen perässä tuleva nimi viittaa muuttujaan ja komentotulkki korvaa muuttujan nimen muuttujan arvolla. Muuttujan arvoa voidaan tarkastella käskyllä echo $muuttuja. Työhakemiston sijainnin hakemistorakenteessa saa näkyviin käskyllä pwd:

$ pwd
/tmp
$ echo $HOME
/home/n/v/nvolk
$ cd
$ pwd
/home/n/v/nvolk
$

Kotihakemistoon voidaan viitata merkillä ~ ja muuttujalla $HOME eli seuraavat kolme käskyä tarkoittavat kaikki samaa asiaa:

$ cd
$ cd ~
$ cd $HOME

Työhakemisto on talletettu ympäristömuuttujaan $PWD. Edellinen työhakemisto on talletettu ympäristömuuttujaan $OLDPWD. Joskus on tarkoituksenmukaista palata edelliseen työhakemistoon. Tämän voi tehdä kahdella tapaa, vaikkei muistaisi, mikä ja missä se hakemisto olikaan:

$ cd -
$ cd $OLDPWD

Hakemistoissa liikkuminen voi olla absoluuttista, jolloin sijainta määritellään suhteessa juurihakemistoon, tai suhteellista, jolloin siirtyminen määritellään suhteessa työhakemistoon. Risuaita # on komenttimerkki. Komentotulkki jättää sen ja loppurivin huomioitta.

$ pwd
/home/n/v/nvolk
$ cd .. # siirrtyään äitihakemistoon (suhteellinen)
$ pwd
/home/n/v
$ cd ../a # suhteellinen 
$ pwd
/home/n/a
$ cd /home/w/i # absoluuttinen
$ pwd
/home/w/i
$

Unixien hakemistorakenteen keskeisiä osia

Näitä nyt ei tarvitse osata ulkoa. Siirtyy varmaan tiedostorakenne III-osioon...

/
juurihakemisto
/home/
Käyttäjien kotihakemistoja
/tmp/
Väliaikaistiedostoja
/var/spool/mail/
Saapuva sähköposti

Jokerimerkit

Tiedostojen nimiin viitatessa voidaan käyttää ns. jokerimerkkejä, joille komentotulkki antaa erityisen tulkinnan. Käytännössä komentotulkki korvaa jokerimerkkejä sisältävän merkkijonon "osumilla" eli niillä tiedostonimillä, jotka täyttävät ehdot. Alla bash-komentotulkin määritelmä jokerimerkeistä. Pitäisi toimia myös muiissa komentotulkeissa.

       The  special  pattern  characters have the following mean­
       ings:

       *      Matches any string, including the null string.
       ?      Matches any single character.
       [...]  Matches any one of the enclosed characters.  A pair
              of  characters  separated by a minus sign denotes a
              range; any character lexically  between  those  two
              characters,  inclusive,  is  matched.  If the first
              character following the [ is a !  or a ^  then  any
              character not enclosed is matched.  A - or ] may be
              matched by including it as the first or last  char­
              acter in the set.

*-merkki tarkoittaa siis mitä tahansa merkkijonoa. Merkkijono voi olla myös tyhjä. (Tiedoston nimen alussa oleva . (piilotiedoston tunnus) täytyy ilmaista erikseen!)

$ ls
kana  ruutana  sana  sanna  sanni
$ ls *ana

kana  ruutana  sana
$ ls *ann*
sanna  sanni
$ ls sa*
sana  sanna  sanni
$ ls *a*a*
kana  ruutana  sana  sanna
$ ls *b*
ls: *b*: No such file or directory
$  

Jokerimerkki ? puolestaan tarkoittaa tasan yhtä, mitä tahansa, merkkiä:

$ ls    
kana  ruutana  sana  sanna  sanni  sima
$ ls ?ana
kana  sana
$ ls s??a
sana  sima
$ ls sann?

sanna  sanni
$ ls ????
kana  sana  sima
$  

Joskus ? voi olla liian yleinen määritelmä ja haluataan suorittaa tarkempi haku tietyillä merkeillä. Tämä tapahtuu kertomalla antamalla merkkijoukko hakasulkeiden sisällä. Kaikki pienet kirjaimet voi määrittää muodolla [a-z] (tai suomalaisittain [a-zåäö], isot vastaavasti [A-Z] ja numerot [0-9]. Tämä johtuu siitä, että Unixin komentotulkki on tehty ja käyttää (yleensä) ISO-8859-1 -standardia, jossa (kullakin merkillä on jokin numeerinen arvo ja konventio on, että numerot/pikkukirjaimet/isot kirjaimet (a:sta z:aan) ovat keskenään peräkkäin (pätee myös muihin merkkistandardeihin). Määritelty joukko voi olla pienempikin, esim. [2-6] tai [j-k]. Vastaavasti [a-zdfg] sisältäisi turhaa toistoa. Jos lista alkaa joko merkillä ^ tai huutomerkillä !, on kyse negaatiosta, eli lista käsittää kaikki merkit, paitsi ne jotka mainitaan listassa. Näistä suosittelen käytettäväksi muotoa [^merkkijoukko] sillä se on yhteensopiva säännöllisten lausekkeiden merkkijoukon käsitteen kanssa.

$ ls

kana  ruutana  sana  sanna  sanni  sima
$ ls [kms]ana
kana  sana
$ ls ?a*
kana  sana  sanna  sanni
$ ls *[st]ana
ruutana  sana
$ ls [^l-v]*
kana
$  

Lisää [:alpha:] alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit

Tiedostojen tarkastelu

Jos tiedostoon on lukuoikeus (tästä lisää myöhemmin), niin tiedoston sisältöä voi katsoa esim. cat-komennon avulla. Tiedostopääte .txt viittaa tekstitiedostoon, joten sellaisista ainakin löytyy hyvin luettavaa. Toisaalta konekieliset ohjelmat eivät tulosta ruudulle mitään kauhean järkevää, joten niitä ei kannata katsella.

$ cat gpl.txt
                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
... PALJON JUOKSEVAA TEKSTIÄ ...
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.

$  

Tiedosto voi olla niin pitkä, ettei se mahdu kerralla ruutuun. Usein riittää katsoa tiedoston alkuun tai loppuun, jotta näkisi mitä tiedosto käsittelee. (Myöhemmin opitaan tapoja selata tiedostoa fiksummin.) Tiedoston alkua voi katsoa head- ja loppua tail-käskyllä. Oletusarvoisesti käskyt tulostavat 10 riviä, mutta -n optiolla voidaan käskylle kertoa montako riviä kalutaan.:

$ head gpl.txt
                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

$ head -n 5
                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
$ 

[ Sisällysluettelo | Yhteenveto | Tehtäviä | Tiedostojärjestelmä II ]


nvolk@ling.helsinki.fi
Viimeksi päivitetty: