笔记·系统启动和内核管理
/proc目录和内核参数管理:
默认配置文件:
/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
范例:
#sysctl -w path.to.parameter=VALUE
#echo “websrv” > /proc/sys/kernel/hostname
#sysctl -p [/path/to/conf_file] #使配置生效
#sysctl -a #查看所有生效参数
内核模块管理:
#uname -r #查看内核版本
#lsmod #查看已安装的内核模块
#modinfo [ -k kernel ] [ modulename|filename... ] #显示模块的详细信息
-n:只显示模块文件路径
-p:显示模块参数
-a:作者
-d:描述
#装载或卸载内核模块
modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ] #安装
modprobe [ -r ] modulename… #卸载
#depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具
#insmod命令:可以安装模块,需要指定模块文件路径,并且不自动解决依赖模块
#insmod `modinfo –n exportfs`
#insmod `modinfo –n xfs`
#rmmod [ modulename ] #卸载模块
#rmmod xfs
#rmmod exportfs
systemd:
#systemctl -t help
Available unit types:
service
socket
target
device
mount
automount
swap
timer
path
slice
scope
unit的配置文件:
/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/lib/systemd/system: ubutun的对应目录
/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system:管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行
service unit:
#启动:systemctl start name.service
#停止:systemctl stop name.service
#重启:systemctl restart name.service
#查看状态: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
#设定某服务开机自启:systemctl enable name.service
#设定某服务开机禁止启动:systemctl disable name.service
#查看所有服务的开机自启状态:systemctl list-unit-files --type service
#用来列出该服务在哪些运行级别下启用和禁用: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
服务状态:
systemctl list-unit-files --type service --all
loaded Unit配置文件已处理
active(running) 一次或多次持续处理的运行
active(exited) 成功完成一次性的配置
active(waiting) 运行中,等待一个事件
inactive 不运行
enabled 开机启动
disabled 开机不启动
static 开机不启动,但可被另一个启用的服务激活
indirect 重定向到别处
范例:
#显示所有单元状态:systemctl 或 systemctl list-units
#只显示服务单元的状态:systemctl --type=service
#显示sshd服务单元:systemctl –l status sshd.service
#验证sshd服务当前是否活动:systemctl is-active sshd
#启动,停止和重启sshd服务
systemctl start sshd.service
systemctl stop sshd.service
systemctl restart sshd.service
#重新加载配置:systemctl reload sshd.service
#列出活动状态的所有服务单元:systemctl list-units --type=service
#列出所有服务单元:systemctl list-units --type=service --all
#查看服务单元的启用和禁用状态:systemctl list-unit-files --type=service
#列出依赖的单元:systemctl list-dependencies sshd
验证sshd服务是否开机启动:systemctl is-enabled sshd
禁用network,使之不能自动启动,但手动可以:systemctl disable network
#启用network:systemctl enable network
#禁用network,使之不能手动或自动启动:systemctl mask network
#启用network:systemctl unmask network
CentOS7以后版本启动流程
启动过程:
1. UEFi或BIOS初始化,运行POST开机自检
2. 选择启动设备
3. 引导装载程序, centos7是grub2,加载装载程序的配置文件:
/etc/grub.d/
/etc/default/grub
/boot/grub2/grub.cfg
4. 加载initramfs驱动模块
5. 加载内核选项
6. 内核初始化,centos7使用systemd代替init
7. 执行initrd.target所有单元,包括挂载/etc/fstab
8. 从initramfs根文件系统切换到磁盘根目录
9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
10. systemd执行sysinit.target初始化系统及basic.target准备操作系统
11. systemd启动multi-user.target下的本机与服务器服务
12. systemd执行multi-user.target下的/etc/rc.d/rc.local
13. Systemd执行multi-user.target下的getty.target及登录服务
14. systemd执行graphical需要的服务
systemd-analyze工具:
#systemd-analyze blame
#systemd-analyze plot > boot.html #生成网页
修复Grub2:
#grub2-install /dev/sda #BIOS环境
#grub2-install #UEFI环境