第15章,系统启动和内核管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第15章,系统启动和内核管理相关的知识,希望对你有一定的参考价值。
更多内容请点击:Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~)
http://blog.51cto.com/13683480/2095439
第15章,系统启动和内核管理
本章内容
Centos5和6的启动流程
服务管理
Grub管理
自制Linux
启动排错
编译安装内核
Centos7启动流程
Unit介绍
服务管理和查看
启动排错
破解口令
修复grub2
Linux组成:---------------------------------------------------------------------
Linux:kernel+rootfs
kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs:程序和glibc
库:函数集合,function,调用接口
过程调用:procedure,无返回值
函数调用:function
程序:二进制执行文件
内核设计流派:
单内核(monolithic kernel):linux
把所有功能集成于同一个程序
微内核(micro kernel):windows,solaris
内核:
linux内核特点:
支持模块化:.ko
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
组成部分
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根文件系统
centos5:/boot/initrd-VERSION-release.img
centos6,7:/boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release
Centos5,6 启动流程:----------------------------------------------------------------
post--mbr引导--bootloader加载grub--加载内核--启动init--读取默认运行级别--
--执行rc.sysinit系统初始化脚本--根据运行级别执行rc N,开启运行级别下默认开启的服务
--执行/etc/rc.d下rc.local--执行/bin/login,等待用户登录
POST加电自检
boot sequence 按照启动顺序查找第一个拥有启动功能的设备
读取MBR前446个字节的bootloador,也就是grub第一阶段
第一阶段的目的是在磁盘分区表之后的扇区上寻找grub1.5阶段
grub1.5阶段读取boot分区文件系统驱动,并且找到boot分区,读取grub第2阶段
grub第2阶段会根据事先写好的配置文件加载选定内核 和ramdisk或ramfs
内核启动之后首先会进行自身初始化,加载硬件驱动程序(可能借助于ramdisk或者ramfs)
内核完成初始化之后,找根,借助grub.conf第二阶段配置文件root=找到根
借助ramdisk或者ramfs加载真正的根文件系统驱动,之后只读挂载真正的根文件系统
启动第一个进程/sbin/init,centos5 /etc/inittab centos6 /etc/inittab /etc/init/*.conf
根据运行配置文件运行默认运行级别
运行/etc/rc.d/rc.sysinit 初始化脚本
1 设置主机名
2 设置欢迎信息
3 激活udev和selinux
4 挂载/etc/fstab文件中定义的文件系统
5 检测根文件系统,并以读写方式重新挂载根文件系统
6 设置系统时钟
7 激活swap设备
8 根据/etc/sysctl.conf文件设置内核参数
9 激活lvm及software.conf文件设置内核参数
10 加载额外设备的驱动程序
11 清理操作
根据选择的运行级别,执行rc N,关闭/开启 对应级别的服务以及/etc/rc.d/rc.local
执行/bin/login,等待用户登录
登录之后开启shell获取控制权
启动流程:
POST:power-on-self-test,加电自检,是bios功能的一个主要部分。负责完成对cpu、
主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测
ROM:bios(basic input and output system),保存着有关计算机系统最重要的
基本输入输出程序,系统信息设置,开机加电自检程序和系统启动自举程序等
RAM:CMOS互补禁书氧化物半导体,保存各项参数的设定
按次序查找引到设备,第一个有引到程序的设备为本次启动设备
bootloader:引到加载器,引到程序
window:ntloader,仅是启动os
linux:功能丰富,提供菜单,雨荨用户选择要启动系统或不同的内核版本,把用户选定的
内核装载到内存中的特定空间中,解压,展开,并把系统控制权移交给内核
lolo:linux loader
grub:grand unified bootloader
MBR:446 bootloader ,64 分区表,2 55AA标识符
Grub: stage1 bootloader
stage1.5 0扇区之后的扇区
stage2 磁盘文件系统上,boot目录下
kernel 自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序(借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
ramdisk:
与内核一起被grub加载进内存,放在内存指定的地方,模拟磁盘上的微型根文件系统
centos5,6上为gz压缩之后的cpio文件,如要查看,改名解压 使用cpio -tv < 查看
centos7 直接为cpio文件,没有压缩
centos 5 initrd
工具程序:mkinitrd
centos 6,7 initramfs
工具程序,mkinitrd,dracut
ramdisk管理:
ramdisk文件的制作:
mkinitrd 1. mkinitrd命令
为当前正在使用的内核重新制作ramdisk文件
mkinitrd /boot/initramfs-`uname -r`.img $`uname -r`
dracut 2 dracut命令
为当前正在使用的内核重新制作ramdisk文件
dracut /boot/initramfs-`uname -r`.img $`uname -r`
PS: mkinitrd 本是是一个脚本 根据参数: $(uname -r) 来生成initramfs文件
init程序:
init程序的类型:
sysv:init centos5之前
配置文件: /etc/inittab
upstart:init,centos 6
配置文件: /etc/inittab,/etc/init/*.conf
systemd:systemd,centos7
配置文件: /usr/lib/systemd/system
/etc/systemd/system
PS: init命令通过 /var/lock/subsys/文件存在与否来判断服务是否是开启状态
/etc/inittab 文件:
初始运行级别(0-6) centos6 只剩这一项了
系统初始化脚本,/etc/rc.d/rc.sysinit
rc N 运行对应级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端、恢复脚本
在虚拟控制台生成getty,mingetty会自动调用login程序
在运行级别5初始化X
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait:切换至此级别运行一次
respawn:此process终止,就重新启动
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定 /etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now ctrl+alt+del 重启
/etc/rc.d/rc.sysinit 初始化脚本
1 设置主机名
2 设置欢迎信息
3 激活udev和selinux
4 挂载/etc/fstab文件中定义的文件系统
5 检测根文件系统,并以读写方式重新挂载根文件系统
6 设置系统时钟
7 激活swap设备
8 根据/etc/sysctl.conf文件设置内核参数
9 激活lvm及software.conf文件设置内核参数
10 加载额外设备的驱动程序
11 清理操作
CentOS 6 /etc/inittab和相关文件
/etc/inittab
设置系统默认的运行级别
id:3:initdefault:
/etc/init/control-alt -delete.conf
/etc/init/tty.conf
/etc/init/start -ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf ·
rc N :
N为运行级别,读取/etc/rc.d/rcN.d/中的文件
K*,K##*: 关闭服务,数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*,S##*: 开启服务,数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
注意: 正常级别下,最后启动一个服务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在指定运行级别脚本后运行
可以根据情况,进行自定义修改
init:服务管理命令----------------------------------------------------------------
chkconfig命令:
查看服务在所有级别的启动或者关闭设定
chkconfig [--list] name
添加服务:
SysV的服务脚本放在/etc/rc.d/init.d 下(centos6 /etc/init.d为软链接 centos5为硬链接)
chkconfig --add name
#!/bin/bash
#chkconfig:LLLL nn mm
LLLL:运行级别
nn:S##编号,开启的顺序
mm:K##编号,关闭的顺序
删除:
chkconfig --del name
修改服务的默认启动/关闭
chkconfig [--level LLLL] name <on | off |reset >
LLLL 为运行级别,默认2345
ntsysv [--level=LLLL] 字符下的窗口界面,修改服务的默认启动或者关闭
service命令:
通过chkconfig --add 添加的服务,可以被service命令手动管理
设置开启,关闭,重启,查看
service SERVERNAME start|stop|restart|status
查看所有服务当前状态:
service --status-all
grub:--------------------------------------------------------------------------
安装grub:
grub-install --root-directory=DIR /dev/DISK
安装grub stage1 和stage1.5到/dev/DISK 磁盘上,并复制GRUB相关文件到
DIR/boot目录下
grub命令:交互式
grub>root(hd#,#)
grub>setup(hd#)
grub legacy
配置文件:/boot/grub/grub.conf <--/etc/gurb.conf
stage2及内核等通常放置于一个基本磁盘分区
功用:
1 提供启动菜单、并提供交互式接口
a 内核参数
e 编辑模式,用于编辑菜单
c 命令模式,交互式接口
2 加载用户选择的内核或操作系统
允许传递参数给内核
可以隐藏启动菜单
3 为菜单提供了保护机制
为编辑启动菜单进行认证(可设置密码)
为启动内核或操作系统进行认证(设置密码)
grub的命令行接口:
help | help KEYWORD
find (hd0,0)/path/to/file
root(hd0,0)
kernerl
initrd
boot 引导启动选定的内核
内核参数文档:
cat /usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
需安装kernel-doc包
cat /proc/cmdline 查看内核参数
识别硬盘设备:
(hd#,#)
hd#:磁盘编号,用数字表示;从0开始编号
#:分区编号,用数字表示,从0开始编号
(hd0,0)第一块硬盘的第一个分区
手动在grub命令行接口启动系统
root (hd0,0)
kernerl
initrd
boot
配置文件:/boot/grub/grub.conf
default=# 设定默认启动的菜单项;title编号从0开始
timeout=# 指定菜单项等待选项选择的时间。单位为秒
splashimage=(hd#,#)/grub/abc.xpm.gz 菜单背景图片文件路径
password [--md5|--encrypted] STRING 启动菜单编辑认证密码可以明文
hiddenmenu: 隐藏菜单
title TITLE 定义菜单项“标题” ,可以有多个
root(hd#,#) 查找stage2及kernel文件所在的设备分区,为grub的根
kernel [/boot]/kernel- 使用启动的内核
initrd [/boot]/initramfs- 使用的ramfs文件
password [--md5|--encrypted] STRING 启动内核编辑的认证密码可以明文
grub加密:
生成grub口令
grub-md5-crypt md5
grub-crypt sha512
修改grub.conf文件:
password [--md5|--encrypted] STRING
破解root口令
启动系统时,设置其运行级别为1
进入单用户模式,编辑grub菜单,kernel后加 1 s S single 都可以
使用passwd命令修改密码
设置grub背景图片
1 提供一张图片,640*480尺寸 pic.jpg
2 安装ImageMagick工具包,使用 convert工具转化格式为xpm 色深14
convert -resize 640x480 -colors 14 pic.jpg pic.xpm
可以使用head 查看pic.xpm属性
3 使用gzip 压缩pic.xpm 复制pic.xpm.gz到grub目录下
4 修改grub.conf splashimage=(hd0,0)/grub/pic.xpm.gz
自制linuz系统:-------------------------------------------------------------------
1 分区并创建文件系统
fdisk /dev/sdb 分两个必要的分区
/dev/sdb1----boot
/dev/sdb2----root
mkfs.ext4 创建文件系统
2 挂载boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
3 安装grub
grub-install --root-directory=/mnt /dev/sdb
4 复制内核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
5 创建grub.conf文件
vim /mnt/boot/grub/grub.conf
default=0
timeout=5
splasgimage=(hd0,0)/grub/pic.xpm.gz
title minicentos
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.el6.x86_64.img
6 复制root文件
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir -pv {etc,lib,usr,home,root,proc,sys,boot,dev,mnt...}
7 复制bash和相关库文件
复制相关命令及相关库文件
如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid,insmod,lsmod,modinfo等
可是使用如下脚本复制
8 如果需要使用网路功能,还需要复制驱动程序e1000
cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/
自制系统开机之后:
使用insmod /lib/e1000.ko 安装驱动
使用ifconfig 配置IP即可
救援环境,inittab文件误删除恢复
centos6:毫无影响,正常启动,自行复制就可
centos5:
现象:
使用reboot命令无法重启,开机提示输入runlevel,之后启动处于停止状态
修复:
救援模式,页面输入linux rescue进入
chroot /mnt/sysimage
bikid 可以查看到光盘
mount /dev/hdc /mnt
cd /mnt/Server
rpm -ivh initscripts-8.45.30-2.el5.i386.rpm --force|--replacepkgs
也可以使用
rpm2cpio /mnt/Server/initscripts-8.45.30-2.el5.i386.rpm |cpio -idv ./etc/inittab /etc/
/proc目录
/proc:
内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
参数:
只读:输出信息
可写:可接受用户指定"新值"来实现对内核某功能或特性的配置
/proc/sys
1 sysctl命令用来查看或设定此目录中诸多参数
sysctl -w path.to.paremeter=VALUE
sysctl -w kernel.hostname=HOSTNAME
2 echo 命令用于查看或设定此目录中诸多参数
echo "VALUE" > /proc/sys/PATH/TO/PARAMETER
echo "websrv" > /proc/sys/kernel/hostname
PS: 如果使用sysctl命令修改,使用"."作为分隔
如果使用echo 1|0 > 修改,使用"/"作为分隔
sysctl命令:
默认配置文件:/etc/sysctl.conf
1 设置某参数
sysctl -w parameter=VALUE
2 通过读取配置文件设置参数
sysctl -p /path/file
3 查看所有生效参数
sysctl -a
常用的几个参数:
net.ipv4.ip_forword 路由转发功能
net.ipv4.icmp_echo_ignore_all 禁ping
vm.drop_caches 清除缓存
/sys目录
sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有
内核对硬件特性的设定信息;有些参数时可以修改的,用于调整硬件工作特性
udev通过此路径下输出的信息动态为个设备创建所需要设备文件,udev是运行用户空间程序
专用工具: udevadmin hotplug
udev为设备创建设备文件时,会读取其实现定义好的规则文件,一般在
/etc/udev/rules.d
/usr/lib/udev/rules.d
内核组成部分:
分类:单内核,微内核
kernel:一般为:/boot/vmlinuz-VERSION-release
kernel object 内核模块,一般位于 /lib/modules/VERSION-RELEASE/
辅助文件: ramdisk: /boot/initrd 或者 initramfs
运行中的内核:
uname [option]
-n 显示节点名称
-r 显示VERSION-RELEASE
-a 显示所有信息
内核模块命令:
lsmod:
显示由核心已经装载的内核模块
显示的内容来自于:/prco/modules
moinfo
显示模块的详细描述信息,当前没有装载也可以查看
modeinfo [-k kernel] [modulename | filename]
-n 只显示模块文件路径
-p 只显示模块参数
-a 作者
-d description 描述
-l license 遵守的协议类型
modprobe
装载或卸载内核模块
modprobe modname 装载
-r 卸载
配置文件: /etc/modprobe.conf
/etc/modprobe.d/*.conf
depmod: 内核模块依赖关系文件及系统信息映射文件的生成工具
insmod 装载内核模块,不会自动解决依赖关系
insmod [filename] [module options..]
insmod `modinfo -n xfs`
rmmod 卸载模块
rmmod xfs
编译安装内核:--------------------------------------------------------------------
前提:
1 准备好开发环境
包组: Server Platform Development (centos7没有)
Development Tools
2 获取目标主机上硬件设备的相关信息
CPU: cat /proc/cpuinfo,x86info -a,lscpu
PCI: lspci -v -vv ,lsusb -v -vv lsblk
3 获取目标主机系统功能的相关信息
例如:需要启用相应的文件系统
4 获取内核源代码包
内核编译安装流程
完整编译:
安装开发包组
下载源码文件 解压并cd进入解压生成的目录
装备文本配置文件,".config" 可以从现有系统复制改名得到 (/boot下config-VERSION)
make menuconfig 配置内核选项,选择或者不选择相应模块
make [-j #] 编译,可选择cpu个数
make modules—install 安装模块
make install 安装核心
vmlinuz-
initramfs-
编辑grub配置文件
reboot
部分编译:
只编译某子目录中的相关代码
cd 进入解压目录,
make dir/ 只能使用相对路径
只编译一个特定的模块:
make dir/file.ko
交叉编译:
如何交叉编译内核:
编译的目标平台与当前平台不相同
make ARCH=arch_name
获取特定目标平台的使用帮助
make ARCH=arch_name help
make ARCH=arm help 手机平台
清理:
make clean 清理大多数编译生成的文件,但会保留config文件等
make mrproper 清理所有编译生成的文件、config及某些备份文件
make distclean mrproper、patches以及编辑器备份文件
卸载内核:
删除/lib/modules/ 下不需要的内核
删除/usr/src/linux 解压目录下不需要的内核源码
删除/boot 目录下启动的内核和initramfs文件
更改grub的配置文件,删除不需要的内核启动列表
练习:
? 1、破解root口令,并为grub设置保护功能
? 2、破坏本机grub stage1,而后在救援模式下修复之
? 3、删除vmlinuz和initramfs文件后无法启动,两种方法恢复之
? 4、增加新硬盘,在其上制作能单独运行kernel和bash的系统
? 5、在U盘上定制linux,使其可启动系统,并具有网络功能
? 6、删除/etc/fstab和/boot目录的所有文件,并恢复之
? 7、编译安装kernel,启用支持ntfs文件系统功能
systemd:-----------------------------------------------------------------------------
syetemd:centos7 上的第一个进程
系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源、
服务器进程和其他进程
新特性:
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用socket式和D-bus总线式激活服务
系统状态快照
核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了
系统服务、监听socket、保存的系统快照以及其他与init相关的信息
配置文件: /usr/lib/systemd/system 每个服务最主要的启动脚本设置,类似于/etc/init.d/
/run/systemd/system 系统执行过程中所产生的服务脚本,比上面的优先运行
/etc/systemd/system 管理员建立的执行脚本,比上面的目录优先运行
特性: 向后兼容sysv init 脚本
systemctl命令固定不变,不可扩展
非由systemd启动的服务,systemctl无法与之通信的控制
unit类型:
systemctl -t help 查看unit类型
service unit .service 用于定义系统服务
.target 用于模拟实现运行级别
.device 用于定义内核识别的设备
.mount 定义文件系统挂载点
.socket 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
.snapshot 管理系统快照
.automount 文件系统的自动挂载点
.path 用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,
延迟激活服务,如spool目录
管理服务:
管理系统服务:service unit
命令:
systemctl [start|stop|restart|status] name.service
条件式重启:已启动才重启,否则不做操作
systemctl try-restart name.service
重载或重启服务:先加载,启动
systemctl reload-or-restart name.service
重载或条件式重启:
systemctl reload-or-try-restart name.service
禁止自动和手动启动:
systemctl mask name.service 通过创建软链接指向/dev/null来禁止启动
取消禁止
systemctl unmask name.service
查看某服务当前激活与否的状态:
systemctl is-active name.service 激活状态$?为0 非激活状态非0
查看所有已激活的服务:
systemctl list-units --type|-t service
-t service
systemctl单独使用:
等于systemctl list-units 查看所有活动units
查看所有服务:
systemctl list-units -type|-t service --all|-a
-at service
设定某服务开机启动:
systemctl enable name.service
设置某服务开机禁止启动
systemctl disable name.service
查看所有服务的开机自启状态:
systemctl list-unit-files -t service
查看服务是否开机自启:
systemctl is-enabled name.service
自启$?为0 否则为1
用来列出该服务在那些运行级别下启用和禁用
ls /etc/systemd/system/*.wants/name.service
查看服务的依赖关系:
systemctl list-dependencies name.service
杀掉进程:
systemctl kill unitname
服务状态:
使用systemctl -at service查看状态
loaded: unit配置文件已处理
active(running) 一次或多次持续处理的运行
active(exited) 成功完成一次性的配置
active(waiting) 运行中,等待一个事件
inactive 不运行
enabled 开机启动
disabled 开机不启动
static 开机不启动,但可被另一个启动的服务激活
service unit 文件格式
/etc/systemd/system: 系统管理员和用户使用
/usr/lib/systemd/system: 发行版打包使用
以"#"开头的行后面的内容被任务是注视
相关布尔值,1,yes,on,true都是开启,0,no,of,false都是关闭
时间单位默认是秒,所以要用毫秒ms 分钟m 等需要显式说明
servic unit file 通常由三部分组成:
[UNIT]: 定义与unit类型无关的通用选项,用于提供unit的描述信息,unit行为以及依赖性关系
Dsecription: 描述信息
After: 定义unit的启动次序,表示当前unit应该晚于哪些unit启动,与Before相反
Requires: 依赖到的其他units,强依赖,被依赖的unit无法激活时
当前unit也无法激活
Wants: 弱依赖
Conflicts: 定义units间的冲突关系
[Service]: 与unit类型相关的专用选项,service|socket 等
Type: 定义影响Execstart及相关参数的功能的unit进程启动类型
simple: 默认值,这个daemon主要由ExceStart接的指令串来启动,启动后
常驻于内存中
forking: 有ExceStart启动的程序通过spawns延伸出其他子程序来作为此daemon
的主要服务,原生父进程在启动结束后就会终止
oneshot: 与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus: 与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作。
因此通常也要同时设定BusName= 才行
notify: 在启动完成后发送一个通知消息,还需要配合NotifyAccess来让Systemd接受消息
idle: 与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。
这类的daemon通常是开机到最后才执行即可的服务
EnvironmentFile: 环境配置文件
ExecStart: 指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop: 指明停止unit要运行的命令或脚本
Restart: 当设定Restart=1时,则当次daemon服务以外终止后,会再次自动启动
[install]: 定义由"systemctl enable" 以及"systemctl disable" 命令在实现服务启用
或禁用时用到的一些选项
Alias: 别名,可使用systemctl command Alias.service
RequiredBy: 被哪些units所依赖,强依赖
WantedBy: 被哪些units所依赖,弱依赖
Also: 安装本服务的时候还要安装别的相关服务
注意: 对于新创建的unit文件,或者修改了unit文件,要通知systemd重载此配置文件,
而后可以选择重启
systemctl daemon-reload
服务Unit文件示例:
? vim /etc/systemd/system/bak.service
[Unit]
Description=backup /etc
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
[Install]
WantedBy=multi-user.target
?systemctl daemon-reload
?systemctl start bak
target units
unit配置文件: .target
查看所有target
ls /usr/lib/systemd/system/*.target
systemctl list-unit-files -t target -a
运行级别
/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target
查看依懒性:
systemctl list-dependencies graphical.target
级别切换: init N ==> systemctl isolate name.target
注意:只有/lib/systemd/system/*.target 文件中AllowIsolate=yes,才能切换
(修改文件需执行 systemctl daemon-reload 才能生效)
查看target:
runlevel 链接指向systemctl
who -r
systemctl list-units -t target
获取默认运行级别:
/etc/inittab ===> systemctl get-default
ll /etc/systemd/system/default.target
修改默认运行级别:
systemctl set-default name.target
进入默认target:
systemctl default
其他命令:
切换至紧急救援模式:
systemctl rescue
切换至emergency模式
systemctl emergency
其他常用命令:
传统命令: init poweroff halt reboot 都称为systemctl的软链接
关机: systemctl hatl 、systemctl poweroff
重启: systemctl reboot
挂起: systemctl suspend
休眠: systemctl hibernate
休眠并挂起:systemctl hybrid-sleep
CentOS 7 引到顺序:
POST开机自检
boot sequence 选择启动设备
引导装载程序,grub2
加载装载程序的配置文件:/boot/grub2/grub.cfg,给出内核选项
加载内核,以及initramfs
内核初始化
开启第一个进程:systemd
执行initrd.target所有单元,包括挂载/etc/fstab
切换根文件系统
systemd 执行默认target配置,配置文件/etc/systemd/system/default.target
systemd 执行sysinit.target 初始化系统及basic.target 准备操作系统
systemd 执行multi-user.target 下的本机与服务器服务
systemd 执行 multi-user.target下 /etc/rc.d/rc.local
systemd 执行multi-user.target下 getty.target及登录服务
systemd 执行graphical 需要的服务
设置启动内核参数:
启动时,在linux16行后添加 systemd.unit=multi-user.target 启动进入3模式
systemd.unit=rescue.target
systemd.unit=emergency.target
rescue.target 比emergency 支持更多的功能,例如日志等
centos7 破解root口令
方法1:
启动项e键修改
找到lunux16 内核这一项,rd.break,ctrl+x启动
mount -o rw,remount /sysroot
chroot /sysroot
passwd 修改密码
如果selinux启动状态,则需要touch /.autorelabel
exit
reboot
方法2:
启动项e键修改
找到linux16,行尾添加 rw init=/sysroot/bin/sh ,ctrl+x启动
chroot /sysroot
passwd 修改密码
如果selinux启动状态,则需要touch /.autorelabel
exit
reboot
修复grub2
主要配置文件: /boot/grub2/grub.conf
辅助配置文件:/etc/default/grub
修复配置文件:
grub2-mkconfig > /boot/grub2/grub.cfg
修复grub2
grub2-install /dev/sda BIOS环境
grub2-install UEFI环境
调整默认启动内核:
vim /etc/default/grub
GRUB_DEFAULT=0
grub2-mkconfig > /boot/grub2/grub.cfg
练习:
? 为编译安装的httpd服务,实现service unit文件
? 破解centos7 口令
? 修改默认的启动内核为新编译内核
? 启动时临时禁用SELinux
? 启动时进入emergency模式
? 卸载编译安装的新内核
笔记整理完成时间:2018年5月19日17:37:21
以上是关于第15章,系统启动和内核管理的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-44]:目标系统 - 系统软件 - Linux下的网络通信-4-Linux内核网络协议栈网络配置命令网络服务启动