Linuxi failisüsteem
 
teejuht
 
1. Sissejuhatus
2. Linuxi standartne kataloogistruktuur
3. Failide ja kataloogide moodustamine
       - kataloogistruktuuris liikumine
        -kataloogide moodustamine ja kustutamine
       - failide loomine ja kustutamine
4. Kasutaja õigused failile ja kataloogile
5.
Õiguste muutmine
6.
Kataloogid on ka failid
7.
lingid: hard and soft
8.
protsesside õigused
 
1. Sissejuhatus

Failisüsteemi ülesanne on teha võimalikuks failide kiire ja veatu salvestamine/lugemine infokandjalt.
Ennekõike - ühes partitsioonis saab olla korraga mitte rohkem kui üks failisüsteem. Failisüsteeme on levinud tänapaeval päris mitmeid:

- Linux kasutab ext2 tüüpi (Second Extended)
- Win95, DOS FAT16 (nende folppy'id FAT12)
- Windows NT NTFS (New Technology File System)
- OS / 2 HPFS (High Performance File System)

Võimalik on ka infot hoida / kanda kettale kus polegi failisüsteemi nt. swap või bare.i ketas (siis pöördutakse ketta poole lihtsalt sektor haaval).

nt . sel juhul linuxis kirjutatakse fail (eeldusel, et ta on väiksem kui  ketta maht)

dd if=/fail of=/dev/fd0

See on aga pigem erand kui reegel. Ja kui ühel kõvakettal on mitu partitsiooni, siis on võimalik, et mingil tarkvarast tingitud põhjusel hävib üks failisüsteem ja teised jäävad terveks. Ketta füüsillise vigastuse korral on tõenäoline kaotada isegi kõik partitsioonid.
 

2. Linuxi standartne kataloogistruktuur

Aja jooksul on välja kujunenud UNIX'i (sh Linux) maailmas kindla korra järgi tehtud kataloogistruktuur. See ei lase ehk administraatoritel isikupäratseda kuid see-eest on lihtsam tulla tundmatus kohas toime. Isikupära väljendamiseks on Linux'is teisi võimalusi :). Muuseas, katalooge on vaja selleks, et kõik failid ei asuks käsku 'ls' tehes ühes rodus :)

See on nagu üks aja definitsioon:
Aeg on see, mis ei lase toimuda kõigil sündmustel samaaegselt.

Kujutades kataloogistruktuuri tabelina näeb ta välja umbes nii (punktiir on vaid lugemise hõlbustamiseks):

  /                                        nn. juurikas ehk root
    a/                                     FAT floppy mount point
    bin/                                   süsteemi binari'd (ls, mount, tar ..)
    etc/                                   süsteemi konfiguratsioon
              rc.d/                        rc -run command
