Linux——开机启动流程

 按开机按钮到输入用户名和密码,进入系统背后发生的事情。

开机启动流程的意义:

1.掌握让某个软件开机自动运行

2.开机不能正常启动, 是什么原因, 或者哪个环节出现了问题

3.防止黑客植入木马,去查询黑客会把木马放到哪些地方?

流程图:

 

  • POST 开机自检

开机自检:上电自检(POST,Power On Self Test)

谁帮我们检测,检测什么东西?
    主板帮我们去检测,检测我们的电脑的基本需要的硬件是否都存在

电脑里有哪些基本的硬件?
主板(motherboard)、cpu、内存,磁盘,网卡,显卡,声卡,电源,鼠标,键盘、显示器等

  • BIOS 对硬件进行检测

对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。

开机自检:谁去完成?
        主板上的BIOS程序去完成
BIOS程序
        BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。
        BIOS是个人电脑启动时加载的第一个软件。
        它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。

rom芯片:read only memory --》只读的存储器
ram芯片:随机存取存储器(random access memory的缩写)--》可读可写   -->停电内存条里的数据都会丢失

CMOS:是一个存储BIOS参数配置的芯片,可以读写,不是只读的。
    BIOS是一个程序会读取CMOS芯片里的参数,了解cpu的配置,时间的配置,启动顺序的配置、密码等

进入BIOS页面的方法:

台式机:delete

笔记本:不同品牌的笔记本进图BIOS按键不同 F1 F2 F10 F11范围 F1~F12 

服务器:开机第1个画面有介绍 F1

  • boot启动程序自捡,第一启动顺序

台式电脑:
    开机按DEL或者delete键进入
笔记本电脑:
    不同的产商不同
    F2
    F8
    F12
    F2+fn
    F1~F12

boot:引导、启动
启动顺序:
    BIOS--》boot
第1引导顺序:hard drive 硬盘
第2引导顺序:cdrom 光驱  ----》安装系统
第3引导顺序:removable device 可移动设备--》u盘,移动硬盘  --》安装系统
第4引导顺序:Network  --》从网络启动--》网络中安装服务器启动  --》安装

建议给你的笔记本的BIOS设置一个密码,防止其他人通过BIOS调整你的开机启动顺序,进入u盘启动,盗取你的笔记本电脑的数据。
设置密码建议简单一点,别自己的都忘记了--》台式和笔记本都可以扣掉主板上的电池,清空所有的配置,这样达到删除密码。

日志文件:var/log/boot.log

  • MBR

MBR:主引导记录  :启动linux系统的地方,输入磁盘里的比较特殊的位置(0磁道1扇区),大小是512字节
        master boot record 
MBR里存放着启动程序grub 

MBR磁盘分区有一个引导扇区,位于该硬盘的第1个扇区,该扇区包含了MBR( 主引导记录)、分区表、硬盘有效标志。该扇区主要任务是协助系统引导开机,又称引导扇区。

 

  •  内核文件 initramfs vmlinuz

[root@centos8-zabbix boot]# ls
config-4.18.0-147.el8.x86_64                             loader
efi                                                      lost+found
grub2                                                    System.map-4.18.0-147.el8.x86_64
initramfs-0-rescue-112c6ff62f7b4177a51497a69ae6a7c8.img  vmlinuz-0-rescue-112c6ff62f7b4177a51497a69ae6a7c8 

initramfs-4.18.0-147.el8.x86_64.img  --》给内核程序提供一个初始化的内存文件系统的镜像文件 --》临时的根文件系统的镜像文件
initial  初始化
ram 随机访问存储器
fs 文件系统file system

.img结尾的文件,是一个压缩文件

vmlinuz-4.18.0-147.el8.x86_64  --》内核程序文件  --》皇上

[root@server boot]# lsinitrd initramfs-3.10.0-1160.el7.x86_64.img |more
查看内核映像初始化文件,其实本质上就是一个临时的根文件系统,里面包含了很多的目录和文件、程序  
  •  systemd进程

systemd 第一个启动的应用程序

运行级别: 是比较老的概念--》在centos7里已经淘汰了
        不同的级别里会启动不同的程序--》起到一个分类的作用
