一、linux 组成介绍
1.linux 组成:
Linux: kernel+rootfs(根文件系统)
kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs: 程序和glibc
库:函数集合, function, 调用接口(头文件负责描述)
过程调用: procedure,无返回值
函数调用: function
程序:二进制执行文件
2.内核设计流派:
单内核(monolithic kernel): Linux
把所有功能集成于同一个程序
微内核(micro kernel): Windows, Solaris
每种功能使用一个单独子系统实现
3. Linux内核特点:
支持模块化: .ko(内核对象)
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
组成部分:
核心文件: /boot/vmlinuz-VERSION-release (出厂时,直接从光盘中拷贝而得)
ramdisk:辅助的伪根系统
(包含各类驱动,以供启动时加载真正的根文件系统)
/boot/initramfs-######.img (系统安装之时才会生成)
=============================================================================================================
centos 6.8-initramfs-2.6.32-642.el6.x86_64.img 简析:
(initramfs-2.6.32-642.el6.x86_64.img 以gzip格式压缩,解压时候,需要在尾部添加.gz后缀)
解压后:
使用cpio 解压: ( cpio -id < initramfs-2.6.32-642.el6.x86_64.img.cpio)
initramfs 作为临时伪根文件系统,有类似于根的各类所需文件、驱动,可供启动时候加载真正的根文件系统
==============================================================================================================
CentOS 5: /boot/initrd-VERSION-release.img
修复:
救援模式下,
chroot /mnt/sysimage
cd /boot
mkinitrd initrd-`uname -r`.img `uname -r` (centos5 )
(第二个uname -r ,是作为initrd 的参数)
exit
CentOS 6,7: /boot/initramfs-VERSION-release.img
修复: (centos 6 )
救援模式下,
chroot /mnt/sysimage
cd /boot
mkinitrd initramfs-`uname -r`.img `uname -r` (centos6)
exit
( centos 7 需要进入grub 修复:)
模块文件: /lib/modules/VERSION-release
命令补充: lsmod 查看加载的模块;
moinfo 查看指定模块信息
modprobe 加载模块;
rmmod / modprobe -r 卸载模块
===============================================================================================================
二、linux 系统启动流程详解:
1. Centos 6 启动流程
2. centos6 启动流程
1.加载BIOS的硬件信息,获取第一个启动设备。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,(加载initramfs.img)并尝
试驱动所有的硬件设备。
4.核型执行init程序并获取运行信息。
5.Init执行/etc/rc.d/rc.sysinit文件。
6.启动核心的外挂模块(/etc/modprobe.conf)。
7.Init执行运行的各个批处理文件(scripts).
8.Init执行/etc/rc.d/rc.local. (出现登陆界面)
9.执行/bin/login程序,等待用户登录。
10.登录之后开始以Shell控制主机。
3. 启动流程详解:
系统整体初始化流程:
POST –> BootSequence (BIOS) –>
Bootloader(MBR) –>(进入/boot) kernel(ramdisk) –> rootfs(只读) —
> init( systemd)
POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部
分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接
口、键盘、 CD-ROM光驱等硬件情况的检测。
ROM: BIOS, Basic Input and Output System,保存着有关计
算机系统最重要的基本输入输出程序,系统信息设置、 开机加电自检程序和
系统启动自举程序等。
RAM: CMOS互补金属氧化物半导体,保存各项参数的设定
按次序查找引导设备,第一个有引导程序的设备为本次启动设备
bootloader: 引导加载器,引导程序 (MBR第一个扇区)
windows: ntloader,仅是启动OS
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内
核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把
系统控制权移交给内核
LILO: LInux LOader(早期)
GRUB: GRand Unified Bootloader
GRUB 0.X: GRUB Legacy, GRUB2
MBR:
446: bootloader, 64: 分区表, 2: 55AA
(446字节内可寻找到bootloader所在盘区)
GRUB:(grub 目录下,存放着各阶段的备份文件)
primary boot loader :
1st stage–》 加载bootloader
1.5 stage–> 进入/boot目录,加载vmlinux,initramfs
secondary boot loader :
2nd stage, 读取分区根文件系统
kernel:
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序(可能借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序: /sbin/init
4.init程序的类型:
SysV: init, CentOS 5之前
配置文件: /etc/inittab
Upstart: init,CentOS 6
配置文件: /etc/inittab, /etc/init/*.conf
Systemd: systemd, CentOS 7
配置文件: /usr/lib/systemd/system
/etc/systemd/system
ramdisk:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
ramdisk –> ramfs 提高速度
CentOS 5: initrd, 工具程序: mkinitrd
CentOS 6: initramfs, 工具程序: mkinitrd, dracut(实际调用文件)
5. 运行级别
运行级别配置路径: /sbin/init (CentOS 5 )
(/etc/inittab 下可以定义默认启动界面A)
运行级别:为系统运行或维护等目的而设定; 0-6: 7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别: 3, 5
切换级别: init #
查看级别: runlevel ; who -r
6.init 初始化过程详解
1) init 初始化流程:
init读取其初始化文件: /etc/inittab
初始运行级别(RUN LEVEL)
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别5初始化X
2) CentOS5的inittab文件详解:
配置文件路径: /etc/inittab
———————————————————————————-
Centos 5.4 —–/etc/inittab:
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <[email protected]>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown
Cancelled"
# 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
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
———————————————————————————
centos 6—–/etc/inittab:
# Default runlevel. The runlevels used are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
——————————————————————————————
每一行定义一种action以及与之对应的process
id:runlevel:action:process
id:它是每个登记项的标识符,用于唯一标识每个登记项,不能重复
runlevels:系统的运行级别,表示process的action要在哪个级别下运行,该段中可以定义多个运行级别,
各级别之间直接写不用分隔符;如果为空,表示在所有的运行级别运行。Linux的运行级别有:
0:表示关机
1:表示单用户模式,在这个模式中,用户登录不需要密码,默认网卡驱动是不被
加载,一些服务不能用。
2:表示多用户模式,NFS服务不开启
3,表示命令行模式
4,这个模式保留未用
5,表示图形用户模式
6,表示重启系统
action:表示对应登记项的process在一定条件下所要执行的动作。
具体动作有:
respawn:当process终止后马上启动一个新的
wait:当进入指定的runlevels后process才会启动一次,并且到离开这个
runlevels终止
initdefault:设定默认的运行级别,即我们开机之后默认进入的运行级别,
不能是0,6
sysinit:系统初始化,只有系统开机或重新启动的时候,
这个process才会被执行一次
powerwait:当init接收到电源失败信号的时候执行相应的process,
并且如果init有进程在运行,会等待这个进程完成之后,再执行相应的process
powerfail:当init接收到电源失败信号的时候执行相应的process,并且如果
init有进程在运行,不会等待这个进程完成,它会直接执行相应的process
powerokwait:电源已经故障,但是在等待执行对应操作的时候突然来电了就执行对应
的process
powerfailnow:当电源故障并且init被通知UPS电源已经快耗尽执行相对应的process
ctrlaltdel:当用户按下ctrl+alt+del这个组合键的时候执行对应的process
boot:只有在引导过程中,才执行该进程,但不等待该进程的结束;当该进程死亡时,
也不重新启动该进程
bootwait:只有在引导过程中,才执行该进程,并等待进程的结束;当该进程死亡时,
也不重新启动该进程
off:如果process正在运行,那么就发出一个警告信号,等待20秒后,
再通过杀死信号强行终止该process。如果process并不存在那么就忽略该登记项
once:启动相应的进程,但不等待该进程结束便继续处理/etc/inittab文件中的下一个
登记项;当该进程死亡时,init也不重新启动该进程
process:表示启动哪个程序或脚本或执行哪个命令等
—————————————————————————————–
centos 5.4 –/etc/inittab内容示例:
id:3:initdefault: # 定义默认运行级别
si::sysinit:/etc/rc.d/rc.sysinit # 系统初始化脚本
l0:0:wait:/etc/rc.d/rc 0 # 对应不同运行级别的启动脚本
l1:1:wait:/etc/rc.d/rc 1…
l6:6:wait:/etc/rc.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t3 -r now #定义快捷键操作
# 按下快捷键3秒后重启系统
——————————————————————————————
3) CentOS6 /etc/inittab和相关文件
(CentOS6中,已经不再定义其他内容,进有默认开机启动流程,转用下列脚本来完成
原有执行操作)
/etc/inittab
设置系统默认的运行级别
id:3:initdefaut:
/etc/init/control-alt-delete.conf # 定义快捷键操作
/etc/init/tty.conf #tty 终端配置脚本
/etc/init/start-ttys.conf #登录脚本
/etc/init/rc.conf #运行级别配置脚本
/etc/init/prefdm.conf #定义级别5中的图形界面启动的脚本
4) /etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit: 在所有运行级别下,init 依赖/rc.sysinit 进行系统初始化
作用:
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
5)rc 脚本
说明: rc N –> 意味着读取/etc/rc.d/rcN.d/下脚本
(服务若在指定模式下为开启,在对应级别的rc#.d 中,为S开头,反之为K开头)
(K/S后以字符顺序排列)
(目录下全部文件均为软链接,源为init.d下的对应脚本)
K*: K##*: ##运行次序;数字越小,越先运行;数字
越小的服务,通常为依赖到别的服务
S*: S##*: ##运行次序;数字越小,越先运行;数字
越小的服务,通常为被依赖到的服务
s|k 开头脚本内容示例:
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
=================================================================================================================================
三、chkconfig命令
chkconfig命令
(设置开启 | 关闭状态后,会在对应级别中生成 s| k 开头的服务文件)
查看服务在所有级别的启动或关闭设定情形:
chkconfig [–list] [name]
添加:(可添加自编服务脚本)
1.SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
(无需在结尾添加.sh)
2.服务脚本内容示例:
#!/bin/bash
# chkconfig: LLLL nn mm
#LLLL 表示初始在哪个级别下启动, -表示都不启动
nn : 启动顺序号(建议自编服务号为较大数字)
mm : 关闭时的顺序号
3.chmod +x …..
4.chkconfig –add service_name
5.service ## start 即可测试添加服务脚本
删除:
chkconfig –del name
修改指定的链接类型
chkconfig [–level levels] service_name <on|off|reset>
–level LLLL: 指定要设置的级别;省略时表示2345
eg:
chkconfig –level 5 atd on | off
ntsysv命令 :(交互式服务调整,一次只能进入一个模式,默认为当前模式)
–level=# 可进入指定模式下调整
=====================================================================================================================================
四、xinetd管理服务与自定义服务
(xinetd: 超级守护进程 , 7已经取消,仅在5、6中还存在)
配置文件: /etc/xinetd.conf
瞬态( Transient)服务(非独立服务,不可独立工作)被xinetd进程所管理:
启动|关闭: 由xinetd 检查chkconfig中对应服务配置,管理其自启动状态
工作(监听): 依赖于xinetd运行,对应服务的请求,首先被xinetd代理监听,
xinetd收到请求才唤醒对应服务
chkconfig –list 中 xinetd 管理的瞬态服务项目:
修改服务自启动:/etc/xinetd.d/<service>:
修改disable 即可
或者使用chkconfig 开启也可以。
与libwrap.so文件链接
用chkconfig控制的服务:
chkconfig tftp on
service 命令:手动管理服务
service 服务 start|stop|restart
service –status-all
==========================================================================================================================================
五、/etc/rc.d/rc.local脚本
注意:正常级别下,最后启动一个服务S99local没有链接至
/etc/rc.d/init.d一个服务脚本,而是指向了
/etc/rc.d/rc.local脚本
不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且
又想开机时自动运行的命令,可直接放置于
/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local在指定运行级别脚本后运行
可以根据情况,进行自定义修改
centos 5—tty 终端配置(/etc/inittab中的内容)
1:2345:respawn:/usr/sbin/mingetty tty1
2:2345:respawn:/usr/sbin/mingetty tty2
…
6:2345:respawn:/usr/sbin/mingetty tty6
mingetty会自动调用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon
六、破解root口令
启动菜单–》 按“a”–> 输入: 1|S |s |single –>进入单用户模式(root) ,此模式下,直接以root身份登录,
且无需输入密码,使用passwd命令即可修改密码