服务管理:
启动一个服务之后,这个服务需要监听在一个端口,通过端口号来区分服务,并让外部进行访问
通过访问/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提供的功能:
-
并行化功能,可以同时启动多个服务,提高系统启动速度
-
按需启动激活进程
-
自动服务依赖管理
描述服务单元
在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
-
UNIT FILE: 单元相关文件
-
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为正确的内容