Linux ¿ª»ú³ÌÐòÖ®ÑÐÌÖ
CCCA ×ʹ¤86 Ðí¾°»ª
 

¸÷λÊÇ·ñÔø¾­¶ÔµçÄÔÕû¸ö¿ª»úµÄÁ÷³Ì¸Ðµ½ºÃÆæÄØ ? ÕâÒ»´Î , ÎÒÃÇËùÒªÌÖÂÛµÄ
Ö÷Ìâ , ¾ÍÊÇ Linux ´Ó¿ª»úµÄһ˲¼äµ½ login Ϊֹ , µ½µ×·¢ÉúÁËʲôÊÂÇé ?

Ïë±Ø¸÷λ¶¼ÖªµÀ , ÔÚ¸Õ¿ª»úʱ , ÓÉÓÚ 80x86 µÄÌØÐÔ , CS ( Code Segment )
Õâ¸ö¼Ä´æÆ÷ÖÐÈ«²¿¶¼·Å×Å 1 , ¶ø IP ( Instruction Pointer ) Õâ¸ö¼Ä´æÆ÷
ÖÐÈ«²¿¶¼·Å×Å 0 , »»¾ä»°Ëµ , CS=FFFF ¶ø IP=0000 , ´Ëʱ , CPU ¾ÍÒÀ¾Ý
CS ¼° IP µÄÖµ , µ½ FFFF0H È¥Ö´ÐÐÄǸöµØ·½Ëù·ÅµÄÖ¸Áî . Õâʱºò , ÓÉÓÚ
FFFF0H ÒѾ­µ½Á˸ßλַµÄ¶¥¶Ë , ËùÒÔ , FFFF0H Õâ¸öµØ·½ , ×ÜÊÇ»á·ÅÒ»¸ö
JMP Ö¸Áî , Ìøµ½±È½ÏµÍµÄλַ . ½ÓÖø , ROM BIOS ¾Í»á×÷һЩ¼ì²éµÄ¶¯×÷
ÏñÄÚ´æ , ¼üÅÌ µÈ...... ²¢ÔÚÎÒÃÇË×³ÆµÄ UMB ( Upper Memory Block )
Ö®ÖÐɨÃè , ¿´¿´ÊÇ·ñÓкϷ¨µÄ ROM ´æÔÚ ( ±ÈÈç SCSI ¿¨É쵀 ROM ) .
¼ÙÈçÓÐ , ¾Íµ½ÀïÃæÈ¥Ö´ÐÐһЩ¶«Î÷ , Ö´ÐÐÍêÖ®ºóÔÙ¼ÌÐø¸Õ²ÅµÄÐÐ³Ì . µ½ÁË
×îºó , ¶ÁȡӲÅÌÉϵĵÚÒ»¸ö sector . ÔÚÕâÀï , ÎÒ¼ÙÉè¸÷λÓÉÓ²ÅÌÆô¶¯
Òò´Ë , ¾ÍÓ²Å̵Ĺ¹Ôì¶øÑÔ , ËüµÄµÚÒ»¸ö sector ³ÆÎª MBR ( Master Boot
Record ) . ÒòΪһ¸ö sector ÊÇ 512 bytes , ¶ø MBR Õâ 512 bytes ¿É·Ö
ΪÁ½¸ö²¿·Ý , µÚÒ»¸ö²¿·ÝΪ Pre-Boot Çø , Õ¼ÁË 446 bytes ; µÚ¶þ²¿·Ý
ÊÇ Partition Table , Õ¼ÁË 66 bytes . Pre-Boot ÇøµÄ×÷ÓÃÖ®Ò» , ¾ÍÊÇ
È¥¿´¿´ÄǸö Partition ±»±ê³É Active , È»ááÈ¥¶ÁÄǸö Partition µÄ Boot
Çø .

ÔÚ Linux µÄÆô¶¯·½Ãæ , Ò»°ãÈË×î³£°Ñ LILO ·ÅÔÚ MBR »ò Superblock
¼ÙÈçÄã°Ñ LILO ·ÅÔÚ MBR , ÄǺÜÃ÷Ï﵀ , µ±¶ÁÈ¡µ½ MBR µÄʱºò , LILO
¾Í±»Ö´ÐÐ , ´Ëʱ , ÄãµÄÆÁÄ»ÉÏ»á³öÏÖ boot: ½Ó×Å , ¾Í½øÐÐ Load Kernel
µÄ¶¯×÷ . ÔÚÁíÒ»·½ÃæÀ´Ëµ , ¼ÙÈçÄã°Ñ LILO °²×°ÔÚ Superblock , ͨ³£Äã
»¹»áÓÐÒ»¸ö¹ÜÀí¿ª»úµÄ³ÌÐò , Ò²ÐíÊÇ·ÅÔÚ MBR ( Ïñ OSBS ) »òÕßÊÇ·ÅÔÚÒ»
¸öµ¥¶ÀµÄ Partition ( Ïñ OS/2 µÄ Boot Manager ) . ÔÙÓÉÕâ¸ö¹ÜÀí¿ª»ú
µÄ³Ìʽȥ¶ÁÈ¡ LILO , ½ø¶ø×ö Load Kernel µÄ¶¯×÷ .

ºÃÁË , µ½ÁËĿǰΪֹ , ÎÒÃÇÒѾ­½²µ½ Load Kernel µÄ¶¯×÷ . Kernel ±»
load µ½ memory ÖÐÖ®ºó , ½Ó׎øÐÐÒ»Á¬´® probe Öܱߵ͝×÷ , Ïñ´®¿Ú
²¢¿Ú , ÈíÅÌ , Éù¿¨ , Ó²ÅÌ , ¹âÇý µÈ ...... ½Ó×Å mount root
partition . ÔÚÕâÖ®ºó , kernel »áÆð¶¯ init Õâ¸ö process . init Õâ
¸ö process µÄ PID Ϊ 1 , ËüÊÇËùÓÐ process µÄ׿ÏÈ .

½ÓÏÂÀ´ÄØ ? ϵͳ¾Í¿ªÊ¼Ö´ÐÐ /rc.d/rc.S , ÔÚÕâÀï , ÎÒÃÇÔÝʱ´òס ,
ÏȶԴó¸ÅµÄ initialization script Ö´ÐеÄ˳Ðò×÷Ò»¸öä¯ÀÀ , Çë¿´ÏÂÃæ
µÄÁ÷³Ì :

init[1]
rc.S begin <--- ĿǰÎÒÃÇÒѾ­½²µ½ÕâÀï
rc.serial begin
rc.serial end
rc.S end
init[1] enter runlevel 5
rc.M begin
rc.inet1 begin
rc.inet1 end
rc.inet2 begin
rc.inet2 end
rc.font begin
rc.font end
rc.local begin
rc.local end
rc.M end
login

ÉÏÃæµÄÁ÷³ÌÇå³þµÄÖ¸³ö , ÔÚ rc.S Õâ¸ö shell script ÖÐ , »áÈ¥Ö´ÐÐ rc.serial
½Ó×ÅÔÙÖ´ÐÐ rc.M , rc.M ÖÐÓÖ°üº¬ÁË rc.inet1 , rc.inet2 , rc.font , rc.local
×îºóÖ´ÐÐ login . ÔÚÏÂÃæµÄÄÚÈÝÖÐ , ½«Îª¸÷λ½éÉÜÕ⼸¸ö shell script
´ÓÏÂÃæ¿ªÊ¼ , ·²ÊÇÿһÁÐ֮ǰÓÐÒ»¸ö # µÄ , ΪԭÀ´ shell script ÖеÄ×¢ÊÍ
ÓÐÁ½¸ö # µÄ , Ϊ±ÊÕß¼ÓÉϵÄ×¢ÊÍ , µ±È»À² , ûÓÐÈκΠ# µÄΪ shell script
µÄÄÚÈÝ , ¶ø¶ÔÃüÁî»òÄÚÈݵĽâÊÍ , Ò»Âɶ¼Ð´ÔÚÃüÁî»òÄÚÈݵÄÇ°Ãæ .
Ê×ÏÈÓÉ rc.S ¿ªÊ¼ :