---------------------------------------------------------------------------------------------------------
    lib/                                   C lirary'd ja muud
    floppy/                                ext2 floppy mount
    home/                                  kasutajate kodukataloogid
              html/                        süsteemi kodulehekülg (nt. http://laura.oolberg.co)
              ftp/                         anonymous ftp
              cgi-bin/                     web'i lehtedelt käivitatavad programmid
              imre/                        kasutaja imre kodukataloog
                      public_html/         kasutaja imre kodulehed (http://laura.oolberg.co/~imre)
                      luuletused/          kasutaja imre luuletused
              laura/
                      public_html/         kasutaja laura koduleht (http://laura.oolberg.co/~laura)
                      õudusjutud/          kasutaja laura jutud
---------------------------------------------------------------------------------------------------------
    tmp/                                   süsteemi töö käigus tekkivad ajutised failid
    usr/                                   igasugused failid :)
              src/                         programmide source'd
                      linux/               kerneli source
                      doc/                 palju lugemist linuxi kohta sh. FAQ ja HOWTO
    var/                                   süsteemi log ja message failid (debugimiseks)
    vmlinuz                                fail kernel
----------------------------------------------------------------------------------------------------------

3. Failide ja kataloogide moodustamine

Niisiis, failisüsteemis on loogilises mõttes, laias laastus kahte tüüpi elemente:

- faile (sisaldavad teksti, pragramme, pilte, muusikat...)
- katalooge (sisaldavad endas faile ja alamkatalooge)

(Tehniliselt on seal ainult faile - mis see tähendab selgub all pool)
 

Olemasolevates kataloogides liikumine

Katalooge võib kujutleda mitmekihilise struktuurina, kõige ülemine kust enam nö. ülespoole minna ei saa on nn. root (mitte süsteemi administraatori mõttes) ehk juurikas.

- liikumiseks kasutatakse käsku cd (change directory)
- vaatamiseks kus te struktuuris parasjagu asute on käsk pwd (present working directory):

toon mõned näited (kasutaja imre peale sisselogimist):
lugege neid tähelepanelikult ja proovige ise järgi!

seda nimetatakse süsteemi promptiks ehk viibaks: suvi@imre~$ ja seal otsas on samuti näha kus te asute. Promti kuju pm kasutajal võimalik muuta.
 
 
vaatame kus oleme suvi@imre~$pwd 
/home/imre
läheme juurika peale suvi@imre~$cd / 
suvi@imre/$pwd 
/
läheme kataloogi /etc/rc.d suvi@imre/$cd /etc/rc.d 
suvi@imre/etc/rc.d$pwd 
/etc/rc.d
läheme kodukataloogi suvi@imre~$cd (või cd ~) 
suvi@imre~$pwd 
/home/imre
läheme viimatioldud kataloogi suvi@imre~$cd - 
suvi@imre/etc/rc.d$pwd 
/etc/rc.d
läheme kataloog üles poole suvi@imre/etc/rc.d$cd .. 
suvi@imre/etc$pwd 
/etc
läheme kataloogi kus me juba oleme suvi@imre/etc/rc.d$cd . 
suvi@imre/etc/rc.d$pwd 
/etc/rc.d
liigume tagasi ja edasi suvi@imre/home$pwd 
/home/imre 

suvi@imre~$cd .. 
suvi@imre/home$ 
suvi@imre/home$pwd 
/home 

suvi@imre/home$cd imre 
suvi@imre~$pwd 
/home/imre

Kataloogide moodustamine
 
- Kataloogi moodustab käsk mkdir (make directory) 
- Kataloogi kustutamiseks on käsk rmdir eeldusel, et kataloog on tühi st. seal ei ole faile. Katalooge ei saa aega teha mujale kui oma kodukataloogi alla 
- kataloogis olevate failide ja alamkataloogide vaatamiseks on käsk 'ls -l' ls (list) võti -l (long) 
 

suvi@imre~$cd
suvi@imre~$mkdir tartu tallinn haapsalu kuressaare
suvi@imre~$ls -l
total 4
drwxr-xr-x   2 imre     users        1024 Aug 31 12:45 haapsalu/
drwxr-xr-x   2 imre     users        1024 Aug 31 12:45 kuressaare/
drwxr-xr-x   2 imre     users        1024 Aug 31 12:45 tallinn/
drwxr-xr-x   2 imre     users        1024 Aug 31 12:45 tartu/

Siin ilmuvad juba uued aspektid, alustame paremalt:

- kataloogi nimi (kataloog lõpeb '/ ' märgiga)
- arvet peetakse loomise aja kohta
- suurus baitides (see on alati täisarvkordne failisüsteemi bloki suurus)
- grupp millesse faili omanik kuulub (enamus kasutajaid kuulub gruppi users (kasutajad)
- faili omaniku nimi (imre) tavaliselt ei saa maha võtta teiste kasutajate faile ega katalooge
- hard linkide arv kataloogile või failile
- kasutajate õigused kataloogile või failile

Jäägu kaks viimast rida esialgu täpsustamata; neis tuleb juttu allpool.

katsuge nüüd tehtud kataloogidesse sisse liikuda ning lõpuks eemaldage nad:

suvi@imre~$cd
suvi@imre~$pwd
/home/imre
suvi@imre~$rmdir tartu tallinn haapsalu kuressaare

Harjutamise mõttes on hea ära teha järgmine ülessanne. Moodustage kataloogistruktuur:

/
    home/
            imre/
                    aasta/
                            kevad/
                                    marts/
                                    aprill/
                                    mai/
                            suvi/
                                    juuni/
                                    juuli/
                                    august/
                            sygis/
                                    september/
                                    oktoober/
                                    november/
                            talv/
                                    detsember/
                                    jaanuar/
                                    veebruar/
 

Muide, kui te olete linuxis sättinud käima eeti tähed, siis faili ja katalooginimedes pole neid hea kasutada - igaks juhuks.

Failide loomine

Selleks on väga palju võimalusi. Kõige lihtsam on kasutada mingit tekstiredaktorit. Teeme seda aga programmiga cat.

nt oleme kodukataloogis ja teeme sinna kataloogi jutud:

suvi@imre~$cd
suvi@imre~$mkdir jutud
suvi@imre~$cd jutud/
suvi@imre~/jutud$pwd
/home/imre/jutud
suvi@imre~/jutud$cat > karu
karu elab metsas teeb momm momm
ja kui ta ei ole metsas,
siis ta teeb ikka momm momm
Ctrl+d - Ctrl klahvi all hoides vajutame korraks d klahvi
suvi@imre~/jutud$ls -l
total 1
-rw-r--r--   1 imre     users          84 Aug 31 13:07 karu
suvi@imre~/jutud$

ja kui soovote näha, mis seal sees on, siis:

suvi@imre~/jutud$cat karu
karu elab metsas teeb momm momm
ja kui ta ei ole metsas,
siis ta teeb ikka momm momm
suvi@imre~/jutud$

Sel moel tehke mitmeid faile: j6nes, hunt, rebane, siil, konn, kurg, vares

suvi@imre~/jutud$ls -l
total 1
-rw-r--r--   1 imre     users          45 Aug 31 13:13 hunt
-rw-r--r--   1 imre     users          34 Aug 31 13:13 j6nes
-rw-r--r--   1 imre     users          84 Aug 31 13:07 karu
-rw-r--r--   1 imre     users          66 Aug 31 13:13 konn
-rw-r--r--   1 imre     users          34 Aug 31 13:13 kurg
-rw-r--r--   1 imre     users          12 Aug 31 13:13 rebane
-rw-r--r--   1 imre     users         144 Aug 31 13:13 siil
-rw-r--r--   1 imre     users         789 Aug 31 13:13 vares
suvi@imre~/jutud$

Faili saab maha võtta käsuga rm (remove)

suvi@imre~/jutud$rm j6nes karu konn kurg
suvi@imre~/jutud$ls -l
total 1
-rw-r--r--   1 imre     users          45 Aug 31 13:13 hunt
-rw-r--r--   1 imre     users          12 Aug 31 13:13 rebane
-rw-r--r--   1 imre     users         144 Aug 31 13:13 siil
-rw-r--r--   1 imre     users         789 Aug 31 13:13 vares
suvi@imre~/jutud$

Faili sisu samaks jättes saab faili nime muuta: käsk mv (move)

suvi@imre~/jutud$mv hunt fail1; mv rebane fail2; mv siil fail3; mv vares fail4
suvi@imre~/jutud$ls -l
total 1
-rw-r--r--   1 imre     users          45 Aug 31 13:13 fail1
-rw-r--r--   1 imre     users          12 Aug 31 13:13 fail2
-rw-r--r--   1 imre     users         144 Aug 31 13:13 fail3
-rw-r--r--   1 imre     users         789 Aug 31 13:13 fail4
suvi@imre~/jutud$

Siin saab ka tähele panna, et korraga võib anda mitu korraldust kui nad semikooloniga (;) üksteiest eraldada. Ning failides on ka omanik, grupp ja 'kaks esimest tulpa'.

4. Kasutajate õigused failile ja kataloogile
 
- Igal failil on linuxis omanik.
- Teise omaniku faile kustutada ei saa.
- Faili ja kataloogi õigused määravad kes mida mingi kataloogi või failiga teha saab.

Normaalne on, et kasutaja ei anna teistele kasutajatele õigust talle eraldatud kettaruumi faile luua. Samas võib kasutaja soovida osa oma failidest teha teistele sama masina kasutajatele kättesaadavaks. Samuti on faili õigusi vaja sobivalt määrata kodulehekülgede väljariputamisel.

Vaatame hüpoteetilist kataloogi /home/imre/suurnali/ ja selles sisalduvat:

andku 'ls -la'  ekraanile midagi sellist:
 
kata-
loogi 
märge
useri
ehk
omaniku
õigused
grupi 
õigused
others'te 
õigused
hard
linkide arv
user'i
ehk omaniku 
nimi
group'i
nimi kuhu omanik kuulub
suurus
kuu-
päev
kuu
aasta
faili või kata-
loogi nimi
d
rwx
r-x
r-x
3
imre
users
1024
12
Mar
1998
./
d
rwx
r-x
r-x
6
imre
users
1024
12
Mar
1998
../
d
rwx
rwx
rwx
2
imre
users
23 000
 12 
Mar
1998
kata
-
rw-
r--
r--
1
imre
users
30 000
12
Mar
1998
karu
-
rwx
r-x
r--
1
imre
users
30 000
12
Mar
1998
programm
 
Mida esimesed 5 tulpa siis tähendavad?

esimene tulp

esimesed kolm rida on kataloogid, sest neil on ees märge d. . / tähendab käesolevat kataloogi. .. / viitab aste ülevalpool olevale kataloogile; kata on käesolevas kataloogis sisalduv alamkataloog; karu ja programm on failid

teine, kolmas, neljas tulp

UNIX eristab oma failidele lähenejaid kolme rühma ja võimaldab faili omanikul anda neile erinevaid õigusi (NB! Faili omanik ei saa anda erinevaid õigusi sama grupi (nt. users) erinevatele liikmetele).

u - user (ehk owner) - omanik, kasutaja
g - group - omanikuga samasse kastajate gruppi kuuluja
o - others - kõik muud terves maailmas: teiste grupi liikmed, anonymous ftp või http kasutajad

failiga ja kataloogiga on mõeldav teha kolme asja (tegijaks võib olla user, group'i liige või keegi other'site hulgast)

r - read - lugeda
w - write - kirjutada juurde või võtta teksti vähemaks
x - execute - käivitada faili kui see on programm

(tekstifaili saab teha käivitatavaks ja programmi loetavaks kuid sel pole erilist mõtet :)

Selgitused failide kohta

- Faili karu (rw- r-- r--)saab kirjutada juttu juurde ainult omanik; kõik teised saavad ainult lugeda.
- faili programm (rwx r-x r--)saavad tööle panna ainult omanik ja temaga samasse gruppi kuuluvad inimesed  
(tõsi faili programm sisu saavad lugeda kõik aga binary puhul see midagi huvitavat ei ole)

Selgitused kataloogide kohta

kataloogi kata
- saavad kõik cd -ga sisse minna (rwx rwx rwx)
- olles seal sees saavad teha kõik lugeda st. teha ls-i (rwx rwx rwx)
- olles seal sees saavad teha kõik sinna kirjutada st. moodustada uusi faile (rwx rwx rwx)

käesolevasse kataloogi (. /) ehk kataloogi /home/imre/suurnali/
- saavad sisse tulla kõik (rwx r-x r-x)
- saavad lugeda st. ls -i teha ka kõik (rwx r-x r-x)
- kataloogi saab faile ja alamkatalooge juurde teha vaid omanik (rwx r-x r-x)

5. Õiguste muutmine

NB! nagu üleval välja tuli  peab linux arvet kes on faili omanik ja nii ei saa teised muuta teie failide õigusi ega ka vastupidi.
Õigusi muudetakse käsuga chmod (change mode) ja kokkuvõtlikult kirjeldab võimalusi tabel:
 
        u
        g  +  r
 chmod     -  w  fail1 fail2 ..
        o  =  x
        a
 
 Näited:
 
 
soovime faili imre teha kõigile vaid loetvaks (ei loe mis enne oli) chmod  a=r imre
soovime lisada omanikule kirjutamise ja käivitamise õiguse chmod u+wx imre
soovime võtta grupi liikmetelt lugemisõigus chmod g-r imre
tulemus rwx --- r--
 
Faili omanikku saab muuta vaid root'i õigusi omades. Käsk on

chown uue_omaniku_nimi fail1 fail2 fail3 
 
(change owner)

Viies tulp

Näita nn. hard linkide arvu antud kataloogili või failile. Mis see tähendb selgitatakse allpool.
 

Märkus:

Faili õiguste muutumiseks on tegelikult veel palju mugavam viis kui a la  'chmod a+rwx filename'

Nimelt tooduga on samaväärne anda käsk  'chmod 777 filename'

Selgitus
 
näide 
omanik
   
grupp
   
others
   
chmod read write execute bin dec read write execute bin dec read write execute bin dec
777 1 1 1 111 7 1 1 1 111 7 1 1 1 111 7
755 1 1 1 111 7 1 0 1 101 5 1 0 1 101 5
500 1 0 1 101 5 0 0 0 000 0 0 0 0 000 0
Ja kahendarvudest kümnedisse üleviimine on lühidalt järgmine:

1101=1 * 2^0 + 0*2^1+1*2^2+1*2^3 = 1 + 0 + 4 + 8 = 13
 

Kuna rahvas ei tunne kahendarvudega end alguses mugavalt, siis selline mnemoonika:
 
näide
omanik
 
grupp 
 
others 
 
chmod read write execute dec read write execute dec read write execute dec
777 1 2 4 7 1 2 4 7 1 2 4 7
755 1 2 4 7 1 0 4 5 1 0 4 5
500 1 0 4 5 0 0 0 0 0 0 0 0
 
 

 6. Kataloogid on ka failid

Mõeldes kataloogidest kui erilistest tekstifailides, milles on kirjas seal sisalduvate failide nimed on ehk natuke kummaline, esialgu, aga kokkuvõttes on see väga loomulik ja vastab sellele kuidas tegelikult failisüsteem realiseeritud on. Ja see seostub hästi ka jutuga kataloogi õigustest. Niisiis, kataloog on tegelikult tekstifail, kus on kirjas selles kataloogis sisalduvate failide ja nn. alamkataloogide nimed.

Selgitame:
 
-
Enne ütlesime, et kui meil pole kataloogi (st kataloogi kui faili) lugemisõigust (d -wx --- ---), siis ei saa teha seal sees ls 'i. Tõepoolest, et  ls saaks midagi näidata peab ta saama faili (st. kataloogi kui faili) lugeda, et saada teada mis seal kirjas on. Lugeda ta aga ei saa kuna pole lugemise õigust.
-
Kui meile pole antud kataloogi (mõtleme teamast kui erilisest failist) kirjutamise õigust (d r-x --- ---), siis ei  saa sinna teha muutusi: ei saa faile kustutada ega juurde teha (mkdir, cat > filename).
-
Ja kõige tähtsa, kui meil pole kataloogi faili käivitamise õigust (d rw- --- ---), siis ei saa sinna isegi sisse minna (cd). 
 
 
Failide ja kataloogide õigustega manipuleerides saab luua kummalisi tingimusi, vähemalt esmapilgul:

-  te annate kõigile teistele oma failide peale kõik õigused ja endale mitte midagi
- keelates kataloogi kirjutamise ja lubades seal olevasse faili kirjutada saab faili sisu muuta
- lubades inimesi oma kataloogi sisse ja sinna kirjutada, kuid mitte lubades kataloogi lugeda saavad nad luua sinna luua faile ilma et nad neid ls -iga näeks.
- Kui te lubate teistel teha teie kataloogi oma faili on tema selle omanik ja te ei pruugi saada seda faili maha võtta!
 

6. Lingid: hard ja soft

Linkimine või linkide tekitamine on selline tehnika mis võimaldab ühe faili sisuga seostada erinevaid nimesid.
Enne kui kõneleme hard linkidest alustame veidi kaugemalt.

Kui me näiteks tekitame kataloogi /home/imre/ faili 'seesamune' siis luuakse kataloogi st. kataloogile vastavasse tekstifaili  umbes selline rida juurde

244841    seesamune

Seda arvu nimetatakse faili inode arvuks.

Kataloogile vastava faili võiks kujutada umbes selliselt:

 244839  .
 244832  ..
 244843  hunt
 166871  kakud
 244840  karu
 244845  orav
 244846  rebane
 244841  seesamune
 

Igal failisüsteemil so. partistsioonil on olemas inode table (öeldakse ka inode list). Too tabel seob kataloogis olevate inode numbritega füüsilised blokid kõvakettal milles sisaldub nö. faili sisu. Niisiis, kui te annate käsu

joe /home/imre/seesamune

siis:

- kõigepealt otsib asvuti kataloogile seesamune vastavast failist kõnealuse rea;
- saab sealt teada inode numbri;
- läheb failisüsteemi inode tabelisse ja saab teada õiges järjekorras füüsiliste blokkide numbrid kus faili tekst asub;
- korjab siis teksti blokkidest kokku ja annab joe'le;
- joe paneb selle ekraanile;

NB! failisüsteemi piires saab olla inode arve igat vaid üks. Nad on kordumatud. Igal kõvaketta blokil on samuti unikaalne number. Inode list on ka see koht kus failisüsteem hoiab iga faile ehk inodele vastavat muud infot:

omaniku, grupp'i ja other'te õigused, failiga seotud ajad (loomine, modifitseerimine, kasutamine) ...
 
Kui soovite näha millised inode arvud vastavad mõne kataloogi failidele, siis on selleks korraldus ls -il
 

bash# ls -il
total 0
 166857 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina1
 166858 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina2
 166859 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina3
 166860 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina4
 166861 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina5

Need failid tehti nii: touch mina{1,2,3,4,5} - inode'd on kenasti järjest.

Hard link

Nüüd teeme aga mõned hard lingi failile mina1 (õigemini inodele 166857)

ln mina1 mina1_a
ln mina1 mina1_b
ln mina1 mina1_c
ln mina1 mina1_d
 

bash# ls -il
total 0
 166857 -rw-r--r--   5 root     root            0 Oct  1 13:39 mina1
 166857 -rw-r--r--   5 root     root            0 Oct  1 13:39 mina1_a
 166857 -rw-r--r--   5 root     root            0 Oct  1 13:39 mina1_b
 166857 -rw-r--r--   5 root     root            0 Oct  1 13:39 mina1_c
 166857 -rw-r--r--   5 root     root            0 Oct  1 13:39 mina1_d
 166858 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina2
 166859 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina3
 166860 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina4
 166861 -rw-r--r--   1 root     root            0 Oct  1 13:39 mina5

Lõpuks peaks ka selguma selle salapärase kolmanda tulba arvu tähendus: ta näitab mitu faili viitavad (koos temaga) tollele inodele. Ja sin on oluline tähele panna veel seda, et kõik hard lingid on ühehead. Ei saa ütelda et mina1_a on hard link mina1 -le. Samahästi võiks vastupidi mõelda. Ja faili kõvakettalt kustutamine (õigemini talle vastavate kõvaketta füüsiliste blokkide vabastamine) toimub siis, kui linux näeb, et faili hard linkide arv saab väiksemaks ühest. Niisiis, tavaliselt on faili hard linkide arv 1 kuna tema nimi on ainuke hard link.

Tähelepanuväärne on see, et kui tühja kataloogi hard linkide arv on 2. Üks on tema enda nimi ja teine tuleb sellest, et igas kataloogis on alati automaatselt kirjas temast ülespoole jääva kataloogi nimi (st. tolle faili inode arv mis vastab kataloogile milles kõnealune kataloog asub).

Niisiis, tehes kataloogi faile suureneb kataloogile vastava faili maht (1024 täisarvkordsetes, muide)
Tehes, kataloogi alamkatalooge, suureneb linkide arv kataloogile, samuti kataloogile vastava faili maht nagu enne.

bash#~ $ ls -lia
total 6
 244832 drwxr-xr-x   6 root     root         1024 Oct  1 13:57 .
 166856 drwxr-xr-x   3 root     root         1024 Oct  1 13:57 ..
 166862 drwxr-xr-x   2 root     root         1024 Oct  1 13:57 jah1
 244833 drwxr-xr-x   2 root     root         1024 Oct  1 13:57 jah2
 166863 drwxr-xr-x   9 root     root         1024 Oct  1 14:13 jah3
 244834 drwxr-xr-x   2 root     root         1024 Oct  1 13:57 jah4

Sin on näiteks kataloogi jah3 all teadmata hulk faile kuid kindasti on seal alamkatalooge 9-2=7

bash#~jah3 $ ls -lia
total 9
 166863 drwxr-xr-x   9 root     root         1024 Oct  1 14:13 .
 244832 drwxr-xr-x   6 root     root         1024 Oct  1 13:57 ..
 244835 drwxr-xr-x   2 root     root         1024 Oct  1 14:13 r1
 166868 drwxr-xr-x   2 root     root         1024 Oct  1 14:13 r2
 244836 drwxr-xr-x   2 root     root         1024 Oct  1 14:13 r3
 166869 drwxr-xr-x   2 root     root         1024 Oct  1 14:13 r4
 244837 drwxr-xr-x   2 root     root         1024 Oct  1 14:13 r5
 166870 drwxr-xr-x   2 root     root         1024 Oct  1 14:13 r6
 166867 drwxr-xr-x   2 root     root         1024 Oct  1 14:05 rr
 166864 -rw-r--r--   1 root     root            0 Oct  1 13:58 u1
 166865 -rw-r--r--   1 root     root            0 Oct  1 13:58 u2
 166866 -rw-r--r--   1 root     root            0 Oct  1 13:58 u3

Sellest  peaks inode arvude järgi ka nägema seda, et alumises listingus '.' on ülemises jah3 ning alumise '..' on ülemise '.'

Hard linke ei pruugi teha vaid failidele mis asuvad sama kataloogi piires, küll aga peavad nad asuma samas failisüsteemis.
Ilmselt pole see asi veel kellegile teoreetiliselt nii selgeks saanud kui praktiliselt järgi proovides.

Soft link (Symbolic link)

Kui hard linkide puhul loodi käsuga 'ln' käesolevasse kataloogi juurde faile mille inode number oli sama mis mõnel olemasoleval failil, siis soft lingi loomisel luuakse kataloogi uus fail ja temaga seostatakse ka mingi uus inode arv.

bash# ln -s hunt kriimsilm
bash# ls -li
total 0
 244843 -rw-r--r--   1 root     root            0 Oct  1 14:37 hunt
 244840 -rw-r--r--   1 root     root            0 Oct  1 14:37 karu
 244845 lrwxrwxrwx   1 root     root            4 Oct  1 14:37 kriimsilm -> hunt
 244844 -rw-r--r--   1 root     root            0 Oct  1 14:37 orav
 244842 -rw-r--r--   1 root     root            0 Oct  1 14:37 rebane
 244841 -rw-r--r--   1 root     root            0 Oct  1 14:37 siil

Pange tähele, et
- link'i teine tulp algab  l' ga
- tal on oma inode (mitte hunt'i oma)
- tema pikkus on viidatava faili nime sümbolite arv

soft linke ei pruugi teha vaid failidele sama kataloogi piires, isegi mitte sama faiisüsteemi piires.

Soft lingi võib teha ka kataloogilt kataloogile; seda vist peamiselt tehaksegi.
 

8. Protsesside õigused

See teema peaks ehk kuuluma pingem protsesside juurde aga kuivõrd teemaks on õigused siis on ta toodud siin lõpus. Rääkisime enne, et nt. kasutaja Triin ei saa võtta maha kasutaja Imre faile kuvõrd linux vaatab järgi, et Triin püüab maha võtta faile mille omanik ta ei ole. Nii see peaks tõesti olema. Aga mille järgi saab arvuti aru, et Imre failide mahavõtjaks on Triin ja mitte keegi teine? Asi on nimelt selline, et peale failide (programmide)  on ka igal töötaval programmil mida nimetatakse protsessiks omanik. Ja seda andmevälja ehk protsessi atribuuti (mida nimetatakse UID -User Identification) vaadates saabki arvuti aru kes on mingi protsessi taga. On selline reegel, et kui üks protsess käivitab teise on tollel teisel sama omanik mis esimesel.
 

Vaatame näitena arvutisse sisselogimist.

Kõigepealt peale arvuti bootimist kirjutab programm 'getty' (mille UID =0, st ta on roodu õigustes) ekraanile 'login:' ning seejärel, kui te kirjutate sinna taha oma nime ja parooli asub tööte samuti UID =0 -ga programm 'login'. 'login' aga vaatab /etc/passwd' failist järgi teile vastava rea, kust saab teada teie UID=101 ning käivitab programmi 'bash' (so. shelli, selle veepealset osa nimetatakse prompt'iks) juba nö. teie kui identifitseeritud kasutaja õigustega, mida väljendab UID väärtus 101.

Kui te oma promptist  käivitate nt programmi 'rm /etc/passwd' ja soovite kogemata passwordi faili maha võtta, siis see ei tohiks õnnestuda kuna arvuti vaatab, et protsessil rm on bash 'ilt päritud atribuudid, st eriti UID=101 mis on ebapiisav selleks tegevuseks. Saate teate 'Permission denied'. Sama lugu on kõigi failide ja protsessidega mille seisundit (nt. muuta faili õigusi, tappa protsesse) te tahate muuta: Kui linux avastab, et muutja protsessi ja muudetava objekti UID-d ei klapi, siis tegevust ei teostata.

Toome ära toodud näitega seotud faiide õigused:

-rwxr-xr-x   1 root     bin          9664 Dec 18  1997 /bin/rm

näeme, et seda saavad kõik kasutajad käivitada. Kui ta on käivitatud, siis saab vastava protsessi omanikuks käivitaja.

-rw-r--r--   1 root     root          841 Aug 20 09:24 /etc/passwd

/etc/passwd on kõigile peale omaniku read-only ja sellepärast ei saa kasutaja UID -ga protsess teda maha võtta (NB! UID-d ja faili owner'ite nimed on /etc/passwd -s seatud vastavusse).
 
 
Selline süsteem peaks põhimõtteliselt tagama selle, et kasutajad ei saa üksteist häirida.

Aga on olemas mõned juhud, kus kasutajal on vaja muuta mõne faili sisu, kuid samas ei saa talle kuidagi faili kirjutamisõigust anda.  Nii on näiteks parooli vahetamisega: /etc/passwd'i sisu muutub kui kasutaja oma parooli muudab. Sellisele probleemile on kavalad mehed leidnud sellise lahenduse:

Kasutajale antakse õigus käivitada mõningaid programme, millel on kummaline omadus mitte pärida käivitaja vaid tollele programmile vastava faili omaniku UID. Niisiis, parooli vahetamise programmi 'passwd' käivitamisel on tollel programmil UID=0 kuivõrd faili passwd omanik on root (tema UID=0). Ja parooli saab vahetada, mis on ka igapäevaselt kontrollitav  fakt :)
Võib ütelda, kasutaja saab kaudselt korraks root'i õigustes tegutseda :)
 
Nende 'mõningate programmide' ainuke kummaline omadus on see, et neil on seatud nn. SUID:

bash# ls -l /usr/bin/passwd
-rws--x--x   1 root     root        32196 Dec 10  1997 /usr/bin/passwd

selle seadmine toimud nii:

oli

-rwx--x--x   1 root     root        32196 Dec 10  1997 /usr/bin/passwd

bash# chmod u+s /usr/bin/passwd

ja sai

-rws--x--x   1 root     root        32196 Dec 10  1997 /usr/bin/passwd

Veel võib viimati kirjedatud olukorra puhul rääkida, et kasutaja poolt käivitatud programmil on UID = 101 kuid EUID = 0;
(EUID -Effective User Identification). Tavaliselt on UID ja EUID ühesugused.
 

Praktiliselt samasugune kuigi mitte täitsa aruteleu kehtib GID ja EGID kohta :

Group Identification ja
Effective Group Identification