csdn涨薪技术之Linux 启动流程及相关知识_centos target indirect(2)

内核提供操作系统的功能,根文件系统包含常用的一些工具,这些工具。这些工具的运行离不开glibc库文件。

程序:二进制程序文件

库:库是函数的集合,用来实现接口调用等功能。程序的运行依赖这些库文件

Linux内核的功能:文件系统管理、进程管理、网络管理、驱动程序、内存管理等


#### CentOS 6


CentOS 6 启动流程: 4步


POST--->MBR--->GRUB--->加载内核


POST:Power-On-Self-Test,加电自检。由主板的bios程序完成。



bios:basic input output system。基本出入输出系统


MBR


MBR: 主引导记录(Master Boot Record)。是硬盘的第一个扇区(0磁道0扇区),总共有512个字节,前446个字节存储的是bootloader的阶段一程序(以二进制的形式存放)



bootloader:是用来启动(引导)操作系统的一个程序。(安装操作系统的时候会自动安装)
bootloader这个程序里面定义了操作系统(内核)存放的位置等

windows用的bootloader:ntloader,仅用来启动操作系统的

linux用的bootloader:现在使用的是GRUB,不仅用来启动操作系统,还有多种功能
#早期版本用的是0.97版本,现在用的是2.02版本

grub的启动流程:启动操作系统前加载grub。

阶段1:加电自检完成后,通过bios检测设备驱动。如果是硬盘启动就读取硬盘的第一个扇区(MBR)。并将MBR中的前446字节(bootloader)加载到内存中进行运行 #二进制文件,可以直接访问的

阶段1.5:因为grub的另外一部分是存放在文件系统的/boot目录下的,但是要想解析这个对应的文件,需要识别这个文件系统。所以需要借助文件系统的驱动程序。因为MBR的前446字节存放不下文件系统的驱动,所以文件系统驱动放在了MBR的后续扇区中

阶段2:解析加载文件系统对应目录下grub的配置文件,找到操作系统(linux)。 #非二进制,所以不可以直接访问,而是一个文件系统。需要文件系统的驱动才能访问解析到对应的数据

#阶段1和1.5都是为了阶段2做准备的。



CentOS6 Grub第二阶段的存放位置:/boot/grub

grub.conf:grub的关键配置文件,里面定义了内核存放的相关路径等内容