***************************** rc.S **********************************

#!/bin/sh
#
# /etc/rc
#
# These commands are executed at boot time by init(8).
# User customization should go in /etc/rc.local.

echo '======== rc.S is running ! System Initializing Now !!! ========'
PATH=/sbin:/usr/sbin:/bin:/usr/bin

## ´ò¿ªËùÓÐ swap ! ÏÂÃæ /sbin/swapon -a µÄÒâ˼ÊÇ : ʹµÃ /etc/fstab Öб»¼Ç¼
## ³É swap µÄ device È«²¿Æô¶¯ .

/sbin/swapon -a
 

## ภ! ÏÂÃæÕâ¸öÖ¸Áî update ¾ÍºÜÖØÒªÁË , Ëü¸ºÔðÿ¸ôÒ»¶Î¹Ì¶¨µÄʱ¼ä , ¾Í½«
## buffer ÖеÄ×ÊÁÏ , ÀûÓà sync д»Ø´ÅÅÌÉÏ , ²¢½« superblock ×ö update
## µÄ¶¯×÷ . ʹÓà ps Õâ¸öÖ¸Áî¿´¿´ÓÐÄÇЩ process , ¾Í¿É¿´µ½ update »¹ÓÐÒ»¸ö
## bdflush , ÕâÁ½¸ö process ¶¼ÊDZØÈ»Òª´æÔÚµÄ , ¿É²»ÒªËæ±ã¿³µô , Òª²»È» ,
## Íòһϵͳ crash ÁË , ÄÇ´ÅÅÌÀïÃæµÄ×ÊÁϾͲ»ÊÇ×îеÄÁË ......

/sbin/update &
 

## ÀûÓà echo -n >> ÖÆÔìÒ»¸öÎļþ , ²¢Óà rm -f Õâ¸öµµ°¸À´²âÊÔ root partition
## ÊDz»ÊÇ read-only »òÕßÊǿɶÁд

READWRITE=no
if echo -n >> "Testing filesystem status"; then
rm -f "Testing filesystem status"
READWRITE=yes
fi
 

## ¼ÙÈç root partition ÊÇ read-only ¾Í×÷ fsck µÄ¶¯×÷ , ¼ÙÈç²»ÊÇ read-only
## ¶øÊÇ read-write µÄ»° , ¾Í×öÏÂÃæ else Ö®ºóµÄ¶¯×÷

if [ ! $READWRITE = yes ]; then
## ÀûÓà fsck ×ö¼ì²é¼°ÐÞ¸´ÎļþϵͳµÄ¹¤×÷ , ºóÃæ½ÓµÄÁ½¸ö²ÎÊý -A , -a .
## -A µÄÒâ˼ÊÇ : fsck »áÒÀ¾Ý /etc/fstab ÖеļǼ , È¥¼ì²éËùÓеÄÎļþ
## ϵͳ ; ¶ø -a ¾ÍÊÇ auto µÄÒâ˼ , µ± fsck ÓÐÐÞ¸´µÄ¶¯×÷ʱ , Ëü²»»áÎÊ
## ÄãÎÊÌâ , ¶øÖ±½ÓÐÞ¸´ .

/sbin/fsck -A -a
 

## ¼ÙÈç fsck ÓÐ error , [ $? -gt 1 ] À¨ºÅÀïÃæµÄÒâ˼ÊÇ : ÈôÉϸöÃüÁîµÄ
## ´«»ØÖµ´óÓÚ 1 , ¶øÉϸöÃüÁî¾ÍÊÇ fsck . ÈÃÎÒÃÇ¿´¿´ fsck µÄ´«»ØÖµ :
## 0 - No errors
## 1 - File system errors corrected
## 2 - File system errors corrected, system should
## be rebooted if file system was mounted
## 4 - File system errors left uncorrected
## 8 - Operational error
## 16 - Usage or syntax error
## 128 - Shared library error
## ºÜÃ÷Ï﵀ , ÈôÓÐÈκδíÎó²úÉúµÄ»° , ÄÇ fsck µÄ´«»ØÖµ¶¼´óÓÚ 1 . Æäʵ
## ¾ÍÎҵĹ۵ãÈÏΪ , Ó¦¸Ãд³É if [ $? -ge 1 ] ±È½ÏºÃ . ¼ÈÈ»ÓдíÄØ , ϵͳ
## Ó¦¸Ã¾ÍÒªÌøÖÁµ¥Óû§Ä£Ê½ , ÔÚµ¥Óû§Ä£Ê½ÖÐÖ÷Òª¾ÍÊÇ /etc/rc.d/rc.K
## ÖеÄÁ½¼þÊ : ¹Øµô swap ¼° жÏÂËùÓеÄÎļþϵͳ , ¶ø×îºóÖØÐ login .
## Ò»°ãÕý³£µÄÇé¿öÏ , if ÏÂÃæÕâÒ»´ó¶ÎÊDz»»áÖ´ÐÐµÄ , ¶ø»áÌøÖÁÏÂÃæ
## ±êÓÐ ************************* Normal 1 ************************* ´¦

if [ $? -gt 1 ] ; then
echo
echo
echo "**************************************"
echo "fsck returned error code - REBOOT NOW!"
echo "**************************************"
echo
echo
/bin/login
fi

## ****************************** Normal 1 **************************
## µ± fsck ¼ì²éûÓдíÎóÖ®ºó , ¾Í°Ñ root partition ÖØÐ mount ÉÏÀ´
## ÏÂÃæÖ¸ÁîµÄ²ÎÊýÓÐÈý¸ö , -w ´ú±ímount ³É¿É¶Áд , -n ´ú±í°ÑÒ»¸ö file-
## system mount ÉÏÀ´ , µ«²»»á°Ñ¼Ç¼дµ½ /etc/mtab ÖÐ , ÔÚÉÏ´Î¶Ô /etc/mtab
## ½éÉÜʱÓÐÌáµ½ , µ±ÎÒÃÇʹÓà mount Õâ¸öÖ¸Áî°ÑÒ»¸ö filesystem mount ÉÏÀ´
## µÄʱºò , /etc/mtab ¾Í»á¼Ç¼ ! ÀûÓà -n Õâ¸ö option ¿ÉʹµÃ×ö mount µÄ¶¯
## ×÷ , È´²»»á¼Ç¼ . -o ºóÃæ¿ÉÒÔ½ÓÐí¶àµÄÑ¡Ïî , ÔÚÕâÀï , ÎÒÃǸøËüµÄÑ¡ÏîÊÇ
## remount . remount µÄÒâ˼ÊÇ : ÖØÐ mount Ò»¸öÒѾ­±» mount µÄ filesystem
## Õâ¸öÑ¡Ïîͨ³£±»ÓÃÀ´¸Ä±ä¸Ã filesystem µÄ¶Áд±êÖ¾ ,ÓÈÆäÊÇ°Ñ filesystem
## ´Ó read-only µÄ״̬ , ¸Ä±ä³É read-write µÄ״̬ .

echo "Remounting root device with read-write enabled."
/sbin/mount -w -n -o remount /
 

