Linux引导过程与服务控制
目录
1. centos6配置chkconfig开机自启nginx
一、操作系统引导过程
1. 过程图示
2. 步骤解析
2.1 bios
检测硬件是否正常,根据bios中的启动项设置去寻找内核文件;boot是开机启动程序,可以把内核文件放在:
- 硬盘
- 移动设备,u盘移动硬盘,光驱
- 网络启动
2.2 mbr
也可以称为grupd第一阶段,因为grup太大第一个扇区存不下所有的grup程序,所以分为两部分,mbr的前446个字节 指引硬件找到内核
2.3 grup
根据grup配置文件中记录的位置,去找到内核文件;mbr之后的扇区,让上一阶段中的bootloader(引导加载器,引导硬件去找到内核,操作系统的核心)能识别下一阶段所在的分区上的文件系统
2.4 加载内核文件
把内核运行到内存中,启动第一个“祖宗”进程
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─anacron───run-parts─┬─awk
│ └─man-db.cron───mandb
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
……
systemd进程是系统级的程序,代为管理系统上的程序。比如:rpcbind启动会监听111端口,在sleep状态下,如果有需要,systemd会将其唤醒。?
3. 过程总结
加电后bios程序会自检硬件,硬件无故障,会根据第一启动项去找内核,一般来说第一启动项是硬盘;找到硬盘后,会根据mbr的指引找到完整的grup程序,再根据grup的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
4. centos6和centos7启动区别
- centos6:init,串行启动后续的进程,一个一个按顺序启动
- centos7:systemctl,是并行启动程序,全部一起启动
5. 小结
在centos7中,yum及rpm安装的软件可以直接使用systemctl(centos6中使用chkconfig)去启动、关闭、重启、开机自启等功能;编译安装不可以直接使用systemctl命令去管理程序,需要手写配置文件,路径命名:/usr/lib/systemd/system/程序.service
二、服务控制及切换运行级别
1.?systemd核心概念
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。systemd即为system daemon,是linux下的一种init软件。在systemd中不同类型的systemd对象被统一称为单元(unit:描述这个软件是做什么的,以及基本信息),是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。systemd方便管理程序,将程序按照特定的功能分成了很多单元。
2. 运行级别
- 0:关机
- 1:单用户,类似于windows的急救模式
- 2:字符界面,缺少一些功能,如:nfs
- 3:字符界面
- 4:字符界面,保留,没用过
- 5:图形界面
- 6:重启?
runlevel:查看当前运行级别(如输出3 5,表示之前是级别3,现在是级别5)
systemctl get-default:查看默认的运行级别
systemctl set-default?:设置默认级别
补充:如何调整默认级别?
利用init n命令,仅能临时修改运行级别。若想永久修改,需修改默认的运行级别设置。则需要修改配置文件:Centos7 系统之前的版本是通过/etc/inittab文件来定义系统,而 CentOS7 用的是target,centos7修改默认启动级别如下:
[root@localhost ~]# systemctl set-default multi-user.target
#设置默认第三启动级别
[root@localhost ~]# systemctl set-default graphical.target
#设置默认第五启动级别
3.?Systemd单元类型
4.?运行级别所对应的Systemd目标?
?
三、排除启动类故障
1. 案例一:修复mbr和分区表
1.1 新增硬盘,将备份文件备份到新盘
[root@localhost ~]# mount /dev/sdb1 /mnt
[root@localhost ~]# dd if=/dev/sda of=/mnt/mbr count=1 bs=512 #备份mbr第一个扇区
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000177847 秒,2.9 MB/秒
?
1.2 模拟破坏
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=512 #zero空格写0
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000353442 秒,1.4 MB/秒
1.3 查看分区表?(十六进制)
[root@localhost ~]# hexdump -C -n 512 /dev/sda
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
1.4 进入急救模式修复
?
1.5 查看分区表,正常重启?
2. 案例二:修复grup文件及程序
2.1 模拟破坏
[root@localhost ~]# cd /boot/grub2
[root@localhost grub2]# ls
device.map fonts grub.cfg grubenv i386-pc locale
[root@localhost grub2]# mv grub.cfg /opt #移除配置文件
2.2 进入急救模式
tip:重启读条迅速按一次Esc,后续参考1.4选项
2.3 切换根
2.4 重新安装grup2程序
2.5 重新生成配置文件
3. 案例三:破解密码
3.1 有光驱
3.1.1 切根
同上步骤读条迅速按Esc,选择CD-ROM,“321”选项,输入命令chroot? /mnt/syssimage切根
3.1.2 passwd
直接输入命令passwd修改密码,完成后exit,重启reboot
3.2 无光驱
3.2.1 进入系统,选择内核界面
3.2.2 进入单用户模式
3.2.3 重新挂载,添加读写权限
3.2.4 修改密码,添加标记
?
四、开机自启配置
注:以下案例均已默认编译安装了nginx
1. centos6配置chkconfig开机自启nginx
[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# vim nginx #写入配置
[root@localhost init.d]# chmod +x nginx #添加权限
[root@localhost init.d]# chkconfig --add nginx #将服务加入chkconfig
[root@localhost init.d]# chkconfig --level 35 nginx on #开启3和5级别自动启动
[root@localhost init.d]# service nginx start #启动服务
[root@localhost init.d]# ss -natp | grep 80
LISTEN 0 128 *:80 *:* users:(("nginx",pid=5032,fd=6),("nginx",pid=5031,fd=6))
[root@localhost init.d]# chkconfig --list #查看服务
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
nginx 0:关 1:关 2:关 3:开 4:关 5:开 6:关
配置脚本如下:
#!/bin/bash
#chkconfig: - 99 20 #-代表运行级别全开,第99个启动,第20个关闭
#description:Nginx Service Control Script
PROG="/ky35/nginx/sbin/nginx"
PIDF="/ky35/nginx/logs/nginx.pid"
case "$1" in #如果命令里面有start,调用变量RPOG
start) $PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop $0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*) echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
2. centos7配置systemd开机自启nginx
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
#描述软件的功能,web服务
[Service]
PIDFile=/apps/nginx/logs/nginx.pid
# 方便使用pid号进行操作,明进程的 pid 号
ExecStart=/apps/nginx/sbin/nginx
#使用绝对路径启动
ExecStop=/usr/bin/kill -s TERM $MAINPID
#杀死进程 发信号
ExecReload=/apps/nginx/sbin/nginx -s reload
#重新加载 发信号 重新加载
[Install]
WantedBy=multi-user.target
安装子字符界面
systemctl daemon-reload #重新加载配置
systemctl start nginx #开机自启ngixn
systemctl status nginx #查看状态
nginx -s stop #关闭
3. 服务管理相关命令使用
- centos6:
service 服务程序 start:开启
service 服务程序 stop:关闭
service 服务程序 restart:重启
service 服务程序 reload:重新加载
service 服务程序 status:状态
- centos7?:
systemctl start 服务名(1,2,3……):开启,后面可以跟多个服务
systemctl stop 服务名:关闭
systemctl restart 服务名:重启(关闭开启的过程)
systemctl reload 服务名:重新加载
systemctl status 服务名:状态
4. 服务程序补充
① 一旦运行一直运行不会退出
②? 一般是后台运行,不会影响前台的操作
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!