RunLevels

teejuht

                        1. Sissejuhatus
                        2. RunLevels
                        3. RunLevelite vahel liikumine
                        4. Kokkuvõtteks

1. Sissejuhatus

OS Linux'i nagu vist igasuguse teise OS'i töö mõistmiseks on vaja kindlasti aru saada mida ja kuidas OS käivitamisel teeb või teha võiks. Järgneb jutustus sellest mis toimub, millised faile loetakse ja programme (sh. nn. scripte) täidetakse peale arvuti voolu alla lülitamist kuni selle ajani mil kasutajal on võimalik end nö. sisse logida. Kirjeldus eeldab, et üles bootimine toimub normaalselt; see eeldab, et viimati tehti korralikult 'shutdown'.

Järgnevast esitusest arusaamine eeldab, et tunnete 'bash shell' script'i. Toodud scriptid mis enamjaolt on peale distributsiooni installatsiooni olemas on tavaliselt selles nö. keeles. Tõepoolest, võtke väike aeg ja uurige shellis programmeerimist:

- tingimuste esitamine (if, case, test)
- I/O (input/output) ümbersuunamine
- protsesside tagaplaanil ja esiplaanil jooksutamine
- ....

Ilmselt ei maksa hakata väga neid vaikimisi scriptide järjekordi muutma, kuid väikesi muutusi võib ikka teha. Muuses, Slackware ja RedHati erinevus ongi paljuski selles kuidas asetsevad need kõnealused rc (run command) scriptid.

On kaks unix'i suunda System V ja BSD: RedHat on esimese ja Slackware teise moodi. Niisiis kõik kõnealused failid leiate kataloogist /etc, seal all on ka muid olulisi konfiguratsiooni faile.

Osa inimesi vaidlevad kumb on parem, objektiivselt on võimalik väita vist vaid seda, et Slack'il on vähem konf faile. Teine erinevus on tarkvara levitamine:

RedHat'i puhul on seda kombeks teha nn. .rpm (RedHat Package Manager) failidena mida pole vaja kompilleerida st. need on binary'd. Peale selle saab töötava RedHat'i puhul kindlaks teha millise programmi juurde ükskõik milline fail kuulub. Puudus on selles, et kui midagi mitte .rpm asi installeerida, siis võib see põhjustada teatud segadust (aga see kõik võib olla ka hoopis mitte nii, sest ma ei ole RedHati'ga palju tegelenud).