## ÔÚÇ°ÃæµÄÇé¿öÖÐ , ¶¼ÊÇ root partition Ϊ read-only µÄ״̬Ï , Ëù×öµÄһЩ
## ¹¤×÷ , µ½ÁË×îºóÒ»¸öÖ¸Áî /sbin/mount -w -n -o remount / , ²Å°Ñ root
## partition mount ³É read-write . ¸÷λÓÐûÓп´µ½Ç°ÃæÄÇÐÐ :
## if [ ! $READWRITE = yes ]; then ..... ÏÂÃæÕâ¸ö else ¾ÍÊÇÓëÕâ¸ö if ¶ÔÓ¦
## Ò²¾ÍÊÇ˵ , Ç°ÃæÄǸö if µÄÇø¿éÖÐ , Ëù×÷µÄ¹¤×÷¶¼ÊÇÔÚ root partition Ϊ
## read-only µÄÌõ¼þ³ÉÁ¢ÏÂËù×÷µÄÊ , ÄǺÜÃ÷Ï﵀ , ÏÂÃæÕâ¸ö else ¾ÍÊÇ root
## partition Ϊ read-write µÄÌõ¼þÏÂËù×÷µÄ¹¤×÷ . ¼ÙÈçÄãµÄ root partition
## Ϊ read-writeable µÄ»° , ÄÇôϵͳ¾Í»áÏÔʾÏÂÃæµÄÐÅÏ¢ . cat << EOF Ëù×÷µÄ
## Ê , ¾ÍÊÇ°Ñ EOF ֮ǰµÄÐÅϢȫ²¿ÏÔʾÔÚÆÁÄ»ÉÏ :
## ÎÒÏë , ÏÂÃæµÄÐÅϢдµÃºÜÃ÷ÏÔÁË , Ëü˵ : ÄãµÄ root partition ±» mount ³É
## read-write , ûÓа취¼ì²é , Ҫʹ¼ì²éµÄ¶¯×÷Äܹ»Ë³ÀûµÄ½øÐÐ , Äã±ØÐë°Ñ
## root partition mount ³É read-only ! ÄÇÒªÔõô×öÄØ ? ºÜÈÝÒ× , Ö»ÒªÀûÓÃ
## rdev -R / 1 ¾Í¿ÉÒÔÁË ......

else
cat << EOF

*** 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, type:
rdev -R /vmlinuz 1
(^^^^^^^^ ... or whatever your kernel name is.)

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

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

EOF
 

## ÏÂÃæÕâ¸öÖ¸ÁîûʲôºÃ˵µÄ , ¾ÍÊÇÔÝÍ£ 10 ÃëÖÓ , Èà user Äܹ»Óгä×ãµÄ
## ʱ¼ä¿´ÍêÉÏÃæµÄÐÅÏ¢

sleep 10
fi
 

## ɾ³ý /etc/mtab /etc/nologin /etc/utmp

/bin/rm -f /etc/mtab* /etc/nologin /etc/utmp
 

## ÖÆÔì /etc/utmp , ÕâÊÇÒ»¸öºÜµäÐÍÖÆÔì¿ÕÎļþµÄд·¨ . /dev/null Õâ¸ö node
## ÂùÓÐȤµÄ , ÔÚijһ·½ÃæÀ´Ëµ , ËüÓеãÏñÊÇÒ»¸ö " ºÚ¶´ " . ÔõÃ´ËµÄØ ?
## ¸÷λ¿ÉÒÔÊÔÊÔ¿´ÏÂÃæµÄÖ¸Áî ls >> /dev/null , µ±ÄãʹÓÃÕâ¸öÖ¸ÁîÖ®ºó»á
## ·¢ÉúʲôÊÂÄØ ? ʲôҲû·¢Éú , ¶øÇÒ ls µÄÊä³ö¾ÍºÃÏñ±»¶ªµ½ºÚ¶´Àï , ÎÞ
## Ó°ÎÞ×ÙÁË . ÄÇÒ²ÐíÄã»áÏë : ÄÇÕâÓÐʲôÓà ? ÎҵĻشðÊÇ : µÄȷûÓÐʲô
## ºÜ´óµÄÓô¦ , µ«µ±ÄãÏëÒÖÖÆÊä³öµÄÐÅϢʱ , Äã¾Í»áÓõõ½ÁË .

cat /dev/null >> /etc/utmp
 

## ÒÀ¾Ý fstab ( filesystem table ) ÖеÄÃèÊö , ×Ô¶¯µÄ¹ÒÉÏÎļþϵͳ
## µ«´ËʱÒòΪ TCP/IP »¹Ã»ÓÐÉ趨 , ¹Ê²»Óà NFS

echo 'Mount Filesystem !!!'
/sbin/mount -avt nonfs
 

## É趨ϵͳµÄʱÖÓ . ÏÂÃæÕ⼸ÐÐËù×öµÄʾÍÊÇ : ¿´¿´ /sbin/clock Õâ¸öÎļþÊÇ
## ²»ÊÇ¿ÉÖ´ÐÐµÄ , ¼ÙÈç¿ÉÒÔÖ´ÐÐ , ¾Í°Ñ CMOS ÖеÄʱ¼äÉ趨ΪϵͳµÄʱ¼ä .

if [ -x /sbin/clock ]; then
echo 'Set System Clock'
/sbin/clock -s
fi
 

## ÏÂÃæµÄËÄÐÐÈôûÓÐ mark , Ôòÿ´Î¿ª»ú issue ¼° motd ¶¼»á±»¸Ä±ä , ÕâÓ¦¸Ã
## ¿ÉËãÊÇ FAQ ¼¶µÄÎÊÌâÁË ...... ÒòΪÎÒÓÐ×Ô¼ºÉè¼ÆµÄ issue ¼° motd , ËùÒÔ
## ÏÂÃæµÄËÄÐÐÇ°Ãæ¶¼ÓÐ # , ±»×¢Ê͵ô .
## ¼ÙÈçÄãÒªÓÐ×Ô¼ºµÄÉ趨 , ÏÂÃæÒ»¶¨¶¼Òª mark ÆðÀ´

#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. (Posix)." > /etc/motd
 

## ½ÓÏÂÀ´ , ½«Ö´ÐÐ rc.serial , ¹ËÃû˼Òå , rc.serial ÊÇ×÷´®¿ÚÉ趨µÄ¹¤×÷
## ÔÚ rc.serial ÖÐ , ÄÚÈÝËäȻҲÊǺܼòµ¥ , µ«²¢²»Ïñ rc.S ÄÇÑùÖ±½Ó . »»¾ä»°
## ˵ , ¶ÁÕßÖÁÉÙÒª " ÉÔ΢ " ¶®Ò»µã shell programming , ËùÒÔËµÄØ , ¼ÙÈç
## »¹²»»á shell programming µÄ¶ÁÕßÄØ , ¶¼Ó¦¸Ã¸Ï¿ìÈ¥ÕÒÒ»±¾ÊéÀ´¿´Ò»Ï , ÔÚ
## ÕâÆªÎÄÕµĽáβ , ÎÒ»áÌá³öһЩÊéµ¥ , ¸÷λ¿ÉÒÔÈ¥ÕÒÕÒÕ⼸±¾Êé ......

/bin/sh /etc/rc.d/rc.serial
echo '================= rc.S is finish NOW !!! ========================='
 
 

µ½ÁËÕâÀï , rc.S µÄ×îááÒ»²½ , ÊÇÈ¥Ö´ÐÐ rc.serial . ´ó¼Ò¿ÉÒÔ¿´Ò»¿´
/rc.d/rc.serial . ºÃÏñºÜ³¤µÄÑù×Ó , µ«Êµ¼ÊÉÏÄØ , ¸÷λ±ØÈ»·¢ÏÖµ½ÁË , Õâ¸ö
shell script ´ó²¿·ÝÖ¸ÁîµÄÇ°Ãæ¶¼ÓÐÒ»¸ö '#' ºÅ , Õâ´ú±í×Å , ÕâЩָÁîÍêÈ«
²»»á±»Ö´ÐÐ . ËùÒÔÄØ , ÕæÕýÓÐÓõÄÖ»²»¹ýÁÈÁÈÊ®¼¸ÐÐ°É ! ÔÚÁíÒ»·½ÃæÀ´Ëµ ,
¼ÙÈçÄãÊÇÓÃÍø¿¨Á¬ÉÏÍøÂç , ÄÇ rc.serial ¶ÔÄ㲢ûÓÐʲô´óÓô¦ .
 

**************************** rc.serial ******************************

#!/bin/sh
#
# /etc/rc.serial
# Initializes the serial ports on your system
#
# Version 2.01

echo '======================= rc.serial is begin !!! ====================='
cd /dev

