PredchádzajúciHoreDomovNasledujúci

Súborový systém

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).

Cesty v súborovom systéme

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:

Aktuálny pracovný adresár

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

Výpis obsahu adresára

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:

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.

Skryté položky súborového systému

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

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:

Domovský adresár

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.

Adresár pre dočasné súbory

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] 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:

  1. Skopírujte svoj súbor do adresára /tmp.
  2. Nastavte prístupové práva tak, aby bol súbor v /tmp čitateľný aj pre ostatných používateľov.
  3. Druhý používateľ môže teraz súbor skopírovať do svojho adresára.
  4. Vymažte kópiu súboru z domovského adresára.
[Varovanie] Varovanie

Obsah adresára /tmp sa pri rôznych príležitostiach (najčastejšie pri reštarte systému) maže. Z tohto dôvodu nie je vhodné ukladať do tohto adresára dôležité perzistentné údaje.

Súbory

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:

Ď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

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] Tip

bash-ovský terminál si uchováva históriu príkazov, ku ktorej je možné sa vrátiť pomocou kláves Šípka hore, Šípka dole, PageUp a PageDown.

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 na cv02 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

Ďalšie súborové operácie

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 a b do nového adresára test:

$> 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 na c a overte výsledok:

$> mv b c
$> ls
a c prazdny test/ test2/

Cvičenie Premenujte adresár test2 na test3 a overte výsledok (v prípade mv 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ár test3 do podadresára test:

$> 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] 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 cp, mv, rm a mnohé ďalšie môžu pri nepozornosti spôsobiť nechcené prepísanie alebo zmazanie existujúcich súborov a stratu údajov. Preto je potrebné používať tieto príkazy opatrne.


PredchádzajúciHoreDomovNasledujúci