目录
频道首页
开机引导和服务程序
收藏
0
xy20118 最近修改于 2024-04-16 08:29:16

前言 kernel 实现进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等功能 进程:运行中的程序叫进程 存在内存中且是有生周期。

linux操作系统引导过程

开机自检(bios)->mbr引导->grub菜单->加载内核->启动程序

1.开机自检

  • 检测硬件是否正常
  • bios小程序 集成在主板上 检测顺序-本地硬盘-外接设备-网卡
  • bios界面 ::: center image :::

mbr引导

硬盘的第一个扇区 512字节 其中446字节 作为主引导记录 指引硬件找到grub 分区表 64字节 启动加载器 提供选项给用户选择 准备加载内核文件 然后将系统控制权转交给内核 grub启动过程-primary bootloder 主引导记录
根据grub.cfg配置文件 找到内核文件。 其中grub centos7 使用的是grub2

加载内核kernel

centos7 启动的第一个程序是systemd centos6 启动第一个程序是init 区别: init:启动其他程序 是串行 ,如12345678 依赖关系进行启动 systemd:启动程序 并行启动 12345678 同时启动 运行级别 常用2 3 5 详细如截图

| 运行级别 | systemd的target |说明 | | ------ | ------ | ------ | |0 | target | 关机状态 使用该级别 会关闭主机 | | 1 | rescue.target |单用户模使用式,不需要密码验证即可登录系统,系统维护 | | 2 | multi-user.target | 用户自定义/域特定运行级别,默认等同3 | | 3 | multi-user.target | 字符界面完整的多用户模式,多数服务器主机运行在此级别 | | 4 | multi-user.target | 用户定义/域特定运行级别 默认等同3 | | 5 | graphical .target| 图形界面的多用户模式,提供了图形桌面的操作环境 | |6 | reboot.target | 重新启动 使用该级别将会重启主机 |

1是单用户模式 4是测试
init 1 关机
init6 重启 set-default 运行级别 修改运行级别

启动程序

init系统初始化

解决系统启动中遇见的故障

1.mbr扇区故障

故障原因:病毒 木马造成破坏 , 不正确的分区操作, 磁盘读写误操作 故障现象: 找不到引导程序 启动终端 无法加载操作系统 开机后黑屏 解决思路: 提前备份好文件 以安装光盘引导进去急救模式 从备份中获取 !!#00ff00 模拟思路!!:mbr是安装在硬盘的第一个扇区上面 ,占用512字节,其中前446字节是bootloader,用于引导操作系统,64位是分区表,2位结束语。所以前446字节不在分区上,现在模拟mbr损坏,就只需要破坏硬盘第一个扇区的前446字节 即可达到效果。 操作方法-详解:

dd if=dev/zero  of=/dev/sda   count=1 bs=446  #含义-从dev目录下取得任意字符串,去替换/dev/sda中的字符,替换数量是由bs和count决定,本条的含义是446字节,替换一次,这样就破坏掉了mbr,现在重启系统会如下截图显示。

::: center image ::: 都不进行点击的话 会进入自检模式后,重新安装系统 相当于之前的户数全部丢失。 正常选择第三个急救模式 然后进入等待显示截图界面 选择!!#ffff00 skip to shell !!。 ::: center image :::

1.优先异地备份 可以在其他硬盘或者是在其他机器上进行备份操作 ,虚拟机演示直接备份在新添加的硬盘就可以

