linux系统怎么初始化

详解Linux系统中的进程初始化配置文件inittab /etc/inittab文件描述了哪些进程开始启动并正常运行inittab为linux初始化文件系统时init初始化程序用到的配置文件这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机关机重启对应的命令;各运行级登陆时所运行的命令
inittab文件中的条目的格式如下:
label:runlevels:action:process 下面分别介绍各个字段
1.label
label 是一个独特的序列,确定了一个条目1 - 4字符,一些系统只支持2个字符的标签对于getty或mingetty等其他login程序项,要求label与tty的编号相同,否则getty程序将不能正常工作
常用标签有:
id 用来定义缺省的init运行的级别
si 是系统初始化的进程
ln 其中的n从1~6,指明该进程可以使用的runlevel的级别
ud 是升级进程
ca 指明当按下Ctrl+Alt+Del时运行的进程
pf 指当UPS表明断电时运行的进程
pr 是在系统真正关闭之前,UPS发出电源恢复的信号时需要运行的进程
x 是将系统转入X终端时需要运行的进程
2.runlevels
runlevels 列出了运行级,指定应该采取的动作可以指定多个runlevel级别,也可以不为runlevel字段指定特定的值
runlevel 0是让init关闭所有进程并终止系统
runlevel 1是用来将系统转到单用户模式,单用户模式只能有系统管理员进入,在该模式下处理那些在有登录用户的情况下不能进行更改的文件,改runlevel的编号1也可以用S代替
runlevel 2是允许系统进入多用户的模式,但并不支持文件共享,这种模式很少应用
runlevel 3是最常用的运行模式,主要用来提供真正的多用户模式,也是多数服务器的缺省模式
runlevel 4一般不被系统使用,用户可以设计自己的系统状态并将其应用到runlevel 4阶段,尽管很少使用,但使用该系统可以实现一些特定的登录请求
runlevel 5是将系统初始化为专用的X Window终端对功能强大的Linux系统来说,这并不是好的选择,但用户如果需要这样,也可以通过在runlevel启动来实现该方案
runlevel 6是关闭所有运行的进程并重新启动系统
debian6以后默认没有运行/etc/inittab 文件 默认级别为2-5归为一类
3.action
action 字段定义了该进程应该运行在何种状态下,描述其后的process的运行方式的:
respawn 不管何时终止都重新启动进程
wait 运行进程等待输入运行模式 这个过程将会开始一次运行级别时指定输入和init将等待其终止
once 每一个runlevel级别运行一次 这个过程将执行一次当指定输入runlevel
boot 在系统启动时运行,忽略runlevel
bootwait 在系统启动时运行,init等待进程完成忽略runlevel
ctrlaltdel 当Ctrl+Alt+Del三个键同时按下时运行,把SIGINT信号发送给init忽略 runlevel
initdefault 不要执行这个进程,它用于设置默认runlevel
kbrequest 当init从键盘中收到信号时运行这里要求键盘组合符合KeyBoardSigra
off 禁止进入,因此该进程不运行
once 每一个runlevel级别运行一次
ondemand 当系统指定特定的运行级别ABC时运行
powerfail 当init收到SIGPWR信号时运行
powerokwait 当收到SIGPWD信号且/etc/文件中的电源状态包含OK时运行
powerwait 当收到SIGPWD信号,并且init等待进程结束时运行
sysinit 在运行boot或bootwait进程之前运行
4.process
process字段包含init执行的进程,该进程采用的格式与在命令行下运行该进程的格式一样,因此process字段都以该进程的名字开头,紧跟着是运行时要传递给该进程的参数
代码如下:
# /etc/inittab: init
(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
代码如下:
# The default runlevel.
id:2:initdefault: #表示当前缺省运行级别为2
代码如下:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS #系统初始化的进程
代码如下:
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
代码如下:
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
代码如下:
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin
代码如下:
# What to do when CTRL-ALT-DEL is pressed. #在启动过程中是否允许按CTRL-ALT-DELETE重启系统
#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
代码如下:
# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
代码如下:
# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
代码如下:
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# :::
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
# getty进程来提供虚拟终端设备的服务
1:2345:respawn:/sbin/getty 38400 tty1
代码如下:
#标签字段的值是1,1是设备tty1的数字后缀,tty1与相应的进程相关联,该getty进程可以启动的runlevel是2,3,4和5,当该进程终止时,init马上就重新启动它启动进程的路径名是/sbin/getty,该进程是实现虚拟终端支持的最小版本的getty,为tty1提供启动虚拟设备的进程
2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
T1:23:respawn:/sbin/getty -L ttyS1 115200 vt100
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
5.示例
代码如下:
# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# End /etc/inittab

linux文件系统怎样初始化步骤System V init启动过程
概括地讲,Linux/Unix系统一般有两种不同的初始化启动方式.
1) BSD system init
2) System V init
大多数发行套件的Linux使用了与System V init相仿的init也就是Sys V init,它比传统的BSD system init更容易且更加灵活
System V init的主要思想是定义了不同的"运行级别(runlevel)"通过配置文件/etc/inittab定义了系统引导时的运行级别, 进入或者切换到一个运行级别时做什么每个运行级别对应于一个子目录/etc/rc.d/rcX.d
每个rcX.d目录中都是一些以S或K开头的文件链接这些链接指向的脚本都 可以接收start和stop参数,S开头的链接会传入start参数,一般是开启一项服务,K会传入stop参数,一般是停止某服务
以下是一个大致的System V init过程:

