一:系统的简介
1:基础
系统启动的时候会运行什么样的程序,什么样的进程什么样的服务,以及得到什么样的桌面,系统开机运行的第一个程序,pid为1,系统的守护进程目的是初始化系统
在rhel7之前,使用init初始化系统
在rhle7之后,使用systemd初始化系统
系统中,如果是d结尾的,那么就表明这是守护进程,在后台一直运行的进程
2:init和systemd区别
1)init属于串行启动,systemd属于并行启动
a:init从上到下一次启动,如果中间出现了问题,则系统无法启动
b:systemd按需启动服务,可以一次性同步启动多个服务
2)systemd自动解决服务依赖问题
a:如果要启动nfs服务,需要先启动rpc-bind mountd,这样就解决了依赖的问题
二:系统的管理(systemctl和systemd)
1:系统单元的管理
在系统中,systemd通过单元来管理不同类型的对象
1)查看系统的服务单元:
也可查看到服务的运行状态,
[root@node1 ~]# systemctl list-units --type service | head -n 5 UNIT LOAD ACTIVE SUB DESCRIPTION accounts-daemon.service loaded active running Accounts Service atd.service loaded active running Deferred execution scheduler auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
参数的介绍:
UNIT:服务名
LOAD:是否正确的载入配置文件
ACTIVE:服务的高级状态,一系列进程的状态,服务的最终状态就是他
sub:服务的低级状态,服务进程的状态,exited表示进程已经经历了一次正确的配置载入,等待下一次的运行后,就会变成running
description:服务的描述信息
2)查看系统开机自启的服务
查看服务是否是开机自启的,还有就是服务的默认状态
[root@node1 ~]# systemctl list-unit-files --type automount mount scope slice swap timer device path service socket target [root@node1 ~]# systemctl list-unit-files --type service | head -n 4 UNIT FILE STATE VENDOR PRESET accounts-daemon.service enabled enabled alsa-restore.service static - alsa-state.service static -
服务的状态:
enabled:表示开机自启
disabled:表示开机不会自启
static:服务不能自己启动,只能被其他的服务激活启动,nfs服务
mask:锁定服务,服务不能自己启动,其他服务也不能对其激活启动,mask是为了防止服务之间发生冲突,使用mask对一个服务进行锁定
3)管理服务
rhel7之前管理服务与rhel7之后,命令非常不一样
systemctl 动作 服务名称
动作:start,stop,restart,status,reload,enabled,disabled,reload-or-restart(2者之一任选一个),mask(锁定服务),unmask(解锁服务),is-active(服务是否启动的),is-enabled(服务是否开机自启),list-dependencied(查看服务的依赖)
案例:
#查看服务的依赖性 [root@node1 ~]# systemctl list-dependencies httpd | head -n 10 httpd.service ● ├─-.mount ○ ├─httpd-init.service ● ├─system.slice ● └─sysinit.target ● ├─dev-hugepages.mount ● ├─dev-mqueue.mount ● ├─dracut-shutdown.service ○ ├─iscsi-onboot.service #查看服务是否启动的 [root@node1 ~]# systemctl is-active httpd active #查看服务是否开机自启 [root@node1 ~]# systemctl is-enabled httpd enabled
2:系统启动目标管理
1:系统启动目标
系统启动目标就是,系统启动的时候获取什么样的操作界面,也是一种状态,一共0到6个级别,0关机,6重启,5图形化,3是带网络字符页面
系统目标的划分:
graphical.target | 图形化的页面 |
multi-user.target |
字符页面 |
rescue.target |
修复系统页面 |
emergency.targe
|
修复系统故障的页面 |
2:查看系统启动目标
1)第一种方式,使用runlevel来查看
runlevel可以看到上一次的启动目标和当前的启动目标
[root@node1 ~]# runlevel N 5
2)第二种方式使用systemctl get-default查看
[root@node1 ~]# systemctl get-default graphical.target
3:修改系统的启动目标
1)永久修改
systemctl set-default 启动目标
systemctl set-default multi-user.target reboot
即可,这个就是永久的修改
2)临时修改
init 5 切换到图形页面
systemctl isolate multi-user.target
在菜单页面选择第一个按e,在linux这一行,ctlrl+e到末尾,然后输入systemd.uni=图形化类型,ctrl+x就进入里面了
下次重启后,还是会会回复到原来的地方
三:系统启动的流程和查看内核
1:系统启动的流程
BIOS:最小化输入输出系统
流程:
1:上电开机
2:BIOS开始自检并且加载硬件
3:BIOS根据启动的顺序选择对应的启动设备
a:硬盘的,cdrom,网络
4:从硬盘去加载引导代码(引导程序)
a:引导代码---->>>引导程序--->>>grub2
b:存放在硬盘的前446个字节(mbr分区的最前面)
5:引导程序加载启动引导分区中配置文件(引导配置文件)
/boot/grub2/grub.cfg
6:grub2会加载内核和initramfs--->>>要挂载根文件系统,然后执行systemd来初始化(启动服务,根据启动目标获取操作页面)
a:内核不能挂载文件系统,想要挂载文件系统,需要对应的文件系统驱动,需要xfs系列,ext系列
b:initramfs目的就是为了帮助内核挂载根文件系统,提供文件系统的驱动以及硬件驱动
7:initramfs会执行自己的systemd并且将磁盘上的根文件系统挂载到/sysroot(真正根文件系统挂载到/sysroot)
8:内核就会将initramfs的假根切换为/sysroot(真正的根),然后执行systemd进行初始化系统
9:systemd通过启动目标来得到操作页面(字符页面,图形化页面等)
2:内核参数
1:查看系统的内核
grubby --info=ALL
[root@node1 entries]# grubby --info=ALL index=0 kernel="/boot/vmlinuz-5.14.0-70.22.1.el9_0.x86_64" args="ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet" root="/dev/mapper/rhel-root" initrd="/boot/initramfs-5.14.0-70.22.1.el9_0.x86_64.img" title="Red Hat Enterprise Linux (5.14.0-70.22.1.el9_0.x86_64) 9.0 (Plow)" id="ec4c8aea8e734d88b03b86d6af1d1fe5-5.14.0-70.22.1.el9_0.x86_64" index=1 kernel="/boot/vmlinuz-0-rescue-ec4c8aea8e734d88b03b86d6af1d1fe5" args="ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet" root="/dev/mapper/rhel-root" initrd="/boot/initramfs-0-rescue-ec4c8aea8e734d88b03b86d6af1d1fe5.img" title="Red Hat Enterprise Linux (0-rescue-ec4c8aea8e734d88b03b86d6af1d1fe5) 9.0 (Plow)" id="ec4c8aea8e734d88b03b86d6af1d1fe5-0-rescue"
index=0代表着为第一个内核,=1代表着第二个内核参数
查看的就是/boot/loader/entries下面的内核文件
2:查看系统默认内核
grubby --default-kernel
[root@node1 entries]# grubby --default-kernel /boot/vmlinuz-5.14.0-70.22.1.el9_0.x86_64
3:修改默认的内核
1)grubby --set-default 内核路径 也就是/boot下面的内核文件
2)grubby --set-default-index x(这个x就是grubby --info=ALL显示的index等于几)
4:查看内核标题以及修改
1:查看内核标题
grubby --default-title
查看就是/boot/loader/entries这个文件中的标题内容
2:修改内核的标题
一种方法就是:因为查看的就是/boot下面的文件,所以修改下面的文件即可,
修改后,然后重启即可
5:修改内核启动的参数
第一种方法:对配置文件进行修改(永久的修改)
修改/etc/default/grub里面的timeout这个参数,就是设置超时的时间
修改完成后,输入grub2-mkconfig -o /boot/grub2/grub.cfg,重新生成gruub.cfg配置文件
但是把下面有出现了一个新的文件(一致都有的文件)
第二种方法:通过grub添加内核的参数(永久修改的)
grubby --args= " systemd.unit=系统的启动目标" --update-kernel /boot/内核文件
也就是写入到了这个内核文件里面去了(/boot/loder/entries下面了)
但是没有写到/etc/default/grub里面去
第三种方法:系统启动的时候修改内核参数(临时修改,用的较为多)
1)在启动的界面是按e键,然后在linux末尾添加内核参数,比如systemd.unit=multi-user.target
2)然后按ctrl+x继续启动
常见的内核参数
1:systemd.unit=multi-user.target
2:init=/bin/bash
3:rd.break