系统启动和内核管理

Linux的的组成
Linux:内核+ rootfs
内核:进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能
根文件系统:程序和glibc的的
库:函数集合,函数,调用接口(头文件负责描述)
过程调用:程序,无返回值
函数调用:函数
程序:二进制执行文件
内核设计流派:
单内核(monolithic kernel):Linux
把所有功能集成于同一个程序
微内核(微内核):Windows中,的Solaris
每种功能使用一个单独子系统实现
内核
Linux的的内核特点:
支持模块化:.ko(内核对象)
lsmod的的:查看模块
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
组成部分:
核心文件:/开机/ vmlinuz的-VERSION释放
RAMDISK:辅助的伪根系统
CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img
模块文件:/ LIB /模块/ VERSION释放

CentOS6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(蛴螬)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行初始化程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(脚本)
8.init执行/etc/rc.d/rc.local文件
9.执行/ bin中/登录程序,等待用户登录
10.登录之后开始以壳牌控制主机
启动流程
POST:上电自检,加电自检,是BIOS功能的一个主要部分负责完成对CPU,主板,内存,硬盘子系统,显示子系统,串并行接口,键盘,CD-ROM光驱等硬件情况的检测。
ROM:BIOS,基本输入输出系统,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置,开机加电自检程序和系统启动自举程序等。
RAM:CMOS互补金属氧化物半导体,保存各项参数的设定
按次序查找引导设备,第一个有引导程序的设备为本次启动设备
bootloader:引导加载器,引导程序
windows:ntloader,仅是启动OS
Linux系统:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中的特定空间中,解压,展开,并把系统控制权移交给内核
LILO:LInux装载机
GRUB:GRand Unified Bootloader
GRUB 0.X:GRUB Legacy,GRUB2
MBR:
446:bootloader,64:分区表,2:55AA
GRUB:
主引导装载程序:第1阶段,1.5阶段
辅助启动加载器:第二阶段,分区文件
核心:
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序(借助于RAMDISK加载驱动)
以只读方式挂载根文件系统
/boot/grub/grub.conf的内核启动相关脚本,包括定义根文件系统的位置
运行用户空间的第一个应用程序:/ sbin目录/的init
RAMDISK:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动
ramdisk - > ramfs提高速度
CentOS 5:initrd
工具程序:mkinitrd的
CentOS 6,7:initramfs
工具程序:mkinitrd,dracut
系统#初始化:
POST - > BootSequence(BIOS) - > Bootloader(MBR) - >内核(ramdisk) - > rootfs(只读) - > init(systemd)
故障状态:破坏/ boot / initramfs - $(uname -r).img文件

