Linux:Adresářová struktura: Porovnání verzí

Smazaný obsah Přidaný obsah
m →‎Souborové systémy: oprava - chybně zapsané 14znakové
Stránka vyprázdněna
Řádek 1:
= Základní vlastnosti =
* V operačních systémech unixového typu je jen jedna velká stromová struktura začínající v kořenovém adresáři, Linux/Unix rozlišuje velká a malá písmena (standardně se u názvů souborů i adresářů používají malá písmena), jména souborů jsou dlouhá max. 255 znaků (ext2 fs), v názvu souboru se nesmí vyskytnout znak NUL (binární nula) a znak lomítko "/", celé jméno souboru včetně cesty je dlouhé max. 4 kB, a k oddělování adresářů a souborů používá normální lomítko "/".
* Soubory začínající tečkou "." jsou skryté a nevidíme je pokud je extra nevyžádáme (přepínač "-a" u přikazu ls ap.)
 
== Souborové systémy ==
Používá se nejčastěji zhruba 8 nativních Unixových FS (tj. může na nich být OS Linux), z toho 4 žurnálovací:
**'''ext3''' (Linux komunita, nástupce ext2, je s ním kompatibilní),
**'''ReiserFS''' (výkonný, zvlášť při velkém množství malých souborů v adresářích),
**'''JFS''' (IBM Journalling filesystem),
**'''XFS''' (SGI žurnálovací FS).
 
Nežurnálovací jsou:
**'''ext2''' (nativní Linux FS),
**'''Minix''' (prapůvodní FS Linuxu, dosti omezen - např. jména souborů max 14znakové ap.),
**'''UMSDOS''' (nad DOS FAT FS, přidává dlouhé názvy souborů, vlastnictví a práva).
 
*Podpora dalších cca 25 diskových FS (CD-ROM formáty ISO9660 a Macintosh HFS, FAT/VFAT/FAT32/NTFS Microsoft, HPFS (IBM OS/2) a další) a 5 síťových FS (Novel Netware přes IPX i TCP/IP, MS/IBM Lanmanager a Windows, Unixový NFS aj.)
 
* Každý nativní Unixový FS musí podporovat adresáře, obyčejné soubory, tvrdé a symbolické linky, blokové a znakové speciální soubory, pojmenované roury a sockety domény Unix. Dále musí podporovat vlastníka a skupinu souboru a základní přístupové bity pro vlastníka, skupinu a ostatní. A také musí podporovat tyto časové údaje souborů: čas posledního přístupu k souboru (označován jako atime - access time), čas poslední modifikace obsahu souboru (mtime - modification time) a čas poslední změny i-nodu souboru /= čas změny atributů souboru/ (ctime - change time).
 
== Adresáře ==
* Základní adresáře OS mají pevné názvy a použití - viz FHS - Filesystem Hierarchy Standard (norma hierarchie souborového systému) pro OS Unixového typu (Unix-like).
* Každý adresář obsahuje automaticky 2 položky: "." představuje běžný adresář, ".." představuje nadřazený adresář.
* Rozlišujeme pojem relativní a absolutní cesty: absolutní začíná lomítkem, tj od kořenového adresáře; relativní začíná od aktuálního adresáře.
* Speciální adresáře - výjimečné svým obsahem a použitím. Nejznámější jsou tyto:
:; <code>'''/etc'''</code> : globální (systémová) konfigurace celého počítače (uživatelská nastavení jsou vždy v domácích adresářích jednotlivých uživatelů). Veškeré chování systému je řízeno konfiguračními soubory v tomto adresáři a jeho podadresářích. Vždy zálohovat alespoň tento adresář (komprimovaný se vejde na disketu).
:; <code>'''/dev'''</code> : obsahuje soubory zařízení. Tyto speciální soubory představují tzv. bloková a znaková speciální zařízení. Na dlouhém výpisu příkazem "ls -l" mají jako první písmeno práv "b" (block - bloková zař.) nebo "c" (character - znaková zař.) a místo velikosti se zobrazuje jedinečná dvojice čísel (v rozsahu 0-255) - tzv. hlavní a vedlejší číslo zařízení.
:; <code>'''/proc'''</code> : virtuální souborový systém, obsahuje soubory odrážející stav operačního systému. Většina souborů je jen pro čtení, některé soubory - typicky v adresáři "/proc/sys" - lze zapisovat - tak lze měnit charakteristiky a limity OS (např. max. počet otevřených souborů systému zápisem nové číselné hodnoty do "/proc/sys/fs/file-max", pro router povolit forwarding IP paketů napříč strojem zápisem jedničky do "/proc/sys/net/ipv4/ip_forward" apod.)
'''Pozn.:''' Pro systém je velice důležitý adresář "/etc" - obsahuje globální (systémová) konfigurace celého počítače (uživatelská nastavení jsou vždy v domácích adresářích jednotlivých uživatelů). Veškeré chování systému je řízeno konfiguračními soubory v tomto adresáři a jeho podadresářích. Vždy zálohovat alespoň tento adresář (komprimovaný se vejde na disketu).
 
