Linux开机启动

从按下开机键到输入用户名密码,进入系统的整个过程中,具体有哪些步骤?

了解开机启动的过程有什么意义呢?

下面先看一张图片。

linux开机启动全过程流程图

  1. 了解Linux开机启动的全过程后,即可知晓哪些系统文件与开机启动有关;(rc.local文件中添加自启动命令,在/etc/init.d目录下添加自启动脚本

  1. 开机不能正常启动时,可以从开机启动的各个环节去排查

  1. 可以通过开机启动的过程去排查开机自启动的服务,与哪些文件哪些命令有关。

  1. 病毒的植入,也与开机启动过程相关。

一.开机自检(POST)

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

指计算机系统,接通电源, (BIOS程序)的行为,包括对CPU、系统主板、基本内存、扩展内存,系统ROMBIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。

检查:主板(motherboard),CPU,内存,磁盘,网卡,显卡,声卡,电源,鼠标,键盘,显示器等

二.BIOS程序(完成开机自检的程序)

BIOS程序

BIOS是英文"Basic Input output system"的缩略词,直译过来后中文名称就是"基本输入输出系统"。

BIOS是个人电脑后动时加载的第一个软件。

它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。

(1)BIOS是一个程序会读取CMOS芯片里的参数,了解cpu的配置,时间的配置,启动顺序的配置等

(2)CMOS :是一个存储参数配置的芯片

三.按boot第一顺序启动

boot :引导、启动

启动顺序:

BIOS–boot

第1引|导顺序: hard drive硬盘(台式机一般就是硬盘启动)

第2引导顺序: cd rom光驱 —》安装系统

第3引导顺序: removable device可移动设备–》u盘,移动硬盘–》安装系统

第4引导顺序: Network–从网络启动–》网络中安装服务器启动–》安装

四.MBR

MBR–》在硬盘的第1个扇区–》主引导记录–》用来启动linux系统的程序

BIOS–》主板里的程序(有一个指针,固定到磁盘的第1个扇区)–》disk–》MBR–》grub2

MBR: master boot record

主引导记录:有启动程序 grub2

MBR只占512个字节

五./boot里文件的驱动

[root@localhost boot]# ls
config-4.18.0-240.el8.x86_64                             initramfs-4.18.0-240.el8.x86_64kdump.img
efi                                                      loader
grub2                                                    System.map-4.18.0-240.el8.x86_64
initramfs-0-rescue-c60d2d9754344502ada018e9d5f81a56.img  vmlinuz-0-rescue-c60d2d9754344502ada018e9d5f81a56
initramfs-4.18.0-240.el8.x86_64.img                      vmlinuz-4.18.0-240.el8.x86_64

六.内核文件

initramfs-4.18.0-147.e18.x86-64.img )给内核程序提供一个初始化的内存文件系统的镜像文件–》临时的根文件系统的镜像文件

宫殿、大臣、军队、妃子等

init 初始化 initial

ram:随机存取存储器(random access memory的缩写)

fs:file system - -》

vmlinuz-4.18.0-147.e18.x8664 --》内核程序文件–》皇上

initramfs-4.18.0-147.e18.x8664kdump.img

解压initramfs:

[root@localhost 530]# cp /boot/initramfs-4.18.0-240.el8.x86_64.img .
[root@localhost 530]# ls
initramfs-4.18.0-240.el8.x86_64.img
[root@localhost 530]# cpio -idmv < initramfs-4.18.0-240.el8.x86_64.img 
.
early_cpio
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
202 块
[root@localhost 530]# ls
early_cpio  initramfs-4.18.0-240.el8.x86_64.img  kernel

七.systemd进程

pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁。

安装pstree程序:

八.运行级别

在centos6里有哪些运行级别?(RunLevel)

0 --》关机

1 --》单用户模式–》破密码

2–》多用户模式,不能使用NFS功能

3–》完全多用户模式 multi-user–> CLI 字符界面

4–》没有用

5–》图形界面 graphical --》GUI界面

6–》重启

例如:

init 0 = 关机

init 6 = 重启

补充:

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

runlevel

centos7里只有3和5 多用户和图形化界面

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

不同的级别启动的服务是不一样的

