前言 kernel 实现进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等功能 进程:运行中的程序叫进程 存在内存中且是有生周期。
linux操作系统引导过程
开机自检(bios)->mbr引导->grub菜单->加载内核->启动程序
1.开机自检
- 检测硬件是否正常
- bios小程序 集成在主板上 检测顺序-本地硬盘-外接设备-网卡
- bios界面 ::: center :::
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 ::: 都不进行点击的话 会进入自检模式后,重新安装系统 相当于之前的户数全部丢失。 正常选择第三个急救模式 然后进入等待显示截图界面 选择!!#ffff00 skip to shell !!。 ::: center :::
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 ::: 3.选择!!#ffff00 急救操作系统!! 点击后等待,^(* ̄(oo) ̄)^进入的是光驱上的操作系统。 ::: center ::: 4.进入系统后!!#ffff00 选择1 !! ::: center ::: 5.将之前备份的mbr 挂载到现在的系统上的 并且重新拷贝进去原始sda磁盘中 ::: center ::: ::: center ::: 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 ::: 3.重启后按esc 进入截图界面 。(鼠标点击进去 手快!) ::: center ::: 4.进入!!#ffff00 急救模式!! ::: center ::: 5.选择!!#ffff00 急救系统!! ::: center ::: 6.选择“继续” 1 按照提示输入 chroot /mnt/sysimage 更改环境 ::: center ::: 7!!#ffff00 .grub2-install /dev/sda!! #重新建分区sda !!#ffff00 grub2-mkconfig -o /boot/grub2/grub.cfg !! # 重新构建grub菜单配置文件 (!!#ff0000 grub.cfg 文件路路径固定 一定不能错!!) !!#ffff00 reboo!!t #重启。 ::: center :::
遗忘root用户密码
故障原因:人为遗忘密码 故障现象:需要root权限管理账号的操作 无法进行 弱没有其他的账号将无法登录系统。 解决思路:进入急救模式修改密码 !!#00ff00 模拟思路!!:修改密码即可 就是忘记了!!!! 1.开始和其他一样 手动进入!!#ffff00 光驱启动模式-急救模式-急救系统模式!! ::: center :::
2.按照提示选择“继续”1 回车后输入:!!#ffff00 chroot /mnt/sysimage!! #更改环境 输入-!!#ffff00 passwd!! 输入!!#ffff00 新密码!! 最后一步退出 !!#ffff00 exit!! 重启 !!#ffff00 reboot!! 即可。 ::: center :::
服务
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.
网络服务进程,对外提供服务。