文章目录
- POST——>主板检测基本硬件是否存在————(POST,Power On Self Test)
- BIOS程序去完成检测————"Basic Input Output System"基本输入输出系统
- Boot检查启动顺序:
- 在硬盘中的`MBR`(主引导记录,第0磁道第1扇区,占512字节)读取`grup引导程序`(grup是Linux里的启动程序)
- grup2读取/boot分区里的驱动,加载`vmlinuz`(内核程序文件)、`initramfs`(辅助内核的临时根文件系统的镜像文件)到内存 --ram 随机访问存储器
- 启动systemd
- 启动对应运行级别的各种服务
- 加载/etc/rc.local和/etc/fstab文件
- 加载login程序
- 运行用户家目录下的环境变量初始化文件
POST——>主板检测基本硬件是否存在————(POST,Power On Self Test)
- 那电脑里有哪些基本的硬件?————》主板(motherboard)、cpu、内存、磁盘、网卡、显卡、声卡、电源、鼠标、键盘、显示器等
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程序方式:
台式电脑:
开机按DEL或者delete键进入
笔记本电脑:
不同的产商不同
BIOS程序可以设置密码,这样进入BIOS时会要求输入密码,防止其他人修改配置,如修改启动顺序从而进入系统偷取数据(但密码自己得记得,别太复杂!)
- 然而,设置密码并非万无一失,一般的主机取下主板电池后,BIOS的数据会清空重置,密码自然就失效了;
- 再者,还可以通过拆卸硬盘直接窃取数据(所以电脑丢了就真寄了!)
Boot检查启动顺序:
boot:引导、启动
启动顺序:
BIOS–》boot
第1引导顺序:hard drive 硬盘
第2引导顺序:cdrom 光驱 ----》安装系统
第3引导顺序:removable device 可移动设备–》u盘,移动硬盘 --》安装系统
第4引导顺序:Network --》从网络启动–》网络中安装服务器启动 --》安装
在硬盘中的MBR
(主引导记录,第0磁道第1扇区,占512字节)读取grup引导程序
(grup是Linux里的启动程序)
grup2读取/boot分区里的驱动,加载vmlinuz
(内核程序文件)、initramfs
(辅助内核的临时根文件系统的镜像文件)到内存 --ram 随机访问存储器
[root@zh-ali ~]# cd /boot
[root@zh-ali boot]# ls
# kdump用于导出内核数据,rescue用于营救模式,正常使用initramfs-3.10.0-1160.el7.x86_64.img
config-3.10.0-1160.83.1.el7.x86_64 initramfs-3.10.0-1160.83.1.el7.x86_64.img System.map-3.10.0-1160.83.1.el7.x86_64
config-3.10.0-1160.el7.x86_64 initramfs-3.10.0-1160.83.1.el7.x86_64kdump.img System.map-3.10.0-1160.el7.x86_64
efi initramfs-3.10.0-1160.el7.x86_64.img vmlinuz-0-rescue-f5de8969ed5a461082ecdf253cb84a03
grub initramfs-3.10.0-1160.el7.x86_64kdump.img vmlinuz-3.10.0-1160.83.1.el7.x86_64
grub2 symvers-3.10.0-1160.83.1.el7.x86_64.gz vmlinuz-3.10.0-1160.el7.x86_64
initramfs-0-rescue-f5de8969ed5a461082ecdf253cb84a03.img symvers-3.10.0-1160.el7.x86_64.gz
# 查看内核映像初始化文件,其实本质上就是一个临时的根文件系统,里面包含了很多的目录和文件、程序
[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 # N 表示之前没有其他运行级别,3 表示当前的运行级别
CentOS7保留了多用户和图形界面两种模式:
# 在/etc/inittab文件进行了说明 [root@server system]# cat /etc/inittab # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 --- # 可以通过命令查看当前所使用的运行级别和设置默认运行级别 [root@zh-ali boot]# systemctl get-default multi-user.target [root@zh-ali boot]# systemctl set-default graphical.target
所谓、多用户运行级别、图形运行级别都只是一些
软链接
的集合
设置默认运行级别时也只是修改其指向的模式目录:[root@zh-ali boot]# ll /etc/systemd/system/ total 56 -rw-r--r-- 1 root root 265 May 3 20:57 aegis.service -rw-r--r-- 1 root root 492 Apr 11 20:20 aliyun.service -rw-r--r-- 1 root root 214 Apr 11 20:20 AssistDaemon.service drwxr-xr-x. 2 root root 4096 Feb 8 10:16 basic.target.wants drwxr-xr-x 2 root root 4096 Feb 8 10:35 cloud-init.target.wants lrwxrwxrwx. 1 root root 37 Feb 8 10:18 default.target -> /lib/systemd/system/multi-user.target # 默认运行级别指向多用户模式 drwxr-xr-x. 2 root root 4096 Feb 8 10:15 default.target.wants drwxr-xr-x. 2 root root 4096 Feb 8 10:15 getty.target.wants drwxr-xr-x 2 root root 4096 May 3 20:57 graphical.target.wants drwxr-xr-x. 2 root root 4096 Feb 8 10:15 local-fs.target.wants drwxr-xr-x. 2 root root 4096 May 3 20:57 multi-user.target.wants drwxr-xr-x 2 root root 4096 Feb 8 10:26 remote-fs.target.wants drwxr-xr-x 2 root root 4096 Feb 8 10:26 sockets.target.wants drwxr-xr-x. 2 root root 4096 Feb 8 10:15 sysinit.target.wants drwxr-xr-x. 2 root root 4096 Feb 8 10:15 system-update.target.wants
当最小化安装时,没有图形化界面的运行级别,也就没有
graphical.target.wants
目录多用户运行级别目录中也只是一些
软链接
,当启动该运行级别时,会启动该目录下的所有服务:[root@zh-ali system]# ll multi-user.target.wants/ total 0 lrwxrwxrwx 1 root root 33 May 3 20:57 aegis.service -> /etc/systemd/system/aegis.service lrwxrwxrwx 1 root root 34 Feb 8 10:35 aliyun.service -> /etc/systemd/system/aliyun.service lrwxrwxrwx 1 root root 40 Apr 11 20:20 AssistDaemon.service -> /etc/systemd/system/AssistDaemon.service lrwxrwxrwx 1 root root 35 Feb 8 10:24 atd.service -> /usr/lib/systemd/system/atd.service lrwxrwxrwx. 1 root root 38 Feb 8 10:16 auditd.service -> /usr/lib/systemd/system/auditd.service lrwxrwxrwx. 1 root root 39 Feb 8 10:16 chronyd.service -> /usr/lib/systemd/system/chronyd.service lrwxrwxrwx. 1 root root 37 Feb 8 10:15 crond.service -> /usr/lib/systemd/system/crond.service lrwxrwxrwx 1 root root 38 Feb 8 10:35 ecs_mq.service -> /usr/lib/systemd/system/ecs_mq.service lrwxrwxrwx 1 root root 41 Feb 8 10:26 nfs-client.target -> /usr/lib/systemd/system/nfs-client.target lrwxrwxrwx. 1 root root 39 Feb 8 10:16 postfix.service -> /usr/lib/systemd/system/postfix.service lrwxrwxrwx. 1 root root 40 Feb 8 10:15 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target lrwxrwxrwx. 1 root root 46 Feb 8 10:15 rhel-configure.service -> /usr/lib/systemd/system/rhel-configure.service lrwxrwxrwx 1 root root 39 Feb 8 10:26 rpcbind.service -> /usr/lib/systemd/system/rpcbind.service lrwxrwxrwx. 1 root root 39 Feb 8 10:16 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service lrwxrwxrwx. 1 root root 36 Feb 8 10:16 sshd.service -> /usr/lib/systemd/system/sshd.service lrwxrwxrwx 1 root root 39 Feb 8 10:20 sysstat.service -> /usr/lib/systemd/system/sysstat.service lrwxrwxrwx. 1 root root 37 Feb 8 10:16 tuned.service -> /usr/lib/systemd/system/tuned.service
因此所谓不同运行级别就是开机启动的服务有所不同罢了
当禁用一个服务开机自启时,其实也就是去除了该目录中对应服务的软链接:
[root@zh-ali system]# systemctl disable sshd Removed symlink /etc/systemd/system/multi-user.target.wants/sshd.service. # 可以看出只是去除了多用户模式目录下的sshd服务的软链接 [root@zh-ali system]# systemctl enable sshd Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
systemctl
systemctl就是给systemd传参的
.service文件是做什么使用的?
其实就是告诉systemd这个服务是干什么的,如何启动,如何停止,如何重启
[root@zh-ali 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
一般通过yum安装的程序都带有.service文件,可以直接通过systemctl进行操作
但是编译安装的程序,没有service文件,需要我们自己手工的去新建一个service文件,存放到multi-user.target.wants目录下,就可以使用systemctl start 方式启动
如何知道一个服务开机是否会启动?
# 方法一
[root@zh-ali multi-user.target.wants]# systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
var-lib-nfs-rpc_pipefs.mount static
brandbot.path disabled # 表示不会自启
systemd-ask-password-console.path static # 表示被其它服务依赖
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-4789.scope static
aegis.service enabled # enable表示开机自启
aliyun.service enabled
……
# 方法二
[root@zh-ali multi-user.target.wants]# service sshd status
Redirecting to /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) # 这里显示为enable即开机自启
Active: active (running) since Wed 2023-05-03 20:57:50 CST; 3 weeks 6 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1108 (sshd)
CGroup: /system.slice/sshd.service
└─1108 /usr/sbin/sshd -D
加载/etc/rc.local和/etc/fstab文件
rc.local开机自动执行其中的命令,通过chmod +x /etc/rc.d/rc.local
生效
fstab开机自动挂载相应分区,/etc/fstab文件是告诉linux系统,挂载磁盘里的其他分区,这样用户可以使用这个磁盘的所有分区的数据了,读取文件
fstab加载真正的根文件系统,initramfs是临时文件系统
加载login程序
根据/etc/passwd和/etc/shadow文件检测用户名和密码是否正确
登录终端
登录的时候,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
[root@server ~]#
# TTY 表示用户从哪里登录的,使用的终端的类型
# terminate type --> TTY
# 直接可以使用的终端有6个
# 本地通过 ctrl+alt+F1~F6 来切换终端
tty1 # 直接登录linux系统的第1个终端 ctrl+alt+F1
tty2 # ctrl+alt+F2,linux系统里自带的终端,最正宗的
……
tty6
# pts 是模拟器模拟出来的终端(伪终端),例如:xshell 远程登录工具模拟出来的
pts/0
pts/1
pts/2
运行用户家目录下的环境变量初始化文件
~/.bashrc
~/.bash_profile
/etc/bashrc
/etc/profile
等文件的加载,这里涉及到bash的初始化,这里就不详细展开了,只简单说明一下它们的作用,感兴趣的小伙伴可以自行查阅资料
/etc/profile:配置全局环境变量,影响所有用户
~/.bash_profile :配置个人环境,影响一个用户/etc/bashrc :配置全局的别名或者shell选项,影响所有用户
~/.bashrc :配置个人别名或者shell选项,影响一个用户