POST(post on self test) --> BIOS(boot sequence) --> MBR(BootLoader,446 Bytes) --> Kernel(接管硬件) -->initrd --> (rootfs)/sbin/init(/etc/inittab)
运行级别(启动服务不同)
0 halt
1 single user mode, 直接以root身份切入
2 multi user mode, no NFS
3 multi user mode, text mode
4 reserved
5 mutil user mode, graphic mode
6 reboot
查看运行级别
runlevel
who -r
查看内核release号
uname -r
BootLoader(MBR)
LILO: LInux LOader
GRUB: GRand Unified BootLoader
Stage1:MBR
Stage1_5:
Stage2:/boot/grub
文件系统
进程管理
内存管理
网络管理
安全功能
驱动程序
Kernel挂载rootfs
/ -->rootfs (普天之下莫非王土)
/usr
/boot
/home
RedHat
核心:动态加载 内核模块
内核: /lib/modules/"内核版本号命令的目录"/
/lib/modules/3.10.0-514.el7.x86_64/kernel
内核设计风格
单内核 Linux
核心: ko kernel object
so shared object
微内核 Windows
Kernel初始的过程
1.设备探测
2.驱动初始化(initrd(initramfs)装载驱动)
3.以只读方式挂在根文件系统
4.装载第一个进程init(PID:1)
upstart ubuntu d-bus
systemd
/etc/rc.d/rc.sysinit
1.激活udev和selinux
2.根据/etc/sysctl.conf,设置内核参数
3.设定时钟
4.装载键盘映射
5.启用交换分区
6.设置主机名
7.根文件系统检测,读写方式重新挂载
8.激活RAID和LVM
9.启用磁盘配额
10./etc/fstab,检查并挂载其他文件系统
11.清理过期的锁和pid文件
/proc
/sys
/dev
ramdisk --> initrd
ramfs --> initramfs
chroot -临时目录作为 /
1.mkdir -p /test/virroot
2.cp /bin/bash /test/virroot/bin/bash
3.ldd /bin/bash
linux-vdso.so.1 => (0x00007ffeb35b5000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f19cf1ec000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f19cefe8000)
libc.so.6 => /lib64/libc.so.6 (0x00007f19cec1b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f19cf416000)
cp到/test/virroot/lib64下
4.chroot /test/virroot
chroot
ldd /path/to/binary_file
OS初始化:
服务类脚本
/etc/init.d > /etc/rc.d/init.d
SysV : /etc/rc.d/init.d
start|stop|restart|status
reload|configtest
chkconfig: runlevel SS KK
当chkconfig命令为此脚本在rc#.d目录创建链接是,runlevels
表示默认创建为S*开头的链接,除此之外的级别默认创建以K*开头的链接
runlevels - 表示没有级别,默认以S*开头,其余的以K*开头
chkconfig --list 查看所有独立守护服务的启动设定
cp SERVICE_NAME 到 /etc/rc.d/init.d
chkconfig --list SERVICE_NAME
chkconfig --add SERVICE_NAME 添加到checkconfig可以控制的独立守护进程
chkconfig --del SERVICE_NAME
chkconfig --add myservice
chkconfig --level RUNLEVELS SERVICE_NAME {on|off}
example:
#!/bin/bash
#
# chkconfig: 2345 77 22
# description: Test Service
LOCKFILE=/var/lock/subsys/myservice
status() {
if [ -e $LOCKFILE ]; then
echo "Running"
else
echo "stopped"
fi
}
usage() {
echo "`basename $0` {start|stop|restart|status}"
}
case $1 in
start)
echo "Starting..."
touch $LOCKFILE;;
stop)
echo "Stopping..."
rm -rf $LOCKFILE &> /dev/null;;
restart)
echo "Restarting...";;
status)
status;;
*)
usage;;
esac
/etc/rc.d/rc.local 系统最后启动的一个服务
/etc/inittab的任务
1.设置默认运行级别
2.运行系统初始化脚本
3.运行指定运行级别对应的目录的脚本
3.ctrl+alt+delete组合键操作
4.ups电源故障/恢复执行的操作
5.启动虚拟终端(2345)
6.启动图形终端(5)
守护进程
独立守护进程
xinitd:超级守护进程,代理人
瞬时守护进程,不需要关联至运行级别
核心: /boot/vmlinuz-version
内核模块 (KO) /lib/modules/version
用户空间访问,监控内核方式
/proc
伪文件系统
/proc/sys 很多可读写
/sys 某些文件可写
设定内核参数值(暂时生效)
echo VALUE > /proc/sys/TO/SOMEWHERE
sysctl -w kernel.hostname(立即生效,重启失效)
sysctl -a 所有内核参数
永久生效,不立即生效
/etc/sysctl.conf
sysctl -p 生效
查看加载内核模块
lsmod
modprobe MODULE_NAME 装载
insmod MODULE_NAME
modprobe -r MODULE_NAME 卸载
rmmod MODULE_NAME
modeinfo MODULE_NAME
内核中的功能除了核心功能之外,编译时,大多数功能有3个选择
1.不用此功能
2.编译进内核
3.不编译进内核