Linux相关知识的第十二回合

简述linux操作系统启动流程

CentOS 6 版本启动流程

加载BIOS的硬件信息,获取第一个启动设备
读取第一个启动设备MBR的引导加载程序(GRUB)的启动信息
加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
核心执行init程序,并获取默认的运行信息
init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
启动核心的外挂模块
init执行运行的各个批处理文件(scripts)
init执行/etc/rc.d/rc.local
执行/bin/login程序,等待用户登录
登录后,开始以Shell控制主机

CentOS6启动流程图
CentOS 7 版本启动流程

UEFIBIOS初始化,运行POST开机自检
选择启动设备
引导装载程序, CentOS7grub2,加载装载程序的配置文件(/etc/grub.d/、/etc/default/grub、/boot/grub2/grub.cfg)
加载initramfs驱动模块
加载内核选项
内核初始化,CentOS7使用systemd替代init
执行initrd.target所有单元,包括挂载/etc/fstab
initramfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务

制作一个只运行shelllinux系统

# 分区并创建文件系统
## 说明:/dev/sdb1为/boot,/dev/sdb2为/
# 添加硬盘,在此不赘述
echo -e 'n\np\n1\n\n+1G\nw\n' | fdisk /dev/sdb
echo -e 'n\np\n2\n\n\n\nw\n' | fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

# 挂载boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot

# 安装grub
grub-install --root-directory=/mnt/ /dev/sdb

# 复制内核及initramfs文件
cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /mnt/boot/vmlinuz 
cp /boot/initramfs-2.6.32-754.el6.x86_64.img /mnt/boot/initramfs.img

# 创建grub.conf文件
cat > /mnt/boot/grub/grub.conf << EOF
default=0
timeout=6
title tiger linux
root (hd0,0)
kernel /vmlinuz root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
EOF

# 创建根目录及根下相关目录
mkdir /mnt/sysroot
mount /dev/sdb2   /mnt/sysroot
mkdir –pv /mnt/sysroot/{boot,dev,sys,proc,etc,lib,lib64,bin,sbin,tmp,var,usr,opt,home,root,mnt,media}

# 复制相关的程序及lib库文件
cp -a /bin/bash /mnt/sysroot/bin/
# 找到bash所使用的相关的lib库文件
ldd /bin/bash |sed -nr 's#.*(\/.*/.*) .*#\1#p'
cp -ar `ldd /bin/bash |sed -nr 's#.*(\/.*/.*) .*#\1#p'` /mnt/sysroot/lib64/

# 添加网卡驱动
ethtool -i eth0
modinfo -n e1000
/lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
cp /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/
chroot /mnt/sysroot

# 将硬盘新增的硬盘卸载,安装到其他的机器上,开机启动

总结systemctl管理命令及system unit文件格式

1、systemctl管理命令

命令格式:systemctl COMMAND name.service
查看状态:systemctl status name.service
启动: systemctl start name.service
停止:systemctl stop name.service
重启:systemctl restart name.service
重新加载配置:systemctl reload name.service
禁用:systemctl mask name.service;被禁用后,服务将无法启动
取消禁用:systemctl unmask name.service
设置开机自启动:systemctl enable name.service
取消开机自启动:systemctl disenable name.service
查看所有服务的开机自启状态:systemctl list-unit-files --type service
查看服务是否激活状态:systemctl is-active name.service
查看服务是否开机自启:systemctl is-enable name.service
查看服务的依赖关系:systemctl list-dependencies name.service
重新载入systemd,扫描新的或有变动的单元:systemctl daemon-reload
查看已经激活单元:systemctl list-units
查看运行失败的单元:systemctl --failed
重启服务器:systemctl reboot
退出系统并停止电源:systemctl poweroff
待机:systemctl suspend

2、system unit文件格式

system unit文件通常由三部分组成:

[Uint] 定义与Unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系等
[Service] 与特定类型相关的专用选项;此处为Service类型
[Install] 定义由systemctl enable以及systemctl disable命令在实现服务启动或禁用时用到的一些选项

[Uint]段常用选项

Description 描述信息
After 定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Require 依赖到的其他units,强依赖;被依赖的uints无法激活时,当前unit也无法激活
Wants 依赖到的其他units,弱依赖
Conflicts 定义units间的冲突关系

[Service]段的常用选项

Type 定义影响ExecStart及相关参数功能的uint进程启动类型
simple 默认值,这个daemon主要有ExecStart接的指令串来启动,启动后常驻内存中
forkingExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务;原生父程序在启动程序结束后就会终止
oneshotsimple类似,不过这个程序在工作完毕后就结束了,不会常驻内存中
dbussimple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作;因此通常也要同时设置BusName=才行
notify 在启动完成后会发送一个通知信息;还需要配合NotifyAccess来让Systemd接收消息
idlesimple类似,要执行这个daemon必须要所有的工作都顺利执行完毕才会执行。这类的daemon通常是开机到最后才执行即可的服务

EnvironmFile 环境配置文件
ExcStart 指明启动uint要运行命令或者脚本的绝对路径
ExcStartPre ExcStart前运行
ExcStartPost ExcStart后运行
ExecStop 指明停止uint要运行的命令或脚本
Rstart 当设定Rstart=1时,则当次daemon服务意外终止后,会再次自动启动此服务
PrivateTmp 设定为yes时,会生成/tmp/systemd-private-UUID-NAME.service-XXXX/tmp/目录

[Install]段的常用选项

Alias 别名;可使用systemctl Command Alias.service
RequiredBy 被哪些uints所依赖,强依赖
WantedBy 被哪些uints所依赖,弱依赖
Also 安装本服务的时候还要安装别的相关的服务

破解centos7密码

方法一:

# 启动时任意键暂停启动
# 按e键进入编辑模式
# 将光标移动linux 开始的行,添加内核参数rd.break
# 按ctrl-x启动
# 重新挂载根目录,并修改其挂载属性
mount –o remount,rw /sysroot
# 切换根并更重新设置root密码
chroot /sysroot
passwd root
# 如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel
# 重启
exit
reboot

方法二:

# 启动时任意键暂停启动
# 按e键进入编辑模式
# 将光标移动linux 开始的行,改为rw init=/sysroot/bin/sh
# 按ctrl-x启动
# 切换根并更重新设置root密码
chroot /sysroot
passwd root
# 如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel
# 重启
exit
reboot
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值