Slackware puhul on olemas ka Package Manager - pkgtool - kuid vähem elaboraatsem kui RedHati oma (pkgtool'ile vastavad nn.  .tgz failid mis on struktuurselt kokku pakitud binarid (tar zxvf  ...) ja tegelikult on kogu distributsioon esitatud selles vormis). Slack'i puhul peeakse tavaliselt normaalseks tarkvara lisamisel see kohapeal kompilleerida ja siis installeerida. See on keerulisem, 25 % (kuidas kellelegi :) tõenäosust, et tarkvara ei õnnestugi installeerida ja kui õnnestub, siis süsteem kui tervik võib tulla suhteliselt ebastabilsem kui sama tarkvaraga RedHat. Aga mis on oluline: huvitav on ja tihtipeale on tarkvara uuemad verisioonid saadaval vaid nö. source'dena ehk kujul mida on vaja tingimata kompilleerida.

Loomulikult on ka vastupidiseid näiteid: autorid ei soovi kasutajatele näidata programmide lähtetekste ja levitavaid nö. pre-compiled binary'eid. See pole aga kooskõlas Linux'i kui vabatarkvara ideoloogiaga. Ja põhjenduseks sellele miks eelistatakse levitada source on see, et üks ja sama source sobib erinevate binaryte valmistamiseks: produkt võib olla nt. x86 protsessori ja Linux'i ELF library jaoks, aga temast võib kompilleerida hoopis ALPHA  arhitektuuriga arvuti jaoks binary vms. Olgu öeldud, et igal protsessoril on talle iseloomulikud käsud ja sellepärast on erinevatele arvutitele vaja erinevaid binarey'd (x86 seeria protsessorid pole mitte ainukesed ja kõige paremad, kuigi mina isiklikult pole muid kasutanud; aga tegelikult ma ei teagi mis raua peal nt. madli.ut.ee jookseb :).
 

2. RunLevels

Linux võib peale voolu sisselülitamist jõuda välja erinevatesse seisudesse. Need 'erinevad seisud' erinevad üksteisest selle poolest

- millised programmid või daemonid ehk vaimud töötavad
- kas kasutajad saavad sisse logida
- millised failisüsteemid on külge monteeritud

Tavaliselt jõuab linux kokkuleppeliselt kolmandaks nimetatud runlevelisse ja kogu tegevus toimub selles.

Runlevelit on võimalik muuta: näiteks saab vajadusel kolmandast levelist minna esimesse ja sealt tagasi kolmandasse.

Nagu üteldud, iga RunLeveliga kaasneb teatud erinev tase süsteemi funktsionaalsust:

0: halt
sellele tasemele minek teostab süsteemi töö peatamise (halt) (ilmselt ei saa 0'ndas levelis olles käske anda - reset või power nupp aitavad)

1: single user mode
sellel taemel saab nagu nimi ütleb root toimetada aga kasutajaid sisse logida ei lubata.

2: ???

3: ???

4: ???

5: ???

6: reboot
Minnes kuulendale runlevelile reeb süsteem reboodi.
 

Nagu näha (või ega väga ei ole tegelikult) on lugu selline, et kui süsteem läheb nt. kolmandale tasemele, siis see ei tähenda, nagu ta peaks läbima enne 0, 1, 2 taseme.

Olemas on veel nö. level S (Startup) mis läbitakse alati arvuti käivitmisel.

Et süsteem saaks minna mingisse levelisse peab ta eelnevalt täitma (st. käivitama teatud programmid, midagi ära tegema) teatud scriptid.

Seda millised scriptid kunas täita on kirjas failis /etc/inittab

See on selline püha fail kust kõikide pragrammide isa init peale kerneli laabimist vaatab mis edasi teha. Arvuti tööd juhib/kontrollib programm init (muuseas tema PID on alati 1).
Ja init ei võta sõna enne kuni ta pole juhtunud ühte järgnevast:

- mõni tema enda poolt vahetult käivitatud programm pole otsa lõppend (nt. getty) ja kui on siis käivitad selle uuesti (kui see sünnib üle 10 korra 2 minuti jooksul, siis ta vaatab selle kui veale ja ei pööra sellele tähelepanu 5 minutit)
- on signaal toite kadumisest (normaalselt tuleb see UPS'ilt)
- käsuga telinit soovitakse vahetada runlevelit
 

Ja siin on tüüpiline /etc/inittab

Enamus on välja kommenteeritud (#).
Olgu konkreetsuse mõttes olukord selline, et viimane arvutiga töö lõpetamine toimus korralikult, st. viimane antud käsk oli nt. 'shutdown'. Ja nagu inittabist näha minnakse levelile 3 (defaultlevel). Nüüd võib ülevalt alla näpuga järge ajama: täidetakse kõik scriptid kus on ees muuhulgas arv 3, joonisel on vastavad read ka värvitud siniseks:

# Default runlevel. (võiks ka mõne muu selleks panna)
id:3:initdefault:

# System initialization (runs when system boots; rc.S täidetakse alati bootimisel;
# täidetakse ka siis, kui minnakse esimesele runlevelile).
si:S:sysinit:/etc/rc.d/rc.S

# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K

# Script to run when going multi user.(see täidetakse bootimisel järgmisena peale rc.S'i)
rc:2345:wait:/etc/rc.d/rc.M

# What to do at the "Three Finger Salute". näidatakse mis teha kui kasutaja vajutab, kui väljakommenteerida siis nii
#rebootida ei saa :(
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now

# Runlevel 0 halts the system. (kui arvutil kästakse minna sellele levelile, siis täidetake rc.0 script)
l0:0:wait:/etc/rc.d/rc.0

# Runlevel 6 reboots the system. (kui arvutil kästakse minna sellele levelile, siis täidetake rc.6 script)
l6:6:wait:/etc/rc.d/rc.6

# järgnevad kolm eeldavad UPS'i olemasolu, et nad toimiksid
# What to do when power fails (shutdown to single user).
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"

# If power is back before shutdown, cancel the running shutdown.
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"

# If power comes back in single user mode, return to multi user mode.
ps:S:powerokwait:/sbin/init 5

# The getties in multi user mode on consoles an serial lines.
#
# NOTE NOTE NOTE adjust this to your getty or you will not be
#                able to login !!
#
# Note: for 'agetty' you use linespeed, line.
# for 'getty_ps' you use line, linespeed and also use 'gettydefs'
# näitab, et kui minnakse runlevelitele 1, 2, 3 või 5 siis tuleb panna agetty'd sisselogimist võimaldama
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

# Serial lines (need on terminalidelt sisselogimiseks)
#s1:345:respawn:/sbin/getty ttyS1 DT19200 vt100
#s2:12345:respawn:/sbin/agetty 19200 ttyS1 vt100

# Dialup lines (need on selleks, et modemiga arvutisse sissehelistamisel arvuti vastaks)
#d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100

# see on runlevel, mis käivitab peale boodi lõpuks graafilise terminali, et sisse logida saaks
# (NB! nelijanda leveli puhul on ka üks terminal olemas, vt paar rida üles poole!)
# Runlevel 4 used to be for an X-window only system, until we discovered
# that it throws init into a loop that keeps your load avg at least 1 all
# the time. Thus, there is now one getty opened on tty6. Hopefully no one
# will notice. ;^)
# It might not be bad to have one text console anyway, in case something
# happens to X.
x1:4:wait:/etc/rc.d/rc.4
#End of the inittab
 

Ja muidugi on aeg uurida neid scripte mis siin mingi runleveli puhul ära täidetakse:

/etc/rc.d/rc.S (start)

#!/bin/sh
# /etc/rc.d/rc.S:  System initialization script.
PATH=/sbin:/usr/sbin:/bin:/usr/bin
/sbin/swapon -a
/sbin/update &
# Test to see if the root partition is read-only, like it ought to be.
# otsekohene kontroll: ihtsalt püütakse faili luua :)
# hetkel on PWD'ks root failisüsteemi juurikas ja see peaks olema mounditud ainult lugemiseks
# kes partitsioonil on juurikas ja et ta on vaid lugemiseks on kirjas nt. lilo.conf'is; tegelikult kernelis
READWRITE=no
if echo -n >> "Testing filesystem status"; then
 rm -f "Testing filesystem status"
 READWRITE=yes
fi

# Check the integrity of all filesystems
#
if [ ! $READWRITE = yes ]; then
# kui ruut on ainult lugemiseks siis tehakse ära talle ja teistele (lähtuvalt fstab'ist ja selle kahest viimasest
# tulbast) fsck - file system check
 /sbin/fsck -A -a

 # If there was a failure, drop into single-user mode.
     if [ $? -gt 1 ] ; then
      echo
      echo
      echo "**************************************"
      echo "fsck returned error code - REBOOT NOW!"
      echo "**************************************"
      echo
      echo
      /bin/login
     fi
 # Remount the root filesystem in read-write mode
 # eesti keeles: remounditakse roodu juurikas lugemiseks/kirjutamiseks
 echo "Remounting root device with read-write enabled."
 /sbin/mount -w -n -o remount /
     if [ $? -gt 0 ] ; then
      echo
      echo "Attempt to remount root device as read-write failed!  This is going to"
      echo "cause serious problems...  "
      echo
      echo "If you're using the UMSDOS filesystem, you **MUST** mount the root part
      echo "read-write!  You can make sure the root filesystem is getting mounted "
      echo "read-write with the 'rw' flag to Loadlin:"
      echo
      echo "loadlin vmlinuz root=/dev/hda1 rw   (replace /dev/hda1 with your root d
      echo
      echo "Normal bootdisks can be made to mount a system read-write with the rdev
      echo
      echo "rdev -R /dev/fd0 0"
      echo
      echo "You can also get into your system by using a bootkernel disk with a com
      echo "like this on the LILO prompt line:  (change the root partition name as
      echo
      echo "LILO: mount root=/dev/hda1 rw"
      echo
      echo "Please press ENTER to continue, then reboot and use one of the above me
      echo -n "get into your machine and start looking for the problem. "
      read junk;
     fi
else
 echo "Testing filesystem status: read-write filesystem"
 if [ ! -d /DOS ]; then # no warn for UMSDOS (kind of a bad test, but...)
  cat << EOF
*** ERROR: Root partition has already been mounted read-write. Cannot check!

For filesystem checking to work properly, your system must initially mount
the root partition as read only. Please modify your kernel with 'rdev' so that
it does this. If you're booting with LILO, add a line:

   read-only

to the Linux section in your /etc/lilo.conf and type 'lilo' to reinstall it.

If you boot from a kernel on a floppy disk, put it in the drive and type:
  rdev -R /dev/fd0 1

If you boot from a bootkernel disk, or with Loadlin, you can add the 'ro' flag.

This will fix the problem *AND* eliminate this annoying message. :^)

EOF
  echo -n "Press ENTER to continue. "
  read junk;
 fi
fi

# remove /etc/mtab* so that mount will create it with a root entry
/bin/rm -f /etc/mtab* /etc/nologin /etc/shutdownpid

# mount file systems in fstab (and create an entry for /)
# but not NFS because TCP/IP is not yet configured
/sbin/mount -avt nonfs

# Clean up temporary files on the /var volume:
/bin/rm -f /var/run/utmp /var/run/*.pid

# Looks like we have to create this.
cat /dev/null > /var/run/utmp

# Configure the system clock.
# This can be changed if your system keeps GMT.
if [ -x /sbin/clock ]; then
  /sbin/clock -s
fi

# Setup the /etc/issue and /etc/motd to reflect the current kernel level:
# THESE WIPE ANY CHANGES YOU MAKE TO /ETC/ISSUE AND /ETC/MOTD WITH EACH
# BOOT. COMMENT THEM OUT IF YOU WANT TO MAKE CUSTOM VERSIONS.
# siin on see koht kus login'i ees olev tekst (üle)kirjutatakse
echo > /etc/issue
echo Welcome to Linux `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue
echo >> /etc/issue
echo "`/bin/uname -a | /bin/cut -d\  -f1,3`." > /etc/motd
 

Kokkuvõttes, mida tegi normaalsel juhul /rc.S:

- defineerib PATH'i
- initsaliseerid swap'i
- käivitab update (see sünkroniseerib minutis kaks korda mälus olevaid faile kettal olevatega)
- eeldame, et root failisüsteem on read-only nagu linux ootab ja viiakse läbi fsck talle ja teistele fstab'i kirjeldatutele
- eemaldatake teatud vanad failid
- ühendatakse külga kõik failisüsteemid mis on näidatud /etc/fstab'is peale NFS'ide kuna võrk veel ei tööta
- seatakse süsteemi kell vastavalt CMOS'i omale
- kirjutatakse jutud /etc/issue ja /etc/motd failidesse

Kuivõrd minek on 3 ndasse runevelisse siis täidetakse järgmisena script /etc/rc.d/rc.M (multiuser)

#!/bin/sh
#
# rc.M          This file is executed by init(8) when the system is being
#               initialized for one of the "multi user" run levels (i.e.
#               levels 1 through 6).  It usually does mounting of file
#               systems et al.
# Tell the viewers what's going to happen...
echo "Going multiuser..."
/bin/setterm -blank 15
/bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`
#if [ -x /etc/rc.d/rc.inet1 ]; then
. /etc/rc.d/rc.inet1
. /etc/rc.d/rc.inet2
#else
#  if [ -x /usr/sbin/syslogd ]; then
#    /usr/sbin/syslogd & # Backgrounded to avoid an ugly notice from bash-2.0
#    /usr/sbin/klogd
#  fi
#  if [ -x /usr/sbin/lpd ]; then
#    /usr/sbin/lpd
#  fi
#fi

# Start crond (Dillon's crond):
# If you want cron to actually log activity to /var/adm/cron, then change
# -l10 to -l8 to increase the logging level.
/usr/sbin/crond -l10 >>/var/adm/cron 2>&1

# Remove stale locks and junk files (must be done after mount -a!)
/bin/rm -f /var/spool/locks/* /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /

# Remove stale hunt sockets so the game can start.
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
  echo "Removing your stale hunt sockets from /tmp..."
  /bin/rm -f /tmp/hunt*
fi

# Ensure basic filesystem permissions sanity.
chmod 755 /
chmod 1777 /tmp /var/tmp
/sbin/ldconfig

#ipfwadm -F -a accept -m
. /etc/rc.d/rc.local
 

Siis tehakse järgmist:

- seatakse paika, et monitor läheb tuttu 15 minuti pärast
- seatakse paika hostname
- käivitatake kask scripti init1 ja init2 mis tegelevad võrguga, need on toodud allpool
- käivitatakse cron (kr. k. kronos - aeg) see programm võimaldab ettantud ajal käivitada teisi programme
- eemaldatakse veel faile
- kirjutatakse üle juurika failiõigused
- luuakse uus /etc/ld.conf.cache (libraryte asi)

käivitatakse veel scrpite (rc.local)
 

/etc/rc.d/rc.inet1 - selles seatakse paika võrgu interfaced ja kerneli routingu tabel

/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

#/sbin/ifconfig eth0 192.168.1.1
#/sbin/route add -net 192.168.1.0

#/sbin/ifconfig eth1 192.168.2.1
#/sbin/route add -net 192.168.2.0

/etc/rc.d/rc.inet2
 

#!/bin/sh
# Constants.
NET="/usr/sbin"
IN_SERV="lpd"
LPSPOOL="/var/spool/lpd"

# At this point, we are ready to talk to The World...
# Nüüd on võrk olemas ja aeg NFS'd külge ühendada!
echo "Mounting remote file systems..."
/sbin/mount -a -t nfs           # This may be our /usr runtime!!!

echo -n "Starting daemons:"

#järgnevalt tõmmatakse tööle nö. vaimud; põhimõttel, et kui on olemas, siis tööle!
# Start the SYSLOGD/Klogd daemons.  These must come first.
if [ -f ${NET}/syslogd ]; then
  echo -n " syslogd"
  ${NET}/syslogd & # Backgrounded to avoid an ugly notice from bash-2.0
  echo -n " klogd"
  ${NET}/klogd
fi
# Start the SUN RPC Portmapper.
if [ -f ${NET}/rpc.portmap ]; then
   echo -n " portmap"
   ${NET}/rpc.portmap
fi

# Start the INET SuperServer
if [ -f ${NET}/inetd ]; then
  echo -n " inetd"
  ${NET}/inetd
else
  echo "no INETD found.  INET cancelled!"
  exit 1
fi
 

# # Start the various SUN RPC servers.
if [ -f ${NET}/rpc.portmap ]; then
  # Start the NFS server daemons.
  if [ -f ${NET}/rpc.mountd ]; then
    echo -n " mountd"
    ${NET}/rpc.mountd
  fi
  if [ -f ${NET}/rpc.nfsd ]; then
    echo -n " nfsd"
    ${NET}/rpc.nfsd
  fi
fi
 

ja lõpuks /etc/rc.d/rc.local

#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local setup commands in here:
# et uues kirja saabumisel ta ei hakaks nö. brief'ima :) , st. kirjutama iga kirja paari rida terminalile
biff n
# olemas on ka rc.serial aga minul pole seda muuks vaja kui paariks reaks, sestap tõstsin need siia
insmod serial
setserial /dev/ttyS1 irq 5 (see on sisemise modemi jaoks)
# on olemas rc.modules aga mul pole muud kui need, selepärast tõstsin need siia
modprobe ppp
modprobe snd-audiopci
modprobe snd-pcm1-oss
sendmail -bd -C /etc/sendmail.cf.rec
alsactl restore
#modprobe ip_masq_ftp
#ipfwadm  -F -p accept -m
#ipfwadm -I -a deny
# igaks juhuks :) muuseas, 'cut' on väärt käsk, väärt tähelepanu!
hostname `cat /etc/HOSTNAME | cut -f1 -d .`

Ja muidugi tuleb keerata tööle agetty'd: need võimaldavad kasutajatel (sh. root sisse logida). NB! getty pannakse tööle pea igal runlevelil.

c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
 

3. RunLevelite vahel liikumine

Esmalt ütleb, et kui inittab'i muuta saab muutused aktualiseerida käsuga 'init q'. Lihtsalt init loeb uuesti läbi inittabi ja peaks reageerima vastavalt (eriti kui tegelda getty'dega)

Ühest levelist saab teise käsuga 'telinit <number>' nt.

võib anda käsu 'telinit 6' mispeale init vaatab inittab'ist järele, et sellesse tasemese minekuks on vaja käivitada srcipt  rc.6:
NB! sellele failile on rc.0 link: üks fail ja tehakse seda millise nimega kutsuti: $0 on keskkonnamuutuja mille väärtuseks on käivitatud scripti jaoks scripti nimi, kaval!

#! /bin/sh
# rc.6          This file is executed by init when it goes into runlevel
#               0 (halt) or runlevel 6 (reboot). It kills all processes,
#               unmounts file systems and then either halts or reboots.
  PATH=/sbin:/etc:/bin:/usr/bin
  stty onlcr
  case "$0" in
        *0)
                message="The system is halted."
                command="halt"
                ;;
        *6)
                message="Rebooting."
                command=reboot
                ;;
        *)
                echo "$0: call me as \"rc.0\" or \"rc.6\" please!"
                exit 1
                ;;
  esac
  if [ "$1" != "fast" ]; then # shutdown did not already kill all processes
    killall5 -15
    killall5 -9
  fi
  if [ -x /usr/sbin/quotaoff ]
  then
        echo "Turning off quota."
        /usr/sbin/quotaoff -a
  fi
  if [ -x /sbin/accton ]
  then
        echo "Turning off accounting."
        /sbin/accton
  fi

  # Before unmounting file systems write a reboot or halt record to wtmp.
  $command -w

  # Save localtime
  [ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc
  umount -a -tnfs &
  echo "Turning off swap."
  swapoff -a
  echo "Unmounting local file systems."
  umount -a -tnonfs
  # Don't remount UMSDOS root volumes:
  if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
    mount -n -o remount,ro /
  fi
  if [ -f /etc/power_is_failing ]; then
    echo "Turning off UPS, bye."
    /sbin/powerd -q
    exit 1
  fi
  # Now halt or reboot.
  echo "$message"
  [ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
 $command -f

No siin ise lugege ja saate aru mis tehakse: tapetake protsessid, ühendatakse lahti failisüsteemid, etc.

telinit oskab ka minna teistesse runlevelitesse: nt. 0 (reboot) ja 1 (single user, muide sealt võite tagasi põõrduda 3).
 

4. Kokkuvõtteks

Siin kirjeldatu puudutas ülesüsteemseid asju; iga kasutaja võib omada lisaks tooduile ka oma rc asju. tavaliselt on need punktiga (.) algavad failid mida 'ls -l'  ei näita küll aga 'ls -la'.

mõned muud olulised failid veel

/etc/profile

see täidetakse peale iga kasutaja sisselogimist; muuseas, kasutajal võib olla oma isiklik .profile
Selles failis sätitakse tavaliselt paika mitmesugused PATH'd, ja promptid:

# commands common to all logins
export OPENWINHOME=/usr/openwin
export MINICOM="-c on"
export MANPATH=/usr/local/man:/usr/man/preformat:/usr/man:/usr/X11/man:/usr/ope
export HOSTNAME="`cat /etc/HOSTNAME`"
export LESSOPEN="|lesspipe.sh %s"
PATH="$PATH:/usr/X11/bin:/usr/andrew/bin:$OPENWINHOME/bin:/usr/local/netscape:.
LESS=-MM
# I had problems using 'eval tset' instead of 'TERM=', but you might want to
# try it anyway. I think with the right /etc/termcap it would work great.
# eval `tset -sQ "$TERM"`
if [ "$TERM" = "" -o "$TERM" = "unknown" ]; then
 TERM=linux
fi
#PS1='`hostname`:`pwd`# '
if [ "$SHELL" = "/bin/pdksh" -o "$SHELL" = "/bin/ksh" ]; then
 PS1="! $ "
elif [ "$SHELL" = "/bin/zsh" ]; then
 PS1="%m:%~%# "
elif [ "$SHELL" = "/bin/ash" ]; then
 PS1="$ "
else
 PS1='\h:\w\$ '
fi
PS2='> '
ignoreeof=10
export PATH DISPLAY LESS TERM PS1 PS2 ignoreeof
umask 022
# set up the color-ls environment variables:

if [ "$SHELL" = "/bin/zsh" ]; then
  eval `dircolors -z`
elif [ "$SHELL" = "/bin/ash" ]; then
  eval `dircolors -s`
else
  eval `dircolors -b`
fi
# Notify user of incoming mail.  This can be overridden in the user's
# local startup file (~/.bash.login or whatever, depending on the shell)
biff n
loadkeys et-EVS8_1993.map
setfont -16 923.cp -u 923.uni -m 923.EVS8_1993
export TERMINFO=/usr/lib/terminfo

no iga /etc kataloogi faili kohta juttu siinkohal ei kirjuta, eks ole jutud parem paigutada asja eenda juurde:

sendmail.cf
exports
HOSTNAME
lilo.conf
login.defs
ld.so.conf
services
named.conf
networks
fstab
host.conf
networks
ftpusers
hosts.allow
hosts.deny
fastboot
passwd
groups
skel
XF86Config
resolv.conf
hosts
inetd.conf

to name a few :)
 
 
 
 

gggg