Další Předchozí Obsah

1. Souborový systém UNIXu

Dřív než budete moci nastavovat složitější části systému, bude dobré se naučit něco o tom, jak je systém organizován a jaké příkazy je možné používat k vyhledávání souborů a programů. Tato kapitola vás obeznámí s organizací systému.

1.1 Struktura souborového systému

První výrazný rozdíl mezi Unixem a jinými systémy najdeme v uspořádání souborového systému. Pro začátečníky: Nepoužívají se písmena k označování diskových oddílů. Pod Unixem máme jeden hlavní adresář. Můžete si ho představit třeba jako C: pod DOSem. Každý oddíl ve vašem systému je mountován (připojován) do adresáře v onom hlavním adresáři. Vypadá to jako nějaký stále se nafukující harddisk.

Tomuto hlavnímu adresáři říkáme root (kořenový) adresář a označujeme jej prostě lomítkem (/). Toto pojetí možná vypadá podivně, ale ve skutečnosti vám velmi usnadňuje život v situaci, kdy chcete diskový prostor rozšířit. Například se vám stane, že už se nevejdete na disk, kde máte připojený adresář /home. Takže, když diskový oddíl může být připojen pod libovolný adresář, můžete jednoduše skočit do obchodu, koupit tam další harddisk a namountovat (připojit) si jej pod adresář /home. No a máte "naroubováno" o něco více prostoru do vašeho systému. A to vše bez nutnosti hýbat s mnoha věcmi okolo.

Dále si popíšeme hlavní adresáře nacházející se na nejvrchnější úrovni souborového systému Unixu.

/bin
Zde jsou uloženy ty nejzákladnější uživatelské programy. Ty představují nejminimálnější sadu programů nutných k tomu, aby uživatel mohl systém používat. Jsou tu uloženy takové věci, jako je shell, příkazy souborového systému (ls, cp) a podobně. Adresář /bin se po nainstalování systému už zpravidla nemění. Pokud ano, tak obvykle jen z důvodu upgradu softwarových balíčků.
/dev
Se všemi věcmi v Unixu se zachází jako se soubory. Takže i s hardwarovými zařízeními jako např. sériovými porty, harddisky a scanery. Abychom mohli k těmto zařízením přistupovat, musí být přítomen speciální soubor nazývaný "device node". Všechy "device nodes" jsou uloženy v adresáři /dev.
/etc
V tomto adresáři jsou uloženy systémové konfigurační soubory. Všechno od konfigruačních souborů pro X Window, přes uživatelské databáze až po systémové startovací skripty je zde. Systémový administrátor se časem s tímto adresářem hodně sžije.
/home
Unixx je víceuživatelský operační systém. Každému uživateli je v systému zřízen účet a jedinečný adresář pro jeho osobní soubory. Tento adresář je nazýván jako uživatelův domovský (home). Adresář /home je používán jako defaultní lokace pro umístění uživatelských domovských adresářů.
/lib
Zde jsou uloženy systémové knihovny, které jsou vyžadovány pro základní operace. Najdeme tu například knihovnu jazyka C, dynamický zavaděč, knihovnu ncurses, moduly jádra, atd.
/proc
Toto je velmi zvláštní adresář. Ve skutečnosti není částí souborového systému, ale je virtuálním souborovým systémem, který poskytuje přístup k informacím jádra. Různé informace, které vám chce kernel dávat na vědomí, jsou vám dávány prostřednictvím "souborů" v adresáři /proc. Rověž vy můžete zasílat informace do kernelu prostřednictvím některých těchto "souborů". Vyzkoušejte si třeba cat /proc/cpuinfo.
/root
Správce systému - administrátor - je systému znám pod jménem root. Rootův domovský adresář je v /root místo v /home/root. Důvod k tomu je jednoduchý. Co kdyby /home byl na jiném diskovém oddílu než / a nemohl by být připojen? Root by se měl přirozeně přihlásit do systému a opravit tento problém. Kdyby byl jeho domovský adresář na poškozeném filesystému, asi by mu to přihlašování hodně zkomplikovalo.
/sbin
Zde jsou programy, které může spouštět jen root a nebo které jsou spouštěny v průběhu startu systému. Normální uživatelé nemohou spouštět programy z tohoto adresáře.
/tmp
Místo pro umisťování dočasně existujících souborů. Všichni uživatelé mohou z tohoto adresáře číst i zapisovat do něj.
/usr
Toto je největší adresář v linuxovém systému. Všechno ostatní musí jít hezky sem: Programy, dokumentace, zdrojový kód kernelu a X Window systém. Většinu programů budete instalovat do tohoto adresáře.
/var
Systémové logovací soubory, cache data a programové zámky jsou ukládány sem. Toto je adresář pro často se měnící data.