3 字符界面–》会定义哪些程序在字符界面下开机启动–>开启的程序少–》消耗的资源少–》最小化安装–》3

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

九.输入用户名与密码

用户输入用户名与密码后

Linux系统自动进入/etc/passwd 查找用户名

再根据用户名进入/etc/shadow 查找用户密码

此处的用户密码是通过哈希加密算法保存的,Linux是不能通过破解哈希算法来得到原密码,而是通过用户输入的密码,再次进行一次哈希计算,再将运行完的结果与存储的密码进行比较。

十.补充

1.查看当前的默认启动模式

[root@localhost lianxi]# systemctl get-default
multi-user.target

2.修改为图形界面启动模式/设置默认的运行级别为GUI

[root@localhost boot]# systemctl set-default graphical 
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.

没有安装相关程序所以会按照字符页面正常启动

[root@localhost boot]# systemctl get-default
graphical.target
centos6里使用的chkconfig systemctl 取代了chkconfig的方式

3.设置开机自启:

yum install mariadb mariadb-server -y 安装mariadb的数据库软件
[root@localhost system]# pwd
/usr/lib/systemd/system--》集中存放所有需要启动的服务的目录
[root@localhost system]# cd /etc/systemd/system/multi-user.target.wants/
[root@localhost multi-user.target.wants]# pwd
/etc/systemd/system/multi-user.target.wants--》多用户模式开机启动的服务存放的目录
[root@localhost multi-user.target.wants]# systemctl disable mariadb.service  禁用服务开机启动
Removed /etc/systemd/system/multi-user.target.wants/mariadb.service.
Removed /etc/systemd/system/mysql.service.
Removed /etc/systemd/system/mysqld.service.
[root@localhost multi-user.target.wants]# systemctl enable mariadb设置服务开机启动
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

4.其他

/etc/rc.local 启动的过程中,最后会运行这个脚本里的命令(这个文件必须要有可执行权限)

/etc/fstab 启动的过程中,会加载这个文件里知道的磁盘分区

十一.思考题

1.如何查看一个服务是否开机启动?

[root@alyeast_hq_dxjl_233_65 ~]# systemctl status chronyd.service
* chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:chronyd(8)
           man:chrony.conf(5)
[root@alyeast_hq_dxjl_233_65 ~]# systemctl status httpd.service
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
[root@alyeast_hq_dxjl_233_65 ~]# systemctl list-units
  UNIT                                                                        LOAD   ACTIVE SUB       DESCRIPTION
  proc-sys-fs-binfmt_misc.automount                                           loaded active running   Arbitrary Executable File Formats File System Automount Point
  sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device                 loaded active plugged   Virtio network device
  sys-devices-pci0000:00-0000:00:04.0-virtio1-virtio\x2dports-vport1p1.device loaded active plugged   /sys/devices/pci0000:00/0000:00:04.0/virtio1/virtio-ports/vport1p1
  sys-devices-pci0000:00-0000:00:05.0-virtio2-block-vda-vda1.device           loaded active plugged   /sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda/vda1
  sys-devices-pci0000:00-0000:00:05.0-virtio2-block-vda.device                loaded active plugged   /sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda
  sys-devices-pci0000:00-0000:00:06.0-virtio3-block-vdb-vdb1.device           loaded active plugged   /sys/devices/pci0000:00/0000:00:06.0/virtio3/block/vdb/vdb1
  sys-devices-pci0000:00-0000:00:06.0-virtio3-block-vdb.device                loaded active plugged   /sys/devices/pci0000:00/0000:00:06.0/virtio3/block/vdb
  sys-devices-platform-serial8250-tty-ttyS1.device                            loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS1
  sys-devices-platform-serial8250-tty-ttyS2.device                            loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS2
  sys-devices-platform-serial8250-tty-ttyS3.device                            loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS3
  sys-devices-pnp0-00:04-tty-ttyS0.device                                     loaded active plugged   /sys/devices/pnp0/00:04/tty/ttyS0
  sys-module-configfs.device                                                  loaded active plugged   /sys/module/configfs
  sys-module-fuse.device                                                      loaded active plugged   /sys/module/fuse
  sys-subsystem-net-devices-eth0.device                                       loaded active plugged   Virtio network device
  -.mount                                                                     loaded active mounted   /
  dev-hugepages.mount                                                         loaded active mounted   Huge Pages File System
  dev-mqueue.mount                                                            loaded active mounted   POSIX Message Queue File System
  hxdata.mount                                                                loaded active mounted   /hxdata
  。。。。。