## ÏÂÃæÈýÐÐÖеÄǰÁ½ÐÐÊÇÉ趨һЩ±äÁ¿ , ÓÉÓÚÔÚÕâ¸ö shell script ÖÐ , ÐèÒª
## Óõ½ /bin/setserial -b Õâ¸öÖ¸Áî , »òÊÇÐèÒªÓõ½ËùÓÐÒÔ cua ¿ªÍ·µÄ node
## µÄ´ÎÊýÌ«¶àÁË , Òò´Ë , °ÑËüÃÇÉ趨Ϊһ¸ö±äÁ¿ , ÊÇÒ»¸ö²»´íµÄ·½·¨ . ÓÈÆä
## PORTS=`echo cua? cua??` ÕâÊÇÒ»¸ö´ÏÃ÷µÄд·¨ , ÄÇΪʲô²»Ð´³É PORT=
## `echo cua*` ÄØ ? ¸÷λ¿ÉÒÔÔÚ /dev Ï·ֱðʹÓÃÕâÁ½¸öÖ¸Áî , ¹Û²ìÊä³öµ½µ×
## ÓÐʲô²»Í¬ ......

SETSERIAL="/bin/setserial -b"
PORTS=`echo cua? cua??`
echo -n "Configuring serial ports...."
 

## ÏÂÃæÕâÐÐ , ûÓÐѧ¹ý shell programming µÄÈ˺ܿÉÄܻῴ²»¶® , ²»¹ýûÓÐ
## ¹ØÏµ , ÕâÐÐÖÐµÄ ${SETSERIAL} »á±»»»³É /bin/setserial -b , ¶ø ${PORTS}
## »á±»»»³É cua0 cua1 cua2 ....... cua31 , ËùÒÔÕû¾ä·­Òë¾ÍÊÇ :
## /bin/setserial -b -W cua0 cua1 cua2 cua3 cua4 cua5 cua6 ...... cua31
## ÄÇÕâÐÐÖ¸Áîµ½µ×ÔÚ×öÊ²Ã´ÄØ ? ÆäʵֻÊÇÔÚ×öÖжÏÕì²âµÄ¹¤×÷ .

${SETSERIAL} -W ${PORTS}
 

## ¸÷λ¿´µ½ÏÂÃæÔ­À´µÄ×¢ÊÍÁ衃 . µ±ÄãÓÐÒ»Ð©ÌØÊâµÄ¿¨Ê± , Äã¿ÉÒÔ°ÑÏà¶ÔÓ¦²¿
## ·ÝÇ°ÃæµÄ '#' È¥µô , ÒÔ±ãÄÜ×ö×Ô¶¯É趨µÄ¹¤×÷ . ÆäÊµÄØ , ÕâÖÖÇé¿öʵÔÚ
## ²»¶à , ´ó²¿·ÝÈ˵ÄÉ豸¶¼²î²»Á˶àÉÙ , ˵µ½¹ØÓÚ´®¿Ú , ²îÒì¾Í¸üÉÙÁË .
#
# AUTOMATIC CONFIGURATION
#
# Uncomment the appropriate lines below to enable auto-configuration
# of a particular board. Or comment them out to disable them....
#
 

## ºÃÁË , ÕâÏÂÎÒÃÇÓÖ¶àÁËÒ»¸ö±äÁ¿ : AUTO_IRQ , ÕâÔÚÏÂÃæ»áÓõ½ .

AUTO_IRQ=auto_irq
 

## ÏÂÃæ¼¸Ðзdz£ÕûÆë , ËüÃÇ¿ÉÒԷֱ𱻻»³É :
## /bin/setserial -b /dev/cua? auto_irq skip_test autoconfig
## setserial ˵´©ÁËҲûʲô , Õâ¸öÖ¸Áî¿ÉÒÔÈÃÄã¶Ô serial port ×öÉ趨¼°»Ø±¨
## µÄ¶¯×÷ , Ïñ IRQ , I/O port À²µÈµÈµÄÊÂÇé . Ò»°ãµÄÇé¿öÏ , ´ó¼ÒµÄµçÄÔÖÐ
## ͨ³£Ö»ÓÐ COM1-COM4 , µ«¼ÙÈçÄãÏëÔö¼ÓÐ嵀 port , ÄÇ setserial ¾ÍÅÉÉÏÓÃ
## ³¡ÁË .

# These are the standard COM1 through COM4 devices
#
# If you have an internal modeme with a Rockwell Chipset, add a "skip_test"
# to the /dev/cua3 line below. (It's not added by default because it will
# screw up people with 8514 displays).
#
${SETSERIAL} /dev/cua0 ${AUTO_IRQ} skip_test autoconfig
${SETSERIAL} /dev/cua1 ${AUTO_IRQ} skip_test autoconfig
${SETSERIAL} /dev/cua2 ${AUTO_IRQ} skip_test autoconfig
${SETSERIAL} /dev/cua3 ${AUTO_IRQ} autoconfig

# These are for the first AST Fourport board (base address 0x1A0)
#
${SETSERIAL} /dev/cua4 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua5 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua6 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua7 ${AUTO_IRQ} autoconfig

# These are for the second AST Fourport board (base address 0x2A0)
#
${SETSERIAL} /dev/cua8 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua9 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua10 ${AUTO_IRQ} autoconfig
${SETSERIAL} /dev/cua11 ${AUTO_IRQ} autoconfig
 

## ´ÓÕâÀïÒÔÏ , ÎÒÊ¡ÂÔÁËÒ»´ó¶Î , ÒòΪÕâÒ»´ó¶Î¶¼ÊÇÖ§³ÖÌØÊâµÄ¿¨

# These are the 3rd and 4th ports on the Accent Async board.
#
#${SETSERIAL} /dev/cua12 ${AUTO_IRQ} autoconfig
#${SETSERIAL} /dev/cua13 ${AUTO_IRQ} autoconfig
#
 

.
.
.
.
.
.
.
 

## ºÃÁË , ÎÒÃÇÌøµôÁËÒ»´ó¶Î , Ö±µ½ÕâÀï . ¸÷λ¿´µ½ÏÂÃæµÄ×¢½âÁË .
## ¼ÙÈçÄãÏëÓÃÊÖ¶¯µÄ·½·¨Ö¸¶¨ IRQ , I/O port , ¼°Ö¸¶¨ chip µÄÐͺÅ
## ÄÇÄã¿ÉÒÔÄõôÏÂÃæ¶ÔÓ¦ÄÇÐÐÇ°ÃæµÄ '#' ²¢×÷Êʵ±µÄÐÞ¸Ä , ±ÈÈç˵
## ÄãÓõÄÊDZȽÏÐ嵀 16550 »ò 16550A , ¶ø²»ÊÇ 16450 , ÄÇÄã¾Í¿ÉÒÔ
## ÔÚÏÂÃæÓÃÊÖ¶¯µÄ·½·¨Ö¸¶¨ . ʵ¼ÊÉÏ , Óà autoconfig ¼° autoirq
## µÄÑ¡Ïî¾Í¿ÉÒÔÁË , ûÓбØÒªÓÃÊÖ¶¯µÄ·½Ê½ . ³ý·ÇÕì²â²»µ½ .

###############################################################
#
# MANUAL CONFIGURATION
#
# If you want to do manual configuration of one or more of your
# serial ports, uncomment and modify the relevant lines.
#
###############################################################

# These are the standard COM1 through COM4 devices
#
#${SETSERIAL} /dev/cua0 uart 16450 port 0x3F8 irq 4
#${SETSERIAL} /dev/cua1 uart 16450 port 0x2F8 irq 3
#${SETSERIAL} /dev/cua2 uart 16450 port 0x3E8 irq 4
#${SETSERIAL} /dev/cua3 uart 16450 port 0x2E8 irq 3

.
.
.
.
.
.
.
.

## Ok , µ½´Ë , rc.S ¼° rc.serial ÒѾ­½áÊø , ÒòΪ½Ø¸åʱ¼äµÄ¹ØÏµ , rc.M
## rc.inet1 , rc.inet2 , rc.font , rc.local ½«ÔÚÒÔºóΪ¸÷λ½éÉÜ .

echo "done."
${SETSERIAL} -bg ${PORTS}

echo ' ====================== rc.serial is complete !!! ==================='
 
 

* ¹ØÓÚ Shell Programming µÄÊéµ¥ :