[root@localhost ~]# fdisk /dev/sdb  #新建的磁盘sdb磁盘分区
欢迎使用 fdisk (util-linux 2.23.2)。
 命令(输入 m 获取帮助):n
 起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G  
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk #查看是否已经分区成功
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─centos-root 253:0    0 38.3G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0 18.7G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0   10G  0 part 
sr0              11:0    1  4.2G  0 rom  
[root@localhost ~]# mkfs.xfs /dev/sdb1  #格式化磁盘
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/sdb1 /mnt  #临时挂载 到mnt
[root@localhost ~]# dd if=/dev/sda  of=/mnt/mbr.bak count=1 bs=512 #从、dev/sda下面取任意字符串 替换到/mnt/mbr.bak 中,数量512字节  替换1次。
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.00540832 秒,82.5 kB/秒
[root@localhost ~]# cd /mnt  
[root@localhost mnt]# ls 
mbr.bak
[root@localhost mnt]# ll -h #查看文件属性 
总用量 4.0K
-rw-r--r--. 1 root root 512 4月  15 16:15 mbr.bak  
[root@localhost mnt]# dd if=/dev/zero of=/dev/sda count=1 bs=446 #从dev下取任意字符串。替换到/dev/sda  数量是446字节 替换1次。
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.000389754 秒,1.1 MB/秒
[root@localhost mnt]# hexdump -C -n446 /dev/sda  #查看二进制文件 输出前446字节 按照 -C按照规范输出
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00        |..............|
000001be
[root@localhost mnt]# reboot #重启

2.进入!!#ffff00 急救模式!! ::: center image ::: 3.选择!!#ffff00 急救操作系统!! 点击后等待,^(* ̄(oo) ̄)^进入的是光驱上的操作系统。 ::: center image ::: 4.进入系统后!!#ffff00 选择1 !! ::: center image ::: 5.将之前备份的mbr 挂载到现在的系统上的 并且重新拷贝进去原始sda磁盘中 ::: center image ::: ::: center image ::: 6.重启 即可 reboot

2.修复grub分区

故障原因: mbr中的grub引导程序遭到破坏(上面已经解决 备份即可) grub.cfg 文件丢失 引导配置有误。(现象,提示无法找到内核文件(kernel)) 解决方案: 1.手动输入引导配置 (比较长!!#ffff00 建议百度!!) 2.在mbr中 重建grub引导程序 (备份处理 ) 3.进入急救模式处理 重建grub菜单配置文件 详解:

1.模拟删除grub.cf 文件

[root@localhost /]# rm -rf /boot/grub2/grub.cfg # 删除对应文件 
[root@localhost /]# 
[root@localhost /]# ls /boot/grub2 #查看已经删除。
device.map  fonts  grubenv  i386-pc  locale 

2.手动重启会进入 手动输入grub的界面 ::: center image ::: 3.重启后按esc 进入截图界面 。(鼠标点击进去 手快!) ::: center image ::: 4.进入!!#ffff00 急救模式!! ::: center image ::: 5.选择!!#ffff00 急救系统!! ::: center image ::: 6.选择“继续” 1 按照提示输入 chroot /mnt/sysimage 更改环境 ::: center image ::: 7!!#ffff00 .grub2-install /dev/sda!! #重新建分区sda !!#ffff00 grub2-mkconfig -o /boot/grub2/grub.cfg !! # 重新构建grub菜单配置文件 (!!#ff0000 grub.cfg 文件路路径固定 一定不能错!!) !!#ffff00 reboo!!t #重启。 ::: center image :::

遗忘root用户密码

故障原因:人为遗忘密码 故障现象:需要root权限管理账号的操作 无法进行 弱没有其他的账号将无法登录系统。 解决思路:进入急救模式修改密码 !!#00ff00 模拟思路!!:修改密码即可 就是忘记了!!!! 1.开始和其他一样 手动进入!!#ffff00 光驱启动模式-急救模式-急救系统模式!! ::: center image :::

2.按照提示选择“继续”1 回车后输入:!!#ffff00 chroot /mnt/sysimage!! #更改环境 输入-!!#ffff00 passwd!! 输入!!#ffff00 新密码!! 最后一步退出 !!#ffff00 exit!! 重启 !!#ffff00 reboot!! 即可。 ::: center image :::

服务

1.服务程序

本地服务程序 管理本机

  • system服务 叫醒服务
  • init (基本被淘汰了) unit类型 :service socket device mount swap target等

system 服务

system服务管理的程序

  • 系统必要程序
  • yum rpm 安装程序
  • 编译安装的程序 需要手动配置
    总结: 1.在/usr/lib/sysytemd/system 在这个文件中有对应的!!#ffff00 .service!! 文件才会被system管理。 2.yum和rpm安装的程序 会自动生成 所以安装会被自动被管理 3.编译需要手写 该文件 手写 服务名!!#ffff00 .service!! 的文件

systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型

[root@localhost ~]# systemctl  -t help 
Available unit types:
service
socket
busname
target
snapshot
device
mount
automount
swap
timer
path
slice
scope
[root@localhost system]# systemctl get-default  #查看当前系统的默认的运行级别。
graphical.target  # 5 

手动配置.service文件详解 以nginx编译安装为例。

[root@localhost /]# mkdir data  #新建文件夹data
[root@localhost /]# cd data  #移动到该目录下
[root@localhost data]# wget http://nginx.org/download/nginx-1.18.0.tar.gz #获取nginx软件 进行安装 网址是固定的 
--2024-04-15 19:26:28--  http://nginx.org/download/nginx-1.18.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2601::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1039530 (1015K) [application/octet-stream]
正在保存至: “nginx-1.18.0.tar.gz”

100%[==============================================================================================================>] 1,039,530    762KB/s 用时 1.3s   

2024-04-15 19:26:30 (762 KB/s) - 已保存 “nginx-1.18.0.tar.gz” [1039530/1039530])