1.2 Zjištění aktuálního adresáře - příkaz pwd

Syntaxe tohoto příkazu je velmi jednoduchá:

$ pwd
/usr/bin

1.3 Vytvoření adresáře - příkaz mkdir

Příkazem mkdir vytvoříte nový adresář. Následující příklad vytvoří adresář manka v aktuálním adresáři:

$ mkdir manka

Taky můžete zadat cestu:

$ mkdir /usr/local/manka

Volbou -p řekneme mkidiru, aby vytvořil i nadřízené adresáře. Výše uvedený příklad totiž zhavaruje, pokud /usr/local neexistuje. Volba -p zajistí i vytvoření /usr/local:

$ mkdir -p /usr/local/manka

1.4 Změna adresáře - příkaz cd

Příkaz cd se používá ke změně pracovního (aktuálního) adresáře. Jednoduše napíšte cd následovaný jménem cesty k adresáři. Zde je pár příkladů:

darkstar:~$ cd /bin
darkstar:/bin$ cd usr
bash: cd: usr: No such file or directory
darkstar:/bin$ cd /usr
darkstar:/usr$

1.5 Mazání adresáře - příkaz rmdir

Příkazem rmdir se mažou adresáře. Před vymazáním musí být adresář prázdný, jinak se vymazání neprovede. Syntaxe je jednoduchá:

$ rmdir <directory>

Následující příklad vymaže podadresář cipisek z aktuálního adresáře. Kdyby adresář cipisek neexistoval, rmdir vám to poví:

$ rmdir cipisek

Rovněž můžete smazat adresář včetně jeho nadřízených adresářů zadáním volby -p. Systém se nejdříve pokusí smazat adresář hejaz uvnitř adresáře /tmp. Pokud se to podaří, bude se dále snažit smazat adresář /tmp. rmdir pokračuje v mazání tak dlouho, dokud se buď neobjeví chyba, nebo dokud není celý zadaný strom smazán.

$ rmdir -p /tmp/hejaz

1.6 Vlastnictví souborů

Unix je víceuživatelský operační systém. Každý aspekt tohoto systému je víceuživatelský, i souborový systém. Systém ukládá informace o tom kdo vlastní soubor a kdo jej smí číst. Jsou tu i další úkoly souborového systému, jako odkazy.

Souborový systém ukládá informace o vlastnictví pro každý soubor a adresář v systému. Tj. který uživatel a skupina vlastní ten který soubor. Nejsnazší způsob jak zobrazit tyto informace je použít příkaz ls:


$ ls -l /usr/bin/wc
-rwxr-xr-x   1 root     bin    7368 Jul 30  1999 /usr/bin/wc

Zajímá nás třetí a čtvrtý sloupec. Ty obsahují jméno uživatele a skupiny, kteří vlastní tento soubor. Vidíme, že tento soubor vlastní uživatel root a skupina bin.

Vlastníky můžeme měnit příkazy chown (značí "change owner" - změň vlastníka) a chgrp (značí "change group" - změň skupinu). Abychom změnili vlastníka souboru na daemon, použijeme chown:


# chown daemon /usr/bin/wc

Ke změně skupiny vlastníků na root použijeme chgrp:


# chgrp root /usr/bin/wc

Pomocí chown můžeme změnit i vlastníka i skupinu:


# chown daemon.root /usr/bin/wc

1.7 Přístupová práva

Práva (permissions) jsou další důležitou úlohou víceuživatelského aspektu souborového systému. S jejich pomocí můžete měnit kdo smí číst, zapisovat a spouštět soubory.

Informace o právech jsou ukládána jako čtyři osmičkové číslice, každá specifikuje jinou množinu práv. Jsou to práva pro vlastníka, skupinu a ostatní (world). Čtvrá cifra je použitá k uložení speciálních informací jako je nastavené uživatelské ID, nastavené skupinové ID a "sticky" bit. Osmičkové hodnoty přidělené módům oprávnění jsou (mají též přidělená písmena, která zobrazují programy jako ls a mohou být využívána programem chmod):

Druh práva Permission Type Osmičková hodnota Písmenkové vyjádření
"sticky" bit 1 t
nastav ID uživatele 4 s
nastav ID skupiny 2 s
čtení 4 r
zápis 2 w
spouštění 1 x

Pro každou skupinu práv zadáváte osmičkové hodnoty. Například pokud chcete aby práva skupiny byla "čtení" a "zápis", měli byste pro práva skupiny zadat "6".

Pro změnu práv použijeme příkaz chmod (což znamená "change mode" - "změň mód"), kterým nastavíme práva souboru example. Nastavte osmičková čísla práv, která chcete. Aby vlastník mohl číst, psát a spouštět, měl by mít hodnotu 7. Číst a spouštět by bylo 5. Dejte to dohromady a zadejte to do příkazu chmod:


$ chmod 755 /tmp/example
$ ls -l /tmp/example
-rwxr-xr-x   1 david    users    0 Apr 19 11:21 /tmp/example

K nastavení zvláštních oprávnění zadáme čísla do prvního sloupce. Například k nastavení ID uživatele a ID skupiny dáme do prvního sloupce "6":


$ chmod 6755 /tmp/example
$ ls -l /tmp/example
-rwsr-sr-x   1 david    users    0 Apr 19 11:21 /tmp/example

Pokud vás osmičková čísla pletou, můžete místo nich používat písmena. Skupiny oprávnění pro chmod pak vypadají takto:

Vlastník u
Skupina g
Ostatní o
Všichni zmínění a

Abychom dosáhli toho, co nahoře, museli bychom použít několik příkazových řádků:


$ chmod a+rx /tmp/example
$ chmod u+w /tmp/example
$ chmod ug+s /tmp/example

Někteří lidé dávají přednost písmenům před číslicemi. Obě cesty vyúsťují do té samé sady oprávnění.

Na několika místech jsme se zmínili o nastavování ID uživatele a ID skupiny. Možná si říkáte, o co jde? Obyčejně, když spustíte program, ten pak pracuje pod vaším uživatelským účtem. To znamená, že má všecha ta oprávnění, která máte vy jako uživatel. Totéž platí pro skupinu. Jestliže spustíte program, vykonává se pod vaší současnou skupinou. S nastaveným oprávněním ID uživatele si můžete vynutit, aby program vždy běžel jako majitel programu (třeba jako "root"). Nastavení ID skupiny je totéž, ale pro skupinu.

Zacházejte s tím opatrně. Nastavení ID uživatele a ID skupiny programům může ve vašem systému otevřít významné bezpečnostní mezery. Pokud často nastavujete ID uživatele programům, které vlastní "root", povolíte každému, aby provozoval tento program stejně jako root. A protože root nemá v systému žádná omezení, můžete si sami představit, jak velký bezpečnostní problém to je. Stručně řečeno, není špatné používat nastavení oprávnění ID uživatele a ID skupiny, ale dělejte to s citem.

1.8 Odkazy na soubory

