系统启动-服务-登录流程-内核参数-selinux
过程 首先经过加电自检,POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测,并且通过BIOS确定一个引导设备,然后就去加载这个设备的前512个字节(MBR表),前446字节 bootloader,中间64字节 分区表,最后2字节 55AA。
bootloader就是启动时所需要运行的程序,对于Linux来说bootloader就是GRUB,启动GRUB由两阶段组成,第一阶段在MBR的前446字节中,第二阶段在 /boot/GRUB/,GRUB目的就是找到内核文件(内核最核心的文件就是 核心文件:/boot/vmlinuz- VERSION -release),/boot/grub/grub.conf 文件就写的有 内核文件在哪里。然后就加载内核文件。所以 GRUB的两个阶段就是找到/boot/grub/grub.conf,这个文件里面定义了内核的参数,内核的文件等等
查看硬盘的前512字节 : hexdump -C -n 512 /dev/sda
lsmod 查看当前加载到内存中的所有驱动
卸载模块 rmmod ext3
centos6 系统启动过程,
- 1.加载BIOS的硬件信息,获取第一个启动设备
- 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
- 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控制主机
在GRUB的过程中会加载内核,很重要就是加载 /boot/vmlinux与/boot/initramfs.img文件 /boot/vmlinux是真正的内核,而/boot/initramfs.img是一个小型的操作系统里面有一些驱动
加载内核文件,内核文件就在光盘中存在的,和光盘中的文件对比,看得出文件一模一样,所以如果你这个文件丢了,还可以通过光盘找回,initramfs.img 文件其实是一个小的操作系统,在启动的时候需要找到他加载驱动程序,如果他丢了也是通过光盘救援找到, 1 rescue mode 2 chroot /mnt/sysimage 3 mkinitrd /boot/initramfs-`uname -r`.img `uname -r` 4 exit;exit;reboot 以上四步可以找到。/boot/vmlinux光盘里面就有iso文件夹内,进入到救援模式后,把 光盘挂载一下,然后拷贝过去就可以了
实验:删除 整个系统的 /boot 目录,就是破坏了GRUB的第二阶段,前面第一阶段已经找到了 /boot/GRUB/, 但是boot 目录是空的,进行恢复
进入救援模式,切根 然后修复 grub-install /dev/sda 修复完之后,东西恢复了,但是/boot/grub/grub.conf 文件是没有的,所以手写/boot/grub/grub.conf,(这个文件centos6简单可以手写,但是centos7很复杂,所以提供了工具生成文件)
需要准备这两个文件,一个内核文件,一个initramfs.img文件 ,根据上面的方法恢复这两个文件,或者直接安装kernel包,挂载光盘安装
GRUB加载完内核后,就开始运行第一个程序
SysV: init, CentOS 5之前
配置文件:/etc/inittab
Upstart: init,CentOS 6
配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system /etc/systemd/system
运行 init进程时 就会加载 /etc/initab
系统运行级别
/etc/inittab 文件定义了系统的默认启动方式,同时也指定了,每个系统运行级别,后面有个参数,就是指定要去加载那个rc#.d/下面的脚本,比如当前运行级别为3,就会加载rc3.d下面的脚本文件,这些服务脚本,主要是K/S 开头的,K表示停止,S表示运行。数字的含义就是表示顺序。越大表示越后面。而在每个rc#.d/下面都有一个S99local-->rc.local。所以/etc/rc.d/rc.local的作用就是,开机你想运行的脚本 扔在这里就可以了。而对于Centos7就要加上X权限才可以使用
自己编写Centos6 服务脚本
版本6
Service atd restart service 其实就是 运行一个脚本 /etc/init.d/SCRIPT
chkconfig --list 查看系统服务列表(自启情况)
on 表示 开启 off表示关闭
chkconfig vsftpd on/off 全开 在2 3 4 5 状态下开启
/etc/rc.d/rc.local /etc/rc.local 这两个文件 开机就会运行,所以也可以把启动命令写在这里,就可以做到开机自启
脚本格式 参考如下
xinetd 瞬态服务
对于一些访问量不大的服务来讲,你还要跑,因为有很少一部分还是需要用到的,你服务一直开启也是一个浪费,所以会有xinetd服务去代理,这些访问量不大的服务都由xinetd去代理,平常只有xinetd服务开启,当有用户访问服务时,由xinetd去唤醒对应的服务提供服务,当服务完成时,对应的服务就会关掉,但是xinetd服务会一直开启。而在CentOS7上已经没有xinetd了,由systemd完成的。
Centos7来讲,系统第一个进程已经不是init,而是systemd,它不再去读取inittab文件,另外 他的GRUB变成了GRUB2
版本7
/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的 /etc/init.d/
/usr/lib/systemd/system/atd.service
命令:systemctl COMMAND name.service
- 重载或重启服务:先加载,再启动 systemctl reload-or-restart name.service
- 查看某服务当前激活与否的状态: systemctl is-active name.service
- 查看所有已经激活的服务: systemctl list-units --type|-t service
- 查看所有服务: systemctl list-units --type service --all|-a
- 查看所有服务的开机自启状态: chkconfig --list ==> systemctl list-unit-files --type service
- 用来列出该服务在哪些运行级别下启用和禁用 chkconfig sshd –list ==> ls /etc/systemd/system/*.wants/sshd.service
- 查看服务是否开机自启: systemctl is-enabled name.service
- systemctl restart atd.service
- systemctl disable crond.service
- systemctl enable crond.service
Centos7添加服务到 systemctl管理中
注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此 配置文件,而后可以选择重启 systemctl daemon-reload
centos7的运行级别 (target units) 新增加了很多,中文解释就是运行的环境,突破了原来的7种,提供了更多的运行模式
ls /usr/lib/systemd/system/*.target
systemctl list-unit-files --type target --all
运行级别:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
级别切换:init N ==> systemctl isolate name.target
systemctl isolate multi-user.target
注:只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切换 (修改文件需执行systemctl daemon-reload才能生效)
开机默认 运行级别
grub配置文件不用手写,使用工具生成
用户登录流程
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
用户登录脚本执行顺序
执行顺序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
全局: /etc/profile, /etc/profile.d/*.sh
个人: ~/.bash_profile
功用: (1) 用于定义环境变量 (2) 运行命令或脚本
全局:/etc/bashrc
个人:~/.bashrc
功用: (1) 定义命令别名和函数 (2) 定义本地变量
修改profile和bashrc文件后需生效
source /etc/profile
退出任务
~/.bash_logout文件中(用户) 创建自动备份 清除临时文件
修改命令提示符颜色 [root@testlinux profile.d]#cat env.sh
PS1="\[\e[1;33m\][\u@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
历史命令增加时间 HISTTIMEFORMAT="%F %T "
内核参数
/proc/sys/ 系统内核各种参数 如 /proc/sys/net/ipv4
因为这些都是在内存中的,所以修改了不能保存,所以可以通过工具 sysctl工具进行修改内核参数,
sysctl -a 查看系统所有内核参数
/etc/sysctl.conf 配置文件管理的就是/proc/sys中的内核参数
在/etc/sysctl.conf 配置文件中 将需要的参数写进去就可以保存了,sysctl -p重新生效
1为开启 0为关闭
临时关闭
(1)sysctl -w parameter=VALUE
(2)echo "VALUE" > /proc/sys/path/to/parameter
SELinux
getenforce 获取selinux状态,
enforceing
代表开启,
permissive
代表警告
disabled
代表关闭
临时关闭或开启 setenforce 0 //
关闭 ;
setenforce 1 //
开启
/etc/selinux/config
SELINUX=enforcing 改为 SELINUX=disabled
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config