Začínáme s LINUXem II.

Napsal O webu (») 1. 3. 2005 v kategorii Operační systémy, přečteno: 3195×
linux/img/tux2.jpg

Konečně jsem se po zkouškovém dostal k napsámí pokračování seriálu o LINUXu. Vím, že mi to trvalo opravdu dlouho, a tak alespoň doufám, že se na toto pokračování těšíte. Dneska si probereme typy a vlastnosti souborů, jejich práva a nakonec si probereme několik základních příkazů.

Soubory

Většina vlastností souboru se pozná podle přístupových práv. K podrobnému vypsání souborů v aktuálním adresáři jednoduše napíšeme:

bash$ ls -l

Příkaz ls je vlastně zkratka pro "list directory", tedy výpis adresáře, uživatelé jistých operačních systémů možná znají příkaz dir, který se v linuxu také vyskytuje. V distribuci, kterou používám (Slackware), dělá totéž, co příkaz "ls --color=none", tedy jednobarevný abecedně seřazený výpis souborů aktuálního adresáře ve sloupcích. Existuje také příkaz vdir, který se zase chová stejně, jako "ls -l --color=none", tedy podrobný jednobarevný abecedně seřazený výpis souborů aktuálního adresáře. A protože již z minulého dílu znáte příkaz man, bude pro vás snadné nahlédnout, kolik dalších možností (i nemožností) lze u příkazu ls využít.
Nyní se vraťme k vlastnostem souborů. Po napsání zmíněného "ls -l" (ve většině distribucí lze také napsat ll) můžeme dostat následující výpis:

bash$ ls -l
celkem 4
-rwxr-x--x 1 jiri users 41 2005-02-25 00:00 test

Vysvětlíme si, co tento výpis znamená (detaily posléze). Na prvním řádku výpisu je psáno "celkem 4". To jest kolik vypsané soubory skutečně zabírají místa na disku v kilobytech. Asi se divíte, proč soubor s 41 byty zabírá 4 kilobyty na disku. To pochopíte v odstavci o organizaci systému souborů (Organizace disku).
Ve druhém řádku: první pomlčka určuje typ souboru, zbytek z prvního sloupečku jsou práva, jednička nám říká, kolik má soubor linků, jiri je jméno vlastníka souboru, users určuje jméno skupiny, následuje velikost souboru v bytech, datum a čas poslední modifikace a konečně jméno souboru.

Typ souborů:

-   - plain file (obyčejný soubor)
d   - directory (adresář, seznam jmen souborů)
l   - symbolic link (symbolický odkaz)
p   - pipe (pojmenovaná roura)
s   - socket
b,c - block, character device (speciální zařízení)

Pro začátek nás soubory typu p, s, b a c nebudou zajímat.

Přístupová práva:

Máme tři kategorie přístupových práv (9 pozic, pro každou kategorii 3):

u - user g - group o - others
(pro vlastníka) (pro skupinu) (pro ostatní)

Pro každého uživatele platí vždy nejspeciálnější kategorie, do které patří. Každá kategorie má 3 práva:

  • r - read (pro čtení)
  • w - write (pro zápis)
  • x - execute (pro spouštění souboru, resp. přístup do adresáře)