0  关机  init 0
1 单用户模式
2 多用户模式,不能使用网络里的NFS功能
3 完全多用户模式,能使用网络和同时很多人登录,登录进入系统是字符界面   init 3   -->一般情况下都是运行级别3
4 没有启用
5 图形界面模式 ,能使用网络和同时很多人登录,登录进入系统是图形界面  init 5
6 重启  init 6       

[root@server opt]# runlevel 查看当前的运行级别
N 3   --》开机直接进入的运行级别3

N 表示之前没有其他运行级别
3 表示当前的运行级别

nit 3 进入运行级别3  --》字符界面

runlevel
5 3    --》开机的时候是图形界面后面进入了字符界面

不同的级别启动的服务是不一样的
3  字符界面--》会定义哪些程序在字符界面下开机启动  -->开启的程序少--》消耗的资源少  --》最小化安装 --》3

5  图形界面 --》会定义哪些程序在图形界面下开机启动  --》开启的程序多--》消耗资源多   --》带GUI服务器--》5

        linux里启动图形界面是启动GNOME  和KDE

centos7里

[root@server system]# cat /etc/inittab
3 完全多用户模式,能使用网络和同时很多人登录,登录进入系统是字符界面   init 3   -->一般情况下都是运行级别3
5 图形界面模式 ,能使用网络和同时很多人登录,登录进入系统是图形界面  init 5


# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5

 查看默认的运行级别:

[root@sanchuang system]# systemctl get-default 查看默认的运行级别
multi-user.target

 修改默认的运行级别

[root@sanchuang zhuxiaodan]# systemctl set-default graphical.target  设置默认的运行级别
[root@sanchuang zhuxiaodan]# systemctl set-default multi-user.target

  • 启动对应运行级别里的服务 

[root@server multi-user.target.wants]# systemctl enable sshd  设置sshd服务开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
[root@server multi-user.target.wants]# systemctl disable sshd 禁用sshd开机启动

sshd.service文件是做什么使用的?
    答案: 其实就是告诉systemd这个服务是干什么的,如何启动,如何停止,如何重启 

[root@server multi-user.target.wants]# cat sshd.service 
[Unit]      --》对sshd这个服务的介绍   一个服务就是一个单元
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]      --》对这个服务如何启动,如何停止,如何重启等进行了定义
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
[root@server multi-user.target.wants]# 
[root@server multi-user.target.wants]# cat crond.service 
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
[root@server multi-user.target.wants]# systemctl start sshd
[root@server multi-user.target.wants]# systemctl restart sshd


systemctl背后是告诉systemd去启动,停止、重启某个服务
systemd会去调用对应的service文件,找到对应的程序的名字,执行相关的操作

yum安装的程序,都会有一个对应的service文件
但是编译安装的程序,没有service文件,需要我们自己手工的去新建一个service文件,存放到multi-user.target.wants目录下,就可以使用systemctl start 方式启动

 设置一个程序开机启动,其实就是创建一个service的链接文件到这个目录下

[root@server multi-user.target.wants]# systemctl enable sshd  设置sshd服务开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
[root@server multi-user.target.wants]# systemctl disable sshd 禁用sshd开机启动

multi-user.target 这是systemd中的依赖项处理机制

当所有的服务都启动后,会去执行/etc/rc.local脚本里的命令

[root@server multi-user.target.wants]# cat /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/usr/local/scnginx88/sbin/nginx
[root@server multi-user.target.wants]# chmod +x /etc/rc.d/rc.local

/etc/fstab文件是告诉linux系统,挂载磁盘里的其他分区,这样用户可以使用这个磁盘的所有分区的数据了,读取文件
加载真正的根文件系统

  • 登录

登录的时候,linux系统给我们提供了6个登录终端

[root@server ~]# w
 16:40:23 up 18:36,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      145月23 47.00s  0.27s  0.27s -bash
root     pts/1    192.168.223.1    14:59    7.00s  0.50s  0.00s w
root     tty2                      16:39   23.00s  0.02s  0.02s -bash
root     tty3                      16:40   15.00s  0.01s  0.01s -bash