Title: The Unix C Shell Field Guide
Authors: Gail Anderson and Paul Anderson
Publisher: Prentice Hall
Edition: 1986
ISBN: 0-13-937468-X

Õâ±¾ÊÇ C-Shell µÄ Bible , Ïëѧ C-Shell µÄÈË , ¿ÉÒÔÈ¥¿´Õâ±¾Êé .
 

Title: Unix Shell Programming
Authors: Stephen Kochan and Patrick Wood
Publisher: Hayden
Edition: 1990
ISBN: 0-672-48448-X

ภ! Õâ±¾ÊéÒÔ Bourne Shell ΪÖ÷ , ÄÚÈÝÉîÈëdz³ö , ¶ÁÕߺÜÈÝÒ׾ͿÉÒÔÁ˽â
Õâ±¾ÊéµÄÄÚÈÝ , ½ø¶øÕÆÎÕ Bourne Shell µÄ¾«Ëè . ´ËÍâ , Õâ±¾ÊéÒ²ÓÐÌáµ½
Korn Shell , ´óÌåÉÏÀ´Ëµ , ÊÇÒ»±¾ÖµµÃ¿´µÄºÃÊé .
 

*ÈçºÎÁªÏµ×÷Õß :

E-Mail Address : jhhsu@csie.nctu.edu.tw
u8217017@cc.nctu.edu.tw

Dormitory : ½»Í¨´óѧʮÉá 317R

..
 
 

Linux ¿ª»ú³ÌÐòÖ®ÑÐÌÖ
CCCA ×ʹ¤86 Ðí¾°»ª

ÔÚÉϴεĽéÉÜÖÐ , ÎÒÃÇÒѾ­¿´ÍêÁË rc.S ¼° rc.serial ÕâÁ½¸ö shell script .
ÏÖÔÚ , ÎÒÃǽ«°ÑÊ£Ï嵀 shell script ÔÙ×÷Ò»¸ö½éÉÜ .
Ê×ÏÈ»¹ÊÇ¿´¿´È«²¿µÄÁ÷³Ì :
 

init[1]
rc.S begin
rc.serial begin
rc.serial end
rc.S end <-- ÉÏÒ»´ÎÎÒÃÇ˵Ã÷µ½ÕâÀï
init[1] enter runlevel 5
rc.M begin
rc.inet1 begin
rc.inet1 end
rc.inet2 begin
rc.inet2 end
rc.font begin
rc.font end
rc.local begin
rc.local end
rc.M end
login
 

Õâ´ÎÖ÷ÒªµÄ²¿·Ý¿É·ÖΪÁ½Ïî : ÒòΪ init ½«»áÈ¥¶ÁÈ¡ inittab , ËùÒÔ inittab
½«±»ÁÐΪµÚÒ»²¿·ÝµÄÖØµã , ¶øµÚ¶þ²¿·Ý¾ÍÊÇ rc.M , rc.font , rc.local
Õ⼸¸ö shell script µÄ˵Ã÷ . ( rc.inet1 , rc.inet2 ÕâÁ½¸ö¹ØÓÚÍøÂçµÄ
shell script ½«ÔÚÒÔºóµ¥¶À˵Ã÷ )
ºÃÁË , ÎÒÃÇÏÈ´Ó inittab ¿´Æð°É ! ¿´¿´ÉÏÃæµÄÁ÷³Ì , ÔÚµÚÒ»ÐÐ : init[1]
Ò²¾ÍÊÇ init Õâ¸ö process ±»Æô¶¯Ö®ºó , Ëü»áÈ¥¶ÁÈ¡ /etc/inittab Õâ¸öÎļþ
ÒÔÍê³ÉϵͳµÄÆô¶¯ . ´ÓÕâÀï , ÎÒÃÇ¿´µ½ÁË LINUX µÄÈ·ÈÚºÏÁË SVR4 ¼° SunOS
µÄÒ»Ð©ÌØÐÔ , inittab Õâ¸öÎļþ , ÔÚ SunOS ϵͳÖÐÊDz»´æÔÚµÄ , µ«ÊÇËüÈ´ÊÇ
SVR4 µäÐ͵ÄÎļþ . init Õâ¸ö process »áÒÀ¾Ý /etc/inittab ÖÐËù¼ÇÔØµÄÄÚÈÝ
½øÈ벻ͬµÄ run-level ²¢Æô¶¯²»Í¬µÄ process . ËùÒÔ inittab µÄÖØÒªÐÔ
¿É¼ûÒ»°ß . ÄÇʲô½Ð run-level ÄØ ? Ëùν run-level ¾ÍÊÇϵͳÖж¨ÒåÁËÐí¶à
²»Í¬µÄ level , ¶øÏµÍ³»áËæÖø level µÄ²»Í¬¶øÈ¥Æô¶¯²»Í¬µÄ×ÊÔ´ .
ÏÖÔÚ¾ÍÈÃÎÒÃÇÀ´¿´Ò»Ï /etc/inittab ÖеÄÄÚÈÝ :
ÔÚ /etc/inittab Õâ¸öÎļþÖÐ , ÿһÁÐÊÇÒ»¸ö½øÈëµã , ¼ÙÈçÎÒÃÇ×Ðϸ¹Û²ìÿһÁÐ
µÄ»° , ÄÇÎÒÃǾͻáºÜÈÝÒ׵ķ¢ÏÖ , /etc/inittab µÄÿһÁпÉÒÔ±» " : " Õâ¸ö
×Ö·û·Ö³ÉºÃ¼¸¸öÀ¸Î» . Õ⼸¸öÀ¸Î»µÄ¸ñʽÈçÏ :

id:runlevels:action:process

¶øËüÃÇ´ú±íµÄÒâÒå·Ö±ðÈçÏ :

id : ÓÉÁ½¸ö¶ÀÌØµÄ×Ö·ûËù×é³ÉµÄ±æÊ¾·ûºÅ , ÔڱȽÏÐ嵀 UNIX ϵͳÖÐ , ÒѲ»
ÊÜÖ»ÄÜÓÐÁ½¸ö×Ö·ûµÄÏÞÖÆ .

runlevels : Ö¸³öÏÂÃæÒ»¸öÀ¸Î»ÖÐµÄ action ÒÔ¼° ÏÂϸöÀ¸Î»ÖÐµÄ process
»áÔÚÄÇЩ runlevel Öб»Ö´ÐÐ . ÕâÒ»À¸µÄºÏ·¨ÖµÓÐ 0,1,2...6
s ÒÔ¼° S . ¶øÔÚÕý³£µÄÆô¶¯³ÌÐòÖ®ºó , Superuser ¿ÉÒÔʹÓÃ
telinit Õâ¸öÖ¸ÁîÀ´¸Ä±äϵͳµÄ runlevel . ÓÖÒòΪÔÚ LINUX ÖÐ
, runlevel µÄÔ¤ÉèÖµÊÇ 5 ( µÈһϾͻῴµ½ ) ËùÒÔ , Ö»ÓÐ
ÄÇЩÿһÁÐÖÐ runlevel ÄÇÀ¸ÓÐ 5 Õâ¸öÖµµÄ , ºóÃæµÄ process
²Å»á±»Æô¶¯ . ËùÒÔ , ÎÒÃǾͿÉÒÔÏëÏñµÄµ½ : " ÓÉÓÚϵͳµÄ
runlevel ²»Í¬ , ËùÆð¶¯µÄ process Ò²²»¾¡Ïàͬ , ËùÒÔϵͳ
Æð¶¯µÄ×ÊÔ´ÔÚÿ¸ö²»Í¬µÄ runlevel ¾Í»áÓвîÒì´æÔÚ .

action : Õâ¸öÀ¸Î»ÓÐÒ»µã¸´ÔÓ , ÔÚÕâ¸öÀ¸Î»ÖмǼ×Å init ÔÚÆô¶¯Ïà¶ÔÓ¦µÄ
process ʱ , ¶Ô process Ëù²ÉÈ¡µÄ¶¯×÷ , ¶øºÏ·¨µÄ¶¯×÷ÓÐÏÂÃæ¼¸Ïî:

initdefault : Ö¸³öϵͳÔÚÆô¶¯Ê± , Ô¤Éè½øÈëµÄ run-level Öµ ,
±ÈÈç˵ , ÎÒÃÇ¿ÉÒÔÔÚ /etc/inittab ÖÐÕÒµ½ÏÂÃæÕâ
Ò»ÁÐ : id:3:initdefault:
ºÜÃ÷Ï﵀ , ϵͳ½«ÔÚÆô¶¯Ê± , ½øÈë runlevel Ϊ 3
µÄģʽ . µ±È» , Äã¿ÉÒÔ°Ñ 3 ¸Ä³É 4 ÊÔÊÔ¿´ , Èç
¹ûÄã¸Ä³ÉÁË 4 , Äǽ«»áÖ´ÐÐ /etc/rc.d/rc.4 , Ò²
¾ÍÊÇ run xdm . xdm ÔÚÒÔºóÓлú»áµÄ»° , ½«Îª¸÷
λ½éÉÜ ......

sysinit : ÔÚϵͳÆð¶¯Ê± , Õâ¸ö process »á±»Ö´ÐÐ . ¶øËùÓÐ process
ǰµÄ action ÖÐÓÐ boot ¼° bootwait µÄ process , ±Ø
ÐëµÈµ½ÕâЩ action Ϊ sysinit µÄ process Ö´ÐÐÍêÖ®ºó
ËüÃDzÅÄܹ»Ö´ÐÐ .

wait : ÔÚÆð¶¯Ò»¸ö process Ö®ºó , ÈôÒªÔÙÆð¶¯ÁíÒ»¸ö process , Ôò
±ØÐèµÈµ½Õâ¸ö process ½áÊøÖ®ºó²ÅÄܼÌÐø .

respawn : ´ú±íÕâ¸ö process ¼´Ê¹ÔÚ½áÊøÖ®ºó , Ò²»áÖØÐ±»Æô¶¯ ,
×îµäÐ͵ÄÀý×Ó¾ÍÊÇ getty ( ÔÚ LINUX ÖÐΪ agetty ) .
¿´¿´ÏÂÃæµÄÑ­»· :

-- getty --> login --> shell --> logout --
^ |                                        |
  |<---------------------------------------|

¼´Ê¹ÔÚ getty ½áÊøÖ®ºó , ËüÒ²»áÖØÐ±»Æô¶¯ .

ctrlaltdel : Ïë±ØÓÐÈË»áÒÔ¼üÅÌÉ쵀 Ctrl , Alt , ¼° Del ÕâÈý¸ö
¼üÀ´´ïµ½Ê¹ÏµÍ³ shutdown µÄÄ¿µÄ , ÏÖÔÚÎÒÃǹûÈ»ÔÚ
/etc/inittab Öп´µ½ÁËÕâÒ»ÁÐ :

ca::ctrlaltdel:/sbin/shutdown -t3 -rf now

ËùÒÔ˵ , µ±ÎÒÃǰ´ÏÂÕâÈý¸ö¼üµÄʱºò , init »áÊÕµ½
SIGINT Õâ¸ö signal , ½ÓמÍÖ´ÐÐ shutdown µÄ¶¯×÷
²»¹ý , ÎÒÃÇ×îºÃ²»ÒªÑø³É°´ Ctrl-Alt-Del À´Ê¹ÏµÍ³
shutdown µÄϰ¹ß , ÓÈÆäÔÚµ¥Óû§¶àÈÎÎñµÄ²Ù×÷ϵͳ , Ïñ
OS/2 , ÉõÖÁ Windows 95 , shutdown ¼¸ºõ¶¼ÊDZê×¼
µÄ¹Ø»ú³ÌÐòÁË , ¸üºÎ¿öÊǶàÓû§¶àÈÎÎñµÄ LINUX , ËùÒÔ ,
shutdown Õâ¸öÖ¸ÁîÊÇÒ»¶¨ÒªÊìϤµÄ .

³ýÁËÉÏÃæµÄ¼¸¸ö action Ö®Íâ , ÁíÍ⻹ÓÐһЩºÏ·¨µÄ action , µ«Õâ
Щ action ²¢²»ÐèҪ̫עÒâ , ÒªÓõÄʱºòÔÙÀûÓà man init È¥²éѯ¾Í
¿ÉÒÔÁË .

process : ÕâÒ»À¸ÖпÉÒÔÊÇ shell script »òÊÇ¿ÉÖ´ÐеijÌÐò .

ºÃÁË , µ±ÎÒÃÇÁ˽â /etc/inittab ÖÐÿһÀ¸µÄÒâÒåÖ®ºó , Òª¿´¶® /etc/inittab
¾ÍÊÇÒ»¼þÇáËÉÓä¿ìµÄ¹¤×÷ÁË . ÔÚ /etc/inittab µµÖÐ , ÎÒÃÇ¿ÉÒÔ¿´µ½ÏÂÃæÕâÒ»¶Î

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

¼òµ¥À´Ëµ , ϵͳÔÚÆð¶¯Ö®ºó»áÖÆÔì³öÁù¸öÐéÄâµÄ console . ÎÒÏë´ó¼ÒÓ¦¸ÃÓÐÊÔ¹ý
Óà Ctrl-Alt + F1 - F6 ¿ÉÔÚÕâÁù¸ö console Ö®¼äÇл» ; ÈôÄãʹÓà XWindows ʱ
ÏëÔÝʱ»Øµ½ console ÏÂʱ , ¿ÉÓà Ctrl-Alt + F1 - F6 ÕâÈý¸ö¼üÀ´Ñ¡Ôñ , ÈôÏë
»Øµ½ XWindows ÏÂʱ , Ö»ÒªÒÔ Ctrl-Alt-F7 ¾Í¿ÉÒԻص½ XWindows ÏÂÁË . »ù±¾
ÉÏ , ¶Ôì¶ memory ±È½ÏÉÙµÄÈË , ¿ÉÒÔ²»Òª¿ªÄÇô¶àµÄÐéÄâ console , ÄÇô¾Í¿É
ÒÔÈ¥µôÉÏÃæµÄ¼¸ÁÐ . »¹ÓÐ , ÔÚÇ°ÃæÎÒÃÇÒ²Ìá¹ý , ¿ÉÒÔ°ÑÔ¤ÉèµÄ runlevel ´Ó 5
¸Ä³É 6 , ¶Ôì¶ beginner À´Ëµ , ϵͳһÆô¶¯Íê¾ÍÖ±½Ó½øÈë XWindows Ò²ÐíÊÇÒ»¸ö
²»´íµÄÉ趨·½·¨ ......

½éÉÜÍê /etc/inittab Ö®ºó , ÎÒÃǽÓ×Å¿´ rc.M ! ÓÉÇ°ÃæµÄÁ÷³Ìµ±ÖÐ , ÎÒÃÇ¿´µ½
rc.M ÖÐÓÖ°üº¬ÁËËĸö shell script , ÆäÖÐ rc.inet1 ¼° rc.inet2 ÊÇÓйØÓÚÍøÂç
µÄÉ趨 ; rc.font ÊÇ×÷×ÖÌåµÄÉ趨 , ¶ø rc.local ÖпÉÒÔ·ÅһЩÏëÒªÆð¶¯µÄ
daemon .

ÎÒÃÇÏÖÔÚ¾ÍÀ´¿´¿´ rc.M , ÒÀÕÕÍùÀý , Ç°ÃæÓÐÁ½¸ö "#" µÄΪ¼ÓÉÏÈ¥µÄ×¢ÊÍ .
Ö»ÓÐÒ»¸ö "#" µÄΪԭÀ´µÄ×¢ÊÍ :

#!/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.
#
# Version: @(#)/etc/rc.d/rc.M 2.02 02/26/93
#
# Author: Fred N. van Kempen,
# Heavily modified by Patrick Volkerding
#

## ÏÔʾ½øÈë¶àÓû§Ä£Ê½

echo "Going multiuser..."
 

