按开机按钮到输入用户名和密码,进入系统背后发生的事情。
开机启动流程的意义:
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]#