Linux 启动过程, 初始化和关闭
时间:2007-02-17 来源:PHP爱好者
  
  本节介绍当Red Hat Linux系统启动和关闭时会发生什么. 让我们从查看目录 /etc/sysconfig中的信息开始.
  
  11.9.1 Sysconfig信息
  以下信息概括了/etc/sysconfig中的文件, 它们的功能和内容.
  
  11.9.1.1 /etc/sysconfig中的文件
  以下文件通常可以在/etc/sysconfig中找到:
  
  /etc/sysconfig/clock
  
  /etc/sysconfig/keyboard
  
  /etc/sysconfig/mouse
  
  /etc/sysconfig/network
  
  /etc/sysconfig/pcmcia
  
  /etc/sysconfig/amd
  
  /etc/sysconfig/tape
  
  让我们依次看一下.
  
  /etc/sysconfig/clock
  -- /etc/sysconfig/clock文件控制着对系统时钟读出值的解释. 早期版本的Red Hat Linux使用以下值(现在已不推荐使用):
  
  CLOCKMODE=mode, 这里mode是以下之一:
  
  GMT -- 表明时钟设置为UTC.
  
  ARC -- 仅用于alpha表明使用ARC.
  
  目前, 正确的值应为:
  
  UTC=boolean, 这里boolean是以下之一:
  
  true -- 表明时钟设置为UTC. 其他值表明设置为当地时间.
  
  ARC=boolean, 这里boolean是以下之一:
  
  true -- (仅使用Alpha系统) 表明ARC时间系统有效; 其他值表明使用一般的UNIX时间系统.
  
  /etc/sysconfig/keyboard
  -- /etc/sysconfig/keyboard 文件控制着键盘的行为. 可以使用以下值:
  
  KEYTABLE=file, 这里 file是键盘对照表文件名. 例如:
  KEYTABLE="/usr/lib/kbd/keytables/us.map"
  
  /etc/sysconfig/mouse
  -- /etc/sysconfig/mouse文件用来指定鼠标的有关信息. 可以使用以下值:
  
  MOUSETYPE=type, 这里type是以下之一:
  
  microsoft -- A Microsoft mouse.
  mouseman -- A MouseMan mouse.
  mousesystems -- A Mouse Systems mouse.
  ps/2 -- A PS/2 mouse.
  msbm -- A Microsoft bus mouse.
  logibm -- A Logitech bus mouse.
  atibm -- An ATI bus mouse.
  logitech -- A Logitech mouse.
  mmseries -- A older MouseMan mouse.
  mmhittab -- A mmhittab mouse.
  
  XEMU3=emulation, 这里emulation是以下之一:
  
  yes -- 模拟三键鼠标.
  
  no -- 鼠标已有三键.
  
  另外, /dev/mouse是指向实际鼠标设备的符号连接.
  
  /etc/sysconfig/network
  -- /etc/sysconfig/network 文件用来指定有关网络配置的信息. 可以使用以下值:
  
  NETWORKING=answer, 这里 answer是以下之一:
  
  yes -- 需配置网络.
  
  no -- 不需配置网络.
  
  HOSTNAME=hostname, 这里hostname必须是 FQDN (Fully Qualified Domain Name完全有效的域名), 但可以是您喜欢的任何主机名.
  请注意: 为了兼容人们安装的旧软件(如trn), 在 /etc/HOSTNAME 文件中必须包含和这里相同的值.
  
  FORWARD_IPV4=answer, 这里 answer 是以下之一:
  
  yes -- 执行IP转递(forward).
  
  no -- 不执行IP转递(forward).
  
  (目前的Red Hat Linux默认地把它设为 o(为了适应RFC), 但是如果FORWARD_IPV4 没有设置, 为了兼容Red Hat Linux4.2 及以前版本, 是能够转递的.)
  
  GATEWAY=gw-ip, 这里gw-ip是网关的IP地址.
  
  GATEWAYDEV=gw-dev, 这里gw-dev是网关的设备(例如eth0).
  
  NISDOMAIN=dom-name, 这里dom-name是 NIS域名.
  
  /etc/sysconfig/pcmcia
  -- /etc/sysconfig/pcmcia文件用来指定PCMCIA配置信息. 可以使用以下信息:
  
  PCMCIA=answer, 这里answer是以下之一:
  
  yes -- 支持PCMCIA.
  
  no -- 不支持PCMCIA.
  
  PCIC=pcic-type, 这里pcic-type是以下之一:
  
  i82365 -- 计算机有一个i82365类型的PCMCIA插槽芯片.
  
  tcic -- 计算机有一个tcic类型的PCMCIA插槽芯片.
  
  PCIC_OPTS=option, 这里option是插槽驱动器(i82365或tcic)的时间参数.
  
  CORE_OPTS=option, 这里option是PCMCIA 的CORE选项.
  
  CARDMGR_OPTS=option, 这里option是PCMCIA 的CARDMGR选项.
  
  /etc/sysconfig/amd
  -- /etc/sysconfig/amd文件用来指定 amd的操作参数. 可以使用以下值:
  
  ADIR=path, 这里 path是 amd目录. 它应该是/.automount, 并且通常不会改变.
  
  MOUNTPTS=mountpts, 这里mountpts是, 例如, /net /etc/amd.conf.
  
  AMDOPTS=options, 这里options是其他AMD 选项.
  
  /etc/sysconfig/tape
  -- /etc/sysconfig/tape文件用来指定磁带机的有关信息. 可以用以下值:
  
  DEV=devnam, 这里 devnam是磁带设备 (例如, /dev/nst0). 对于SCSI磁带机这是/dev/nst#,其中#是您想用的磁带驱动器的数量. 如果您只有一个, 就用/dev/nst0. 对于IDE磁带机用/dev/ht#, 其中#是您想用的磁带驱动器的数量. 如果您只有一个, 就用/dev/ht0. 对于软磁带机用/dev/ftape.
  
  ADMIN=account, 这里account是当备份失败时发送邮件的用户帐号. 通常设为 oot.
  
  SLEEP=time, 这里time是磁带操作之间需要睡眠的时间. 有些驱动器比其他的需要更多的时间, 但是5对于8mm, 4mm, 和DLT都能很好的工作.
  
  BLOCKSIZE=size, 这里size 是磁带机最优的块的大小. 对于8mm, 4mm和DLT32768能很好的工作. 一个最佳的设置是您的驱动器一次可写的数据.
  
  SHORTDATE=date, 这里date是给短日期赋值的一个字符串, 用于备份日志文件名. 默认值是: $(date +%y:%m:%d:%H:%M)
  
  DAY=date, 这里date是给日期赋值的一个字符串, 用于日志文件目录. 默认值是:$(date +log-%y:%m:%d)
  
  DATE=date, 这里date是给普通日期赋值的一个字符串, 用于日志文件. 默认值是:$(date)
  
  LOGROOT=path, 这里path是登录目录的根.
  
  LIST=file, 这里file增加的备份用来存放增加的清单的文件名. 它将后跟一个序数.
  
  DOTCOUNT=count, 这里 count 用来计数的文件名, 可以知道哪些是增加的清单.
  
  COUNTER=count-file, 这里count-file 是用来在结束时重新开始.
  
  BACKUPTAB=file, 这里file是我们保持备份的文件名.
  
  11.9.1.2 在/etc/sysconfig/network-scripts/中的文件
  以下文件可以在/etc/sysconfig/network-scripts中发现:
  
  /etc/sysconfig/network-scripts/ifup
  
  /etc/sysconfig/network-scripts/ifdown
  
  /etc/sysconfig/network-scripts/network-functions
  
  /etc/sysconfig/network-scripts/ifcfg-
  
  /etc/sysconfig/network-scripts/ifcfg--
  
  /etc/sysconfig/network-scripts/chat-
  
  /etc/sysconfig/network-scripts/dip-
  
  /etc/sysconfig/network-scripts/ifup-post
  
  /etc/sysconfig/network-scripts/ifdhcpc-done
  
  让我们依次看一下.
  
  /etc/sysconfig/network-scripts/ifup, /etc/sysconfig/network-scripts/ifdown
  -- 是/sbin/ifup和 /sbin/ifdown的连接. 这是在这个目录中仅有的两个应该直接调用的script; 这两个script调用其他需要的script. 这两个连接放在这是历史遗留下来的 -- 在将来的版本中可能被移去, 所以现在应该用/sbin/ifup和/sbin/ifdown.
  这些script通常有一个参数: 设备名(例如eth0). 在启动时, 它们用第二个参数oot调用, 所以在启动时不需要得设备可以在那时忽略.
  
  /etc/sysconfig/network-scripts/network-functions
  -- 不是真正的公共文件. 包含script用来启动和关闭界面的功能. 特别, 它包含用来控制可选界面配置和通过网络报告通知界面修改的大多数代码.
  
  /etc/sysconfig/network-scripts/ifcfg-,
  /etc/sysconfig/network-scripts/ifcfg--
  -- 第一个
  文件定义一个界面, 第二个文件仅包含在克隆界面中不同的部分. 例如, 网络号可能不同, 但其他都相同, 所以在克隆文件中只需要网络号, 而其他设备信息都在基本的 ifcfg文件.
  在ifcfg文件中定义的根据界面类型而不同.
  
  以下值在所有的基本文件中是共同的:
  
  DEVICE=name, 这里name是物理设备的名称 (除了动态分配的PPP设备是逻辑名称).
  
  IPADDR=addr, 这里addr是IP地址.
  
  NETMASK=mask, 这里mask是网络掩码.
  
  NETWORK=addr, 这里addr是网络地址.
  
  BROADCAST=addr, 这里addr是广播地址.
  
  GATEWAY=addr, 这里addr是网关地址.
  
  ONBOOT=answer, 这里answer是以下之一:
  
  yes -- 这个设备在启动时应该激活.
  
  no -- 这个设备在启动时不需激活.
  
  USERCTL=answer, 这里answer是以下之一:
  
  yes -- 允许非root用户控制该设备.
  
  no -- 不允许非root用户控制该设备.
  
  BOOTPROTO=proto, 这里proto是以下之一:
  
  none -- 不需使用启动时协议.
  
  bootp -- 需使用bootp协议.
  
  dhcp -- 需使用dhcp协议.
  
  以下值对于所有PPP和SLIP文件是共同的:
  
  PERSIST=answer, 这里answer是以下之一:
  
  yes -- 该设备必需一直保持活跃, 即使调制解调器挂起.
  
  no -- 该设备不必一直保持活跃.
  
  MODEMPORT=port, 这里port是调制解调器的设备名(例如:/dev/modem).
  
  LINESPEED=baud, 这里baud是调制解调器的线速(例如,115200).
  
  DEFABORT=answer, 这里 answer是以下之一:
  
  yes -- 当创建/编辑这个界面的script时插入默认的结束字符.
  
  no -- 当创建/编辑这个界面的script时不需插入默认的结束字符.
  
  以下值对于所有的PPP文件是共同的:
  
  DEFROUTE=answer, 这里answer是以下之一:
  
  yes -- 将该界面设置为默认路由.
  
  no -- 不将该界面设置为默认路由.
  
  ESCAPECHARS=answer, 这里 answer是以下之一:
  
  yes -- 使用预定义的asyncmap.
  
  no -- 不使用预定义的asyncmap.
  
  (这是一个简化的界面; 它不让人们指定哪个字符是escape. 但是, 几乎每个人都使用一个00000000asyncmap. 可以设置PPPOPTIONS使用一个专门的asyncmap.)
  
  HARDFLOWCTL=answer, 这里answer是以下之一:
  
  yes -- 使用硬件流控制.
  
  no -- 不使用硬件流控制.
  
  PPPOPTIONS=options, 这里 options 是一个选项字符串. 它放在命令行的最后, 可以覆盖以前定义的其他选项.
  
  PAPNAME=name, 这里name是pppd命令行 "name $PAPNAME"部分.
  注意 emotename选项总是指定为逻辑ppp设备名, 象ppp0 (如果其他ppp设备已经启动,它可能是物理设备ppp1), 它使管理pap/chap文件更容易 ---名称/口令对是和逻辑ppp设备名相关的, 它们可以一起管理.
  
  原则上, 逻辑PPP设备名可以是worldnet或myISP, 而不一定必须是``ppp0 -- ``pppN.
  
  REMIP=addr, 这里addr是远程IP地址(通常不指定).
  
  MTU=value, 这里value是MTU值.
  
  MRU=value, 这里value是MRU值.
  
  DISCONNECTTIMEOUT=value, 这里value 代表在连接中断后重新建立连接需要等待的秒数.
  
  RETRYTIMEOUT=value, 这里value 代表前一次连接失败后再次连接需要等待的秒数.
  
  /etc/sysconfig/network-scripts/chat-
  -- 这个文件是PPP或SLIP连接的对话script, 用来建立连接. 对于SLIP设备, 从对话 script写一个DIP script; 对于PPP设备, 直接使用对话script.
  
  /etc/sysconfig/network-scripts/dip-
  -- 这个只写script是netcfg从对话script创建的. 不要修改这个文件. 将来, 可能会没有这个文件, 将从对话script动态创建.
  
  /etc/sysconfig/network-scripts/ifup-post
  -- 这个文件在任何网络设备(除了SLIP设备)启动是被调用. 调用/etc/sysconfig/network-scripts/ifup-routes 启动基于那个设备的静态路由. 启动那个设备的别名. 如果主机名没有设置并可以从它的IP地址找到的话, 设置主机名. 发送SIGIO给任何请求网络事件通知的程序.
  可以扩展配置域名服务, 如果需要, 调用scripts等等.
  
  /etc/sysconfig/network-scripts/ifdhcpc-done
  -- 这个文件在DHCP 配置完成后被dhcpcd调用; 从dhcpcd在/etc/dhcpc/resolv.conf中写的版本可以配置/etc/resolv.conf.
  
  11.9.2 System V Init
  本节简单介绍启动的内部过程. 它主要包括机器如何用SysV init启动, 以及用旧的Linux版本和SysV启动的区别.
  
  Init是启动时运行内核的程序. 它负责启动所有在启动时需要运行的进程, 包括允许您登录的gettys, NFS管理器, FTP管理器,以及您想在机器启动时运行的任何事.
  
  SysV init很快成为Linux世界在启动时控制软件启动的标准. 这是因为它比传统的 BSD init更容易使用, 更有力和更灵活.
  
  SysV init和BSD init不同点还有, 配置文件存放在/etc的一个子目录而不是存放在/etc. 这个目录叫rc.d. 在那里您将发现 rc.sysinit 和以下目录:
  
  init.d
  rc0.d
  rc1.d
  rc2.d
  rc3.d
  rc4.d
  rc5.d
  rc6.d
  
  init.d包含一组script. 基本上, 您在启动时或进入另一个运行级别时, 每个service需要一个script. Services包括网络, NFS, 发送邮件, HTTPD等等. Services不包括象setserial这种运行一次就退出的事. 那种事应该放在rc.local或 rc.serial.
  
  如果您需要rc.local, 它应该在/etc/rc.d. 虽然它作用不大, 但大多数系统都有它. 如果您在启动时需要做串口方面的事, 您还可以在 /etc/rc.d中放一个rc.serial.
  
  事件的过程如下:
  
  内核在几个地方查找init并运行它找到的第一个
  init运行/etc/rc.d/rc.sysinit
  rc.sysinit做一组必需的事然后运行rc.serial (如果存在)
  init在默认运行级别运行所有的script
  init运行rc.local
  默认的运行级别在/etc/inittab中定义. 您应该在前面有一行类似:
  
  id:3:initdefault:
  
  在这里, 您看到第二栏, 默认运行水平是3, 大多数系统都是这样. 如果您想修改它您可以手工编辑/etc/inittab改掉3. 在改inittab时需要非常小心. 如果您陷入困境, 您可以重启动并:
  
  LILO boot: linux single
  
  这将允许您以单用户模式启动, 并可修改inittab.
  
  现在, 它如何运行所有正确的script? 如果您在rc3.d输入ls -l ,您可以看到:
  
  lrwxrwxrwx 1 root root 17 3:11 S10network -> ../init.d/network
  lrwxrwxrwx 1 root root 16 3:11 S30syslog -> ../init.d/syslog
  lrwxrwxrwx 1 root root 14 3:32 S40cron -> ../init.d/cron
  lrwxrwxrwx 1 root root 14 3:11 S50inet -> ../init.d/inet
  lrwxrwxrwx 1 root root 13 3:11 S60nfs -> ../init.d/nfs
  lrwxrwxrwx 1 root root 15 3:11 S70nfsfs -> ../init.d/nfsfs
  lrwxrwxrwx 1 root root 18 3:11 S90lpd -> ../init.d/lpd.init
  lrwxrwxrwx 1 root root 11 3:11 S99local -> ../rc.local
  
  您可以看到这个目录中没有真的文件, 只有对init.d目录中的script的连接. 这个连接在前面还有一个S和一个数字. S是指启动这个特定的script, K是指结束它. 数字是顺序. Init将根据顺序启动所有的services. 您可以重复数字, 但这只会把您搞混. 您只能用一个两位数字和一个大写的S或K来启动或结束您需要的 service.
  
  Init如何启动和结束service? 很简单. 每个script都写了一个接收参数用来启动 和结束. 您可以用命令行来执行这些script, 如:
  
  /etc/rc.d/init.d/httpd.init stop
  
  结束httpd服务器. Init只需读文件名, 如果有K, 它就用stop参数调用script. 如果有S,则用start参数. 那么运行级别呢? 有些想要一个简单的方法将机器设置成多用途. 我可以有一个服务器运行级别, 运行httpd, 发送邮件, 网络等等. 然后, 我可以有一个用户运行级别, 运行xdm等等.
  
  11.9.3 Init Runlevels
  一般的, Red Hat Linux运行在级别 3---完全多用户模式. Red Hat Linux使用以下运行级别:
  
  0
  停止.
  1
  单用户模式.
  2
  没有NFS的多用户模式.
  3
  完全多用户模式.
  6
  重启动.
  如果您的机器因为毁坏了/etc/inittab无法启动, 或者因为毁坏了/etc/passwd 不让您登录或者您忘了口令, 您可以在LILO提示下输入linux 1进入单用户模式. 您可以在这个模式下改正错误.
  
  11.9.4 Initscript工具
  chkconfig工具提供了一个简单的命令行的工具来维护/etc/rc.d 目录. 它使管理员不需要直接操作/etc/rc.d中的许多连接.
  
  另外, ntsysv工具提供了面向屏幕的用户界面.
  
  详情请参见chkconfig和ntsysv的man page.
  
  11.9.5 在启动时运行程序
  在启动时或者修改运行级别时, 当所有的其他初始化完成后, 将执行文件/etc/rc.d/rc.local. 您可以在这增加新的初始程序. 例如, 您想启动更多的管理工具, 或者初始化打印机. 另外, 如果您需要串口设置, 您可以编辑/etc/rc.d/rc.serial, 它将在启动时自动运行.
  
  默认地, /etc/rc.d/rc.local简单地用您的内核版本和机器类型创建一个好看的登录标志.
  
  11.9.6 关闭
  要关闭Red Hat Linux, 发出shutdown命令. 您可以阅读shutdown man page 得到完整的信息, 但是有两个最常见的用法:
  
  shutdown -h now
  shutdown -r now
  
  每个都会干净地关闭系统. 在关闭之后, 前者会停止机器, 后者将重启动.
  
  虽然现在如果运行在级别1至5, 可以用reboot和halt 命令来替代shutdown, 但这是一个坏习惯, 因为并不是所有类Linux的操作系统都有这个特性.
  
  摘自:http://www.hf.ah.cn/computer/linux51/doc085.htm#i691
php爱好者站 http://www.phpfans.net dreamweaver|flash|fireworks|photoshop.










