服务管理和系统启动流程

服务管理:

启动一个服务之后,这个服务需要监听在一个端口,通过端口号来区分服务,并让外部进行访问

通过访问/etc/services文件可以查看默认端口号,每个服务的端口号都是可以在配置文件中修改端口号,通常以listen、port字段来进行定义

systemctl是一个服务的管理工具,在红帽8和红帽7中都被使用

基础命令

rpm -ql 软件包名 | grep service        #查看软件包相关服务名
systemctl start 服务名                 #开启服务
systemctl stop 服务名                  #关闭服务
systemctl restart 服务名               #重启服务
systemctl reload 服务名                #重新加载服务配置
systemctl status 服务名                #查看服务状态
systemctl enable 服务名                #设置服务开机启动
systemctl disable 服务名               #取消服务开机启动
systemctl mask 服务名                  #屏蔽服务
systemctl unmask 服务名                #取消屏蔽服务
systemctl  list-dependencies 服务名    #查看服务依赖性

systemd

systemd本身是一个服务,是系统启动的第一个服务systemd守护进程管理Linux启动,一般包括服务启动和服务管理,可以在系统引导的时候以及运行中的系统激活资源,服务器守护进程和其他进程

守护进程是执行各种任务的后台等待或者运行的进程,一般情况下在系统引导的时候自动启动并且持续运行到关机或者停止,守护进程的名字通常以d结尾

systemd提供的功能:
  1. 并行化功能,可以同时启动多个服务,提高系统启动速度

  2. 按需启动激活进程

  3. 自动服务依赖管理

描述服务单元

在systemd管理的服务中,不再以脚本进行管理,使用服务单元对服务进行管理

systemctl -t <type> #查看已经启动类型的单元

类型文件扩展名解释
Service unit.service定义系统服务
Target unit.target模拟运行级别
Device unit.device定义内核识别的设备
Mount unit.mount定义文件系统挂载点
Socket unit.socket用于标识进程间的通信
Swap unit.swap用于管理swap设备
Automount unit.automount定义文件系统自动挂载
Path unit.path定义文件系统文件和目录

list unit

systemctl  list-units
UNIT                                         LOAD   ACTIVE SUB       DESCRIPTION              
proc-sys-fs-binfmt_misc.automount            loaded active waiting   Arbitrary Executable File>
sys-devices-pci0000:00-0000:00:01.0-0000:01:00.0-virtio1-net-eth0.device loaded active plugged
  • UNIT

    • 服务单元的名称

  • LOAD

    • systemd是否正确解析服务,是否正确加载

  • ACTIVE

    • 单元高级别激活状态

  • SUB

    • 单元低级别启动状态

  • DESCRIPTION

    • 单元简单描述

[root@servera ~]# systemctl  list-unit-files  
UNIT FILE                                  STATE          
proc-sys-fs-binfmt_misc.automount          static         
-.mount                                    generated      
boot-efi.mount                             generated      
dev-hugepages.mount                        static         
dev-mqueue.mount                           static         
proc-fs-nfsd.mount                         static         
proc-sys-fs-binfmt_misc.mount              static         
sys-fs-fuse-connections.mount              static         
sys-kernel-config.mount                    static         
sys-kernel-debug.mount                     static         
  1. UNIT FILE: 单元相关文件

  2. STATE : 监听状态

    • enabled:系统启动时启动

    • disabled:系统启动时不启动

    • static:无法单独启动,可以由别的服务带起来

    • masked:无法启动,也不能被被的服务带起来

systemctl is-active  服务名 #判断服务是否现在启动
systemctl is-failed 服务名 #判断服务是否没有启动
systemctl is-enabled 服务名 #判断服务是否开机启动

target 模拟运行级别
target类型描述
multi-user.target从字符界面启动
graphical.target从图形界面启动
rescue.target系统初始化完成,需要root用户登录
emergency.target只读挂载根文件系统,需要root用户登录

#查看系统下次开机的运行级别
systemctl  get-default 
graphical.target
​
#当默认运行级别为multi-user.target的时候,如果安装了图形化,则可以使用以下命令切换为图形化,启动过程中不会中断别的服务
systemctl isolate  graphical.target 
​
#设置下次启动运行级别
systemctl set-default graphical.target 

Linux系统启动流程

一:BIOS初始化过程

1. 检查硬件

检查内存,cpu,磁盘等,并且初始化部分硬件

2. 选择启动设备

搜索设备MBR,选择主引导设备,选择是从磁盘启动还是从光盘启动,对于硬盘而言,引导存在硬盘的446字节中

二:grub2阶段

1. BIOS加载引导程序,系统控制权交给引导程序(BIOS+MBR)
  • MBR 512字节 = 引导程序446字节 + 分区表64字节 + 2字节结束位

    • MBR分区表最多分四个主分区

    • GPT格式分区表最多分128个分区