## ÏÂÃæÒ»ÁеÄÒâ˼ÊÇ : ¼ÙÈçÄãÔÚÎÄ×ÖģʽµÄ console Ï , ÔÚ15·ÖÖÓÄÚ¶¼Ã»Óж¯×÷
## µÄ»° , ÆÁÄ»¾Í»á×Ô¶¯°µÏÂÀ´ , ¼òµ¥µÄ˵ , ¾ÍÊÇ screen saver µÄ¹¦ÄÜ .

/bin/setterm -blank 15
 

## Ö´ÐÐ crond Õâ¸ö daemon . ²»ÓÃ˵ , crond ÔÚϵͳÖаçÑÝÁ˺ÜÖØÒªµÄ½ÇÉ« ,
## Ëü¸ºÔðÿ¹ýÒ»¶Îʱ¼äºó , ¾ÍÈ¥¿´¿´ /var/spool/cron/crontabs ÖÐÓÐÄÇЩ file
## ÒªÔËÐÐ , ÕâЩ file ÍùÍùÓÐÒ»¸ö¹Ì¶¨µÄʱ¼ä , ±ÈÈç˵ : ÿ¸öÔ嵀 1 ºÅ , ÿ
## ÌìÁ賿µÈ ...... ÎÒÃÇ¿ÉÒÔÓÃÆ½³£µÄ±à¼­Æ÷±àºÃÒ»¸öÎļþ , ÀïÃæµÄ¸ñʽÈçÏ :
##
## ·Ö ʱ ÈÕ Ô ÐÇÆÚ ÃüÁî
##
## ¾ÙÀýÀ´Ëµ , 59 23 31 12 * /etc/wall happy_new_year
## ÔÚÿÄêµÄ 12 Ô 31 ºÅÍíÉÏ 11 µã 59 ·Ö »á¶Ôÿ¸öϵͳÉ쵀 user Ëͳö
## happy_new_year ÖеÄÄÚÈÝ
##
## ½Ó×ÅÎÒÃÇ¿ÉÒÔÀûÓà crontab <ÎļþÃû> Õâ¸öÖ¸ÁîÀ´°Ñ´ËÎļþ·Åµ½
## /var/spool/cron/crontabsÖÐ. ÎÒÃÇ¿ÉÒÔ¿´¿´ /var/spool/cron/crontab ÏÂ
## ÓÐÒ»¸ö root µÄÎļþ , ¿´¿´ÀïÃæµÄÄÚÈÝ :
##
## 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
##
## ËùÒÔ¸÷λ¿´µ½ÁË , ÔÚǰÁ½ÆÚÌáµ½µÄ at ÃüÁîÊÇÎå·ÖÖӲű» run Ò»´ÎµÄ
##
## ÔÙ¾ÙÒ»¸ö¼òµ¥µÄÀý×ÓºÃÁË : ÎÒÃÇÏÈÓÃÒ»°ãµÄÎı¾±à¼­Æ÷Ôì³öÒ»¸öÃûΪ crontest
## µÄµµ°¸ , ÄÚÈÝÈçÏ :
##
## 5 * * * * ls -la ~/ >> ~/hehehaha
##
## ½Ó×Å , ÎÒÃǼüÈëÏÂÃæµÄÃüÁî : crontab crontest
## ´Ëʱ , ´ÓÄÚÈݵÃÖª , ÿÎå·ÖÖÓ crond ¾Í»áÖ´ÐÐ ls -la , °ÑÄã home directory
## µÄÄÚÈݼÓÈë hehehaha Õâ¸öÎļþÖÐ .
##
## µ±È»À² ! Õâ¸öÀý×Ó¼òÖ±ÊǺÁÎÞÒâÒå¿ÉÑÔ :) µ«ÊÇ , ´ó¼Ò¼ÈȻ֪µÀÁË»ù±¾Ô­Àí ,
## ÀûÓà crontab , at ÕâЩָÁî , ¾Í¿ÉÒÔ¼ò»¯Ò»Ð©ÏµÍ³¹ÜÀíµÄ¶¯×÷ , ͬʱÔÚÖ´ÐÐ
## һЩ¹¤×÷ʱ , Ò²»á±È½ÏÓе¯ÐÔ .

/usr/sbin/crond -l10 >>/var/adm/cron 2>&1
 

## ¼ÙÈç /etc/HOSTNAME ²»ÄܶÁÈ¡µÄ»° , ¾Í°Ñ darkstar.frop.org µ±³É HOSTNAME
## ÖеÄÄÚÈÝ . ÀÏʵ˵ , ÏÂÃæÕâÈýÁÐÈ¥µôÒ²²»´ò½ô ......

if [ ! -r /etc/HOSTNAME ]; then
echo "darkstar.frop.org" > /etc/HOSTNAME
fi
 

## ÏÂÃæ´Ó if µ½ fi ¼ÐÆðÀ´µÄ²¿·Ý , Ö÷Òª¾ÍÊÇÔÚÖ´ÐÐ rc.inet1 , rc.inet2 . Õâ
## Щ¶¼ÊÇÍøÂçÉ趨µÄ¹¤×÷ , ÓÈÆäÊÇ rc.inet2 , Æô¶¯ÁËÒ»´ó¶Ñ daemon , Õⲿ·Ý
## Ҫǣ³¶µ½µÄ¶«Î÷Ì«¶àÁË . Ïñ subnet Óë netmask µÈ ...... ÀàËÆÕâÖÖ¹ÛÄî ,
## ¶¼²»ÊÇÈýÑÔÁ½Óï¾Í¿ÉÒÔÍæÍêµÄ , ËùÒÔ¾ÍÁô´ýÒÔºóÔÙ˵ .