Ještě existují tři speciální práva (pomocí nich lze provést spousty, většinou bezpečnostních, triků:

setUID

  • u spustitelných souborů půjčuje identitu vlastníka, je značen malým s na pozici vlastníka.
setGID
  • u spustitelných souborů půjčuje identitu skupiny, je značen malým s na pozici skupiny.
  • u souboru bez spouštěcího práva pro skupinu slouží jako kontrola zámků při každém přístupu (je označen velkým S na pozici skupiny).
  • pro adresář zajišťuje, že nově vytvořené soubory v něm budou mít stejnou skupinu jako tento adresář.
sticky bit
  • u spustitelných souborů zajistí jeho zachování v paměti (blokuje odstránkování tohoto souboru do swap).
  • u adresářů změní pravomoce pro přístup (do adresáře mají pak přístup vlastníci vnitřních souborů, tedy nemusí do něj mít přístup vlastníci adresáře).
  • je značen malým t na pozici pro ostatní.

Změna práv:

Ke změně práv nám slouží příkaz chmod, změnu vlastníka lze provést příkazem chown a změnit skupinu můžeme pomocí chgrp, nakonec ještě můžeme nastavit výchozí masku (práva, která bude mít nově vytvořený soubor) a to lze učinit příkazem umask. Model nastavení práv vypadá nějak takto:

  speciální u (vlastník) g (skupina) o (ostatní)
4 setUID r-- r-- r--
2 setGID -w- -w- -w-
1 sticky --x --x --x

Z tohoto modelu lze vyčíst, pomocí jakého oktálního čísla chceme změnit přístupová práva. Toto číslo sestavíme takto: Pokud chceme nastavovat speciální bity (setUID/setGID/sticky), bude číslo mít 4 cifry (na první pozici právě nastavíme požadovanou kombinaci setUID/setGID/sticky bitů), v opačném případě stačí jen 3 cifry. Každá pozice našeho požadovaného oktálního čísla je vždy součet číslic v tabulce pro danou kategorii (vlastník/skupina/ostatní). Takže pokud například chceme nastavit sticky bit, čtení/zápis/souštění pro vlastníka a pro skupinu ani ostatní nic, zvolíme kombinaci 1700 (sticky bit je 1, 7=4+2+1=čtení+zápis+spouštění pro vlastníka, 0 pro skupinu a 0 pro ostatní), výsledná přístupová práva pak budou " rwx|---|--T ".

Příklady použití zmíněných příkazů: chmod [-R] +x,g=rw soubor1 ...
chmod [-R] 2755 soubor1 ...
chown [-R] root soubor1 ...
chgrp [-R] users soubor1 ...
chown [-R] root.users soubor1 ...
umask doplněk_masky  ( umask 022 )

Na prvním řádku přidáváme všem spustitelný bit, následně skupině nastavíme právě čtení a zápis (to, co tato maska nepřekrývá souboru zůstane, tedy např. pokud měl uživatel právo zapisovat, stále zapisovat může). V druhém řádku nastavujeme setGID bit, a dále uživatel má právo na čtení/zápis/spouštění, skupina i ostatní pak mohou číst a spouštět. Třetím řádkem bychom nastavili vlastníka na superuživatele, čtvrtým bychom určili skupinu na users a toto lze zkombinovat pátým řádkem. Konečně posledním řádkem (tím v závorce) nastavíme, že každý nový adresář bude mít práva " rwx|r-x|r-x " a každý nově vytvořený soubor " rw-|r--|r-- " (u souborů se implicitně nenastavuje spustitelný bit). Zmíněná maska umask je v systému implicitní (vyjímky ale mohou nastat, např. u souborových systémů bez práv, tedy třeba FAT).

Organizace disku

Organizaci disků lze rozdělit z více hledisek - fyzická, logická a systémová. Fyzicky je disk rozdělen na povrch, cylindry, stopy a sektory - to je pro nás celkem nepodstatné. O něco zajímavější je logické rozdělení disku na takzvané oddíly (partitions), běžný uživatel bude mít po instalaci linuxu obsaženy oddíly, které budou připojeny jako kořenový adresář (root), většinou bývá krátký oddíl v /boot, pravděpodobně bude přítomen i swap oddíl pro odkládání nepoužívané paměti, nezřídka ještě nějaké nelinuxové oddíly (z jiných operačních systémů). Za zmínku jistě stojí příkaz df, který vypíše připojené oddíly, včetně jejich zaplnění a dalších užitečných informací. Zvídavý čtenář jistě bez váhání prozkoumá manuálové stránky.

Nejvíce nás bude zajímat systémová organizace disku (tzv. filesystem). Ve fiesystemu máme boot blok, superbloky, seznam I-nodů (nějak se mi nelíbí počeštěný výraz I-uzly) a v neposlední řadě ještě datové bloky. Je pro nás celkem nepodstatný účel boot bloku a superbloků. V datových blocích jsou data (jak překvapivé, že?), z hlediska organizace disku jsou pak pro linux (možná nejen pro něj) charakteristické právě I-nody. Každý soubor na disku má právě jeden I-node. Každý I-node popisuje počet linků (tzn. kolik souborů ukazuje na datovou oblast určenou tímto I-nodem), vlastníka i skupinu, nechybí přístupová práva a typ souboru, velikost, 3 typy časů (poslední modifikace, poslední přístup a poslední změna I-nodu) a nakonec odkaz na datové bloky. Tady také narážíme na naši zvláštnost, proč soubor velký 41 bytů zabírá na disku 4 kilobyty. To je dáno tím, že každý soubor má svůj I-node, a implicitně je filesystem naformátován tak, že každému 4 kilovému datovému bloku přísluší jeden I-node, tedy z extrémního pohledu, pokud bychom na disku měli jenom samé soubory menší než 4 kilobyty, nedostávalo by se nám I-nodů. Zmínit bych ještě mohl, že pokud byste si chtěli vypsat soubory s informací o číslu I-nodu, stačí použít parametr -i u příkazu ls.

Linky

Máme dva druhy odkazů: link (někdy též hard link) a symlink (soft link, symbolický odkaz). V případě pevných linků neexistuje originál či kopie (prostě dva soubory mají společný I-node, z toho samozřejmě vyplývá, že mají společné datové bloky). Symbolický odkaz je soubor typu l, ve kterém je napsána cesta směřující k odkazovanému souboru. Důraz je třeba klást na to, že symbolický odkaz může směřovat na adresáře, kdežto pevný link nikoliv!!! Dalším důležitým rozdílem je ověřování práv přístupu - u pevného linku se vždy ověří, zda-li uživatel má přímý přístup, kdežto u symbolického odkazu navíc musí mít právo dosáhnout celé cesty vedoucí k souboru. Vytvořením pevného linku se zvýší počet linků v I-node (ten druhý sloupeček v podrobném výpisu souboru), symbolický odkaz I-node původního souboru vůbec nemění. Zajímavým faktem je ještě počet linků u adresářů. Vytvořme si nový adresář test, a následně si nechme udělat výpis příkazem "ls -l".

bash$ mkdir test
bash$ ls -l
celkem 4
drwxr-xr-x 2 jiri users 4096 2005-02-25 00:00 test

Asi se vám bude zdát zvláštní, že nově vytvořený adresář má dva linky, navíc jsme si řekli, že nelze tvořit pevné linky na adresáře. Každý adresář obsahuje podadresáře "." a "..", což je vyjímka u pevných linků v souvislosti s adresáři. Na náš adresář test ukazuje totiž i "test/.".
Zkuste si rozmyslet, co pomocí počtu linků adresáře lze jednoduše zjistit. Vytvořte si v adresáři test nějaký podadresář a uvidíte, že se počet linků adresáře test zvýší o jednotku.

bash$ mkdir test/subtest
bash$ ls -l
celkem 4
drwxr-xr-x 3 jiri users 4096 2005-02-25 00:00 test

Počet linků na adresář test je nyní 3, protože na něj ukazuje ještě "test/subtest/..". Podle počtu linků adresáře tedy můžeme jednoduše zjistit počet podadresářů.

Linky (ať už pevné, či symbolické) lze vytvářet příkazem ln, pevné linky můžeme též tvořit pomocí link.

link vzor obraz
ln [-s] vzor obraz

Parametr -s definuje, že odkaz má být symbolický. Na závěr odkazů ještě příklad:

bash$ ln -s test/ test2
bash$ ls -l
celkem 4
drwxr-xr-x 3 jiri users 4096 2005-02-25 00:00 test
lrwxr-xr-x 1 jiri users    5 2005-02-25 00:00 test2 -> test/

Nenechte se zmást počtem linků adresáře test, stále obsahuje podadresář subtest.

Několik základních příkazů

Na závěr si ještě uvedeme několik základních příkazů: touch      - nastavení data a času, resp. vytvoření prázdného nového souboru
cp [-r]    - kopírování souborů
mv         - přesun/přejmenování souborů
rm [-rf]   - smazání souboru
cd         - změna aktuálního adresáře
pwd        - výpis cesty aktuálního adresáře
mkdir [-p] - vytvoření nového adresáře
rmdir      - smazání prázdného adresáře

Příště: výpis souborů, zpracování textu, find, archivace ...
Autor: J.N.
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel jedna a pět