2. 引导程序加载配置文件 /boot/grub2/grub.cfg

引导程序加载配置文件的路径是固定的,不会出现找不到grub.cfg文件的情况

1)显示菜单栏,选择一个菜单栏启动

在/boot/loader/entries目录中会有几个配置文件,里面内容代表了开机时选择内核的菜单栏

当能够看见菜单栏的时候,说明 /boot/grub2/grub.cfg文件已经成功读到

2)告知/boot目录所在分区

首先在/boot/grub2/grub2.cfg中需要告知/boot/目录所在硬盘物理位置(set root='hd1,msdos1'),把/boot/临时当作一个根,如果boot目录没有被单独分出来,则在grub2阶段中的文件路径是/boot/vmlinuz-4.18.0-193.el8.x86_64,如果boot目录被单独分出来,则grub2中的文件路径是/vmlinuz-4.18.0-193.el8.x86_64

3)加载内核文件

但是在读取硬件的时候系统内核文件默认在/usr/lib/modules/4.18.0-193.el8.x86_64中,这时识别硬件需要读取内核,内核在根中,根在硬件中,陷入无法读取的死循环,在/boot/中有一个vmlinuz-4.18.0-193.el8.x86_64通用内核,通过读取通用内核文件来进行硬件识别,加载结束之后将加载出真正的根所在路径,以只读的方式加载真正的根

4)加载ramdisk文件

/boot/initramfs-4.18.0-193.el8.x86_64.img文件包含了硬件启动的时候需要的内核模块,以及包含了初始化脚本。

3.引导程序将系统控制权交给内核

三:进入真正的根,默认动作 chroot /sysroot

读取/etc/fstab

rw挂载根,然后挂载fstab中其他的文件系统

如果在ramdisk阶段将系统启动拦截,则进入的是ramdisk自带的/boot/initramfs-4.18.0-193.el8.x86_64.img系统,并不是真正的根

内核相关命令

#查看默认内核
[root@foundation0 grub2]# grubby  --default-kernel 
/boot/vmlinuz-4.18.0-193.el8.x86_64
​
#查看默认启动索引号
[root@foundation0 grub2]# grubby  --default-index
1
​
#查看启动详细信息
[root@foundation0 grub2]# grubby  --info=/boot/vmlinuz-4.18.0-193.el8.x86_64 
index=0
kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64"
args="ro resume=UUID=2196baf4-81ad-4df9-9211-2b7dc6607545 rhgb quiet rd.shell=0 $tuned_params"
root="UUID=2ea1e7f1-5469-4f84-94f1-4385e1530db2"
initrd="/boot/initramfs-4.18.0-193.el8.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-193.el8.x86_64) 8.2 (Ootpa)"
id="f9faca9721c14de29e776c8be493f919-4.18.0-193.el8.x86_64"

实验一: 删除/boot/grub2/grub.cfg 手动引导启动

# grub2引导程序阶段
set root='hd1,msdos1'
linux /boot/vmlinuz-4.18.0-193.el8.x86_64 ro /dev/sda1 
initrd /boot/initramfs-4.18.0-193.el8.x86_64.img 
boot
​
# 生成grub.cfg文件
grub2-mkconfig -o grub.cfg 
​
#如果需要修改grub文件,/etc/grub.d/和/etc/default/grub两个文件进行修改并重新生成grub.cfg 

实验二: 破解root密码

# 在进入单用户模式之后,单用户的操作系统是由/boot/initramfs-4.18.0-193.el8.x86_64.img文件提供的临时操作系统,这个时候硬件已经全部读取完成,可以查看到系统中的硬盘挂载情况,使用mount将物理硬盘重新挂载,并使用chroot进入到物理硬盘中的系统,从而执行命令修改密码,来达到破解root密码的目的
在内核中按e
在linux末尾一直删除到ro然后输入rd.break 
mount -o remount,rw /sysroot 
chroot /sysroot 
echo 111 |passwd --stdin root 
touch /.autorelabel 
exit
exit

实验三: 引导程序修复

修复引导程序的时候必须要找到相同版本的ISO进入救援,否则可能会出现意外的错误

#破坏引导程序
dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1 

#连接一个光盘
选择Troubleshooting救援模式
选择Rescue a Red Hat Enterprise Linux system 从光盘启动 会有一个光盘自带的操作系统  

进入救援模式 
找到真正的根  chroot /mut/sys...
修复引导程序 grub2-install  grub2-mkconfig > /boot/grub2/grub.cfg 
选择continue,点击ok 

#进入真正的根
chroot /mnt/sysimage/ 

#修复引导程序,参数为第一个磁盘,不是分区
grub2-install  /dev/nvme0n1 

#一直推出,等待重启

四、/etc/fstab文件错误修复

当/etc/fstab错误的时候,可以输入密码,输入密码之后进入到真正的操作系统,修改fatab为正确的内容

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值