所有由rc脚本关闭或启动的链接文件的原文件都存在于/etc/rc.d/init.d,系统为了方便使用,为此目录创建了链接/etc/init.d
所有/etc/inid.d(/etc/rc.d/init.d)目录中的脚本执行方式:
# /etc/init.d/srv_script {start|stop|restart|status}
# service srv_script {start|stop|restart|status}
chkconfig命令:
chkconfig - updates and queries runlevel information for system services
查看系统服务相关运行级别下的运行状态;
chkconfig [--list] [name]
管理系统服务在/etc/rc.d/rc#.d/目录下的服务脚本的链接:
chkconfig --add name
chkconfig --del name
为了能够让chkconfig命令管理系统服务的脚本的链接,每个脚本中都必须有这样的格式;
# chkconfig:2345 90 60
2345:在哪个运行级别下,此服务是自动启动状态;也就是说,在对应的运行级别的rc#.d目录中,是以S开头的文件;如果该位置为“-”,则表示所有运行级别都是为K开头的;
90:如果在某个运行级别下为开启状态,该数字为S后面的优先级数字
60:如果在某个运行级别下为停止状态,该数字为K后面的优先级数字
# description:对于此系统服务的摘要性描述信息;
单独设置指定运行级别下系统服务的摘要性描述信息:
chkconfig [--level levels] name <on|off|reset>
/etc/rc.d/rc.local脚本:
是init程序在引导用户空间进程启动的过程中,所执行的最后一个脚本;因为,不便于或不需要写在系统服务相关的脚本中的内容但又期望可以开机即运行的功能,可以直接写在此脚本中;
rc.local脚本:
是init程序在引导用户空间进程启动的过程中,所执行的最后一个脚本;因为,不便于或不需要写在系统服务相关的脚本中的内容但又期望可以开机即运行的功能,可以直接写在脚本中;
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
6
mingetty会调用login程序,打开虚拟终点;除了mingetty之外,诸如getty之类的程序也可以生成虚拟终端控制台;
如果默认的运行级别时5,则我们需要/etc/x11/prefdm脚本打开图形界面终点:
X6R11 - X Version 6 Release 11
小结:(用户空间的启动流程),/sbin/init
/sbin/init --> /etc/inittab -->设置默认运行级别 --> /etc/rc.d/rc.sysinit脚本,完成系统初始化 --> 关闭那些对应运行级别下需要停止的服务,启动那些对应运行级别下需要开启的服务 --> Ctrl+Alt+del热键功能 --> UPS电源的失效与恢复之后的操作 --> 生成终端[启动图形界面]
centos 6:
init程序:upstart,其应用程序依然是/sbin/init,其配置文件;
/etc/inittab:仅仅只是用于定义默认运行级别;
/etc/init/*.conf:
rcS.conf:执行系统初始化脚本的任务;
rc.conf:执行根据运行级别关闭或开启系统服务的任务;
start-ttys.conf:执行打开终端相关的任务;
prefdm.conf:执行大小图清洁棉的任务;
upstart机制:基于事件驱动的程序管理模型;driven-envet
centos 6 系统启动流程:
post --> bootsequence(BIOS)--> BootLoader --> kernel [-->ramfs] -->rootfs(ro)--> /sbin/init -->设置默认级别 --> 系统初始化 --> 可以并行执行Ctrl+Alt+del热键功能定义,系统服务器的开启和关闭,电源管理,dubs管理等 --> 登录提示符
centos 7:
inIT程序:systemd,与经典的init程序完全不同;其配置文件;
/etc/systemd/system/*
/usr/lib/systemd/system/*:systemdd 的unit文件;
/etc/inittab:彻底被废弃;
systemd完全兼容sysV风格的inIT程序及其脚本;因为service类的命令在centos7中依然可用;但是,建议使用centos7标配的systemctl命令来控制和管理系统服务;
systemctl命令:
systemctl - Control the systemd system and service manager
systemctl [OPTIONS...] COMMAND [NAME...]
使用systemctl管理服务的一般方式:
systemctl {start|stop|restart|status} name[.service]
设置centos 7的默认运行级别:
~]# systemctl get-default {multi-user.target | graphical.targer}
查看centos 7的默认运行级别:
~]# systemctl get-default
总结:
post --> bootsequence --> BootLoader --> kernel --> rootfs --> init
grub:legacy:
1st stage:stage1,MBR的前446bytes;
1.5 stage:MBR之后的若干个扇区中;让stage1中的BootLoader程序能够识别stage所在的分区的文件系统;
2nd stage:stage2,磁盘的启动分区,
注意:stage2及内核核心文件必须放置在同一个基本磁盘分区上;
stage2提供的功能:
1.加载操作系统内核核心文件;
2.提供一个菜单和交互式接口;
3.允许用户编辑菜单内容;
4.命令行接口操作模式;
5.身份认证机制,以保证菜单编辑和内核启动的安全;
grub的命令行界面:
grub>
grub的命令行界面中的常用命令:
help:获取所有的grub命令的名称列表和简要使用方法;
help grub_cmd: 显示特定命令的详细帮助信息;
root (hd#,#):将指定磁盘的制定分区作为grub程序的根设备;
hd#:磁盘编号,#一般是从0开始的数字;如hd0表示第一块磁盘;
#:分区编号,#一般是从0开始的数字,如0表示第一个分区;
(hd0,0):当前计算机上的第一块磁盘的第一个分区;
find (hd#,#):从指定的分区中搜索文件,并显示出文件所在位置;
kernel /path/to/kernel_core_file:设定本次启动时用到的内核文件的绝对路径;额外还可以在kernel命令中,为内核启动添加更多的内核参数;
ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}
initrd /path/to/initramfs-version-release.img
grub的配置文件:
/boot/grub/grub.conf <-- /etc/grub.conf
default=0
设定默认启动菜单项;整个菜单中的所有的title是从0开始编号的;
timeout=5
用户未做出选择时,grub会自动引导默认菜单对应的内核的超时时间;
splashimage=(hd0,0)/grub/splash.xpm.gz
grub的北京图片对应的路径;
hiddenmenu
隐藏菜单
password --md5 CRYPTED_PASSWORD
为了保护菜单设置的密码,通常用于防止随意进入单用户模式;
title CentOS 6 (2.6.32-573.el6.x86_64)
定义菜单项中的各个“标题”,可以定义多个title项;至少有一项;
root (hd0,0)
指定grub的根设备,通常是用来安装grub的那个分区;
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=4e82764c-11aa-4e68-9f3a-1a821f5db868 nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
该菜单对应的要启动的内核及传递给内核的各个参数;
initrd /initramfs-2.6.32-573.el6.x86_64.img
内核所对应的ramdisk(ramfs)文件
password --md5 CRYPTED_PASSWORD
保护操作系统内核的启动;
自制小Linux:
1.在某个正常运行的centos里添加一块硬盘;
2.对硬盘分区,创建相应的文件系统,并挂载(/mnt/root,/mnt/sysroot);
3.安装grub程序,
# grub-install --root-directory=/mnt(boot的父目录)/dev/sdb
4.为小Linux的根分区创建目录层级结构;mkdir -pv /mnt/sysroot/{bin,boot,dev,etc,lib,lib64,proc,sys,mnt,media,tmp,var,usr,sbin}
5.复制内核文件及ramdisk文件到目标系统的启动分区;
# cp /boot/vmlinuz-version-release /mnt/boot
# cp /boot/initramfs-version-release.img /mnt/boot
6.给grub提供配置文件:
default=0
timeout=10
title mylinux (1.0.0)
root (hd0,0)
kernel /vmlinuz-version-release ro root=/dev/sda3 selinux=0 init=/bin/bash
initrd /initramfs-version-release.img
7.将/bin/bash及其共享库文件,复制到/mnt/sysroot下对应的目录中;除此之外,还可以复制其他的各应用程序及相应的共享库文件;
8.多执行几次sync命令,使得内存中缓存或缓冲的数据被保存到磁盘上;
9.新建虚拟机,将小硬盘作为新虚拟机的硬盘使用;将宿主系统挂机之后,再启动小Linux即可;
小实验:
破坏grub,在重启之前可以使用下列方法恢复;
1.# grub-install --root-directory=/ /dev/sda
2.# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
#
破坏grub或者grub。conf配置文件,重启之后无法正确引导内核;可以使用光盘或U盘等其他的引导设备将系统引导起来,并进入rescue模式,其他操作方法如上。
post --> bootsequence(BIOS) --> BootLoader(grub,mbr-stage1) --> stage1.5 --> stage2 --> kernel --> init
chkconfig:检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
选项:
--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;
--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据;
--level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。
等级代号列表:
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
例子:
chkconfig --list(列出所有的系统服务。)
chkconfig --add httpd(增加httpd服务。)
chkconfig --del httpd(删除httpd服务。)
chkconfig --level httpd 2345 on(设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。)
chkconfig --list(列出系统所有的服务启动情况。)
chkconfig --list mysqld(列出mysqld服务设置情况。)
chkconfig --level 35 mysqld on(设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。)
chkconfig mysqld on(设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。)
grub:多重引导程序grub的命令行shell工具。
选项:
--batch:打开批处理模式;
--boot-drive=<驱动器>:指定stage2的引导驱动器;
--config-file<配置文件>:指定stage2的配置文件;
--device-map=<文件>:指定设备的映射文件;
--help:显示帮助信息;
--install-partition=<分区>:指定stage2安装分区;
--no-config-file:不使用配置文件;
--no-pager:不使用内部分页器;
--preset-menu:使用预设菜单;
--probe-second-floppy:检测第二个软盘驱动器;
--read-only:只读模式。
例子:
root (hd0,1)(假设 /dev/hda2 是你的 /boot 所在的分区 */)
kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3(假设 /dev/hda3 是你的 / 所在的分区 */)
initrd /boot/initrd.img-2.6.15-26-386
boot