Od zapnutí do promptu bash-e: Krátký popis toho,
co se stane  v Linux systému na platformě Intel 386+ kompatibilních PC od
zapnutí napájení  do doby přihlášení a výpisu promptu bash-e (nejobvyklejšího
Linux shell-u)
   
  Pozn: Činnosti prováděné do vysokoúrovňové inicializační fáze (viz níže) 
jsou specifické pro platformu Intel i386 kompatibilní a na jiných architekturách 
 se liší. 
  
  Základní kroky:  
    - BIOS vybere zaváděcí zařízení
 
    - Ze zaváděcího zařízení BIOS zavede zaváděcí sektor (boot sektor)
 
    - Boot sektor zavede spouštěcí a dekompresní rutiny a komprimované
jádro  Linuxu
 
    - Jádro je dekomprimováno (v chráněném - protected módu)
 
    - Nízkoúrovňová (low-level) inicializace kódem v assembleru
 
    - Vysokoúrovňová (high-level) inicializace kódem v C
 
    - Spuštění procesu init
 
    - odpověď na přihlašovací prompt getty předána úloze login, ten spustí
 bash
 
   
  Hardware:
  Po zapnutí se počítač sám testuje - to se nazývá "Power On Self Test" neboli 
 POST. Běhen této fáze se detekuje HW, přidělují se zdroje PNP ISA a PCI zařízením,
detekují se disky a aktivují se BIOSy některých periferií: Video karta, řadiče
SCSI, ale i např. BOOT ROM síťové karty. Pak program zvaný bootstrap loader,
umístěný v ROM BIOSu, hledá boot sector. Boot sector je první sektor na disku
a obsahuje malý program, který může zavést operační systém. Boot sectory
jsou označeny "magickým číslem" 0xAA55 = 43603 na offsetu 0x1FE = 510. To
jsou poslední dva byte 512 B  dlouhého sektoru. Touto značkou HW (disk) říká,
zda sektor je boot sektor  nebo ne.
  Bootstrap loader má seznam míst, kde hledá boot sektory. U moderních PC 
je  toto pořadí konfigurovatelné v SETUP programu BIOSu PC, typicky lze volit 
 mezi floppy disketou (-ami), pevným (-i) diskem, CD-ROM a případně ZIP mechanikou,
 USB diskem a zavedením systému ze sítě např. Intel PXE protokolem. Pokud
bootstrap loader nalezne boot sektor, zavede jej do paměti a předá mu  řízení.
Tento program pak zavede OS. Na typickém Linuxu sytému to bude první část
programu LILO (Linux LOader) nebo novějšího GRUB (GRand Unified Bootloader)
- viz např. "LILO", "Multiboot-with-LILO", "Multiboot-with-GRUB" mini-HOWTO.
Může to ale být i boot sektor Linuxového jádra - tato varianta se většinou
používá pouze při zavádění systému z diskety n. CD-ROM, protože použití specializovaného
 zavaděče (LILO,GRUB) má několik výhod:
  - Možnost výběru mezi různými Linuxovými jádry a/n. různými OS.
  - Možnost předat jádru parametry na příkazové řádce (až 2 kB).
  - Možnost počátečního RAM disku (initrd), takže jádro může být bez většiny
   ovladačů.
  - Možnost zavést větší komprimované (bzImage) jádro - až 2.5 MB oproti
1  MB.
  - Možmost použít počáteční RAMdisk (initrd) pro zavedení potřebných obladačů
  
  
  LILO/GRUB:
  Když počítač zavede boot sektor na normálním Linux systému, to co zavede
 je pouze část z LILO/GRUB zavaděčů zvaná "zavaděč první etapy" ("first stage
 boot loader" to nazývají Amíci). Je to malý program jehož jediným úkolem
je zavedení a spuštění "zavaděče druhé etapy" ("second stage boot loader"). 
 Dělení na dvě části je proto, že zaváděcí jeden sektor disku je malý na uchování
 kódu celého zavaděče.
  Zavaděč druhé etapy vypíše prompt (pokud tak byl nainstalován) a následně 
 zavede vybraný/implicitní operační systém. Pokud je jím Linux, zavede přímo 
 vybrané Linuxové jádro - obvykle soubor "/boot/vmlinuz-x.y.z", kde
x.y.z je verze jádra. "Z" na konci vmlinuz znamená, že soubor obrazu jádra
je komprimovaný  /programem gzip/. LILO/GRUB také umožňují předat jádru "příkazový
řádek" - seznam parametů např. o počtu a konfiguraci řadičů a portů, APM,
rezervaci  ISA PNP zdrojů (přerušení, DMA, I/O portů), zavedení počátečního
RAM disku  s ovladači nutnými pro start systému, max. počtu používaných procesorů
u SMP systémů, umístění NFS souborového systému pro bezdiskové počítače,
co  má jádro provést v případě detekce neobnovitelné chyby, umístění a způsob
 připojení kořenového souborového systému (ro, rw), požadavek na start v
jednouživatelském  (single-user) módu apod.
  LILO příp. GRUB mají své konfigurační soubory na Linux filesystému, a sice 
 /etc/lilo.conf resp. /boot/grub/menu.lst (u RedHat distribucí
je /boot/grub/menu.lst  symbolický link na /boot/grub/grub.conf).
  Činnost LILO/GRUB 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í.
  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:
 Následující věc, která se stane s počítačem při startování je, že je zatažen 
a spušten 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 standartní
C knihovny - na GNU/Linux systémech se nazývá glibc (Gnu LIBrary C).
Jsou v ní stovky standartní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í funce jsou kopírovány z knihoven lib
ně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šten 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:
  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í 
("montová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 normalní
 činnosti.
     Init rozlišuje několik úrovní běhu (runlevel), každá úroveň může
mít svojí 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 ktere 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šten 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 byde spuštěn při výpadku napětí (init je o tom většinou
                 informován programen 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
 
Změna úrovně běhu
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
standartně ve tvaru SnnJméno_Služby a KnnJméno_Služby, kde nn je dvouciferné
číslo 00-99. 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ů:
 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í
("montují" - 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:
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):
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ů.
Getty a Login:
Getty je program který umožňuje připojit se přes sériové zařízení jako je 
virtualní terminál, textový terminál, nebo modem.  Zobrazí přihláš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:
 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, pvd, 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 - scripty, které init při startu
systému vykonává, jsou většinou scripty 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.