#配置文件格式
default:表示默认启动那个内核 #例如default=0表示默认第一个内核作为引导
timeout:在启动界面停留的时间
hidenmenu:隐藏的启动菜单,默认看不到的
tiele:启动界面显示的菜单项
root(hd#.#):表示boot分区所在的位置,#hd0.0–hd表示硬盘 0.0表示第一块硬盘的第一个分区
kerner: /PATH/TO/KERNEL_FILE–内核文件所在的位置(/vmlinux表示boot目录下的vmlinux这个文件) root=UUID=xxxx–表示利用内核,要加载的文件系统的根系统,系统硬盘真正的根(比如/dev/sda1这块硬盘挂载到根上面 那么加载的就是这个硬盘)
initrd:系统的一个辅助文件,是一个小型的linux文件系统,内核进入硬盘根的时候会借助它


bootloader是硬件和操作系统之间的一个媒介。硬件通过bootloader才能找到操作系统。


采用硬盘引导进入救援模式的方法



系统无法启动使用光盘的方式进入救援模式:

采用光盘启动(引导),进入rescue模式
#重启系统出现进度条的时候快速按ESC键,然后选择CD-ROM Dirver,然后选择Troubleshooting,选择Rescue a CentOS liux System,然后选择1继续,然后切换到/mnt/sysimage这个目录下操作。因为救援模式默认进入的根不是硬盘系统的根。而是ramdisk里的文件系统,并没有切换到本机硬盘上的“真正”文件系统
#正常启动的系统他不会挂载到/mnt/sysimage这个目录下的
链接:http://t.zoukankan.com/duzhaoqi-p-7327525.html

#chroot /mnt/sysimage #切换到真正的根目录下面

#grub-install /dev/sda #执行秀姑grub的命令

#sync #将缓存中的信息同步到硬盘

#exit #退出重启

#exit


Centos6的Grub修复方法



首先需要使用光盘引导进入救援模式

#grub信息被破坏的修复方法
使用grub-install来修复:grub-install --root-directory=DIR /dev/DISK

grub-install 磁盘名称 #安装grub到硬盘上,会自动找到整个硬盘的第一个扇区MBR的前446个字节。

#无法修复grub的阶段二所对应的配置文件,需要手动编写 /boot/grub/grub.conf这个配置文件



Centos6 修复grub的方法:
方法一: #无法修复/etc/grub/grub.conf这个文件

grub-install命令: grub-install 磁盘名称 #安装grub到硬盘上,会自动找到整个硬盘的第一个扇区MBR的前446个字节。


加载内核


grub加载linux内核后,通过内核加载硬盘的根,启动系统中的第一个进程init。



内核想要进入硬盘的根,需要文件系统驱动。因为根分区有自己的文件系统。

驱动的功能由内核提供,内核的驱动存放位置在/lib目录下,例如ext4的文件系统驱动:ext4.ko.所以要加载文件系统的驱动就需要进入根的文件系统,显然不行。

所以内核此时不是从这里面加载文件系统驱动,而是从GRUB配置文件中的initrd后面指定的文件里面加载的文件系统。(是一个小型的linux文件系统)


init进程启动以后就会通过以下顺序执行相关的配置文件来设置系统


(1)/etc/inittab配置文件:确定系统使用那个运行模式(runlevel)  
 CentOS的运行模式有7个,对应数字0--6



0:关机
6:重启
1:安全模式
3:字符模式
5:图形界面模式


(2)运行/etc/rc.d/rc.sysinit这个脚本。初始话系统的一些信息。



设置主机名

设置欢迎信息

加载对应的服务配置

设备的挂载

交换空间的准备

系统时钟等信息


(3)根据对应的运行模式执行对应的文件夹下面脚本:/etc/rcX.d/xxx



比如运行模式是3:就执行/etc/rc3.d/ 下的脚本。

/etc/rc3.d/下面的文件都是软链接,指向/sbin/init下面的脚本。

以K开头的文件:开机启动 K##:##运行次序;数字越小,越先运行;

以S开头的文件:开机不启动。S: S##:##运行次序;数字越小,越先运行;


CentOS6的服务管理工具


* service:服务的开启和关闭
* chkconfig:服务的开机启动等


service



service 服务 start|stop|restart

service --status-all

例如:service network start (networkCentOS8弃用了)


chkconfig



chkconfig 服务 on|off


rc.local文件


* 是一个开机启动文件,不属于任何运行模式。开机的时候所有的服务脚本都运行完成后才会执行他。
* CentOS7以及后面的版本想用这个文件的话,需要手动添加可执行权限才会执行。
* ubuntu默认没有这个文件,需要手动创建并更改权限才可以使用。



/etc/rc.local

/etc/rc.d/rc.local
#/etc/rc.local -> rc.d/rc.local rc.local是 rc.d/rc.local的一个软连接

正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向
了/etc/rc.d/rc.local脚本

想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中

/etc/rc.d/rc.local在指定运行级别脚本后运行


CentOS6 启动流程总结:



1.POST,设备加电自检(cpu、内存、硬盘、io设备等检查)

2.MBR引导找到GRUB

3.GRUB执行完成后加载内核,内核加载硬盘的根

4.加载系统第一个进程init,并按顺序执行以下配置文件和脚本。
/etc/inittab

/etc/rc.d/rc.sysinit

/etc/rcX.d/xxx

5.所有服务启动完成后执行rc.local这个脚本里面的内容。

6.终端启动,登录相关的配置和验证。


#### Linux的/proc和/sys目录


虚拟文件夹概念:


虚拟的文件夹,因为其数据内容是存放在内存中的,不是存放在硬盘中



/proc和/sys都是虚拟的文件夹


/proc



proc是进程(process)的缩写。这个目录文件里面存放的是进程的相关信息,把系统中的进程信息、内核状态放在proc中,是一个虚拟的文件夹,对应的数据信息是内存中的状态。


/proc/sys



这个目录文件里面的信息可以修改,可以通过这些配置来控制内核


sysctl 工具


sysctl:修改系统的内核参数



sysctl修改的参数是临时生效的,通过编写配置文件的方式实现持久化生效

#配置文件
/run/sysctl.d/*.conf

/etc/sysctl.d/*.conf

/usr/local/lib/sysctl.d/*.conf

/usr/lib/sysctl.d/*.conf

/lib/sysctl.d/*.conf

/etc/sysctl.conf #主要存放在这里面,一般都在这个配置文件里面编写设置。

#格式:
和文件中的格式不一样,使用点(.)来隔开路径。/proc/sys不用写, 因为这个配置文件对应就是管理/proc/sys这个文件夹的



#常用参数:
-w 临时改变某个指定参数的值

-a 显示所有生效的系统参数

-p 从指定的文件加载系统参数


范例



禁止ping通本机:
[root@centos8 ~]#cat /etc/sysctl.d/test.conf
net.ipv4.icmp_echo_ignore_all=1
[root@centos8 ~]#sysctl -p /etc/sysctl.d/test.conf

清除缓存方法
echo 1|2|3 >/proc/sys/vm/drop_caches


/sys



/sys目录文件存放的是和硬件有关的一些信息,也是虚拟文件夹,不是真正的硬盘上的文件夹,对应的也是内存中的数据。


范例



新添加硬盘的识别
echo “- - -” > /sys/class/scsi_host/hostX/scan #X表示数字,从0开始的


内核模块管理


内核的组成部分:


* kernel:内核核心,一般为bzImage,通常在/boot目录
* kernel object:内核对象,一般放置于/lib/modules/VERSION-RELEASE/
* 辅助文件:ramdisk


内核版本查看:



uname -r
-r 显示VERSION-RELEASE


内核模块命令


* lsmod
* modprobe



lsmod:
显示内核已经装载的模块
显示的内容来自于: /proc/modules文件


范例:



[root@centos8 ~]#lsmod
Module                 Size Used by
uas                    28672  0
usb_storage            73728  1 uas
nls_utf8               16384  0
isofs                  45056  0 #显示:名称、大小,使用次数,被哪些模块依赖



modprobe:用于装载或者卸载内核模块
装载:modprobe 模块名
卸载: modprobe -r 模块名 # rmmod命令:卸载模块


systemd服务


从CentOS7开始,就使用systemd服务代替init作为系统启动的第一个进程。


systemd的特性:


* 服务并行启动
* 可以按照需要启动对应守护进行
* 自动管理服务的依赖关系
* Unit(单元)的概念
* 使用systemctl管理工具


systemd的核心概念Unit(单元)



systemd把服务都笼统称为Unit(单元),通过配置文件进行标识和配置。

Unit存放的位置:/lib/systemd/system

systemd的Unit类型:
(1)service:类似于Centos6里面的服务脚本。文件扩招名为.service

(2)target:类似于Centos6里面的运行级别。文件扩展名为.target

(3)socket:义进程间通信用的socket文件。文件扩展名为.socket

#socket的理解
socket翻译过来是套接字,原意为插座、插孔。

socket可以理解为:ip地址+端口+协议类型

例如:一台笔记本电脑(server),一个耳机(client),一个u盘(clinet),一个鼠标(client),
socket就可以想象成笔记本电脑上的usb接口、音频接口。
耳机需要连接到电脑听歌,需要用到音频接口,u盘需要链接电脑拷贝资料,需要用到usb接口。
socket就负责帮助这些外接设备找到笔记本电脑中相对应的驱动以便他们完成自己的工作,反之也是这样。

socket就是位于两个层面(传输层和应用层)中间的一个参与者,服务于两方。

http是应用层协议,解决如何包装数据,TCP/IP协议是传输层协议,主要解决数据怎么在网络中传输。

一个网络协议 + 一个ip + 一个端口号,就组成了一个socket
原文链接:https://blog.csdn.net/EJEEMT/article/details/90212312


Unit的配置文件



/usr/lib/systemd/system #每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/lib/systemd/system #ubutun的对应目录

/run/systemd/system #系统执行过程中所产生的服务脚本,比上面目录优先运行

/etc/systemd/system #管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行

#/etc/systemd/system:系统管理员和用户使用
#/usr/lib/systemd/system:发行版打包者使用


systemd的service


service这种unit类型的Unit文件格式


由三部分组成:


* Unit:定义的是这个单元的相关信息
* Service:定义的是这个服务的相关信息
* Install:定义的是服务启动和关闭的一些选项


Unit段的常用选项



Description:unit的描述信息

After:当前unit在那些unit后面启动,其功能与Before相反

Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活

Wants:依赖到的其它units,弱依赖

Conflicts:定义units间的冲突关系


Service段常用选项



Type:定义启动类型

EnvironmentFile:环境配置文件

simple:默认值,后台启动常驻于内存

ExecStart:启动unit要运行命令或脚本的绝对路径

ExecStartPre: ExecStart前运行

ExecStartPost: ExecStart后运行

ExecStop:停止unit要运行的命令或脚本

Restart:当设定Restart=1 时,服务意外终止会再次自动启动

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值