Odkazy (links) jsou ukazovátka mezi soubory. Pomocí odkazů můžete mít soubory na mnoha místech a mít je přístupné pod mnoha názvy. Existují dva typy odkazů: Pevné a symbolické.

Pevné odkazy jsou názvy pro konkrétní soubor. Ty mohou existovat pouze uvnitř jediného adresáře a jsou vyjmuty jedině tehdy, když je ze systému vyjmuto reálné jméno. Jsou v určitých případech užitečné, ale mnoho uživatelů shledává symbolické linky mnohostrannějšími.

Symbolický odkaz, též nazývaný "měkký", může ukazovat na soubor vně svého adresáře. Je to vlastně malý souborek, obsahující informaci, kterou potřebuje. Symbolické odkazy můžete přidávat i mazat bez zasažení vlastního souboru

Odkazy nemají svou vlastní sadu práv či vlastnictví, ale místo toho je přebírají od souboru, na který ukazují. Zde je obecný příklad:


$ ls -l /bin/sh
lrwxrwxrwx   1 root     root     4 Apr  6 12:34 /bin/sh -> bash

Odkazy se vytvářejí příkazem ln:


$ ln soubor [jméno_odkazu]

Příkaz vytvoří odkaz na soubor. Není-li uveden druhý parametr, pak je odkaz vytvořen v aktuálním adresáři a dostane stejné jméno, jako originální soubor. Uvedeným způsobem vytvoříte odkaz pevný. Pro vytvoření symbolického odkazu přidejte za příkaz ln parametr -s.

$ ln -s soubor [jméno_odkazu]

1.9 Mountování disků

V Unixu se diskové zařízení musí nejdřív připojit k souborovému systému. Běžně se to nazývá přimountovat. V Unixu totiž nemají jednotlivé disky písmenka, jako ve windows, disk se musí připojit k nějakému adresáři a po jeho přípojení v tom adresáři bude obsah toho disku. Po práci je potřeba disk zase odmountovat, speciálně se to týká disket, před tím než se vyndá tak se musí odmountovat, jinak přijdete s velkou pravděpodobností o data. Data se na disketu zapisují se zpožděním a když dáte příkaz k odmountování, tak se teprve zapíší. Když vytáhnete neodmountovanou disketu, koledujete si o problémy, nejen že můžete přijít o data, ale nepůjde vám přimountovat ani další disketa.

S cédéčky je to podobné, ale snazší. Zaprve se na ně nic nezapisuje a zadruhé Unix nedovolí otevřít dvířka mechaniky, dokud není cédéčko odpojeno. Může se vým stát, že disk nepůjde odpojit. To znamená, že některý program přistupuje k tomu disku, např. má otevřen soubor, který se na disku nachází. Musíte tomu programu říct, ať ten soubor zavře a nebo ten program ukončit. Nemusí jít jen o otevřený soubor, stačí abyste měli v mc zobrazen obsah toho disku v panelu s kurzorem (pak je adresář toho disku pracovním adresářem mc) a už také nepůjde odpojit. Když nebudete tušit, kde to vázne, pomůže vám příkaz fuser (jako root dejte na zkoušku příkaz fuser -v / a zjistíte co všechno vám visí na disku připojeném ke kořenovému adresáři).

Obecně se mountování disku dělá příkazem mount a odmountování příkazem umount. Protože některé disky se mountují pravidelně nebo se spoustou různých parametrů, třeba hardisky, a bylo by nepohodlné je po každém startu počítače či v případě potřeby mountovat ručně, je tu konfigurační soubor /etc/fstab, v kterém si mountování disku můžete předkonfigurovat. Můžete i zadat, které disky se mají přimountovat rovnou při startu počítače.

Obecně je při mountování potřeba zadat:

  1. typ souborového systému, který je na disku
  2. zařízení (disk) který chcete přimountovat
  3. adresář, ke kterému se ma disk přimountovat