# 查看系统中已经enable的服务
systemctl list-unit-files --state=enabled
# 查看系统中已经disable的服务
systemctl list-unit-files --state=disabled

2.设置yum install安装的nginx服务开机启动

/ect/rc.local和/ect/rc.d/rc.local是软链接关系

systemctl enable vsftpd

Linux设置开机启动的三种方法

方法一 添加命令

编辑文件 /etc/rc.local


vim /ect/rc.local

复制

/ect/rc.local和/ect/rc.d/rc.local是软链接关系


chmod +x /ect/rc.d/rc.local

复制

方法二 添加脚本

自己写一个shell脚本将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。


cd /etc/profile.d/

复制

添加脚本 srs.sh


#!/bin/sh

cd /usr/local/srs2
nohup ./objs/srs -c conf/z.conf>./log.txt &

复制

方法二 添加服务

添加文件新建/etc/init.d/srs.sh 文件


#!/bin/sh
# chkconfig:23458515
# description:auto_run

#程序根位置
MY_ROOT=/usr/local/srs2/

#运行程序位置
MY_PATH="${MY_ROOT}objs/srs" 

#LOG位置
LOG_PATH="$MY_ROOT"log.txt

#开始方法
start(){
    cd $MY_ROOT
    nohup $MY_PATH-c conf/z.conf>$LOG_PATH&
    echo "$MY_PATH start success."}

#结束方法
stop(){
    kill -9`ps -ef|grep $MY_PATH|grep -v grep|grep -v stop|awk '{print $2}'`
    echo "$MY_PATH stop success."}case"$1"in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;*)
    echo "Userage: $0 {start|stop|restart}"
    exit 1
esac

复制

添加执行权限

给sh文件和jar可执行权限


chmod +x /etc/init.d/srs.sh

复制

设置开机启动

首先,添加为系统服务


chkconfig --add srs.sh

复制

开机自启动


chkconfig srs.sh on

复制

查看


chkconfig --list

复制

启动


service srs.sh start

复制

停用


service srs.sh stop

复制

查看启动情况


lsof -i:1935

3.破坏MBR文件能不能运行?

MBR被破坏,系统将无法运行。所以一般需要将mbr文件备份到远程主机。

磁盘分区中MBR的模拟损坏及修复_51CTO博客_磁盘分区格式mbr和gpt的区别

4.假如你是一个黑客,如何让你的木马程序开机启动?(当然,我开玩笑的)

5.如何设置默认的运行级别为3?

6.编译安装的软件如何设置开机启动?

  1. 编写的脚本如何设置开机启动?

8.删除/boot分区里的内容,是否可以开机?

删除/boot分区的内容,系统无法开机。必须要修复boot里的内容,系统才能重新开机。

要修复/boot,就要修复里面最重要的几个文件:

  • /boot/vmlinuz --内核文件

  • /boot/initramfs --虚拟内存盘,

  • /boot/grub/grub.conf --grub2 stage2的核心配置文件

9.把内存条拔出来,是否可以开机?

不能,电脑开机过程是 先BIOS开机自检,然后再装载磁盘扇区的引导程序到内存中,接着把操作系统载入内存,才能进入系统运行各种应用程序,没有内存条再bios开机自检时就会出错,会一直发出“嘀”的声音。显示器上也不会显示什么信息。

如果你电脑只有一条内存,开机状态拔掉内存,那电脑果断关机。如果电脑有两条内存的话且都好用的情况下,开机状态拔下一根内存,那么电脑果断蓝屏是肯定的。

千万不要在开机状态下去拔内存,哪怕显示器没有信号,只要主机运行着,CPU风扇转就不要拔插内存。一条内存开机状态拔插内存,后果:内存有可能烧毁。主板插槽有可能烧毁。如果正在运行程序的情况下拔插还可能损坏高速运转的硬盘。

意识到不小心在开机状态下拔下内存,请立即拔下电脑的电源,然后把主板上的电池也抠下来,过两分钟以后把电池安上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值