[root@localhost data]# tar xf nginx-1.18.0.tar.gz  #解压 
[root@localhost data]# ls
nginx-1.18.0  nginx-1.18.0.tar.gz
[root@localhost data]# cd nginx-1.18.0/ #切换到nginx目录下
[root@localhost nginx-1.18.0]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make # 安装依赖环境 
作为依赖被升级:
  cpp.x86_64 0:4.8.5-44.el7              gcc-gfortran.x86_64 0:4.8.5-44.el7  libgcc.x86_64 0:4.8.5-44.el7             libgfortran.x86_64 0:4.8.5-44.el7 
  libgomp.x86_64 0:4.8.5-44.el7          libquadmath.x86_64 0:4.8.5-44.el7   libquadmath-devel.x86_64 0:4.8.5-44.el7  libstdc++.x86_64 0:4.8.5-44.el7   
  libstdc++-devel.x86_64 0:4.8.5-44.el7  zlib.x86_64 0:1.2.7-21.el7_9       

完毕! #无报错即可 。
[root@localhost nginx-1.18.0]# ./configure   --prefix=/apps/nginx #编译安装 
make -j2  #源代码编译成二进制 可以执行的文件 
make  install #安装到指定路径
[root@localhost nginx-1.18.0]# ln -s  /apps/nginx/sbin/nginx     /usr/local/bin  #做nginx的软链接。
[root@localhost nginx-1.18.0]# vim  /lib/systemd/system/nginx.service 

[Unit]
Description=The nginx HTTP and reverse proxy server #编辑.service 文件

[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx
ExecReload=/apps/nginx/sbin/nginx -s reload
ExecStop=/usr/bin/kill  -s TERM  ${MAINPID}


[Install]
WantedBy=multi-user.target
[root@localhost nginx-1.18.0]# systemctl  daemon-reload #重新加载nginx的配置文件。
[root@localhost nginx-1.18.0]# systemctl  start   nginx #启动程序nginx 
[root@localhost nginx-1.18.0]# systemctl  status  nginx # 查看nginx服务状态。 现在是运行 active (running)
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2024-04-15 19:37:45 CST; 36s ago
  Process: 5137 ExecStart=/apps/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
 Main PID: 5139 (nginx)
   CGroup: /system.slice/nginx.service
           ├─5139 nginx: master process /apps/nginx/sbin/nginx
           └─5140 nginx: worker process

4月 15 19:37:44 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse proxy server...
4月 15 19:37:45 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse proxy server.

[root@localhost nginx-1.18.0]# systemctl  stop    nginx #停止nginx服务
[root@localhost nginx-1.18.0]# systemctl  status  nginx #查看nginx服务状态  目前是停止 active (dead)
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

4月 15 19:37:44 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse proxy server...
4月 15 19:37:45 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse proxy server.
4月 15 19:39:26 localhost.localdomain systemd[1]: Stopping The nginx HTTP and reverse proxy server...
4月 15 19:39:26 localhost.localdomain systemd[1]: Stopped The nginx HTTP and reverse proxy server.

网络服务进程,对外提供服务。

内容大纲
批注笔记
开机引导和服务程序
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板