(1)init 过程执行的第一个脚本是 /etc/rc.d/rc.sysinit,它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统;加载并初始化硬件模块.

(2)执行缺省的运行级别模式 这一步的内容主要在/etc/inittab中体现, inittab文件会告诉init进程要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件.

(3)执行/etc/rc.d/rc.local脚本文件 这也是init过程中执行的最后一个脚本文件,所以用户可以在这个文件中添加一些需要在登录之前执行的命令.

(4)执行/bin/login程序
注意:
System V init只是一种模式,每个系统初始化都有差异,但大体上不会相差太多如busybox执行的第一个启动脚本就是/etc/init.d/rcS,而且不可以改变,与上面讲的不同
LFS文件系统初始化示例
inittab文件
由下内容可以看出,最先执行的是/etc/rc.d/init.d/rc文件,给这个文件传入的参数是一个数字,rc会由传入的数字合成rcX.d目录的路径,然后执行其中的所有脚本链接当然这只是一部分功能
# Begin /etc/inittab
id:3:initdefault:
<em><strong>si::sysinit:/etc/rc.d/init.d/rc sysinit</strong></em> #可以设定初始化脚本
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
...
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
...
# End /etc/inittab

etc目录结构
只是一部分,有删减
.
fstab
<em>inittab</em>
inputrc
profile
rc.d
init.d
checkfs
cleanfs
...
modules
mountfs
mountkernfs
network
rc #when boot, run.
reboot
...
rc0.d
K80network -> ../init.d/network
K90sysklogd -> ../init.d/sysklogd
S60sendsignals -> ../init.d/sendsignals
S70mountfs -> ../init.d/mountfs
S80swap -> ../init.d/swap
S90localnet -> ../init.d/localnet
S99halt -> ../init.d/halt
rc1.d
K80network -> ../init.d/network
K90sysklogd -> ../init.d/sysklogd
rc2.d
K80network -> ../init.d/network
K90sysklogd -> ../init.d/sysklogd
rc3.d
S10sysklogd -> ../init.d/sysklogd
S20network -> ../init.d/network
rc4.d
S10sysklogd -> ../init.d/sysklogd
S20network -> ../init.d/network
rc5.d
S10sysklogd -> ../init.d/sysklogd
S20network -> ../init.d/network
rc6.d
K80network -> ../init.d/network
K90sysklogd -> ../init.d/sysklogd
S60sendsignals -> ../init.d/sendsignals
S70mountfs -> ../init.d/mountfs
S80swap -> ../init.d/swap
S90localnet -> ../init.d/localnet
S99reboot -> ../init.d/reboot
rcsysinit.d
S00mountkernfs -> ../init.d/mountkernfs
S02consolelog -> ../init.d/consolelog
S05modules -> ../init.d/modules
...
udev
rules.d
55-lfs.rules
udev.conf
vimrc

network脚本
#!/bin/sh

. /etc/sysconfig/rc
. ${rc_functions}
. /etc/sysconfig/network

case "${1}" in
start)
# Start all network interfaces
for file in ${network_devices}/ifconfig.*
do
interface=${file##*/ifconfig.}

# skip if $file is * (because nothing was found)
if [ "${interface}" = "*" ]
then
continue
fi

IN_BOOT=1 ${network_devices}/ifup ${interface}
done
;;

stop)
# Reverse list
FILES=""
for file in ${network_devices}/ifconfig.*
do
FILES="${file} ${FILES}"
done

# Stop all network interfaces
for file in ${FILES}
do
interface=${file##*/ifconfig.}

# skip if $file is * (because nothing was found)
if [ "${interface}" = "*" ]
then
continue
fi

IN_BOOT=1 ${network_devices}/ifdown ${interface}
done
;;

restart)
${0} stop
sleep 1
${0} start
;;

*)
echo "Usage: ${0} {start|stop|restart}"
exit 1
;;
esac

# End /etc/rc.d/init.d/network



(随机推荐阅读本站500篇优秀文章点击前往:500篇优秀随机文章)
来源:本文由易搜IT博客原创撰写,欢迎分享本文,转载请保留出处和链接!