Programma's (waaronder de netwerkdiensten) worden onder Linux als volgt gestart:
De basisdiensten van het besturingssysteem worden gestart door de run(level)manager init, die afhankelijk van de manier waarop het systeem moet lopen (runlevel 1-7) bepaalde scripts lanceert. Het runlevel opstartmechanisme is van UNIX System V overgenomen.
Zodra een gewone gebruiker op de console inlogt, worden de inlogscripts van zijn shell gestart. Voor bash is dit /home/user/.bashrc. Ook hiermee worden programma's gestart, vrijwel altijd onder het account van de inloggende gebruiker.
Vanuit zijn shell kan een gebruiker natuurlijk ook programma's starten: grafisch via een muisklik of via het toetsenbord op de console.
Netwerkgebruikers kunnen programma's via de internet superserver starten.
De KDE applicatie ktop geeft in de Show Tree view een beeld van wat er zoal in een Linux systeem gebeurt.
Init is de moeder van alle processen. Init is het eerste programma dat wordt gestart (Proces ID 1). Vervolgens activeert dit (initialisatie)programma allerlei basisdiensten door de symbolische links in /etc/init.d/ te starten. Zo ontstaat een waaier van processen, uiteindelijk resulterend in uw inlogscherm (console, xdm).
De meest basale diensten worden onder het rootaccount opgestart, geavanceerde netwerkdiensten draaien meestal onder hun eigen account.
Init en de init-scripten in /etc/init.d of /sbin/init.d zijn enigszins te vergelijken met de autoexec.bat van DOS en OS/2. Ze worden na de stuurbestanden (in DOS de config.sys drivers, in Linux kerneldrivers) gestart. Ze zetten automatisch processen in gang.
Het bestand /etc/inittab bevat de definities van de runlevels: de modi waarin het besturingssysteem loopt.
# runlevel 0 is halt # runlevel S is single-user # runlevel 1 is multi-user without network # runlevel 2 is multi-user with network # runlevel 3 is multi-user with network and xdm # runlevel 6 is reboot
Onder SuSE 6.3 zou telinit 3 u dus grafisch laten inloggen met xdm. Met init 0 of 6 sluit u het systeem af. Met init- S is systeemonderhoud te plegen. Bijvoorbeeld een backup of een controle van het bestandssysteem.
init s mount -o remount,ro / fsck.reiserfs --rebuild-tree mount -o remount,rw / init 6
Natuurlijk is een verandering van runlevel alleen als root door te voeren. Zoals u ziet blijken er nog meer runlevels te bestaan.
sjoerd@visser:~ su Password: root@visser:/home/sjoerd init Usage: init 0123456SsQqAaBbCcUu
U kunt ook aangeven in welk runlevel u wilt inloggen. Bij mij is dat niet-grafisch (runlevel 2). Door de 2 in een 3 te veranderen zou ik het xdm inlogscherm krijgen.
# default runlevel id:2:initdefault:
Hieronder volgt een klassieke indeling van de runlevels (die dus NIET gevolgd wordt door SuSE).
init 0 |
Runlevel 0 (halt) sluit het systeem onherroepelijk af |
init 1 |
Runlevel 1 (single user mode) laat slechts een gebruiker toe. U hebt het root wachtwoord nodig. Dit kan handig zijn als u systeemonderhoud (fsck) pleegt. |
init 2 |
Runlevel 2 (multi user mode) is gelijk aan runlevel 3 zonder netwerk (NFS). |
init 3 |
Runlevel 3 (full multi-user mode) is de standaard modus. Linux is gereed voor het gebruik door meerdere personen. |
init 4 |
Runlevel 4 (unused) komt in de praktijk neer op runlevel 3. |
init 5 |
Runlevel 5 (X11) start een grafisch inlogscherm op. |
init 6 |
Runlevel 6 (reboot) herstart Linux. |
Nog even terug naar mijn /etc/inittab :
# /sbin/init.d/rc takes care of runlevel handling # # runlevel 0 is halt # runlevel S is single-user # runlevel 1 is multi-user without network # runlevel 2 is multi-user with network # runlevel 3 is multi-user with network and xdm # runlevel 6 is reboot l0:0:wait:/sbin/init.d/rc 0 l1:1:wait:/sbin/init.d/rc 1 l2:2:wait:/sbin/init.d/rc 2 l3:3:wait:/sbin/init.d/rc 3 #l4:4:wait:/sbin/init.d/rc 4 #l5:5:wait:/sbin/init.d/rc 5 l6:6:wait:/sbin/init.d/rc 6
In het bovenstaande wordt steeds ook de lokatie van de init scripten aangeven. Hier /sbin/init.d en subdirectories. Runlevels 4 en 5 zijn gedeactiveerd.
Voor de scripten van het default runlevel 3 wordt naar /sbin/init.d/rc3 verwezen.
sjoerd@visser:/sbin/init.d/rc3.d ls K10axnet K23pcnfsd K40network S09argus S20lpd K10mysql K24ypclient K42pcmcia S09nfs S20mysql K10wwwoffle K27quotad K44i4l_hardware S09syslog S20ntopd etc
Gaat u daar kijken (mc), dan ziet u dat het om symbolische links gaat. Ze beginnen met een S van start of de K van kill. Het zijn verwijzingen naar scripts die respectievelijk bij het binnenkomen en het verlaten van de runlevels moeten worden uitgevoerd. De eigenlijke scripts worden centraal in de onderliggende map (../ = /sbin/init.d ) bewaard.
sjoerd@visser:/sbin/init.d/rc3.d ls -l total 0 lrwxrwxrwx 1 root root 8 Sep 22 1999 K10axnet - ../axnet lrwxrwxrwx 1 root root 8 Apr 17 21:06 K10mysql - ../mysql
Andere systemen gebruiken /etc/rc.d en subdirectories. Onder SuSE 6.3 is dat een symlink naar /sbin/init.d .
root@visser:/sbin/init.d ls README cron identd nfs random reboot sshd apache dhclient idled nfsserver rc route svgatext argus dummy ijb nscd rc0.d routed syslog at firewall inetd ntopd rc1.d rpc usb axnet gpm init.d pcmcia rc2.d rwhod vmware boot halt kbd pcnfsd rc3.d serial webmin boot.d halt.local kerneld postfix rc4.d single wwwoffle boot.local hylafax lpd powerfail rc5.d skeleton xdm boot.setup i4l named quota rc6.d smb ypclient cdb i4l_hardware network quotad rcS.d smbfs
Daemonen (Disk And Execution Monitor) zijn hulpprogramma's die op de achtergrond lopen. Ze hebben niets met duivels (demonen) te maken. Men spreekt ook wel van services of achtergrondprocessen. Het zijn services (diensten) in zoverre dat ze door meerdere gebruikers (lees: programma's) aangeroepen kunnen worden. Voor specifieke taken kunnen daemonen weer andere programma's of daemonen oproepen.
Al snel na het booten van Linux wordt bijv. de inetd (de internet daemon) gestart. Deze zogenaamde Internet Superserver luistert voortdurend naar bepaalde poorten om te zien of er van hun diensten gebruik moet worden gemaakt. In de praktijk vangt de inetd alle verzoeken m.b.t. het internet op en activeert passende daemonen om het verzoek af te handelen. Dit heeft als voordeel dat alleen de voor een bepaalde taak benodigde programma's in het geheugen geladen zijn.
Met ps -ax krijgt u een overzicht van de lopende processen inclusief de daemonen:
sjoerd@visser:~ ps -ax PID TTY STAT TIME COMMAND 1 ? S 0:04 init [2] 2 ? SW 0:00 [kflushd] 3 ? SW 0:00 [kupdate] 4 ? SW 0:00 [kpiod] 5 ? SW 0:02 [kswapd] 96 ? S 0:00 /sbin/portmap
etc etc
Met het volgende commando krijgt u een overzicht van de in uw manual pages gedocumenteerde daemonen.
sjoerd@visser:~ apropos daemon
Het zijn er bij mij heel veel. Apropos doorzoekt de man pages op een trefwoord en geeft er een korte beschrijving bij. Het resultaat kunt u zien in de tabel.
actived (8) - a daemon to handle nnrpd requests for active file information.; afpd (8) - AppleTalk Filing Protocol daemon apmd (8) - Advanced Power Management (APM) BIOS daemon ax25d (8) - General purpose AX.25, NET/ROM and Rose daemon bdflush (2) - start, flush, or tune buffer-dirty-flush daemon bdflush (8) - kernel daemon to flush dirty buffers back to disk. bounce (8) - Postfix message bounce or defer daemon cron (8) - daemon to execute scheduled commands (Vixie Cron) ctlinnd (8) - control the InterNetNews daemon defer (8) - Postfix message bounce or defer daemon diald (8) - demand dialing daemon for IP links over phone lines faxrunqd (8) - daemon to send fax jobs queued by faxspool(1) fctl (1) - Control a LAM remote file daemon. fstate (1) - Report information on LAM remote file daemon. huntd (6) - hunt daemon, back-end for hunt game ibod (1) - ISDN MPPP bandwidth on demand daemon idled (8) - Idle terminal and multiple login monitor daemon. in.xfingerd (8) - Finger to LDAP/X.500 gateway daemon innd (8) - InterNetNews daemon ipppd (8) - (ISDN) Point to Point Protocol daemon (Version i2.2.9) iprofd (8) - Modem-register daemon ipxd (8) - IPX RIP/SAP daemon program kattach (2) - Attach/detach a process to/from the local LAM daemon.; kdetach (2) - Attach/detach a process to/from the local LAM daemon.; klogd (8) - kernel log daemon. lam_rfrmfd (2) - Control LAM specific file daemon services. ldapd (8) - LDAP X.500 Protocol Daemon lpd (8) - line printer spooler daemon micod (8) - MICO BOA daemon |
mountd (8) - NFS mount daemon mysql (1) - text-based client for mysqld, a SQL-based relational database daemon; ndc (8) - name daemon control interface nfsd (8) - NFS service daemon nfsservctl (2) - syscall interface to kernel nfs daemon papd (8) - AppleTalk print server daemon pms (8) - Personal Mail System daemon for AX.25 and NET/ROM pppd (8) - Point to Point Protocol daemon pvm_shmd (1) - PVM shared memory (2) daemon pvm_start_pvmd (3) - Starts new PVM daemon. pvmd (1) - PVM daemon pvmfstartpvmd (3) - Starts new PVM daemon. routed (8) - network routing daemon rpc.mountd (8) - NFS mount daemon rpc.nfsd (8) - NFS service daemon rpc.yppasswdd (8) - NIS password update daemon rspfd (8) - Radio Shortest Path amateur radio routing daemon saned (1) - SANE network daemon slapd.conf (5) - configuration file for slapd, the stand-alone LDAP daemon; slapd (8) - Stand-alone LDAP Daemon slurpd (8) - Standalone LDAP Update Replication Daemon sshd1 (8) - secure shell daemon timed (8) - time server daemon trivial-rewrite (8) - Postfix address rewriting and resolving daemon; ttylinkd (8) - TTYlink daemon for AX.25, NET/ROM, ROSE and IP. update (8) - kernel daemon to flush dirty buffers back to disk. uucico (8) - UUCP file transfer daemon uuxqt (8) - UUCP execution daemon vboxd (8) - isdn voice box daemon xinetd.conf (5) - Extended Internet Services Daemon configuration file; xinetd (1) - the extended Internet services daemon xkbevd (1x) - XKB event daemon xscreensaver-demo (1) - interactively control the background xscreensaver daemon; ypbind_bsd (8) - "NIS domain binding daemon" yppasswdd (8) - NIS password update daemon |
De korte beschrijvingen geven enig inzicht in de functie. Dit ter orientatie. De afzonderlijke man pages (waarnaar apropos verwijst) vertellen u natuurlijk meer.
Hieronder ga ik nog even in op enige afzonderlijke daemonen.
daemon |
Toelichting |
---|---|
atd |
Nodig voor commando's die later uitgevoerd worden. |
axnet |
|
crond |
De cron daemon van Vixie Cron (crond) is een achtergrondproces, dat op gezette tijden opdrachten uitvoert. Cron stuurt de output via sendmail naar root.; |
gated |
De Gateway daemon |
getty |
Regelt de toegang tot het toetsenbord (nodig voor inloggen). |
gpm |
Regelt cut and paste verkeer van de muis. |
httpd |
Daemon voor het verwerken van het HTTP protocol. |
in.nntpd |
Deamon voor het verwerken van NNTP berichten. Deze wordt door de inetd daemon geactiveed |
inetd |
De Internet Superserver daemon vangt netwerkverzoeken van buiten open activeert andere daemonen het verzoek af te handelen. Dit heeft als voordeel dat alleen de hoognodige daemonen in het geheugen geladen zijn. |
ipppd |
ISDN Point to Point Protocol daemon |
kerneld |
De kernel daemon laadt kernel "modules" (drivers) in het geheugen als ze nodig zijn. Voor versie 2.0 moest u hier modprobe en insmod voor gebruiken.; |
kflushd |
|
klogd |
De kernel log daemon onderschept de berichten van de kernel een slaat ze in bestanden als var/log/messages op.; |
kpiod |
|
kswapd |
|
lpd |
De line printing demon (spooeler) regelt de toegang tot de printer.; |
md_thread |
|
named |
De Internet domain name server (name daemon) doet dienst als lokale Domain Name Server (DNS): hij zet host names in IP adressen om. Configuratiebestand: /etc/named.boot. |
nscd |
De Name service cache daemon die via /etc/nscd.conf word geconfigureerd. |
routed |
De network routing daemon. De 'routed' daemon actualiseert de routing tabellen van het systeem in overeenstemming met de toestand van het netwerk ("dynamic routing") door te luisteren naar de actieve netwerk poorten. |
sendmail |
Sendmail regelt het email verkeer. Sendmails configuratie-bestand /etc/sendmail.cf wordt door een makro-editor gegenereerd. Hier is niet voor niets een apart boek over geschreven. Voor de thuisgebruiker is het slimmer de sendmail configuratie aan de distributie over te laten of een alternatief te kiezen als smail of postfix. |
smtpd |
Simple Mail Transfer Protocol Daemon |
syslogd |
De systeem log daemon, die boot en systeem berichten naar de directory /var/log/ schrijft. |
update |
De update daemon verzorgt het legen van de lazy write cache. |
Het instellen van de daemonen geschiedt tegenwoordig met configuratietools. Hieronder ziet u er een van Redhat.