Vo väčšine OS je súborový systém organizovaný v stromovej štruktúre (alebo, s pomocou liniek, v grafovej štruktúre). Koreňom stromu je tzv. koreňový adresár, vnútorné listy stromu tvoria adresáre a listy stromu tvoria súbory.
Všetky zariadenia v systéme (lokálne alebo sieťové), ktoré uchovávajú súborový systém, sú pripojené buď priamo do koreňového adresára alebo do jeho podadresárov.
Niektoré súborové systémy (napr. v OS Windows) zavádzajú aj logické jednotky - zväzky (alebo volumes), ktoré väčšinou korešpondujú s jednotlivými oddielmi (partitions) na zariadeniach, ktoré uchovávajú súborový systém. V skutočnosti je ale aj v takýchto systémoch interne súborový systém organizovaný ako strom (alebo graf).
Cesta v súborovom systéme je postupnosť názvov položiek súborového
systému (adresárov, súborov, symbolických liniek a pod.) oddelených
oddeľovačom. V unixových súborových systémoch ako oddeľovač slúži
znak /
(lomítko, lomka), v systémoch MS Windows sa ako
oddeľovač používa znak \
(opačné lomítko). V iných
systémoch sa používajú rôzne ďalšie znaky, napr.: :
(dvojbodka), .
(bodka) a pod.
Cesty slúžia na identifikáciu jednotlivých položiek v súborovom
systéme. Cesta pozostávajúca iba z oddeľovača, napr. /
je cestou do koreňového
adresára súborového systému. Cesty je tiež možné vnímať
ako sekvenciu inštrukcií pre pohyb medzi jednotlivými uzlami stromu
(alebo grafu) súborového systému.
V unixových (a v ďalšich operačných systémoch) môžme cesty rozdeliť do nasledujúcich skupín:
/home/pouzivatel
,
/tmp
, /etc/passwd
, alebo /usr/local/bin
sú absolútne.
~
(vlnka, tilda)
-- V unixových systémoch je táto cesta ekvivalentná absolútnej
ceste do domovského
adresára. Cesta ~/file.txt
je absolútna
cesta k súboru file.txt
, ktorý sa nachádza
v domovskom adresári aktuálneho používateľa.
.
(bodka) --
Cesta do aktuálneho
pracovného adresára. Cesta ./dir/file.txt
odkazuje na súbor file.txt
, ktorý sa nachádza
v podadresári dir
aktuálneho pracovného adresára.
..
(dve bodky)
-- Relatívna cesta do nadradeného (rodičovského)
adresára. Cesta ~/../file.txt
odkazuje na súbor
file.txt
, ktorý sa nachádza v nadradenom adresári
domovského adresára aktuálneho používateľa. Cesta ./../file.txt
(alebo jej skrátená verzia ../file.txt
) odkazuje
na súbor nachádzajúci sa v rodičovskom adresári aktuálneho
pracovného adresára. Cesta ../../../file.txt
odkazuje na súbor nachádzajúci sa o tri úrovne vyššie
od aktuálneho pracovného adresára.
Každý bežiaci proces v operačnom systéme má priradený tzv. aktuálny pracovný adresár: t.j. absolútnu cestu k existujúcemu adresáru v súborovom systéme. Ak sú pri súborových operáciách programu bežiaceho v procese použité relatívne cesty, tak sa vzťahujú na tento aktuálny pracovný adresár.
Operačný systém implementuje systémové volania (funkcie), pomocou ktorých je možné zistiť alebo zmeniť z programu vykonávaného v procese cestu do aktuálneho adresára.
V interpreteri príkazov bash
(teda na príkazovom
riadku) je možné cestu do aktuálneho pracovného adresára
zistiť príkazom pwd (print working directory):
$> pwd
Ak sme vo svojom domovskom adresari, predchadzajuci prikaz môže vypisať napríklad:
/home/pouzivatel
Aktuálny pracovný adresár na príkazovom riadku zmeníme príkazom cd (change directory):
cd [cesta]
Parameter cesta
je nepovinný. Ak je zadaný, musí
obsahovať platnú cestu k existujúcemu adresáru v súborovom systéme
(v opačnom prípade príkaz skončí chybou). Ak cesta nie je zadaná,
zmení príkaz cd
aktuálny adresár tak aby odkazoval do
domovského
adresára, t.j. príkaz
$> cd
je ekvivalentný príkazu
$> cd ~
alebo
$> cd /home/pouzivatel
Cesta zadaná ako parameter môže byť absolútna, relatívna alebo špeciálna. Ak začíname ako bežný používateľ vo svojom domovskom adresári, nasledujúca sekvencia príkazov vyprodukuje nasledovný výstup:
$> pwd /home/pouzivatel $> cd ../../tmp $> pwd /tmp/ $> cd ../etc/ $> pwd /etc/ $> cd ~ $> pwd /home/pouzivatel $> cd /usr/local/bin $> pwd /usr/local/bin $> cd $> pwd /home/pouzivatel
Obsah adresára alebo informácie o zadaných položkách v súborovom systéme je možné na príkazovom riadku vypísať príkazom ls:
ls [parametre...] [cesta1] [cesta2] ... [cestaN]
Bez parametrov príkaz ls
vypíše jednoduchý zoznam položiek
v aktuálnom
pracovnom adresári. Ak je súčasťou zoznamu parametrov cesta
do adresára, príkaz vypíše informácie o položkách v zadanom adresári
(ak nie je zadaný prepínač -d
, viď nižšie). Ak je
medzi parametrami cesta k súboru, vypíšu sa informácie o danom súbore.
Napríklad: príkaz
$> ls /
vypíše zoznam položiek v koreňovom adresári, príkaz
$> ls /usr/local/bin
vypíše zoznam položiek v zadanom adresári a príkaz
$> ls ~ . /etc ..
vypíše zoznam položiek v domovskom adresári, v aktuálnom adresári,
v adresári /etc
a v rodičovskom adresári aktuálneho
adresára.
Medzi najčastejšie používané prepínače príkazu ls patria:
-l
-- vypíše dodatočné informácie ku každej
vypísanej položke.
-a
-- vypíše aj skryté
položky, ktoré sa bez tohto parametra nevypisujú.
-d
-- namiesto výpisu informácií o obsahu
adresára, vypíše informácie o samotnom adresári.
Napríklad príkaz
$> ls -l -a
vypíše rozšírené informácie o všetkých položkách (vrátane skrytých) v aktuálnom adresári, príkaz
$> ls -a ..
vypíše zoznam všetkých položiek (vrátane skrytých) v nadradenom adresári a príkaz
$> ls -l -d /etc /tmp ~/file.txt /etc/passwd
vypíše rozšírené informácie o zadaných adresároch a súboroch.
Z rôznych dôvodov je vhodné, aby bolo možné niektoré z položiek súborového systému označit ako skryté. Jednotlivé operačné a súborové systémy riešia túto potrebu rôzne.
V systémoch MS Windows sú súbory označené ako skryté pomocou atribútov
operačného systému. V unixových systémoch sú skryté súbory označené
pomocou názvovej konvencie: za skryté sa považujú tie položky v
súborovom systéme, ktorých názov sa začína bodkou. Napríklad
~/.bashrc
je cesta ku skrytému súboru, ktorý býva obvykle
umiestnený v domovskom adresári používateľa.
Koreňový adresár, (alebo koreň, root) je najvyšší uzol v súborovom systéme. Väčšina operačných systémov umožňuje vytvoriť v koreňovom adresári akékoľvek podadresáre alebo súbory, ale obsah tohto adresára býva aspoň čiastočne štandardizovaný.
V unixových systémoch koreňový adresár napríklad obsahuje nasledujúce štandardné podadresáre:
bin
- základné spustiteľné súbory (väčšinou
v binárnej forme), ktoré musia byť k dispozícií aj v single-user
režime.
boot
- súbory potrebné pre zavedenie (boot)
operačného systému, napr. obraz jadra, konfigurácia bootloadera,
a pod.
dev
- adresár obsahujúci špeciálne súbory,
ktoré reprezentujúce jednotlivé zariadenia pripojené do systému.
etc
- systémové a aplikačné konfiguračné
súbory.
home
- obsahuje domovské
adresáre bežných používateľov systému.
lib
- binárne knižnice a moduly OS.
media
- obsahuje podadresáre slúžiace na pripojenie
súborových systémov na vymeniteľných médiách (USB mass storage,
CD-ROM, DVD-ROM, atď.).
mnt
- obsahuje podadresáre slúžiace na pripojenie
ostatných dočasných súborových systémov.
opt
- voliteľné softvérové balíčky.
proc
- virtuálny súborový systém
root
- domovský adresár administrátora systému.
sbin
- základné systémové spustiteľné súbory,
potrebné pre administráciu systému.
srv
- v prípade, že počítač slúži ako server,
tento adresár obvykle obsahuje poskytované dáta.
tmp
- adresár
na dočasné súbory. Reboot systému obvykle spôsobí vymazanie
obsahu tohto adresára.
usr
- obsahuje súbory zdieľané používateľmi
systému ako je dokumentácia, zdrojové súbory, ďalšie binárne
knižnice a spustiteľné súbory a pod.
var
- obsahuje súbory, ktoré sa pravidelne menia
počas behu systému, napr. logovacie súbory, súbory databázového
systému, dočasné súbory poštového servera, atď.
Domovský adresár je časť súborového systému, ktorá je k dispozícií
pre ukladanie dát používateľa. Na unixových systémoch je obvykle
podstrom domovského adresára jedna z mála častí súborového systému,
kde má bežný používateľ aj práva na zápis. Aj keď je možné
ako domovský adresár definovať prakticky ľubovoľný adresár v súborovom
systéme, je obvyklé, že sa pracovný adresár bežných používateľov
nachádza v adresári /home
a jeho názov je totožný s
prihlasovacím menom používateľa. Po prihlásení sa je domovský
adresár výchozím pracovným adresárom používateľa.
Z rôznych dôvodov je pri práci v OS často potrebné vytvoriť súbor
alebo celú adresárovú hierarchiu odsahujúcu dočasné dáta. Medzi
časté príklady patrí rozbalenie komprimovaných súborov, ukladanie
pomocných výpočtov a podobne, ale často aj na výmenu údajov medzi
používateľmi. V unixových systémoch na tieto potreby slúži adresár
/tmp
. Prístupové práva sú v tomto adresári nastavené
tak, že každý používateľ v ňom môže vytvárať a následne mazať
vlastné súbory alebo adresáre.
![]() |
Tip |
---|---|
Ak potrebujete skopírovať súbor inému používateľovi a nechcete modifikovať prístupové práva na svojom domovskom adresári, môžte použiť adresár na dočasné súbory:
|
![]() |
Varovanie |
---|---|
Obsah adresára |
Okrem normálnych dátových súborov implementujú unixové súborové systémy niekoľko druhov /špeciálnych/ súborov. Druh súboru je možné identifikovať napríklad pomocou príkazu ls:
$> ls -l -d /tmp \ /etc/passwd \ /etc/vtrgb \ /dev/tty \ /dev/sda \ /tmp/.X11-unix/X0 \ /tmp/mypipe drwxrwxrwt 13 root root 4096 Jun 13 13:25 /tmp -rw-r--r-- 1 root root 1673 Feb 26 10:33 /etc/passwd lrwxrwxrwx 1 root root 23 Feb 26 10:29 /etc/vtrgb -> /etc/alternatives/vtrgb crw-rw-rw- 1 root tty 5, 0 Jun 13 09:52 /dev/tty brw-rw---- 1 root disk 8, 0 Jun 13 09:52 /dev/sda srwxrwxrwx 1 root root 0 Jun 13 09:52 /tmp/.X11-unix/X0 prw-rw-r-- 1 user user 0 Jun 13 13:25 /tmp/mypipe
Pri rozšírenom výpise prvý znak na každom riadku indikuje druh položky v súborovom systéme:
d
(directory) -- Špeciálny
súbor reprezentujúci vnútorné uzly stromu súborového systému
- adresáre.
-
(pomlčka/mínus) -- normálny súbor uložený
na pamäťovom zariadení alebo virtuálny dátový súbor.
l
(link) -- symbolická linka.
Špeciálny súbor odkazujúci na inú položku v súborovom systéme.
c
(char device) -- znakové
zariadenia. Špeciálny súbor reprezentujúci znakové zariadenia
(terminály, sériové a paralelné rozhrania, a pod.) pripojené
do systému.
b
(block device) -- blokové
zariadenia. Špeciálny súbor reprezentujúci blokové zariadenia
(diskové zariadenia, a pod.) pripojené do systému.
s
(socket) -- soket. Špeciálny
súbor reprezentujúci unix-domain soket (zariadenie na komunikáciu
medzi procesmi).
p
(pipe) -- rúra. Špeciálny
súbor reprezentujúci pomenovanú
rúru (zariadenie na komunikáciu medzi procesmi).
Ďalším užitočným príkazom na zistenie vlastností položiek v súborovom systéme je stat:
stat [prepinace] <cesta1> [cesta2] ... [cestaN]
Napríklad:
$> stat /etc/passwd File: `/etc/passwd' Size: 1673 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 6830098 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2014-06-13 10:01:38.440471847 +0200 Modify: 2014-02-26 10:33:32.771008327 +0100 Change: 2014-02-26 10:33:32.807008505 +0100 Birth: -
Formát (vnútornú štruktúru) súboru je v mnohých prípadoch možné určiť pomocou príkazu file:
file [prepinace] <cesta1> [cesta2] ... [cestaN]
Napríklad:
$> file /usr /tmp \ /etc/passwd \ /bin/bash \ /dev/null \ /usr/share/compiz/icon.png /usr/: directory /tmp/: sticky directory /etc/passwd: ASCII text /bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), ... /dev/null: character special /usr/share/compiz/icon.png: PNG image data, 48 x 48, 8-bit/color RGBA, ...
Adresáre umožňujú vytvárať stromovú hierarchiu v súborovom systéme. Nový adresár je na príkazovom riadku možné vytvoriť pomocou príkazu mkdir:
mkdir [prepinace] <cesta1> [cesta2] ... [cestaN]
Ak neboli zadané žiadne prepínače, cesty musia odkazovať na zatiaľ
neexistujúce položky v už existujúcich adresároch. Ak adresár,
v ktorom má byť vytvorený nový adresár ešte neexistuje, alebo ak
cesta odkazuje na už platnú položku príkaz skončí chybou. Toto
správanie je možné potlačiť pomocou prepínača -p
.
Tento prepínač spôsobí, že ak nadriadené adresáre v zadanej ceste
ešte neexistujú, sú vytvorené a ak cesta odkazuje na už existujúci
adresár, tak príkaz skončí bez vyhlásenia chyby.
Cvičenie Vytvorte vo svojom domovskom adresári nasledujúcu údajovú štruktúru pre prácu na cvičeniach predmetu operačné systémy pomocou príkazov uvedených nižšie:
-[~] | +--[os/] | +--[cv01/] | +--[cv02/] | +--[cv03/] | : | +--[cv11/] | `--[cv12/]
# navrat do domovskeho adresara $> cd ~ # vytvorenie adresara os/ $> mkdir os # zmena adresara na os/ $> cd os/ # kontrola aktualneho adresara $> pwd /home/pouzivatel/os/ # vytvorenie adresara pre cvicenie 1 $> mkdir cv01
![]() |
Tip |
---|---|
|
Cvičenie Zadanie nasledujúcich príkazov je možné urýchliť použitím histórie: vráťte sa k predchádzajúcemu príkazu v histórií, modifikujte názov adresára z
cv01
nacv02
a spustite príkaz. Obdobným spôsobom zadajte ostatné príkazy:
$> mkdir cv02 $> mkdir cv03 ... $> mkdir cv11 $> mkdir cv12
Cvičenie Skontrolujte či máte vytvorené všetky potrebné podadresáre:
$> ls cv01 cv02 cv03 cv04 cv05 cv06 cv07 cv08 cv09 cv10 cv11 cv12
Cvičenie Zmeňte a skontrolujte aktuálny pracovný adresár:
$> cd cv01 $> pwd /home/pouzivatel/os/cv01
Na zmazanie prázdneho adresára je možné použiť príkaz rmdir:
rmdir <cesta1> [cesta2] ... [cestaN]
Cvičenie
Vytvorte prázdny adresár v aktuálnom pracovnom adresári a overte jeho vytvorenie:
$> mkdir testdir $> ls testdir
Cvičenie Vymažte novovytvorený adresár:
$> rmdir testdir $> ls
Nový prázdny súbor je možné vytvoriť napríklad pomocou príkazu touch:
touch <cesta1> [cesta2] ... [cestaN]
Cvičenie
Vytvorte nový prázdny súbor v aktuálnom adresári a overte či bol vytvorený:
$> touch prazdny $> ls prazdny
Na kopírovanie súborov slúži príkaz cp. Základný spôsob použitia tohto príkazu je nasledovný:
cp [prepinace] <cesta1> <cesta2>
Tento príkaz skopíruje existujúcu položku z cesta1
do
cesta2
ak má používateľ príslušné prístupové
práva.
Cvičenie
Skopírujte prázdny súbor z predchádzajúceho cvičenia a overte jeho vytvorenie:
$> cp prazdny a $> cp prazdny b $> ls a b prazdny
Ďalší spôsob použitia príkazu cp umožňuje skopírovať viacero
súborov do adresára. Ak za príkazom cp
nasledujú
viac ako dve cesty, musí posledná cesta v zozname odkazovať na adresár.
V tomto prípade príkaz cp
skopíruje všetky vymenované
položky okrem poslednej do adresára na poslednej ceste v zozname.
Cvičenie
Skopírujte existujúce súbory
a
ab
do nového adresáratest
:
$> mkdir test $> ls a b prazdny test/ $> cp a b test/ $> ls test a b
Pre rekurzívne kopírovanie adresára je potrebné použiť prepínač
-r
.
Cvičenie
Skopírujte vytvorený podadresár:
$> cp -r test test2 $> ls a b prazdny test/ test2/ $> ls test2 a b
Na premenovanie alebo vo všeobecnosti presunutie položky v súborovom
systéme na nové umiestnenie v hierarchií súborového systému slúži
príkaz mv
. Podobne ako príkaz cp
je možne
použiť príkaz mv
nasledovne:
mv [prepinac] <cesta1> <cesta2>
Cvičenie Premenujte existujúci súbor
b
nac
a overte výsledok:
$> mv b c $> ls a c prazdny test/ test2/
Cvičenie Premenujte adresár
test2
natest3
a overte výsledok (v prípademv
nie je potrebné používať prepínač-r
):
$> mv test2 test3 $> ls a c prazdny test/ test3/
Cvičenie Presunte súbor
a
a adresártest3
do podadresáratest
:
$> mv c test3 test/ $> ls a prazdny test/ $> ls test a b c test3/
Na zmazanie položiek v súborovom systéme je možné použiť príkaz rm:
rm [prepinace] <cesta1> [cesta2] ... [cestaN]
Cvičenie Zmažte vytvorený súbor s názvom
a
a overte výsledok:
$> rm a $> ls prazdny test/
Pre rekurzívne odstránenie neprázdneho adresára, je potrebné použiť
prepínač -r
(recursive). Prepínač
-f
(force) slúži na potlačenie niektorých
potvrdení zmazania.
Cvičenie Rekurzívne zmažte vytvorený adresár a súbor:
$> rm -rf prazdny test $> ls
![]() |
Varovanie |
---|---|
Vo všeobecnosti príkazy na príkazovom
riadku, vrátane príkazov, ktoré sú potenciálne deštruktívne,
nevyzývajú používateľa na potvrdenie deštruktívnych operácií.
Predpokladá sa, že používateľ vie čo robí. Preto príkazy ako
|