Disketu s win formátem (FAT) pak můžete přimountovat příkazem:


$ mount -t vfat /dev/fd0 /mnt/fd0

V souboru /etc/fstab můžete mít pak tento řádek:


  /dev/fd0       /mnt/fd0               auto    noauto,user,showexec=no       0 0

Tento řádek znamená, že máte předkonfigurováno připojení první disketovky k adresáři /mnt/fd0 s automatickým rozlišováním formátu (auto) a s nějakým dalším nastavením (noauto znamená nepřipojovat automaticky po startu a tak podobně). Parametry jsou odděleny čárkami a NESMÍ být mezi nimi mezera. Když máte toto předkonfigurování, stačí vám pak jen dát příkaz:


$ mount /mnt/fd0

a Unix si už to ostatní doplní a disk připojí. Po skončení práce dejte příkaz:


$ umount /mnt/fd0

a to je všechno. V případě potíží:


$ fuser /mnt/fd0

1.10 Soubor fstab


# Ukazka moznosti pripojovaji v souboru /etc/fstab
#
# poradi udaju (oddluji se mezerami nebo tabulatory):
# svazek(zarizeni) pripojny_bod typ_soub_systemu volby,oddelene,carkama priznak_zalohovani kontorla_fsck
#
# Podrobnosti viz:
#  $ man fstab
#  $ man mount

# pripojeni root oddilu
LABEL=/     /                  ext2      defaults                       1 1

# (pred)pripojeni CD-ROM - druhy radek jen cteni bez prava spoustet programy
# treti radek pripojuje vypalovacku (propojuje se jako SCSI CD)
/dev/cdrom	/mnt/cdrom	iso9660   noauto,owner,ro                0 0
/dev/cdrom	/cd		iso9660   noauto,owner,ro,user,mode=0444 0 0
/dev/scd0	/mnt/scsi_cd	auto	noauto,iocharset=8859-2,umask=0,codepage=852,ro,exec	0 0

# (pred0pripojovani disketove jednotky
/dev/fd0    /mnt/floppy        auto      noauto,owner                   0 0
/dev/fd0    /a                 auto      noauto,owner,noexec            0 0

# pripojeni oddilu /usr
LABEL=/usr  /usr               ext2      defaults                       1 2

# pripojeni virtualniho filesystemu /proc a /dev/pts
none        /proc              proc      defaults                       0 0
none        /dev/pts           devpts    gid=5,mode=620                 0 0

# tomuhle nejak nerozumim :o) - ze by pripojeni ftp oddilu z ip 192.168.10.2 ?
none        /mnt/fm            ftpfs     noauto,owner,user,ip=192.168.10.2,user=cf,pass=cf-pwd,ro 0 0

# pripojeni swap oddilu (je na dvou ruznych discich)
/dev/hda3   swap               swap      defaults                       0 0
/dev/hdb3   swap               swap      defaults                       0 0

# pripojovani ruznych linuxovych oddilu
/dev/hdb2   /mnt/oldlin        ext2      defaults                       0 0
/dev/hdb7   /mnt/data          ext2      defaults                       0 0
/dev/hdb8   /mnt/oldlin/home   ext2      defaults                       0 0

# pripojovani ruznych FAT32 oddilu (MS Windows)
/dev/hda1   /mnt/windows	vfat	iocharset=8859-2,umask=0,codepage=852	0 0
/dev/hda5   /mnt/a5		vfat      user                           0 0

# pripojeni adresare z jineho pocitace pres nfs
/pocitac:/usr/share/soubory	/mnt/poc_soub	nfs	hard,intr

# pripojeni iso obrazu instalacnich cd RedHatu - tohle se mi genialne libi! :o)
/mnt/data2/enigma-i386-disc2.iso     /mnt/rh2  iso9660  loop,rw 0 0
/mnt/data/all/enigma-i386-disc1.iso  /mnt/rh1  iso9660  loop,rw 0 0


Další Předchozí Obsah