if [ -x /etc/rc.d/rc.inet1 ];
then
/bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`
/bin/sh /etc/rc.d/rc.inet1
/bin/sh /etc/rc.d/rc.inet2
else
/sbin/hostname_notcp `cat /etc/HOSTNAME | cut -f1 -d .`
/usr/sbin/syslogd
/usr/sbin/klogd
/usr/sbin/lpd
fi
 

## ÔÚijЩ×ÊÔ´¶ÀÕ¼µÄÇé¿öÏ , һЩӦÓóÌÐòÍùÍù»áÖÆÔì³ö lock Îļþ . ¼ÙÈçÕâЩ
## lock ÎļþÔÚÖØÐ¿ª»úÒÔºó»¹ÊÇ´æÔڵϰ , ÄǾͺܲ»ºÃÁË . ËùÒÔ , ÏÂÃæ¾ÍÊÇÔÚ
## ×÷ÕâЩɾ³ý lock ÎļþµÄ¶¯×÷ , ²¢°ÑһЩÊä³öµÄÐÅÏ¢¶ªµ½ /dev/null È¥ .
## ÔÚÉÏÒ»ÆÚµÄÄÚÈÝÖÐ , ÎÒÃǾÍÓÐÌáµ½ /dev/null ÁË , Ò²ÓÐÌáµ½ÒÖÖÆÐÅÏ¢Êä³öµÄ
## ·½·¨ . ÏÖÔÚÎÒÃǹûÈ»¿´µ½ÁËÒ»¸öʵÀý ......

/bin/rm -f /var/spool/locks/* /var/spool/uucp/LCK..* /tmp/.X*lock 1> /dev/null 2> /dev/null
 

## ¼ÙÈçÄãÓÐÍæ hunt Õâ¸ö game µÄ»° , ÄÇÔÚ /tmp Ï»áÓÐÒ»¸ö socket ÀàÐ͵ÄÎļþ
## ÎÒÃÇÒª°ÑËüɾ³ýÖ®ºó²ÅÄÜ¿ªÊ¼ÁíÒ»¸ö game ......

if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
echo "Removing your stale hunt sockets from /tmp..."
/bin/rm -f /tmp/hunt*
fi
 

## É趨 share library µÄ link ¼° cache . Õâ¸öÖ¸ÁîÖ»ÓÐ Superuser ²ÅÄÜʹÓÃ
## µÄ , ËüÒ²Ï൱µÄÖØÒª . ÍòÒ»ÄãµÄ /etc/ld.so.cache ºÜ²»ÐÒµÄ corrupt ÁË ,
## ÄÇÎÒÃÇÒ²¿ÉÒÔÀûÓÃÕâ¸öÖ¸ÁîÀ´ÈÃËüÖØÐ link , ÏÈɾ³ý /etc/ld.so.cache ,
## ÔÙÒÔ ldconfig -v ÖØÐÂÖÆÔì¾Í¿ÉÒÔÁË .

/sbin/ldconfig
 

## Æð¶¯ sendmail daemon , ²¢ÇÒÈÃËü 15 ·ÖÖÓ¾ÍÈ¥¿´Ò»¿´ spool , ´¦ÀíÊÕ·¢Ðżþ

if [ -x /usr/sbin/sendmail ]; then
echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)..."
/usr/sbin/sendmail -bd -q 15m
fi
 

## ¼ÙÈç /etc/rc.d/rc.font ÊǿɶÁµÄ»° , ¾ÍÖ´ÐÐ rc.font Õâ¸ö shell script ,
## ¶øÕâ¸ö shell script Ö÷ÒªÊÇÉ趨 text mode ÏÂÆÁÄ»µÄ×ÖÌå

if [ -r /etc/rc.d/rc.font ]; then
/etc/rc.d/rc.font
fi
 

## ÔÚϵͳ¹ÜÀíÖÐ , ÎÒÃdz£³£°ÑһЩ local µÄ¶«Î÷ÁíÍâ·ÅÔÚÒ»¸öµØ·½ , ÕâÑù²Å²»
## »áÓëÔ­À´µÄ¶«Î÷»ìÏý . ͬʱ , ÒòΪ local µÄ¶«Î÷¸üа汾µÄËÙ¶È×ÜÊÇÒ²±È½Ï
## ¿ì , ÔÚÕâÖÖÇé¿öÏ , ³£³£»á±ä¶¯µÄ¶«Î÷Ò²¿ÉÒÔ·ÅÔÚ local µÄÇøÓòÖÐ , ÕâÑù
## ¹ÜÀíÆðÀ´±È½Ï·½±ã . Ò²Ðí¸÷λҲעÒâµ½ÁË : Ϊʲô»áÓÐ /usr/bin ¼°
## /usr/local/bin Ö®·Ö . ¾Í¸öÈËÈÏΪ , Ïñ×Ô¼º compile ³öÀ´µÄ¶«Î÷ , ¼ÙÈç
## ¾õµÃ»¹²»´í , ¾Í¿ÉÒÔ°ÑËü·ÅÔÚ /usr/local/bin , ÒòΪËüÊÇÐÂÔöµÄ , ËùÒÔÎÒ
## °ÑËü·ÅÔÚ /usr/local/bin . µ±È»À² , ÕâÖ»ÊǸöÈËϲºÃ°ÕÁË , ÄãÒª·ÅÄÇÀï
## ¶¼ÊÇ¿ÉÒ﵀ , Ö»ÒªÕҵõ½ , Ò×ÓÚʹÓü°¹ÜÀí¾ÍºÃ .
## ͬÑùµÄ , ÈôÎÒÃÇÒªÆð¶¯Ò»Ð©ÐÂÔöµÄ daemon »ò shell script , ÄÇ·ÅÔÚ
## ÊDz»´íµÄÑ¡Ôñ .
## ÏÂÃæÒ»ÁоÍÊÇÈ¥Ö´ÐÐ rc.local ÖеÄÉ趨 , ͨ³£ÊÇһЩ daemon »òÊÇ shell
## script

/etc/rc.d/rc.local
 

# All done.
 

µ½ÕâÀï , rc.M ÒѾ­½áÊøÁË , ÎÒÃÇÀ´¿´¿´´Ó rc.M Ö®ÖÐÖ´ÐÐµÄ rc.font ¼°

rc.local ......

ÏÂÃæÊÇ rc.font µÄÄÚÈÝ :

#!/bin/sh
#
# This selects your default screen font from among the ones in
# /usr/lib/kbd/consolefonts.
#

## ÎÒÏëÏÂÃæÕâÒ»ÁеÄÃüÁî·Ç³£Ã÷ÏÔÁË , ¾ÍÊÇÉ趨 console ÖеÄ×ÖÌå , Äã¿ÉÒÔ
## ¸Ä³É×Ô¼ºÏ²»¶µÄ×ÖÌå . »òÕßÄãÒ²¿ÉÒÔÀûÓà fontconfig Õâ¸öÖ¸ÁîÀ´¸Ä±ä .

setfont /usr/lib/kbd/consolefonts/default8x16
 
 

¿´ÍêÁË rc.font ºó , ÎÒÃÇÀ´¿´¿´ rc.local µÄÄÚÈÝ . ÎÒËùҪ˵µÄÊÇ : rc.local

±Ï¾¹ÊÇ×Ô¼ºÉ趨µÄÇøÓò , ËùÒÔÿ¸öÈ˵ĿÉÄܶ¼²»Ò»Ñù , ¾ÍÎÒ¶øÑÔ , ÒòΪÎÒ¶à run

ÁËһЩ daemon , ËùÒÔÓë´ó¼ÒµÄ¿ÉÄܲ»Ì«Ïàͬ . ËùÒÔ , rc.local ×÷²Î¿¼¾Í¿ÉÒÔÁË.

ÏÂÃæÊÇÎÒµÄ rc.local :

#! /bin/sh
# Put any local setup commands in here
# Running selection
 

## lpd ÊÇ¿ØÖÆ´òÓ¡»úµÄ daemon , ÒªÏëÔÚ LINUX ÏÂÓôòÓ¡»ú , Õâ¸ö daemon ±ØÐè
## Òª±»Æð¶¯ , ´ËÍ⻹ҪÐÞ¸Ä /etc/printcap . ÏêϸµÄÇé¿öҪȥ¿´ PRINT-HOWTO

echo -n "lpd"
/etc/lpd
 

## httpd ¾ÍÊÇ WWW server µÄ daemon . Ïë±Ø´ó¼Ò¶¼Óùý Mosaic , Netscape µÈ
## µÄä¯ÀÀÆ÷ . µ«¼ÙÈçÎÒÃÇÏ뽨Á¢×Ô¼ºµÄ WWW server , httpd ±ØÐëÒªÖ´ÐÐ .

echo -n " httpd"
/usr/local/etc/httpd/src/httpd
 

## ÔÚ WWW µÄʱ´ú»¹Ã»À´ÁÙÒÔǰ , gopher ¿É˵ÊǾßÓÐ×î·½±ãµÄÐÅÏ¢Ë÷Òý¹¦ÄÜ , ¼´Ê¹
## µ½ÁËÏÖÔÚ , gopher ÈÔȻռÓÐһϯ֮µØ , ÔÚÕâÀï , ÒòΪÎÒÓн¨Á¢×Ô¼ºµÄ gopher
## server , ËùÒÔ gopherd ±ØÐè±»Æð¶¯ .

echo -n " gopherd"
/usr/local/sbin/gopherd -u nobody
 

## ÏÂÃæÕâ¸öÖ¸ÁîÊÇ mouse ÔÚ console ÏÂ×ö cut & paste

echo -n "Running selection..."
selection -t ms &
echo ' '
 

-------
ÕâÊÇһƪºÜÀϵÄÎÄÕÂÁË£¬Õë¶ÔºÜÀϵÄSlackware½²µÄ£¬µ«ÊÇÓÐЩ¶«Î÷»¹Óвο¼¼ÛÖµ¡£
ÎÒδ¾­ÔÊÐí¾Í°ÑÓÐЩÃû´Ê¸Ä¹ýÀ´ÁË£¬¹À¼ÆÒ²ÎÞ·¨ÁªÏµµ½×÷Õß¡£ÆäʵÎÒÏ£ÍûÓÐ×Ô¼ºÈË
¶¯ÊÖÀ´Ð´¸ö¸üºÃµÄÎĵµÀ´½éÉÜ£¬µ«ÏÖÔÚÎÒȷʵûʱ¼äÁË£¡¸Ã²»»áÿ¸öÈ˶¼ÊÇÕâÑùµÄ˵£¿
^_^
  ¿