概括地讲,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
1. 设置用户:用户名是系统中一个独一无二也叫登陆名。以及和它相对应的password由6-8位组成。以使用户可以通过 password来登陆系统。同时,还有用户的家目录。是用户登陆以后的主目录。还有用户的shell包
括:Bourne shell Korn shell C shell Z shell BASH shell TC shell。用户初始化
文件用来定制用户的工作环境。
2. 用户名的组成由26个大小写字母和10个数字组成。用户名不能包括下划线和空格。同时UID的范围为100-60000所有的UID必须是唯一的。GID的范围也是100-60000。
3. 通过admintool管理用户可以包括一下方
面:Users Groups Hosts Printers Serial ports Software。Admintool必须用ROOT
用户登陆。Admintool&。使用命令修改锁定用户:passwd –l username在 /etc/shadow 中password
一项的正常显示变为*LK*表示用户已经被锁定。
Passwd中各列为:
loginID:x:UID:GID:comment:home_directory:login_shell
root UID:0 超级用户帐号,几乎没有任何约束并且不考虑其他所有的登陆,保护和许可;可以进入系统访问
daemon UID:1 控制后台进程的系统帐号
bin UID:2 管理大部分命令的帐号
sys UID:3 管理许多系统文件的帐号
adm UID:4 管理某些管理文件的帐号
lp UID:71 打印服务帐号
smtp UID:0 smtp邮件者使用简单网络管理协议。SMTP是INTERNET标准协议
uucp UID:5 为UNIX-to-UNIX拷贝程序(UUCP)捆绑数据文件和目标的帐号
nuucp UID:6 使用远程系统登陆到主机传送文件的帐号
listen UID:37 网络监听帐号
nobody UID:60001 匿名帐号,当独立于root用户建立一个需求时分派NFS服务器。nobody帐号分派软件进程时不需要任何特殊的权限。
noaccess UID:60002 需通过一些应用程序而不登陆系统时,为了访问系统而为一个用户或者进程分派的帐号
nobody4 UID:65534 SunOS4.0或者4.1的匿名帐号
/etc/shadow文件
loginID:password:lastchg:min:max:warn:inactive:expire
/etc/group文件
groupname:group-password:GID:username-list
在CentOS 5.X / RHEL 5.X中,可以用mkinitrd命令来创建初始化内存盘文件,举例如下:# mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)
如果你想要给特定的内核版本创建初始化内存盘,你就用所需的内核名替换掉 uname -r。
在CentOS 6.X / RHEL 6.X中,则用dracut命令来创建初始化内存盘文件,举例如下:
# dracut -f
以上命令能给当前的系统版本创建初始化内存盘,给特定的内核版本重建初始化内存盘文件则使用以下命令:
# dracut -f initramfs-2.x.xx-xx.el6.x86_64.img 2.x.xx-xx.el6.x86_64
请参考《Linux就该这么学》入门书籍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)