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$cd imre
|
- | 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.
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
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-- |
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 |
|
|
|
||||||||||||
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 |
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 |
|
|
|
|||||||||
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 |
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).
|
- 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!
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.
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