进入光盘救援模式
DF看一下根的位置
切换根路径chroot / mnt / sysimage
mkinitrd / boot / initramfs - $(uname -r).img $(uname -r)
同步把内存中的数据同步到磁盘
退出选择重启
误删出/ boot / vmlinuz - $(uname -r)
进入光盘救援模式
挂载光盘
cp / rum / install / repo / isolinux / vmlinuz / boot / initramfs - $(uname -r)
退出选择重启
破解口令(centos6以下)
进入单用户
直接更改密码的passwd
RAMDISK管理
RAMDISK文件的制作:
(1)mkinitrd命令
为当前正在使用的内核重新制作ramdisk的文件
mkinitrd / boot / initramfs - $(uname -r).img $(uname -r)
(2)dracut命令
为当前正在使用的内核重新制作ramdisk的文件
dracut / boot / initramfs - $(uname -r).img $(uname -r)
系统启动流程
初始化程序的类型:
SysV:init,CentOS 5之前
配置文件:/ etc / inittab中
Upstart:init,CentOS 6
配置文件:/ etc / inittab,/etc/init/*.conf
Systemd:systemd,CentOS 7
配置文件:/ usr / lib中/ systemd /系统
的/ etc / systemd /系统
启动流程
/ sbin / init CentOS6之前
运行级别:为系统运行或维护等目的而设定; 0-6:7个级别
0:关机
1:单用户模式(root自动登录),单机,维护模式
2:多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别:3,5
切换级别:init#
查看等级:runlevel; 谁-r
启动流程
/etc/rc.d/rc.sysinit:系统初始化脚本
(1)设置主机名
(2)设置欢迎信息
(3)激活udev和selinux
(4)挂载/ etc / fstab文件中定义的文件系统
(5)检测根文件系统,并以读写方式重新挂载根文件系统
(6)设置系统时钟
(7)激活swap设备
(8)根据/etc/sysctl.conf文件设置内核参数
(9)激活lvm及软件raid设备
(10)加载额外设备的驱动程序
(11)清理操作
centos6详细开机顺序
主引导记录
第一个运行的脚本/etc/rc.d/rc.sysinit
根据rc.sysinit中提供的运行级别运行/etc/rc.d/rc文件

RC文件会根据/etc/rc.d/rc相应运行级别.D文件里的文件开启或关闭文件ķ打头关闭小号打头开启

开机RC文件通过在/ var /锁定/ SUBSYS /服务名文件存在与否确定服务是否启动(以上详情查看相应脚本文件)
总结:POST - > Boot Sequence(BIOS) - > Boot Loader - > Kernel(ramdisk) - > rootfs - > switchroot - > / sbin / init - >(/ etc / inittab,/ etc / init / *。conf) - >设定默认运行级别 - >系统初始化脚本rc.sysinit - >关闭或启动对等级别的服务 - >启动终端

chkconfig --list查看开机自启动
chkconfig [服务名] off / on关闭或开启服务开机自启动(默认开启或关闭2,3,4,5的自启动)
chkconfig --add [服务名]添加服务自启动
chkconfig - del [服务名]删除服务自启动文件
service --status-all查看所有服务状态
修改指定的链接类型
chkconfig [--level levels] name <on | off | reset>
--level LLLL:指定要设置的级别;省略时表示2345
init 3切换时会触发/etc/rc3.d/下的所有文件
创建服务脚本
脚本格式
脚本中必须有#chkconfig:2345 55 25这一句2345表示开机自启的运行级别,55表示开关编号:定义是查看/etc/rc.d/rc5.d/目录中的编号,挑选一个未被占用的
chmod + x [脚本名]给服务加权限
chkconfig --add [服务名]
xinetd的管理的服务
服务命令:手动管理服务
服务服务开始|停止|重新启动
服务 - 状态 - 全部
瞬态(瞬态)服务被xinetd的进程所管理
进入的请求首先被xinetd的代理
配置文件:/etc/xinetd.conf,/​​etc/xinetd.d/ <服务>
与libwrap.so文件链接
用chkconfig的控制的服务:
chkconfig tftp on
centos7
systemctl替代了chkconfig的和xinetd的服务,缺点在于服务对systemctl依赖性太高,容易出现单点故障
grub遗产
stage1:mbr(系统盘的前446字节)
stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
阶段2:磁盘分区(/ boot / grub目录/)
GRUB安装
安装GRUB:
(1)grub-install(grub文件被破坏不受影响)
安装grub stage1和stage1_5到/ dev / DISK磁盘上,并复制GRUB相关文件到DIR / boot目录下
grub-install --root-directory = DIR / dev / DISK
(2)grub(依赖于/ boot / grub中的文件)
grub> root(hd#,#)(root表示内核所在地/ boot下)
grub> setup(hd#)
用GRUB命令修复过开机时系统会依赖于/ boot / grub目录中的文件,由此对比开机启动时第一阶段和第一点五阶段故障最后使用GRUB安装来修复

defaule表示默认启动第几个菜单;
超时表示默认启动菜单等待时间(S)
splashimage指定背景图片
标题表示定义启动菜单标题;
RHGB表示图形界面;
宁静表示静默加载内核
ImageMagic:Linux下的图像处理工具
convert-resize 640x480
单用户设置密码
在grub.conf中添加passwd --md5 [密文密码]
加密密码grub-md5-crypt
passwd - 加密[密文密码]()
平头地穴
启动启动流程
1,bost硬件加电环境;
2,mbr 446 grub stage1;
3,grub stage1.5,加载boot分区文件系统;
4,grub stage2 /boot/grub/grub.conf;
5,vmlinuz加载跟/boot/initramfs.xxx.img;
6,/ sbin / init / etc / inittab;
7,rc.sysinit中;
8,/ etc / rc5.d / S \ Kxxx - > / etc / init.d / xxx;
9,在/ etc / rc.local中; 10,登录
的/ boot目录被损坏
修复方法一
插光盘进入救援模式
切跟chroot / mnt / sysimage /
挂载光盘mount / dev / sro / mnt
cp / mnt / isolinux / vmlinuz / boot /
cd / boot
mkinitrd initramfs.img`uname -r`
grub-install / dev / sda
cat grub.conf <<结束
defaull = 0
超时= 3
标题linux
kernel / vmlinuz root = / dev / sda2
initrd /initramfs.img
结束
退出;退出
重启
修复方法二
插光盘进入救援模式
挂载光盘mount / dev / sro / mnt
rpm -ivh /nmt/Packages/kernel-2.6.xxx.rpm --root = / mnt / sysimage / --force
chroot / mnt / sysimage
grub-install / dev / sda
vim grub.conf
出口
重启
磁盘挂载文件误删修复
插光盘进入救援模式
fdisk -l
创建临时文件用安装挂载找根
mount / dev / sda2 / mnt / sysimage /
vim / mnt / sysimage / etc / fstab
/ dev / sda2 / ext4默认值0 0
/ dev / sda1 / boot ext4默认值0 0
/ dev / sda5 swap swap defaults 0 0
/ dev / sda3 / data ext4默认值为0 0
umount / dev / sda2
出口
重启
/ sbin目录/ INIT被损坏
在有其他同版本机器时
插光盘进入救援模式
配置网络
chroot / mnt / sysimage
scp同版本系统的/ sbin / init。
mv init / mnt / sysimage / s
没有其他同版本机器时
插光盘进入救援模式
chroot / mnt / sysimage
自制的Linux系统
分区并创建文件系统
fdisk / dev / sdb
分两个必要的分区
/ dev / sdb1对应/ boot / dev / sdb2对应根/
mkfs.ext4 / dev / sdb1
mkfs.ext4 / dev / sdb2
挂载启动
mkdir / mnt / boot子目录必须为boot
mount / dev / sdb1 / mnt / boot
安装GRUB
grub-install --root-directory = / mnt / dev / sdb
恢复内核和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
建立的grub.conf
vim /mnt/boot/grub.conf
标题wanglinux
根(hd0,0)
kernel / vmlinuz root = / dev / sda2 selinux = 0init = / bin / bash
initrd /initramfs.img
chroot / mnt / sysroot
创建一级目录
mkdir / mnt / sysroot
mount / dev / sdb2 / mnt / sysroot
mkdir - pv
到/ mnt / SYSROOT / {等,LIB,lib64下,垃圾桶,sbin目录,TMP,VAR,USR,SYS,PROC,选择,家庭,根设备,引导开发,MNT,媒体}
复制庆典和相关库文件
复制相关命令及相关库文件
如:使用ifconfig,insmod的,平,安装,LS,猫,DF,lsblk,BLKID等
自制的Linux系统
创建两个分区
mkdir / mnt / boot
mount / dev / sdb1 / mnt / boot /
grub-install --root-directory = / mnt / dev / sdb
cp /boot/vmlinuz-2.6.32-696.el6.x86_64 mvlinuz
cp /boot/initramfs-2.6.32-696.el6.x86_64.img initramfs
cat> /mnt/boot/grub/grub.conf << end
默认= 0
超时= 3
标题linux
kernel / vmlinuz root = UUID = 05e83c50-2a63-49bc-bd75-f4b9d7eefe7a#/ dev / sdb2,root分区的UUID
initrd /initramfs.img
结束
mkdir / mnt / rootfs
mount / dev / sdb2 / mnt / rootfs
mkdir rootfs / {dev,etc,proc,sys,var,boot,mnt,home,root,tmp} -v
CP脚本复制需要的命令
自制完成
insmod /lib/e1000.ko
救援环境
在根文件系统无法使用时需要,如/斌/安装删除
对系统没有特殊要求
从光盘引导(boot.iso的或者安装光盘#1)
从USB盘(由boot.iso的制作)引导
文件系统重组
蟒蛇将会询问是否应该挂载文件系统
到/ mnt / sysimage下/ *
到/ mnt /阶段2
$ PATH包括硬盘的目录
文件系统节点
提供系统特定的设备文件
mknod的了解主要/次要
系统配置文件丢失修复
系统在引导期间,很重要的一个过程就是初始化进程读取其配置文件/ etc / inittab中,启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/ etc / inittab中误删除或修改错误, Linux的将无法正常启动。此时,只有通过救援模式才可以解决此类问题。
有备份文件的回复方法
没有备份文件的恢复办法
有备份文件的恢复办法:
进入救援模式,执行的chroot命令后,如果有此文件的备份(强烈建议系统中的重要数据目录,如/等/引导等要进行备份),直接将备份文件拷贝回去,退出重启即可。如果是配置文件修改错误,如比较典型的/boot/grub/grub.conf文件及/ etc / passwd中的文件修改错误,也可以直接修正恢复。假设有备份文件/etc/inittab.bak,则在救援模式下执行:
chroot / mnt / sysimage
cp /etc/inittab.bak / etc / inittab
没有备份文件的恢复办法
如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复,首先查找到/ etc / inittab中属于哪一个RPM包
chroot / mnt / sysimage
rpm -qf / etc / inittab
初始化脚本,9.03.49-1.el6.centos.x86_64
退出chroot模式
挂载存放RPM包的安装光盘(在救援模式下,光盘通常挂载在的/ mnt /源目录下)
mount / dev / sr0 / mnt / source
CentOS6系统的RPM包存放在光盘包装目录下,要修复的硬盘系统的根目录在到/ mnt / sysimage目录下,需要使用--root选项指定其位置覆盖安装在/ etc / inittab的文件所在的RPM包:
rpm -ivh --replacepkgs | force / mnt / source / Packages /
初始化脚本,9.03.49-1.el6.centos.x86_64.rpm
其中的转速命令选项“--replacepkgs”表示覆盖安装,执行完成后,即已经恢复了此文件
如果想只提取RPM包中的/ etc / inittab中文件进行恢复,可以在进入救援模式后,执行命令:
rpm2cpio /mnt/source/Packages/initscripts-9.03.49-
1.el6.centos.x86_64.rpm | cpio -idv ./etc/inittab
cp etc / inittab / mnt / sysimage / etc
注意此命令执行时不能将文件直接恢复至/等目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整的路径。提取文件成功后,将其复制到根分区所在的/ MNT / sysimage目录目录下相应位置即可

的/ proc目录:
内核把自己内部状态信息及统计信息,以及可配置参数通
过PROC伪文件系统加以输出
参数:只读:输出信息
可写:可接受用户指定“新值”来实现对内核某功
能或特性的配置
的/ proc / SYS
(1)sysctl命令用于查看或设定此目录中的诸多参数
sysctl -w path.to.parameter = VALUE
sysctl -w kernel.hostname = mail.magedu.com
(2)echo命令通过重定向方式也可以修改大多数参数的值
echo“VALUE”> / proc / sys / path / to /参数
echo“websrv”> / proc / sys / kernel / hostname
sysctl的命令:
默认配置文件:/etc/sysctl.conf中
(1)设置某参数
sysctl -w参数= VALUE
(2)通过读取配置文件设置参数
sysctl -p [/ path / to / conf_file]
(3)查看所有生效参数
sysctl -a
常用的几个参数:
net.ipv4.ip_forward允许包转发
net.ipv4.icmp_echo_ignore_all禁止qing
vm.drop_caches清除缓存
/ SYS目录:
sysfs中:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬​​件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性
udev的通过此路径下输出的信息动态为各设备创建所需要设备文件,udev的是运行用户空间程序
专用工具:udevadmin,hotplug
udev的为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d中及/usr/lib/udev/rules.d目录下
内核编译
单内核体系设计,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制
内核组成部分:
kernel:内核核心,一般为bzImage,通常在/ boot目录下,名称为
的vmlinuz-VERSION-RELEASE
内核对象:内核对象,一般放置于
/ LIB /模块/ VERSION-RELEASE /
[]:N
M:M
[*]:是
辅助文件:RAMDISK
initrd文件
initramfs的
内核版本
运行中的内核:
UNAME命令:
uname - 打印系统信息
uname [选项] ...
-n:显示节点名称
-r:显示VERSION-RELEASE
-a:显示所有信息
内核模块命令
lsmod的命令:
显示由核心已经装载的内核模块
显示的内容来自于:/ proc / modules文件
modinfo命令命令:
显示模块的详细描述信息
modinfo [-k内核] [模块名|文件名...]
-n:只显示模块文件路径
-p:显示模块参数
-a:作者
-d:说明
-l:许可证
lsmod | grep xfs; modinfo xfs
内核模块管理
modprobe的命令:
装载或卸载内核模块
modprobe [-C配置文件] [模块名] [模块参数...]
配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf
modprobe [-r] modulename ...
depmod命令:
内核模块依赖关系文件及系统信息映射文件的生成工具
装载或卸载内核模块:
insmod的命令:指定模块文件,不自动解决依赖模块
insmod [文件名] [模块选项...]
insmod`modinfo -n exportfs`
lnsmod`modinfo -n xfs`
rmmod的命令:卸载模块
rmmod [模块名]
rmmod xfs
rmmod exportfs
编译内核
前提:
(1)准备好开发环境
(2)获取目标主机上硬件设备的相关信息
(3)获取目标主机系统功能的相关信息
例如:需要启用相应的文件系统
(4)获取内核源代码包
www.kernel.org
开发环境准备
包组(CentOS 6):
服务器平台开发
开发工具
目标主机硬件设备相关信息:
中央处理器:
cat / proc / cpuinfo
x86info -a
lscpu
硬件设备
PCI设备:
lspci的
-v
-vv
的lsusb
-v
-vv
lsblk块设备
了解全部硬件设备信息
HAL-设备:CentOS6
内核编译安装系统
安装开发包组
下载源码文件
的.config:准备文本配置文件
make menuconfig:配置内核选项
make [-j#]
make modules_install:安装模块
make install:安装内核相关文件
安装的bzImage为的/ boot / vmlinuz的-VERSION-RELEASE
生成initramfs的文件
编辑GRUB的配置文件
编译内核
(1)配置内核选项
支持“更新”模式进行配置:提供帮助
(a)make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
(b)make menuconfig:基于curses的文本窗口界面
(c)make gconfig:基于GTK(GNOME)环境窗口界面
(d)make xconfig:基于QT(KDE)环境的窗口界面
支持“全新配置”模式进行配置
(a)make defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b)make allyesconfig:所有选项均回答为“yes”
(c)make allnoconfig:所有选项均回答为“no”
(2)编译
全编译:make [-j#]
编译内核的一部分功能:
(a)只编译某子目录中的相关代码
cd / usr / src / linux
使目录/
(b)只编译一个特定的模块
cd / usr / src / linux
make dir / file.ko
例如:只为E1000编译驱动:
make drivers / net / ethernet / intel / e1000 / e1000.ko
如何交叉编译内核:
编译的目标平台与当前平台不相同
使ARCH = arch_name
要获取特定目标平台的使用帮助
使ARCH = arch_name帮助
使ARCH =手臂帮助
在已经执行过编译操作的内核源码树做重新编译
需要事先清理操作:
make clean:清理大多数编译生成的文件,但会保留配置文件等
make mrproper:清理所有编译生成的文件,config和某些备份文件
make distclean:mrproper,补丁以及编辑器备份文件
卸载内核
删除/ LIB /模块/目录下不需要的内核库文件
删除的/ usr / src / linux中/目录下不需要的内核源码
删除的/ boot目录下启动的内核和内核映像文件
更改GRUB的配置文件,删除不需要的内核启动列表
systemd
POST - > Boot Sequence - > Bootloader - > kernel + initramfs(initrd) - > rootfs - > / sbin / init
init:CentOS 5:SysV init
CentOS 6:新贵
CentOS 7:Systemd
Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
Systemd新特性:
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用插座式与d-Bus的总线式激活服务
系统状态快照
systemd
核心概念:单位
单元表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务,监听插座,保存的系统快照以及其它与初始化相关的信息
配置文件:
/ usr / lib中/ systemd /系统:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/中
/运行/ systemd /系统:系统执行过程中所产生的服务脚本,比上面目录优先运行
的/ etc / systemd /系统:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行
单位类型
Systemctl -t帮助查看单位类型
服务单位:文件扩展名为.service,用于定义系统服务
目标单位:文件扩展名为.target,用于模拟实现运行级别
相当于init 0〜6
设备单元:.device,用于定义内核识别的设备
安装单元:.mount,定义文件系统挂载点
Socket单元:.socket,用于标识进程间通信用的socket文件,也可以在系统启动时,
延迟启动服务,实现按需启动
快照单元:.snapshot,管理系统快照
交换单元:.swap,用于标识交换设备
自动挂载点:.automount,文件系统的自动挂载点
路径单元:.path,用于定义文件系统中的一个文件或目录使用,常用于当前文件系统变化时,
延迟激活服务,如:spool目录
特性
关键特性:
基于套接字的激活机制:插口与服务程序分离
基于d-总线的激活机制:
基于设备的激活机制:
基于路径的激活机制:
系统快照:保存各单位的当前状态信息于持久存储设备中
向后兼容sysv init脚本
不兼容:
systemctl命令固定不变,不可扩展
非由systemd启动的服务,systemctl无法与之通信和控制
管理服务
管理系统服务:
CentOS 7:服务单位
注意:能兼容早期的服务脚本
命令:systemctl COMMAND name.service
启动:服务名称开始==> systemctl start name.service
停止:service name stop ==> systemctl stop name.service
重启:服务名称重启==> systemctl restart name.service
状态:服务名称状态==> systemctl status name.service
可以一次性操作多个服务
条件式重启:已启动才重启,否则不做操作
服务名称condrestart ==> systemctl try-restart name.service
重载或重启服务:先加载,再启动
systemctl reload-or-restart name.service
重载或条件式重启服务:
systemctl reload-or-try-restart name.service
禁止自动和手动启动:
systemctl掩码name.service
取消禁止:
systemctl unmask name.service
服务查看
查看某服务当前激活与否的状态:
systemctl is-active name.service(多用于脚本)
查看所有已经激活的服务:
systemctl list-units --type | -t服务
查看所有服务:
systemctl list-units --type service --all | -a
chkconfig的命令的对应关系:
设定某服务开机自启:
chkconfig name on ==> systemctl enable name.service
设定某服务开机禁止启动:
chkconfig名称关闭==> systemctl禁用name.service
查看所有服务的开机自启状态:
chkconfig --list ==> systemctl list-unit-files --type服务
用来列出该服务在哪些运行级别下启用和禁用
chkconfig sshd -list ==>
ls /etc/systemd/system/*.wants/sshd.service
查看服务是否开机自启:
systemctl已启用name.service
其它命令:
查看服务的依赖关系:
systemctl list-dependencies name.service
杀掉进程:
systemctl kill单位名称
服务状态
systemctl list-unit-files --type service --all显示状态
加载:单位配置文件已处理
活动(正在运行):一次或多次持续处理的运行
活性(退出):成功完成一次性的配置
活性(等待):运行中,等待一个事件
未激活:不运行
启动:开机启动
禁用:开机不启动
静:开机不启动,但可被另一个启用的服务激活
服务单元文件格式
的/ etc / systemd /系统:系统管理员和用户使用/ usr / lib中/ systemd /系统:发行版打包者使用
以“#”开头的行后面的内容会被认为是注释
相关布尔值,1,是,on,true都是开启,0,no,off,false都是关闭
时间单位默认是秒,所以要用毫秒(ms)的分钟(M)等须显式说明
服务单位档案文件通常由三部分组成:
[单位]:定义与单元类型无关的通用选项;用于提供单元的描述信息,单元行为及依赖关系等
[服务]:与特定类型相关的专用选项;此处为服务类型
[Install]:定义由“systemctl enable”以及“systemctl disable”命令在实现服务启用或禁用时用到的一些选项
单元段的常用选项:
说明:描述信息
后:定义单元的启动次序,表示当前单位应该晚于哪些单元启动,其功能与之前相反
要求:依赖到的其它单元,强依赖,被依赖的单元无法激活时,当前单元也无法激活
又想:依赖到的其它单位,弱依赖
冲突:定义单位间的冲突关系
服务段的常用选项:
类型:定义影响ExecStart及相关参数的功能的单元进程启动类型
简单:默认值,这个守护进程主要由ExecStart接的指令串来启动,启动后常驻于内存中
分叉:由ExecStart启动的程序透过滋生延伸出其他子程序来作为此守护进程的主要服务原生父程序在启动结束后就会终止
单冲:与简单的类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus:与简单类似,但这个守护进程必须在取得一个D-Bus的名称后,才会继续运作。因此通常也要同时设定BusNname =才行
notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess来让Systemd接收消息
idle:与简单类似,要执行这个守护进程必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
EnvironmentFile:环境配置文件
ExecStart:指明启动装置要运行命令或脚本的绝对路径
ExecStartPre:ExecStart前运行
ExecStartPost:ExecStart后运行
ExecStop:指明停止单元要运行的命令或脚本
Restart:当设定Restart = 1时,则当次守护服务意外终止后,会再次自动启动此服务
安装段的常用选项:
别名:别名,可使用systemctl命令Alias.service
RequiredBy:被哪些单位所依赖,强依赖
WantedBy:被哪些单位所依赖,弱依赖
另外:安装本服务的时候还要安装别的相关服务
注意:对于新创建的单元文件,或者修改了的单元文件,要通知systemd重载此配置文件,而后可以选择重启
systemctl守护进程重新加载
运行级别
目标单位:
单元配置文件:.TARGET
ls /usr/lib/systemd/system/*.target
systemctl list-unit-files --type target --all
运行级别:
0 ==> runlevel0.target,poweroff.target
1 ==> runlevel1.target,rescue.target
2 ==> runlevel2.target,multi-user.target
3 ==> runlevel3.target,multi-user.target
4 ==> runlevel4.target,multi-user.target
5 ==> runlevel5.target,graphical.target
6 ==> runlevel6.target,reboot.target
查看依赖性:
systemctl list-dependencies graphical.target
级别切换:init N ==> systemctl isolate name.target
systemctl隔离multi-user.target
注:只有/lib/systemd/system/*.target文件中AllowIsolate = yes才能切换(修改文件需执行systemctl daemon-reload才能生效)
查看目标:
运行级别 谁-r
systemctl list-units --type target
获取默认运行级别:
/ etc / inittab ==> systemctl get-default
修改默认级别:
/ etc / inittab ==> systemctl set-default name.target
systemctl set-default multi-user.target
ls -l /etc/systemd/system/default.target
其它命令
切换至紧急救援模式:
systemctl救援
切换至应急模式:
systemctl紧急情况
其它常用命令:
传统命令初始化,关机,停机,重新启动都成为
systemctl的软链接
systemctl halt,systemctl poweroff
重启:systemctl reboot
挂起:systemctl suspend
休眠:systemctl hibernate
休眠并挂起:systemctl hybrid-sleep
CentOS7引导顺序
UEFI BIOS或初始化,运行POST开机自检
选择启动设备
引导装载程序,centos7是grub2
加载装载程序的配置文件:/etc/grub.d/ / etc / default / grub
/boot/grub2/grub.cfg
加载initramfs的驱动模块
加载内核选项
内核初始化,centos7使用systemd代替INIT
执行initrd.target所有单元,包括挂载/ etc / fstab中
从initramfs的根文件系统切换到磁盘根目录
systemd执行默认目标配置,配置文件/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执行图形需要的服务
设置内核参数
设置内核参数,只影响当次启动
启动时,在linux16行后添加systemd.unit = desired.target
systemd.unit = emergency.target
systemd.unit = rescue.target
rescue.target比紧急支持更多的功能,例如日志等
systemctl默认进入默认目标
启动排错
文件系统损坏
先尝试自动修复,失败则进入emergency shell,提示用户修复
在/ etc / fstab中不存在对应的设备和UUID
等一段时间,如不可用,进入emergency shell
在/ etc / fstab中不存在对应挂载点
systemd尝试创建挂载点,否则提示进入emergency shell。
在/ etc / fstab中不正确的挂载选项
提示进入紧急外壳
破解CentOS7的根口令方法一
启动时任意键暂停启动
按Ë键进入编辑模式
将光标移动linux16开始的行,添加内核参数rd.break
按CTRL-X启动
mount -o remount,rw / sysroot
chroot / sysroot
passwd根
触摸/.autorelabel
出口
重启
破解CentOS7的根口令方法二
启动时任意键暂停启动
按Ë键进入编辑模式
将光标移动到linux16开始的行,改为rw init = / sysroot / bin / sh
按CTRL-X启动
chroot / sysroot
passwd根
触摸/.autorelabel
出口
重启
修复GRUB2
GRUB“Grand Unified Bootloader”
引导提示时可以使用命令行界面
可从文件系统引导
主要配置文件/boot/grub2/grub.cfg
修复配置文件
grub2-mkconfig> /boot/grub2/grub.cfg
修复GRUB
grub2-install / dev / sda BIOS环境
grub2-install UEFI环境
调整默认启动内核
vim / etc / default / grub
GRUB_DEFAULT = 0
删除的/ boot / GRUB2 /
救援模式
切跟
grub2-install / dev / sda
grub2-mkconfig -o /boot/grub2/grub2.cfg
修复的grub.cfg
重启
insmod xfs
set root =(hd0,1)
linux16 / vmlinuz(tab补全)root = / dev / sda2 selinux = 0
initrd16 / initrramfs(标签补全)
rm -rf / boot / *
救援模式
chroot / mnt / sysimage
mount / dev / sr0 / mnt
rpm -ivh / mnt / Packages / kernel(tab补全)--force
grub2-install / dev / sda
grub2-mkconfig -o /boot/grub2/grub2.cfg






猜你喜欢

转载自blog.csdn.net/qq_35242906/article/details/80342366