2021-03-19

一、简述linux操作系统启动流程


image.png
  1. 加载BIOS的硬件信息,获取第一个启动设备
    POST > 初始化硬件设备,检查系统外围设备如(CPU、内存、硬盘、显卡、IO设备、键盘鼠标等) > 根据BIOSS设置的启动顺序检测驱动器(硬盘、光盘、U盘、网络)> 如果硬盘是启动项,读取硬盘第一个扇区(MBR、512字节)到内存>控制区转给MBR中的Bootloader > 执行MBR中的Bootloader
  2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
    进入GRUB Stage1阶段 > GRUB Stage1.5阶段 > GRUB Stage2阶段
  3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
  4. 核心执行init程序,并获取默认的运行信息
  5. init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
  6. 启动核心的外挂模块
  7. init执行运行的各个批处理文件(scripts)
  8. init执行/etc/rc.d/rc.local
  9. 执行/bin/login程序,等待用户登录
  10. 登录之后开始以Shell控制主机

二、制作一个只运行shell的linux系统
准备环境:
CentOS6虚拟服务器1台,准备一个硬盘或者U盘,本实验我们以一块20G的虚拟硬盘为例制作一个简单的Linux系统

image.png

具体步骤:
第一步:针对新增加的20G硬盘创建两个分区dev/sdb1,dev/sdb2
fdisk /dev/sdb


image.png

第二步:创建文件系统,将/dev/sdb1,/dev/sdb2两个分区文件系统设置为ext4格式
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2


image.png

第三步:挂载/boot目录
mkdir /mnt/boot 此处挂载子目录必须为boot
mount /dev/sdb1 /mnt/boot


image.png

第四步:安装gurb
grub-install –root-director=/mnt /dev/sdb
hexdump -C /dev/sdb -n 512 -v 查看一阶段是否创建成功,446字节已生成
ls /mnt/boot 查看二阶段是否创建成功,grub目录已生成


image.png

第五步:拷贝内核vmlinuz文件及虚拟文件系统initramfs文件
cp /boot/vmlinuz-VERSION /mnt/boot/vmlinuz
cp /boot/initramfs-VERSION.img /mnt/boot/initramfs.img


image.png

第六步:设置grub.conf文件
vim /grub.conf
default=0
timeout=5
title linux
kernel /vmlinuz-VERSION root=/dev/sda2 init=/bin/bash
initrd /initramfs.img


image.png

第七步:挂载根目录
mkdir /mnt/rootfs
mount /dev/sdb2 /mnt/rootfs


image.png

第八步:复制相关命令和库文件
如:ifconfig,insmod,ping,mount,ls cat,df,lsblk,blkid等

第九步:准备根目录下必要目录
mkdir /mnt/rootfs/{dev,etc,proco,sys,usr,var,lib,mnt.home,root,tmp,lib64} -v
sync;sync;sync; 确保写入硬盘


image.png

第十步:安装必要的模块,如网络模块等


image.png

第十一步:关机此服务器,并将20G硬盘安装到一台无硬盘启动的虚拟机服务器上


image.png

三、总结systemctl管理命令及system unit文件格式
1、systemctl的各类命令:

启动:相当于service name start

systemctl start name.service

停止:相当于service name stop

systemctl stop name.service

重启:相当于service name restart

systemctl restart name.service

查看状态:相当于service name status

systemctl status name.service

禁止自动和手动启动:

systemctl mask name.service

取消禁止

systemctl unmask name.service

查看某服务当前激活与否的状态:

systemctl is-active name.service

查看所有已经激活的服务:

systemctl list-units --type|-t service

查看所有服务:

systemctl list-units --type service --all|-a

设定某服务开机自启,相当于chkconfig name on

systemctl enable name.service

设定某服务开机禁止启动:相当于chkconfig name off

systemctl disable name.service

查看所有服务的开机自启状态,相当于chkconfig --list

systemctl list-unit-files --type service

用来列出该服务在哪些运行级别下启用和禁用:chkconfig –list name

ls /etc/systemd/system/*.wants/name.service

查看服务是否开机自启:

systemctl is-enabled name.service

列出失败的服务

systemctl --failed --type=service

开机并立即启动或停止

systemctl enable --now postfix
systemctl disable --now postfix

查看服务的依赖关系:

systemctl list-dependencies name.service

杀掉进程:

systemctl kill unitname
2、unit文件格式:
unit 格式说明:
以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,1、yes、on、true 都是开启,0、no、offff、false 都是关闭
时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
service unit fifile文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到
的一些选项
Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflflicts:定义units间的冲突关系

Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服
务。原生父程序在启动结束后就会终止
oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因
此通常也要同时设定BusNname= 才行
notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消

idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这
类的daemon通常是开机到最后才执行即可的服务
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/ 目录

Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务

注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择
重启 systemctl daemon-reload

四、破解centos7 密码
方法一
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,添加内核参数rd.break
按ctrl-x启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root

如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行

touch /.autorelabel
exit
reboot

方法二
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,改为rw init=/sysroot/bin/sh
按ctrl-x启动
chroot /sysroot
passwd root

如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行

touch /.autorelabel
exit
reboot

你可能感兴趣的:(2021-03-19)