= Struktura adresářů v Linuxu/Unixu - hierarchie souborového systému =
 
Během let vývoje Unixu se vytvořily určité konvence pro rozvržení adresářů a souborů v rámci FS (např. umístění globálních konfigurací do adresáře "/etc", dočasných souborů" do "/tmp" apod.). Projekt "Filesystem Hierarchy Standard" (FHS) se snaží tyto konvence uspořádat logickým způsobem a je široce užíván v Linuxových systémech. První na co asi narazil každý, kdo dosud pracoval jen s DOSem nebo Windows, je absence písmenek reprezentující jednotlivé disky. U Linuxu je pouze jedna velká stromová struktura. Veškeré další oddíly a disky (floppy, cdrom, síťové disky ...) se připojují do nějakého adresáře v této struktuře - viz příkazy mount a umount.
 
== Popis základních adresářů ==
(u jednotlivých distribucí se mohou objevovat různé odchylky, tento popis je podle distribuce RedHat 6.0 a výše)
 
: <code>'''/'''</code> - kořen souborového systému, začátek stromové struktury
: <code>'''/bin'''</code> - základní spustitelné soubory pro použití všemi uživateli
: <code>'''/boot'''</code> - zde je umístěno jádro (kernel) systému a jeho mapa, initrd, soubory zavaděče (boot loader) GRUB
: <code>'''/dev'''</code> - soubory v tomto adresáři reprezentují jednotlivá fyzická zařízení nebo pseudozařízení systému. Také jsou zde další speciální soubory.
: <code>'''/etc'''</code> - globální konfigurační soubory systému
: <code>'''/home'''</code> - domovské adresáře uživatelů
: <code>'''/lib'''</code> - základní sdílené knihovny systému, mapování klávesnice a konzolové fonty, moduly pro jádro systému (kernel)
: <code>'''/lost+found'''</code> - ztracené a opravené soubory po chybách FS (ext2,ext3)
: <code>'''/mnt'''</code> - do místních podadresářů se připojují další souborová zařízení, např. do "/mnt/floppy" disketa, do "/mnt/cdrom" CD ap.
: <code>'''/opt'''</code> - zde bývají SW aplikace, které nejsou standardní součástí distribuce
: <code>'''/proc'''</code> - soubory nastavení a stavu systému a jednotlivých procesů - dalo by se říci, že je to mapa stavu paměti RAM
: <code>'''/root'''</code> - domovský adresář superuživatele (root)
: <code>'''/sbin'''</code> - systémové privilegované spustitelné soubory, používané uživatelem root
: <code>'''/sys'''</code> - virtuální adresář (jádra 2.6.x)
: <code>'''/tmp'''</code> - adresář pro odkládací a pomocné soubory
: <code>'''/usr'''</code> - další stromová struktura, obsahuje velké množství informací, jako knihovny, zdrojové kódy, spustitelné soubory, konfigurační soubory a další. Nejdůležitější z nich jsou:
:: <code>'''/usr/bin'''</code> - jako v "/bin", pro systém méně důležité aplikace
:: <code>'''/usr/X11R6'''</code> - kompletní soubory X Window systému (zkráceně X, nikdy ne X Windows!)
:: <code>'''/usr/include'''</code> - hlavičkové soubory jádra a knihoven (v jazyce C)
:: <code>'''/usr/lib'''</code> - další všeobecné a aplikační knihovny
:: <code>'''/usr/local'''</code> - bod pro instalace aplikací, obsahuje mj. podadresáře "/bin", "/etc/", "/lib/", "/sbin",
:: <code>'''/usr/sbin'''</code> - obdoba "/sbin", méně důležité
:: <code>'''/usr/share'''</code> - soubory použitelné více aplikacemi/subsystémy (man a info stránky, dokumentace k prg. balíkům a jejich programům, pozadí a spořiče obrazovky, fonty, definice národních abeced a zvyklostí, měrných jednotek a časových zón, ikony, zvuky apod.
:: <code>'''/usr/src'''</code> - zdrojové soubory jádra
: <code>'''/var'''</code> - soubory, jejichž obsah se běhěm chodu systému většinou mění; nejdůležitější:
:: <code>'''/var/named'''</code> - databáze DNS démona named - popisy spravovaných domén
:: <code>'''/var/lock'''</code> - "zámky" subsystémů a programů
:: <code>'''/var/log'''</code> - systémové a aplikační logy, např:
::: <code>'''messages'''</code> - log jádra a systému
::: <code>'''maillog'''</code> - logy poštovních služeb
::: <code>'''cron'''</code> - logy spouštění úloh v budoucnu démony crond a atd
::: <code>'''secure'''</code> - logy související s bezpečností systému (přihlašování, autentikace pro poštu a další služby)
::: <code>'''httpd/*_log'''</code> - logy WWW serveru (Apache)
::: <code>'''samba/*'''</code> - logy emulátoru serveru MS Windows
::: <code>'''squid/*'''</code> - logy HTTP proxy cache squid
:: <code>'''/var/lib'''</code> - databáze různých subsystémů, SQL serverů ap.:
::: <code>'''dhcp/*'''</code> - DHCP démon - pronájmy IP adres
::: <code>'''nfs/*'''</code> - stav NFS služeb
::: <code>'''rpm/*'''</code> - databáze RPM systému (RPM = RedHat Package Manager)
:: <code>'''/var/spool'''</code> - různé systémové fronty:
::: <code>'''at/*'''</code> - fronty spouštění úloh v budoucnu démonem atd
::: <code>'''cron/*'''</code> - fronty opakovaného spoštění úloh v budoucnu démonem crond
::: <code>'''lpd/*'''</code> - fronty různých tiskových služeb (lpr, LPRng, cups, ...
::: <code>'''mail/*'''</code> - nevyzvednutá pošta lokálních uživatelů počítače.
::: <code>'''mqueue/*'''</code> - fronta poštovních zpráv - e-mailů čekající na odeslání některým MTA (Mail Transport Agent - agent s teplou vodou /a poštou/)
:: <code>'''/var/www'''</code> - data WWW serverů - adresáře vlastních HTML dokumentů, ikon, CGI scriptů, manuálových stránek.
 
== Důležité soubory a/nebo adresáře ==
=== Adresář /etc ===
{| class="wikitable"
|-
| /X11 || Konfigurace X window systému, font serveru a správců přihlášení pro grafický mód
|-
| /default || Adresář implicitních parametrů programů (např. "useradd" - přidání uživatele do systému
|-
| /httpd || Konfigurační soubory WWW serveru Apache
|-
| /mail || Adresář cfg souborů pro transport pošty
|-
| /pam.d || Konfigrační soubory pro autentikaci (ověření identity) a autorizace (ověření oprávnění) k systému a jeho jednotlivým subsystémům
|-
| /ppp || konfigurace démona "pppd" - spojení přes PPP protokol (např. připojení do Internetu telef. linkou
|-
| /rc.d || Adresář se scripty definujícími start a ukončení systému a přechod mezi jednotlivými úrovněmi běhu (runlevels) systému
|-
| /samba || Adresář s konfigurací démona emulace služeb WinNT serveru
|-
| /ssh || Globální konfigurace SSH (šifrované síťové spojení) klienta a démona
|-
| /sysconfig || Konfigurační soubory sítě, startovací parametry jednotlivých systémových démonů
|-
| /xinetd.d || Adresář se soubory konfigurace síťových služeb spouštěných superdémonem "xinetd"
|-
| aliases || Soubor přezdívek poštovního démona sendmail
|-
| bashrc || Inicializační soubor shellu bash
|-
| crontab || Popis opakovaného spouštění procesů pro démon "crond"
|-
| exports || seznam řízení přístupu k NFS filesystému (sdílení disků v Unix systémech)
|-
| fstab || Statické informace o připojovaných filesystémech (zdroj, typ, bod připojení, charakteristiky)
|-
| host.conf, resolv.conf || DNS - konfigurační soubory
|-
| hosts || Statické informace o jménech počítačů a jejich IP adrese
|-
| hosts.allow, hosts.deny || soubory povolení/zákazu přístupu z jiných síťových zařízení k jednotlivým síťovým službám (tzv. TCP wrappers)
|-
| inittab || Konfigurační soubor praotce všech procesů - démona "init"
|-
| issue || Zpráva vypisovaná před přihlašovacím promptem v text módu
|-
| ld.so.conf || Seznam nestandardních adresářů pro hledání sdílených knihoven
|-
| logrotate.conf || Globální popis rotace logů systému a služeb
|-
| modules.conf || Konfigurační soubor pro zavádění modulů jádra (parametry ovladačů, přiřazení ovladačů k síťovým rozhraním,...)
|-
| motd || Message Of The Day - zpráva vypisovaná po přihlášení v text módu
|-
| mtools.conf || Konfigurační soubor balíku mtools - přístup k DOS jednotkám bez jejich "montování"
|-
| named.conf || Konf. soubor DNS démona "named" (Domain Name Services = služby doménových jmen)
|-
| passwd || Soubor založených uživatelů
|-
| shadow || Soubor uživatelských hesel a jejich vlastností
|-
| group || Soubor skupin uživatelů
|-
| gshadow || Soubor hesel skupin a jejich vlastností
|-
| profile || Systémový inicializační soubor přihlašovacího shell bash a sh
|-
| services || Standardní názvy portů jednotlivých síťových služeb
|-
| shells || Úplná specifikace (jméno vč. cesty) platných přihlašovacích shellů
|-
| syslog.conf || Konfigurační soubor pro logovací démon syslogd
|}
 
=== Adresář <code>/dev</code> ===
V adresáři <code>/dev</code> a jeho podadresářích jsou soubory prostředků systému. Prostředkem (angl. device) se rozumí nějaké fyzické zařízení (nebo kód který zařízení emuluje) schopné provádět vstup nebo výstup (IO - Input/Output). Např. klávesnice je vstupní zařízení, hard disk je vstupní (čtení) i výstupní (zápis) zařízení. V Unixech a Linuxu je většina zařízení reprezentována jako soubory v souborovém systému. Tyto soubory jsou standardně uloženy v adresáři "<code>/dev</code>" a jeho podadresářích a tam jsou přístupné pro procesy které potřebují provádět IO operace.
 
Zařízení většinou spadají do dvou kategorií: znaková a bloková. Znaková provádí IO znak po znaku - např. klávesnice, myš, tiskárna. Bloková zařízení čtou/zapisují data ve větších kusech, tzv. blocích. Patří sem např. zařízení pro uchování dat - IDE/SCSI pevné disky, CD-ROM, floppy disky, páskové jednotky. Provádění IO interakce s blokovými zařízeními s velkými kusy dat dovoluje efektivnější přenosy velkých bloků dat.
 
'''Jména prostředků:''' Často podle (anglického názvu) zařízení které reprezentují: "<code>/dev/fb</code>" = Frame Buffer grafické zařízení, "<code>/dev/hd</code>" = IDE pevný disk (Hard Disk), "<code>/dev/fd</code>" = floppy disk, "<code>/dev/ttyS</code>" terminálové zařízení na sériové lince. Někdy jsou pro snazší orientaci použity symbolické linky ukazující na skutečné fyzické zařízení - např. "<code>/dev/mouse</code>", zařízení představující myš, může být linkováno na sériový port, USB nebo PS/2 zařízení. Podobně "<code>/dev/cdrom</code>" může být symbolický link např. na "<code>/dev/hdc</code>" (IDE master na druhém řadiči), "<code>/dev/sda</code>" ap.
 
V některých případech, např. u pevných disků je pojmenování zařízení trochu komplikovanější. Jméno zařízení je u pevného disku sestaveno z typu disku, pozice disku a diskové oblasti. Např. "<code>/dev/hda1</code>" je první disková oblast (1) na disku typu IDE (hd), který je zapojen jako "master" na prvním IDE řadiči systému (a). SCSI pevné disky mají označení "<code>/dev/sd</code>" místo "<code>/dev/hd</code>".
 
'''Identifikace prostředků jádrem''' je podle tzv. '''hlavního''' (MAJOR) a '''vedlejšího''' (MINOR) čísla (0-255) příslušného speciálního souboru v adresáři "<code>/dev/</code>". Hlavní číslo udává typ zařízení a vedlejší pořadové číslo zařízení, v hlavním nebo vedlejším čísle může být zamontováno také pořadové číslo řadiče a/nebo pořadí jednotky na řadiči - např.:
:* <code>hdc</code> s čísly (22,0) představuje master disk na druhém IDE/ATA řadiči (druhý řadič je daný hlavním číslem 22, vedlejší číslo 0 zde znamená celý disk);
:* <code>hdb7</code> /číslo (3,71) - hlavní číslo 3 určuje druhý (E)IDE řadič, 71 disk a oblast na něm: 0-63 je vyhrazeno pro hlavní (master) disk (0=celý a 1-63 jsou jeho oblasti (partitions), 64-127 je pro druhý (slave) disk/: 71-64=7 => je to sedmá (logická) oblast /partition/ na slave disku prvého IDE/ATA řadiče /musí to bý logická oblast - primární v MBR mají čísla 1-4/
:* <code>fd0H1440</code> je první floppy disk (první 0 za fd) formátovaný na 1.44MB=1440kB
 
'''Speciální zařízení''' - několik pseudozařízení, jež se mohou občas hodit: <code>/dev/null</code>, <code>/dev/zero</code>, <code>/dev/full</code>, a <code>/dev/random</code> :
 
; <code>/dev/null</code> : "Nulové" zařízení, je druh "kontejneru na odpadky" ("trash") zařízení, malá černá díra - co do něj zapíšeme už nikdy nedostaneme zpět a je to bezedné. Jakýkoliv zápis do něj je úspěšný a jakékoliv čtení z něj vrátí stav "dosažen konec souboru". Velice užitečná věc pro potlačení nežádoucích výpisů na obrazovku z některých programů, zvlášť ve scriptech pomocí přesměrování standardního výstupu nebo chybového výstupu do tohoto zařízení. Nebo k vymazání obsahu souboru a přitom zachování všech jeho přístupových (vlastnictví+práva) atributů (!). Příklady:
 
<pre>
$ modprobe ipsec 2>&1 /dev/null# potlač chybový výstup který při zavádění modulu vznikne
$ cat /dev/null > /var/log/messages# "vyprázdni" systémový log a nezměň práva souboru
</pre>
 
; <code>/dev/zero</code> : Je podobné <code>/dev/null</code>. Na vstupu se chová stejně, ale čtení z "<code>/dev/zero</code>" vrátí znak(y) \0 (binární nula). Proto se <code>/dev/zero</code> často užívá k vytvoření prázdných souborů:
 
<pre>
dd if=/dev/zero of=~/mujfajl bs=1k count=100# vytvoř 100kB soubor v mém domácím adresáři, plný nul
</pre>
 
; <code>/dev/full</code> : Simuluje zaplněné zařízení. Zápis do "<code>/dev/full</code>" skončí chybou. Užitečné pro testování chování aplikací na zaplněném zařízení:
 
<pre>
$ cp test-file /dev/full
cp: writing `/dev/full': Na zařízení není volné místo
</pre>
 
; <code>/dev/stdin</code>, <code>/dev/stdout</code> a <code>/dev/stderr</code> : Jsou zařízení standardního vstpu, výstupu a chybového výstupu. Jsou užitečné u programů, které požadují na příkazové řádce specifikaci(e) vstupnícho a/nebo výstupního souboru a my bychom je potřebovali zařadit spíše jako filtr, tzn. chceme, aby vstup byl ze stdin a/nebo výstup na stdout. Např. program dumb_program, vyžadující na příkazové řádce specifikaci nejprve vstupního a pak výstupního souboru můžeme zařadit jako filtr do roury takto:
 
<pre>
$ cat '''file''' | dumb_program '''/dev/stdin /dev/stdout''' | sort
</pre>
 
; <code>/dev/random</code> a <code>/dev/urandom</code> : Jsou zařízení, která generují "náhodná" data. "<code>/dev/random</code>" je kvalitnější než "<code>/dev/urandom</code>". Generace náhodných znaků v "<code>/dev/random</code>" je založena na "šumu prostředí", který je nedefinovatelný. V systému jsou pouze omezené zdroje tohoto náhodného šumu, proto je zařízení "<code>/dev/random</code>" pomalé a může se pozastavit a vyčkat až nasbírá další data. "<code>/dev/urandom<code>" užívá stejné zdroje šumu jako "/dev/random", ale generuje pseudonáhodná data pokud náhodná data nejsou k dispozici. Tzn. je rychlejší, ale méně přesné.
 
'''Hlavní význam''' speciálních souborů v adresáři <code>/dev</code> je:
 
* Dvojice hlavní/vedlejší číslo pro jádro jednoznačně definuje ovladač zařízení a případně řadič a jednotku na řadiči (v systému může být několik stejných řadičů (např. IDE/ATAPI, SCSI, USB) a každý řadič může obsluhovat více jednotek (na jednom SCSI řadiči může být např. současně disk, magnetická páska, CD-ROM, ZIP mechanika výměnných disků, scanner a osvitová jednotka)
 
* Programy přistupují k zařízením jednotným způsobem stejně jako k souborům - čtení ze souboru <code>/dev/st0</code> je vlastně čtení z magnetické pásky, zápis do souboru <code>/dev/tty4</code> je výpis na čtvrtou virtuální konzoli počítače, přečtení prvních 512 Byte ze souboru <code>/dev/hda</code> je vlastně přečtení prvního sektoru z master disku na primárním IDE/ATA řadiči ( pro architekturu PC a DOS dělení disků je to MBR (Master Boot Record - hlavní zaváděcí záznam, obsahuje i Partition Table /tabulku rozdělení disku/)
* Přístup k zařízením je řízen přístupovými právy k odpovídajícím speciálním souborům adresáře "<code>/dev</code>" - právem k zápisu do speciálního souboru v "<code>/dev</code>" je dáno právo zápisu za odpovídající zařízení
 
'''Pozn.1:''' Síťová zařízení (LAN/WAN karty, PPP/SLIP/PLIP zařízení, různá síťová "pseudozařízení" (regulátory šířky pásma/vyvažování zátěže, kryptovací zařízení, zařízení pro virtuální sítě /VPN/ ap.) nejsou mapovány na položky souborového systému - nemají položky v adresáři "<code>/dev</code>" jako ostatní zařízení. Je to dáno tím, že
: komunikace se síťovým zařízením je zcela odlišná od komunikace užité pro práci se znakovými nebo blokovými zařízeními - namísto funkcí "čtení" a "zápis" je nutno volat funkce poplatné přenosu paketů.
: "síťování" většinou není specifické pro nějaký proces, přicházející pakety a/n jejich fragmenty musí být sdruženy, identifikovány a redistribuovány před tím, než je proces dostane. Systém má na starost doručování paketů mezi programy a síťovými rozhraními (interface) a řídí provádění programů na základě jejich síťové aktivity. Také směrování (routing) paketů a identifikace adres (adres resolution) je implementována přímo v jádře.
Pro potřeby síťové komunikace mezi procesy mají systémy Unix/Linux implementován koncept tzv. "'''[[soket]]ů''' (angl. '''sockets''')
 
'''Pozn. 2:''' Podobně jako rozhraní SCSI (Small Computer Systems Interface - komnikační protokol mezi počítačem a periferními jednotkami; všechna SCSI zařízení "rozumí" stejnému protokolu bez ohledu na typ řadiče na nejž jsou připojena), byly v nových jádrech Linuxu implementovány další třídy zařízení: '''USB''', '''Bluetooth''' /Modrý zub/, '''IEEE 1394''' /FireWire/, '''I2O'''/Intelligent Input/Output/, '''Multimédia''' aj. Tyto skupiny mají shodný komunikační protokol a jeho implementace v jádře zbavuje vývojáře ovladačů příslušných zařízení programovat tuto pro celo třídu společnou vrstvu znovu.
 
'''Pozn. 3:''' Nevýhodou speciálních souborů zařízení v adresáři "<code>/dev</code>" je to, že je "velký" - typicky obsahuje až několik desítek tisíc souborů. Je to proto, že obsahuje (a je jich naprostá většina) soubory i pro zařízení, která v systému (ještě) neexistují - jaksi "do foroty", až se zařízení přidá, už bude jeho soubor zařízení existovat a nemusí se vytvářet např. povelem "mknod". Např. pro pevné disky "<code>hd</code>" jsou připravena zařízení <code>hda-hdt</code>, pro každé 32 oblastí (partition), tj. celkem 16x32=512 speciálních souborů. Pro jiná zařízení je situace obdobná.
Východiskem je [[devFS]] filesystém, implementovaný v jádrech Linux 2.4 : není to již součást normálního FS, ale kód pro nová zařízení je součástí jádra. "<code>/dev</code>" FS je vytvářen v RAM během zaváděcí (boot) fáze systému a odpovídající speciální sobor pro nové zařízení je jádrem automaticky přidán při jeho připojení. (V době psaní tohoto dokumentu ale devFS nebyl součástí žádné velké distribuce).
 
'''Pozn. 4:''' Od jádra verze 2.6.x se začalo místo devFS filesystému používat systému [[Udev]], který umožňuje zařízení dynamicky vytvářet a rušit
 
=== Adresář <code>/proc</code> ===
 
Je virtuální souborový systém (typ, zadávaný např. v povelu "mount", je "proc"), standardně připojovaný do bodu "<code>/proc</code>". Používá se k nastavování a čtení hodnot jednotlivých parametrů jádra i běžících procesů. Hodnoty a stavy jsou uchovávány v jednotlivých souborech, ale ve FS existují pro čitelnost a orientaci i adresáře. Ty základní přímo v "<code>/proc</code>":
 
{| class="wikitable"
|-
| <code>/číselné</code> || hodnoty a stavy jednotlivých aktivních procesů. Název adresáře je PID (Program ID) číslo příslušného procesu.
|-
| <code>/bus</code> || sběrnice systému (PCI, PCMCIA, USB, MCA, EISA, ..), jejich ovladače a připojená zařízení.
|-
| <code>/ide</code> || IDE řadiče a zařízení na nich připojená. Obdobně i adresář /scsi.
|-
| <code>/net</code> || data okolo síťové vrstvy: zařízení, routovací tabulky a protokoly, ARP cache, statistiky aj.
|-
| <code>/sysvipc</code> || prostředky meziprocesové komunikace: zprávy, semafory a sdílená paměť
|-
| <code>/sys</code> || nastavené hodnoty a limity systému
|}
 
Adresář <code>/sys</code> se dělí na další podadresáře podle kategorie příslušných parametrů (dev, fs, kernel, net, vm aj.) Změnou hodnot v příslušných souborech můžeme měnit nastavení a chování systému. Např:
<pre>
$ cat /proc/sys/net/ipv4/ip_forward# Je stroj koncový nód (0) nebo router (1) ?
0
$ echo "1" > /proc/sys/net/ipv4/ip_forward# povol routing IPv4 paketů
</pre>
&nbsp;*) Kdo najde chybu? (kdo ne - viz konec článku)
 
== Práva souborů a adresářů ==
 
Různé Unixové a Unixu podobné (Unix-like) OS podporují různé druhy souborových systémů ("FS" - File System). FS mohou mít trochu odlišnou množinu atributů řídících přístup a řízení přístupu může být ovlivněno volbami zadanými v době připojení ("mount") FS. Linux např. začal na FS "[[Minix]]", nyní je nejrozšířenější "'''Extended 2 FS'''" (zkráceně označovaný jako "'''ext2'''" nebo "'''e2fs'''", rychle nastupují [http://www.abclinuxu.cz/clanky/show/11662 žurnálovací FS] ("Extended 3 FS" = [http://www.abclinuxu.cz/clanky/show/12344 ext3]; "Reiser FS" = [http://www.abclinuxu.cz/clanky/show/12663 reiserfs] a "Journaled FS" = [http://www.abclinuxu.cz/clanky/show/19124 jfs] (IBM) jsou již součástí 2.4.x jader, další je možné přidat např. "[http://www.abclinuxu.cz/clanky/show/13224 XFS]" ).
 
Většina FS na Unix-like OS podporuje minimálně tyto atributy:
 
:* Vlastnictví uživatelem a skupinou (tj. soubor má UID a GID). Uživatel může být členem více skupin, ale jedna je defaultní - a ta bude přidělena nově vytvářenému souboru (System V konvence, v BSD je skupina podle nadřazeného adresáře). Viz též dále SGID bit na adresáři.<br>V Linuxu pouze root může změnit vlastníka souboru, ne samotný vlastník
:* Bity práv - čtení (r=read), zápis (w=write) a provádění(x=execute) - pro uživatele(vlastníka), skupinu a pro ostatní. Popis vlastností těchto a dalších bitů při jejich aplikaci na soubory a adresáře viz tabulka níže
:* "sticky" bit (angl. přilnavý, lepkavý - "'''lepí''' program do paměti) - ponechává kód programu v oper. paměti i po ukončení procesu
:* SUID a SGID bity - viz tab. níže
:* Časová razítka (timestamps, počet vteřin od 1.1.1970 0:0:0 UTC) - pro každý objekt FS jsou uloženy doby posledního přístupu a poslední modifikace. Poznamenejme, že vlastník souboru může tyto doby měnit - viz příkaz '''touch'''.
 
'''Pozn1:''' Kromě těchto pro Unix-like FS společných bitů mohou mít konkrétní FS další atributy, viz např. příkaz "chattr" a "lsattr" - atributy "ext2" a "ext3" souborových systémů, speciálně atributy "immutable (objekt nelze měnit) a append-only (objekt lze jen rozšiřovat) /nastavovatelné pouze uživatelem "root"/.
 
'''Pozn2:''' U FS které nemají tyto společné přístupové bity je přístup a/nebo vlastnictví možné emulovat volbami příkazu "mount" v době připojení FS.
 
'''Pozn3:''' Pro přidávání a výmaz souborů mají význam pouze přístupové bity a vlastník adresáře souboru (pokud Unix FS nepodporuje komplexnější schéma, jako např. POSIX ACL (ACL = ACcess List = přístupový seznam)). Tzn. i soubory, které nemají nastaveny nastaveny žádné přístupové bity mohou být smazány, pokud to povolí adresář v němž jsou umístěny. Stejně pokud nadřazený adresář povolí aby podřazené objekty mohly být změněny uživatelem nebo skupinou, pak jakýkoliv potomek může být nahražen/změněn tímto uživatelem nebo skupinou.
 
=== Význam přístupových bitů ===
{| class="wikitable"
|-
! Druh bitu || Obyčejný soubor || Adresář
|-
| read: r (4) || Obsah souboru lze číst || Je možné zobrazit obsah adresáře, tj. vidět jaké soubory a adresáře obsahuje.
|-
| write: w (2) || K souboru lze připisovat nebo jej měnit || Možnost vytváření, smazání nebo přejmenování/přesunu souborů v adresáři
|-
| execute: x (1) || Soubor lze spustit jako program || Povolí procházení adresářem a přístup k souborům a adresářům pod ním. Bez tohoto bitu není možné přidávání, mazání a přejmenování souborů v adresáři. Adresář nemající nastavený x-bit v žádné ze tří skupin (vlastník, skupina, ostatní) je nepoužitelný - může do něj pouze uživatel root.
Adresář který má nastaven tento bit a nemá nastaven r bit nemůže být vypsán, tzn. uživatel musí znát jméno souboru, s nímž chce pracovat.
|-
| SUID (4000) || Je-li nastaven na spustitelném souboru, pak při jeho spuštení bude efektivní UID procesu nastaveno na UID vlastníka souboru. Na nespustitelném souboru způsobí v Linuxu a Systém V systémech uzamčení souboru při jeho přístupu. || Nemá vliv
|-
| SGID (2000) || Je-li nastaven na spustitelném souboru, pak při jeho spuštení bude efektivní GID procesu nastaveno na GID vlastníka souboru. Na nespustitelném souboru způsobí v Linuxu a Systém V systémech uzamčení souboru při jeho přístupu. || Pokud je SGID bit nastaven na adresáři, soubory v adresáři vytvořené budou mít jejich GID automaticky nastavené na GID adresáře - tzv. "projekt adresáře". Nestandardizováno, funguje v Linuxu a na Solarisu.
|-
| sticky: t (1000) || Staré Unixy jej nazývaly "Save program text" bit a indikoval, že kód spustitelných souborů má zůstat v oper. paměti po ukončení úlohy. Na Linuxu nemá význam - díky správě VM jej nepotřebuje || Bez ohledu na zápisové práva daného adresáře, smazání a přejmenování souboru v tomto adresáři může provést pouze vlastník souboru, vlastník adresáře nebo ten, kdo má explicitně povolena práva zápisu do souboru. Používané na veřejně zapisovatelné adresáře jako je "<code>/tmp</code>"
|}
 
'''Pozn.1:''' r,w,x práva na adresář jsou nezávislé na právech souborů a adresářů pod ním. Např. přístup na zápis do adresáře povoluje vytváření nových souborů v adresáři nebo výmaz existujících, ale nedává automaticky právo na zápis do existujících souborů.
 
'''Pozn.2:''' SUID shell scripty představují vážnou bezpečnostní slabinu a mohou být crackery zneužity pro získání root přístupu do systému. Proto je jejich nastavení jádrem ignorováno a script běží vždy pod UID uživatele.
 
&nbsp;*) Prompt "<code>$</code>" ukazuje, že uživatel zřejmě není "root" a tedy nemá právo zapisovat kamkoliv do "<code>/proc</code>" !
 
== Reprezentace souborového systému na disku ==
* Informace o souborech jsou soustředěny do seznamu i-uzlů (i-node). Při vytváření fs se na daném médiu pro i-uzly vytvoří prostor zadané velikosti. Tím je dán max. počet i-uzlů (tzn. i max. počet souborů), které se na daném médiu mohou vytvořit.
* Soubor na souborovém systému je jednoznačně definován číslem i-uzlu (jsou číslovány od 1). I-uzel obsahuje mj. typ souboru (obyč, adresář, symlink, speciál, FIFO, ..), jeho velikost v bajtech, počet odkazů na soubor a diskovou adresu uložení dat na disku. Neobsahuje však jméno souboru - to je uloženo v adresáři.
* Adresář je zvláštní případ souboru. Obsahuje pouze jméno souboru (příp. délku jména) a číslo i-uzlu. Prázdná položka má nulové číslo i-uzlu.
* Superblok popisuje systém souborů - typ fs, velikost systému souborů, počet volných bloků fs, velikost seznamu i-uzlů, i-uzel kořenového adresáře apod.
* Zaváděcí blok (volitelně)
* Bitmapa i-uzlů
* Bitmapa datových bloků
 
= Odkazy a použitá literatura =
security/zabezpecujemelinux
jak_na_Unix.html
* Secure-Programs-HOWTO
* Security-HOWTO
* Adv-Bash-Scr-HOWTO
* Unix-and-Internet-Fundamentals-HOWTO
 
Verze: 5.4.2003
 
[[Kategorie:Linux|Adresářová struktura]]