TTY 表示用户从哪里登录的,使用的终端的类型
    terminate type -->  TTY
直接可以使用的终端有6个
ctrl+alt+F1~F6
linux系统里自带的终端,最正宗的
tty1  直接登录linux系统的第1个终端  ctrl+alt+F1
tty2    ctrl+alt+F2
tty3
tty4
tty5
tty6

pts 是模拟器模拟出来的终端(伪终端),例如:xshell 远程登录工具模拟出来的
pts/0
pts/1
pts/2

[root@server ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   12M  1.9G    1% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  7.1G  9.9G   42% /
/dev/sdb2               ext4       50G  1.1G   46G    3% /music
/dev/nvme0n1p1          ext4      8.7M  181K  7.9M    3% /tianyang
/dev/sda1               xfs      1014M  151M  864M   15% /boot
tmpfs                   tmpfs     378M     0  378M    0% /run/user/0


bash加载的环境变量流程图:

Shell启动配置文件的区别
/etc/profile:配置全局环境变量(变量和函数,别名),影响所有用户
~/.bash_profile :配置个人环境变量,影响一个用户
/etc/bashrc :配置全局的别名或者函数,影响所有用户
~/.bashrc :配置个人别名或者函数,影响一个用户 

全局配置文件:   /etc/profile   /etc/bashrc

局部配置文件:   ~/.bashrc   ~/.bash_profile

~/.bash_history 当用户退出系统的时候,会将最近使用过的1000条以内的命令都保存到此文件,下次登录系统的时候再加载进来

如何查看一个服务似乎否开启?

方法一:

systemctl list-unit-files

systemctl命令的使用参考:https://www.cnblogs.com/xyz999/p/11716445.html

方法二: 

[root@sanchuang multi-user.target.wants]# systemctl list-unit-files |grep nginx
nginx.service                              enabled   

方法三:

查看一个服务的状态

[root@server multi-user.target.wants]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2023-05-27 16:22:35 CST; 41min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 67740 (sshd)
   CGroup: /system.slice/sshd.service
           └─67740 /usr/sbin/sshd -D

5月 27 16:22:35 server systemd[1]: Stopped OpenSSH server daemon.
5月 27 16:22:35 server systemd[1]: Starting OpenSSH server daemon...
5月 27 16:22:35 server sshd[67740]: Server listening on 0.0.0.0 port 22.
5月 27 16:22:35 server sshd[67740]: Server listening on :: port 22.
5月 27 16:22:35 server systemd[1]: Started OpenSSH server daemon.
5月 27 16:41:10 server sshd[68929]: Accepted password for root from 192.168.223.1 port 64623 ssh2
5月 27 16:41:20 server sshd[68959]: Accepted password for root from 192.168.223.1 port 64629 ssh2
[root@server multi-user.target.wants]# 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,开机启动流程通常包括以下几个步骤: 1. 开机自检(Power-On Self-Test,POST):当计算机启动时,系统会进行自我检测以确保硬件设备正常工作。这个过程由计算机的固件负责,例如BIOS或UEFI。 2. 引导加载程序(Boot Loader):引导加载程序是位于硬盘的特定位置的代码,负责加载操作系统内核并将控制权转移到内核。常见的引导加载程序有GRUB和GRUB2。 3. 内核初始化:一旦引导加载程序将控制权传递给内核,内核开始初始化系统的各个组件,例如内存管理、设备驱动程序和文件系统。 4. 运行级别(Runlevel):在Linux系统中,运行级别定义了系统启动后的运行状态。不同的运行级别确定了哪些服务和进程在系统启动时自动运行。运行级别通常由/etc/inittab文件或者systemd配置文件来定义。 5. 服务启动:一旦系统进入指定的运行级别,系统管理器(如systemd)负责启动各个服务和进程。这些服务和进程可能包括网络服务、日志记录服务、文件系统挂载等。 总结起来,Linux系统的开机启动流程包括开机自检、引导加载程序、内核初始化、运行级别和服务启动。了解这些流程对于理解系统启动过程以及排除启动问题非常有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux系统开机启动流程(超详细)](https://blog.csdn.net/qq_51010919/article/details/131465536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值