Linux/Start Linuxu
V kostce co se děje v počítači od zapnutí napájení do chvíle, než se objeví přihlašovací dialog.
Pozn: Popsané činnosti jsou prováděné na platformě x86 kompatibilní a tak se mohou na jiných architekturách lišit.
BIOS
[editovat | editovat zdroj]Po zapnutí počítače se obvykle jako první spustí tzv. BIOS. Je to malá aplikace napsaná ve strojovém kódu (firmware), která je uložena v malém paměťovém modulu na základní desce. Dříve se používaly stálé paměťové moduly typu ROM ( zkratka z anglického Read Only Memory ). Ty z technických důvodů nebylo možné přepisovat. Později se začaly používat paměti typu PROM resp. EEPROM, které dovolily verzi BIOSu aktualizovat.
V současné době se místo těchto typů pamětí v čím dál větší míře prosazují paměti typu flash které dovolují použít na firmware mnohem větší dat. Takže tzv. Opensource BIOS je defacto malá linuxová distribuce.
BIOS při svém spuštění provádí sadu základních testů, během kterých detekuje jaká jsou vlastně k desce připojená zařízení (hardware), a případně aktivuje firmware nalezených periferií ( video karty, řadiče SCSI, ale i např. BOOT ROM síťové karty, atd.) které to vyžadují. Pak se - podle toho jaký identifikoval hardware ( resp. nastavené volby v uloženém výchozím nastavení ) - pokouší najít a spustit zavaděč operačního systému.
V dobách hloupých operačních systémů byl BIOS klíčovou součástí systém. Bez něj by totiž spuštěný OS o existenci zařízení neměl potuchy. Ostatně ještě dřív, než se do BIOSU dostaly testovací rutiny schopné identifikovat připojené zařízení, bylo nutné znát technické parametry hardware a nastavovat je při prvním spuštění ručně. Dnes už BIOSu zůstala jenom jedna funkce - postarat se o to, aby byl nalezen zavaděč.
Spuštění zavaděče
[editovat | editovat zdroj]Zavaděč je rovněž malý program, který byl původně umístěn v prvním sektoru na disku, kterému se proto říká MBR ( z angl. Master Boot Record - Hlavní zaváděcí záznam). Tento sektor má velikost 512 bajtů, přičemž poslední dva bajty z tohoto sektoru obsahují tzv. "magické číslo" 0xAA55 = 43603 . Tímto číslem je BIOSu řečeno, jestli má považovat strojový kód v sektoru za zavaděč, nebo ne.
Současné verze BIOSů však umí zavést systém i z jiných zařízení, které detekoval při svém spuštění. Ba dokonce, pokud to není v konfiguraci zakázáno, umožňuje při spouštění operativně zvolit na kterém z detekovaných zařízení má zavaděč hledat.
Typicky tak lze zavaděč natáhnout z:
- floppy diskety
- pevného disku
- CD-ROM mechaniky
- ZIP mechaniky
- Z SD disku připojeného přes čtečku paměťových karet
- Flash disku či jiného typu disku připojeného přes USB rozhraní
- ze sítě, pokud to podporuje firmware síťové karty.
BIOS ze zvoleného zařízení natáhne do paměti blok dat o velikosti zmíněných 512B a nalezne-li na příslušném místě zmíněné číslo, kód spustí a předá mu řízení.
Předem je dlužno říct, že tato část zavaděče ještě nemusí nezbytně spouštět rovnou operační systém. Protože velikost boot sectoru je omezená, má většina zavaděčů v této oblati umístěnou opět pouze malou část, která však ví odkud a jak spustit zbytek. Teprve po spuštění hlavní části zavaděče přichází na řadu zavádění OS.
Zavaděče
[editovat | editovat zdroj]Místo hlavní části zavaděče rovnou zavést linuxové jádro – tato varianta se většinou používá pouze při zavádění systému z diskety nebo CD-ROM, pro praktické použití se používají specializované zavaděče, které mají několik výhod:
- Umožňují zavádět různé verze linuxového jádra, případně zavést jiný zavaděč.
- Umožňují předat zaváděnému jádru další parametry (až 2 kB dat).
- Dovolují zavést větší zkomprimované (bzImage) jádro – až 2.5 MB oproti původnímu 1 MB.
- Dokáží do paměti stroje rozbalit virtuální RAM disk, takže jádru stačí pro zavedení napevno zakompilovat pouze několik málo ovladačů. Zbývající si dotáhne podle potřeby během spouštění (viz Moduly linuxového jádra).
Jak už bylo zmíněno, část v boot sectoru ještě nezavádí samotný OS, 512 bajtů je příliš malý prostor pro uložení celého kódu zavaděče. Tato část nazývaná také "zavaděč první etapy" ("first stage boot loader") je to malý prográmek jehož jediným úkolem je zavést do paměti a spustit "zavaděč druhé etapy" ("second stage boot loader"). Ten se nachází i se svými konfiguračními soubory na souborovém systému, ze kterého umí číst.
Činnost zavaděče končí předáním řízení na tzv. "setup" rutinu jádra. Ta připraví přechod na protected mód, dekomprimuje jádro a předá mu řízení.
LILO
[editovat | editovat zdroj]LILO (z angl. názvu LInux LOader neboli Linuxový zavaděč) byl první čistě linuxový zavaděč, který nahradil zavaděč loadlin, který se spouštěl z DOSu resp. operačních systémů postavených nad DOSem – Microsoft Windows (95, 98 a ME).
Má však jednu velkou nevýhodu – konfiguraci zavaděče nelze během spouštění ovlivnit. Pokud jste tedy při konfiguraci udělali nějakou chybu, nemáte jinou volbu než systém spustit z nějakého záchranného média a LILO přeinstalovat. Dynamickou úpravu konfigurace při spouštění umožnil teprve GRUB.
Podle toho jak se postupně objevují během spouštění na obrazovce písmena jeho názvu, lze poznat ve které fázi zavádění došlo k problému.
GRUB
[editovat | editovat zdroj]Je zkratka z ang. GRand Unified Bootloader. Vznikl jako alternativa vůči LILO a jeho největším trumfem byla možnost operativně modifikovat zaváděcí konfiguraci. I díky této vlastnosti jej postupem času zvolila jako svůj výchozí zavaděč většina distribucí .
GRUB po svém spuštění umožňuje přerušit proces zavádění, přepnout do editačního módu a manuálně přepsat konfigurační volby. S modifikovanou konfigurací pak pokračuje v zavádění operačního systému. To je neocenitelné především v situaci, kdy:
- je vygenerovaný konfigurační soubor neúplný
- obsahuje překlep ( v případě ručně modifikovaného konfiguračního souboru)
- chceme otestovat při zavádění jádra nějaký parametr
- nebo původně nainstalovaný zavaděč v hlavním MBR je přepsaný ( jak s oblibou činí při své instalaci Microsoft Windows )
GRUB2
[editovat | editovat zdroj]Tento zavaděč se od původního GRUBu totálně liší a připomíná jej jen rámcově. Jeho největším přínosem je modularita, která s sebou přináší řadu nových funkcionalit. Ovšem jeho vývoj stále aktivně probíhá, což sebou nese i jisté neduhy.
Snad asi největší slabina je, že ač GRUB2 lze spustit po síti, on sám zatím neumí zavést po síti linuxové jádro, pouze z lokálního disku. U původního GRUBu bylo možné této funkcionality dosáhnout po zakompilování příslušného ovladače síťové karty.
Na druhou stranu nabízí jiné užitečné možnosti, např.:
- vylistovat dostupné diskové oddíly
- prohledávat soubory na disku, včetně jejich obsahu
- skrývat či odkrývat diskové oddíly a měnit zda jsou aktivní či nikoliv
- možnost zavést operační systém z obrazu LiveCD
Další změnou oproti původní aplikaci je jiná syntaxe konfiguračního souboru a změna názvu a funkcionality některých příkazů. Nicméně z hlediska budoucnosti je to velmi perspektivní zavaděč.
Původní GRUB byl programován dost chaoticky a odpovídal tomu i jeho návrh i kód. Proto poměrně záhy začala s projektem PUPA ( z angl. Preliminary Universal Programming Architecture ) japonská agentura pro informační technologie IPA ( 5. ledna 2004 byla transformována do Incorporated Administrative Agency ). Tento projekt měl za cíl vyvinout jeho nástupce.
K integraci tohoto projektu do hlavní větve došlo kolem r. 2002, kdy byl verzí 0.9x ukončen vývoj původního GRUBu.
SYSLINUX
[editovat | editovat zdroj]Není ani tak jeden zavaděč, jako spíš sada na sobě nezávislých zavaděčů pro specifické použití.
Spuštění OS
[editovat | editovat zdroj]Aneb, co se děje v okamžiku, kdy zavaděč předá řízení linuxovému jádru.
Po inicializaci registrů a kontrole typu procesoru následuje vysokoúrovňová inicializace. Během ní se mj. provádí inicializace poplatné architektuře, inicializace datových struktur, inicializuje se systémová konzole, podpora dynamického zavádění modulů, počítá BogoMips, inicializace VFS (Virtual File System), VM (Virtual Memory manager), vyrovnávací cache, IPC (InterProcess Communication), quota (Subsystém limit a využití disků uživateli), provádí se kontroly na chyby HW a dělají protiopatření (např. f00f chyba P5), připraví se start plánovače "na příští chvíli", odstartuje vlákno (thread) pro start procesu init a přejde do čekací smyčky (idle loop).
Jádro Linuxu - stručně řečeno, pomocí HW dělá to, co programy potřebují a očekávají ke svému běhu, rychle a efektivně. Procesor může najednou provádět pouze jednu instrukci, ale Linux systém se chová jako by prováděl řadu věcí současně. Jádro to realizuje rychlým přepínáním a přidělováním procesoru mezi úlohami. Interval tiku hodin a tím i nejmenší interval přepínání se nazývá "jiffie" a je na i386+ systémech 1/100 sec (závisí na HW architektuře - např. na procesorech Alpha je to 1/1024 sec.) Nejlepší využití procesoru je dáno tím, že sleduje, co jaký program/proces provádí - který je připraven k běhu a který na něco čeká; např. na vstup z klávesnice nebo zapsání/přečtení záznamu z disku. Tato úloha jádra se nazývá plánování (scheduling). Pokud program nic nedělá, pak není nutno, aby byl v RAM. A také program, který něco dělá, může mít část/části, které nedělají nic. Adresní prostor každého procesu je dělen do stránek. Jádro si udržuje informace o tom, které stránky kterých procesů jsou nejvíce užívány. Stránky, které tak často užívány nejsou, mohou být přesunuty do odkládací (swap) diskové oblasti. Jiné nepoužité stránky mohou být vysunuty a udělají jim místo, když jsou opět potřeba v RAM. Tento mechanismus se nazývá "správa virtuální paměti" (virtual memory management, VM).
Jádro obsahuje ovladače (drivers) pro mnoho specifických zařízení. Jejich ovládání prezentuje v jednotné formě aplikačním programům. Jádro také spravuje systém souborů, interprocesové komunikace, a mnoho síťových věcí. Většina konfigurace jádra je dána při jeho sestavení - je možné nastavit architekturu, typ procesoru, podporované sběrnice, souborové systémy, periférie, APM, ACPI, PNP, SW RAID, typy sítí a síťových protokolů a další.
GNU C knihovna
[editovat | editovat zdroj]Následující věc, která se stane s počítačem při startování je, že je natažen a spuštěn program init. Nicméně, program init, téměř jako všechny programy, používá funkce z knihoven. Jádro tedy musí být schopno před startem programu init potřebné knihovny zavést a připravit k použití, a to jak pro starý formát spustitelných programů, tzv. a.out (Assembler OUTput), tak pro nový ELF (Executable and Linking Format) formát. Nejznámější jsou standardní C knihovny - na GNU/Linux systémech se nazývá glibc (Gnu LIBrary C). Jsou v ní stovky standardních funkcí: matematické, práce s řetězci, datové/časové, alokace paměti atd. Všechno v Unixu (a Linuxu) je psáno v jazyce C, takže všechno užívá tyto funkce. Adresář "/usr/lib
" obsahuje velké množství souborů většinou pojmenovaných libněco.so nebo libněco.a atd. Jsou to knihovny těchto funkcí. Glibc je jenom GNU implementace těchto funkcí.
- Tyto knihovní funkce mohou programy použít dvěma způsoby. Jestliže je program sestavován staticky, knihovní funkce jsou kopírovány z knihoven libněco.a do vytvářeného spustitelného obrazu. Jestliže je program sestavován dynamicky (což je náhradní hodnota), pak když je program spuštěn a potřebuje knihovní kód, ten je volán ze souboru libněco.so.
- Program ldd vypíše jaké sdílné knihovny daný program ke svému běhu potřebuje. Například, zde jsou knihovny, které užívá program bash:
franta:~$ ldd /bin/bash libtermcap.so.2 => /lib/libtermcap.so.2 (0x4002c000) libdl.so.2 => /lib/libdl.so.2 (0x40030000) libc.so.6 => /lib/libc.so.6 (0x40034000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Program init
[editovat | editovat zdroj]Většina linuxových systémů používá způsob "Systém V" inicializace. Obecně jádro po dokončení svého zavedení a své inicializaci spustí program /sbin/init
. Úkolem init-u je, aby vše dále bylo správně spuštěno. Zařizuje připojení ("mountování" - mount) a případnou kontrolu souborových systémů a swapovacích oblastí, nastavení hodin, jména systému, startuje systémové démony, síťové služby a procesy pro přihlášení do systémů (getty/mingetty/xdm). Základním konfiguračním souborem programu init je /etc/inittab
. Tento soubor popisuje, které procesy jsou startovány během zavedení systému a během normální činnosti.
Init rozlišuje několik úrovní běhu (runlevel), každá úroveň může mít svoji množinu procesů, které v ní jsou startovány. Platné úrovně běhu jsou 0-6. Další povolené úrovně nejsou v systémech linux a unix využívány. Položky v souboru inittab mají formát:
id:úrovně běhu:akce:proces
id - je jednoznačná posloupnost 1-4 znaků, která definuje položku v inittab
úrovně běhu - je seznam úrovní pro které se bude provádět specifikovaná akce.
akce popisuje, která akce bude prováděna:
- respawn - pokud proces skončí, bude restartován (např. getty).
- wait - proces bude nastartován jednou při vstupu do dané úrovně běhu a init bude čekat na jeho ukončení.
- once - proces bude spuštěn jednou při vstupu do dané úrovně běhu.
- boot - proces bude spuštěn během zavádění systému, pole urovně běhu je ignorováno.
- bootwait - proces bude spuštěn během zavádění systému a i čeká na jeho ukončení (
/etc/rc
).Pole úrovně běhu je ignorováno. - off - nedělá nic.
- ondemand - proces označen ondemand úrovní běhu bude spuštěn kdykoli je daná ondemand úrovně běhu (a,b,c) volána.
- initdefault - specifikuje úroveň běhu, do které by měl systém vejít po startu. Pole proces je ignorováno.
- sysinit - proces bude prováděn během zavádění systému, ještě před položkami boot nebo bootwait.
- powerwait - proces bude spuštěn při výpadku napětí (init je o tom většinou informován programem komunikujícím s UPS).Init bude čekat na ukončení procesu.
- powerfail - jako pro powerwait, ale init nečeká na ukončení procesu.
- powerokwait - proces bude spuštěn, když je init informován o obnovení napájení.
- powerfailno - proces bude spuštěn, když se init dozví, že záložní baterie na externí UPS jsou téměř vybité.
- ctrlaltdel - proces bude spuštěn, když init přijme signál SIGINT - typicky stiskem kombinace kláves ctrl-alt-del na systémové konzoli
- kbrequest - proces bude spuštěn, když init přijme signál od ovladače konzolové klávesnice, že byla stisknutá speciální kombinace kláves.
proces specifikuje prováděný proces. Ukončení spuštěného procesu spolu s příčinou zastavení init zaznamenává do souborů /var/run/utmp
a /var/log/wtmp
. Pokud ale pole procesu začíná znakem "+", init účtování nebude zaznamenávat.
Příklad souboru /etc/inittab
:
# Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Things to run in every runlevel. ud::once:/sbin/update # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -h now # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty --noclear tty1 2:2345:respawn:/sbin/mingetty --noclear tty2 # Run xdm/gdm/kdn in runlevel 5 # xdm is now a separate service x:5:respawn:/etc/X11/prefdm -nodaemon
Úrovně běhu
[editovat | editovat zdroj]Ačkoliv většina distribucí používá systém úrovní běhu, není jejich nastavení identické
Úroveň 0
- Zavolá procesy nezbytné pro zastavení systému
Úroveň 1
- Spustí textovou konzoli v jednouživatelském režimu
Úroveň 2
- Spustí textovou konzoli v lokálním víceuživatelském režimu bez přístupu do sítě
Úroveň 3
- Spustí textovou konzoli ve víceuživatelském režimu s přístupem do sítě
Úroveň 4
- Nebývá využitá
Úroveň 5
- Spustí víceuživatelský režim s přístupem do sítě a grafickým přihlašovacím rozhraním - KDM (KDE), GDM (Gnome), XDM (X11) nebo jiné
Úroveň 6
- Zavolá procesy nezbytné pro restart systému
Změna úrovně běhu
[editovat | editovat zdroj]Poté co init spustil všechny specifikované procesy, čeká na ukončení některého svého spuštěného procesu, na signál výpadku napájení nebo na signál úlohy telinit ke změně úrovně běhu systému. Při výskytu jedné z těchto tří podmínek znovu načítá soubor /etc/inittab
.
Znovunačtení můžeme programu init vnutit příkazem telinit Q nebo q. Příkaz telinit také může říci programu init, abych přepnul do jiné úrovně běhu. Init pak vyšle signál SIGTERM všem procesům, které nejsou v nové úrovni běhu definovány, pak čeká 5 vteřin (dobu možno změnit příkazem telinit) a pak neukončené procesy zlikviduje signálem SIGKILL. V distribuci RedHat je inicializační script soubor /etc/rc.d/rc.sysinit
. Následně je volán script, který spustí procesy pro defaultní úroveň běhu. Pro úrovně 0-6 existují adresáře /etc/rc.d/rcN.d
, kde N je 0-6. V nich jsou scripty s názvy standardně ve tvaru SnnJméno_Služby a KnnJméno_Služby, kde nn je dvouciferné číslo 00-99. Služby budou startovány/ukončovány v pořadí, které určují tato nn čísla (00 jako první, 99 jako poslední). Script /etc/rc.d/rc
při změně úrovně běhu spustí všechny KnnJméno_Služby scripty s parametrem stop a následně všechny scripty s SnnJméno_Služby s parametrem start.
Poslední důležitá věc, kterou init provede, je start několika getty/mingetty procesů. Jsou označeny akcí respawned, což znamená, že pokud z nějakého důvodu skončí, inet je spustí znovu. Většina distribucí přichází s šesti virtuálními terminály, jejich počet je možný zmenšit i zvětšit. Je také možné mít textové terminály na sériových linkách nebo připojených modemech. Při startu v grafickém režimu (run-level 5) je ještě spuštěn proces xdm (X Display Manager), který provádí služby podobně jako getty a login na znakových terminálech: vyzve uživatele k zadání jména a hesla, ověří jej a spustí pro něj takzvaný "správce sezení" - session manager.
Při přechodu systému do úrovně běhu 1 (jednouživatelský mód) init spustí rootův shell na zařízeni /dev/console, bez nutnosti zadání jména a hesla.
Systém souborů
[editovat | editovat zdroj]V tomto článku bude užito slovo souborový systém ve dvou různých významech. Jako souborové systémy na diskových oblastech a jiných zařízeních a jako souborový systém tak jak je prezentován běžícím linuxovým systémem. Na Linuxu se připojují ("mountují" - viz povel mount) diskové souborové systémy do systémového souborového systému. Při startu jádro připojí kořenový souborový systém v read-only modu. Během startu je kořenový souborový systém zkontrolován programem fsck a následně znovu připojen (remount) v read-write modu. Po připojení root-fs v read-write módu jsou připojeny ostatní souborové systémy podle specifikace v /etc/fstab
.
Příklad souboru /etc/fstab
:
LABEL=/ / ext3 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 LABEL=/var1 /var ext3 defaults 1 2 /dev/rd/c0d0p2 swap swap defaults 0 0 /SWAP swap swap defaults 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 /dev/cdrom1 /mnt/cdrom1 iso9660 noauto,owner,kudzu,ro 0 0 /dev/hda1 /mnt/C vfat defaults 0 0 /dev/hda5 /mnt/D vfat defaults 0 0
Démoni jádra
[editovat | editovat zdroj]Příkaz "ps aux
" vypíše něco podobného následujícímu:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.5 1384 368 ? S Mar20 0:03 init root 2 0.0 0.0 0 0 ? SW Mar20 0:01 [keventd] root 3 0.0 0.0 0 0 ? SWN Mar20 0:01 [ksoftirqd_CPU0] root 4 0.0 0.0 0 0 ? SW Mar20 0:11 [kswapd] root 5 0.0 0.0 0 0 ? SW Mar20 0:00 [bdflush] root 6 0.0 0.0 0 0 ? SW Mar20 0:00 [kupdated] root 467 0.0 0.0 0 0 ? SW Mar20 0:00 [eth1] root 551 0.0 0.6 1444 408 ? S Mar20 0:00 syslogd -r -x root 556 0.0 0.5 2056 344 ? S Mar20 0:01 klogd -2 root 818 0.0 0.6 1612 408 ? S Mar20 0:00 crond root 901 0.0 0.6 5156 412 tty1 S Mar20 0:00 login -- root root 905 0.0 3.4 5184 2148 tty4 S Mar20 0:00 login -- franta root 906 0.0 0.4 1356 276 tty2 S Mar20 0:00 /sbin/mingetty -- root 907 0.0 0.4 1356 276 tty3 S Mar20 0:00 /sbin/mingetty -- root 2174 0.0 2.0 2476 1308 tty1 S 14:30 0:00 -bash2 franta 2587 0.0 2.0 2476 1308 tty4 S 16:43 0:00 -bash2
Je to seznam všech procesů běžících v systému. Proces init je vždy proces číslo 1. Procesy 2,3,4,5,6 (keventd, ksoftirqd_CPU0, kswapd, bdflush, kupdated) jsou uzavřeny v hranatých závorkách "[]
" a jejich velikost v operační paměti (pole VSZ a RSS) je 0. Je to proto, že tyto procesy jsou démoni jádra, i když většina jádra se obyčejně neukazuje na seznamu procesů. Démoni jádra jsou startováni po initu, takže mají čísla procesů jako normální procesy. Ale jejich kód a data jsou součástí paměti jádra. Závorky "[]
" okolo položek ve sloupci "COMMAND" jsou proto, že souborový systém /proc neobsahuje informaci o příkazové řádce pro tyto procesy.
Některé činnosti jež "jaderní" démoni provádějí:
kswapd - přesouvá nepotřebné části běžících programů na swapovací oblasti pevných disků v případě nedostatku volné operační paměti nebo naopak do operační paměti potřebné části programu z disku (zapínaní/ vypínání swapovacích oblasti(-í)se provádí programy swap on/off)
bdflush a kupdated - vyprazdňují vyrovnávací paměti na disk(y)
Proces logování událostí systému (systém logger)
[editovat | editovat zdroj]Jedny z prvních služeb, které jsou startovány procesem init, jsou démoni syslogd a klogd. Zapisují zprávy do systémových logů - zprávy jádra jsou obsluhovány démonem klogd, zatímco syslogd provádí logování zpráv z jiných procesů, a případně přes síť i z jiných systémů. Hlavní logovací soubor bývá /var/log/messages
, ale konfigurace logovacího systému je řízena souborem /etc/syslog.conf
, který určuje co se bude logovat a kam. Zprávy jsou identifikovány podle toho, od které služby přichází a jakou mají úroveň priority. Kofigurační soubor sestává z řádek, které v podstatě říkají, že zprávy od služby x s prioritou y a vyšší mají jít do z, kde z může být obyčejný soubor, pojmenovaná roura, terminál nebo konzole, vzdálený počítač nebo seznam uživatelů.
GNU Debian Linux: Dalším příjemným logovacím démonem je bootlogd, který zapisuje do logovacího souboru /var/log/boot vše, co se vypsalo na konzoli během startu od okamžiku spuštění procesu init. Bootlog tedy začíná přesně tam, kde končí zprávy startu jádra v /var/log/messages. Aby se logovovalo, je třeba to zapnout v /etc/default/bootlogd.
Getty a Login
[editovat | editovat zdroj]Getty je program který umožňuje připojit se přes sériové zařízení jako je virtuální terminál, textový terminál, nebo modem. Zobrazí přihlašovací prompt a když zadáte vaše uživatelské jméno, getty jej předá programu login, který se zeptá na heslo, ověří to a spustí shell. Je dostupných několik variant programu getty. Některé distribuce, včetně RedHat používají velmi malou verzi zvanou mingetty, která pracuje pouze s virtuálními terminály. Login je program z balíku util-linux (mkswap, fdisk, passwd, kill, setterm, mount, swapon, rdev, renice, more a další), který také obsahuje dobře pracující getty zvané agetty (Alternative linux GETTY).
Getty jsou obyčejně startovány v /etc/inittab
procesem init. Zpráva která se vypíše na vrchu obrazovky před přihlašovacím promptem je ze souboru /etc/issue
. Login kontroluje detaily ohledně přihlášení uživatele v /etc/passwd
, a jestliže systém podporuje stínování hesel též v /etc/shadow
. Moderní Unixové systémy včetně Linuxu podporují používání tzv. PAM (Pluggable Autentication Module), které umožňují obecnou kontrolu ověřování identity a oprávnění např. ze vzdálených serverů, podle adresy stroje, z níž se uživatel přihlašuje, jména uživatele, doby přihlášení apod. To lze využít nejen k přihlašování, ale k autorizaci (oprávnění) uživatele/procesu vykonávat nějakou činnost.
Bash
[editovat | editovat zdroj]Po zadání správné kombinace přihlašovacího jména a hesla úloha login ověří v /etc/passwd
který shell má spustit. Ve většině případů to na Linuxových systémech bude bash (Bourne Again SHell - vylepšený sh). Jeho úkolem je čtení uživatelských příkazů a jejich provádění. Bash je zároveň uživatelské rozhraní a interpret programovacího jazyka:
- Jako uživatelské rozhraní čte příkazy uživatele a provádí je sám jestliže to jsou "interní" příkazy jako cd, pwd, kill nebo najde a provede program jestliže jsou to "externí" příkazy jako cp, dd nebo startx. Také poskytuje řadu vymožeností jako udržování historie příkazů, doplňování jmen (souborů, uživatelů,..), editaci příkazové řádky, klávesová makra apod.
- Jako interpret programujícího jazyka - skripty, které init při startu systému vykonává, jsou většinou skripty shellu, a jsou prováděny bash-em. Dobrá znalost kombinace programovacího jazyka spolu s obvyklými systémovými programy a utilitami pro příkazovou řádku vytváří velmi výkonný nástroj.
Soubor /etc/bashrc
řídí systémové chování bash-e. Příkazy zde napsané ovlivní každého kdo použije bash na tomto systému. Další globální soubor ovlivňující chování bash-e je /etc/profile
. Když bash má po startu přečteny konfigurační soubory systémové úrovně (system-wide), hledá osobní konfigurační soubory. Ty jsou v domovském (home) adresáři pod jmény .bash_profile
, .bash_login
, .profile
a .bashrc
(tečka na počátku znamená, že jsou skryté - pro jejich výpis musíme v příkazu "ls" použít přepínač "-a" n. "-A"). Úpravou těchto souborů je možné přizpůsobit chování bash-e potřebám uživatele, např. nastavit proměnné prostředí, implicitní editor, parametry národního prostředí, spuštění úloh po přihlášení apod. Detaily viz v "man bash".
Soubor .bash_logout
je bash-em čten a prováděn při ukončení přihlašovacího shellu - sem lze vložit příkazy, jež se mají provést při odhlášení uživatele ze systému.