linux笔记7.0

命令
ldd 查看指定命令调用的库文件
lsmod 查看加载模块
mkinitrd 重建ramdisk文件
dracut 重建ramdisk文件
chroot 切换根目录(救援模式下使用)
init # 切换模式
runlevel 查看运行级别(who -r)
ntsysv 开启一个修改开机启动项的字符界面
chkconfig 管理开机启动项
service 管理服务启动
grub-install 修复MBR工具
grub 交互式修复MBR工具
grub-md5-crypt 命令可生成MD5加密口令(passwd --md5)
grub-crypt 命令可生成SHA512加密口令(passwd --encrypt)
sysctl 设置参数
make 内核编译操作
uname 打印内核信息
lsmod 显示由核心已经装载的内核模块
modinfo 显示模块的详细描述信息
modprobe 装载或卸载内核模块
depmod 内核模块依赖关系文件及系统信息映射文件的生成工具
insmod 装载或卸载内核指定模块文件,不自动解决依赖模块
rmmod 卸载模块
systmctl 管理服务操作

系统启动和内核管理
linux组成
由kernel(内核)和rootfs(相关工具)组成
kernel功能:
进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs组成:
程序、glibc(库)
程序:
二进制执行文件
库:
函数集合(过程调用:procedure,无返回值;函数调用:function)
function
调用接口(头文件负责描述)
ldd命令,可查看指定命令调用的库文件

内核设计流派:
单内核(monolithic kernel):Linux
把所有功能集成于同一个程序
微内核(micro kernel):Windows, Solaris
每种功能使用一个单独子系统实现,多个子系统共同实现一个程序

内核
Linux内核特点:
支持模块化:.ko(内核模块)
如:文件系统,硬件驱动,网络协议等
优点:
支持内核模块的动态装载和卸载,即需要的时候将模块加载到内存中,不需要时卸载或不加载,以节省内存空间
lsmod命令,可查看加载模块
组成部分:
核心文件:最核心最重要文件,放核心功能,非按装系统时生成,是从光盘cp(系统盘中存在)
/boot/vmlinuz-VERSION(版本)-release(发行版本)
辅助伪根文件(ramdisk):放启动相关的驱动模块,安装系统时生成
CentOS5:/boot/initrd-VERSION-release.img
CentOS6、7:/boot/initramfs-VERSION-release.img
老版本调用initrd(模拟的磁盘),新版本调用initramfs(模拟的文件系统),提高了速度
模块文件:/lib/modules(模块)/VERSION-release

启动流程
CentOS6启动流程
1、POST加电自检(主板中内置的程序,BIOS主要功能,检测硬件环境)
按次序查找引导设备,第一个有引导程序的设备为本次启动设备

2、bootloader(引导加载器,引导程序)
MBR-512:446-bootloader,64-分区表,2-55AA
GRUB:
primary(主要) boot loader:
stage1:MBR446
stage1.5:加载/boot分区文件系统
secondary boot loader:
stage2:/boot/grub/grub.conf(分区文件)

3、kernel初始化
探测可识别到的所有硬件设备
加载硬件驱动程序(借助ramdisk)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
注意:
当ramdisk文件被破坏,系统将找不到根文件,导致无法启动
修复工具:
CentOS5:mkinitrd
CentOS6,7:mkinitrd, dracut
用法:
mkinitrd /boot/initrd(|initramfs)-uname -r.img uname -r

4、init程序
类型:
SysViit包:
init,CentOS5之前,配置文件:/etc/inittab
Upstart包:
init,CentOS6,配置文件:/etc/inittab, /etc/init/*.conf
Systemd包:
systemd,CentOS7,配置文件:/usr/lib/systemd/system,/etc/systemd/system

运行级别:
0:关机
1:单用户模式(root自动登录), single, 维护模式,无网络链接
2: 多用户模式,启动网络功能,但不会启动NFS,维护模式
3:多用户模式,正常模式,文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式,图形界面
6:重启
切换级别:init #
查看级别:runlevel、who -r

init初始化:
读取初始化文件:/etc/inittab
初始运行级别(RUN LEVEL)
系统初始化脚本:/etc/rc.d/rc.sysinit
运行指定级别(模式)的脚本目录
捕获某个关键字顺序(Ctrl+Alt+Del,重启)
定义UPS电源终端(当停电,UPS提供电源支撑服务器正常关机,2分钟)
在虚拟控制台生成mingetty
在运行级别#初始化运行界面
注意:
脚本的软连接存放在/etc/rc#.d/下(真正脚本在/etc/init.d/下),根据脚本目录对每个脚本执行级别相应操作
附:
管理开机启动脚本:
ntsysv [--level=#],开启一个修改开机启动项的字符界面,未指定模式默认为当前模式
chkconfig --list 服务,列出指定服务所有模式开机启动情况
chkconfig --level # 服务 on|off,修改指定服务指定模式开机启动情况

创建自定义服务脚本
创建在/etc/init.d/下
关键信息:
chkconfig: # # #,#1:指定模式on,#2:指定on顺序,#3:指定off顺序
description(描述):对脚本的描述信息
脚本主体
完成编写后,用chkconfig --add 脚本名,将脚本加到服务中
若不想制作服务脚本,/etc/rc.local文件中添加想要启动的服务也可达到on的作用(centos6默认生效,centos7默认无效,需要加执行权限才可用)

启动管理命令
chkconfig命令
--list:查看服务在所有级别的启动或关闭设定情况
--add:添加服务脚本
--del:删除服务脚本
--level:指定模式设置on|off

xinetd管理的服务
service命令
手动管理服务
service 服务 start|stop|restart,管理服务状态
service --status-all,列出所有服务当前状态

瞬态(Transient)服务
被xinetd进程所管理
工作模式:
无访问时不启动,由xinetd监控,当被访问时被xinetd唤醒,执行结束关闭
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>
与libwrap.so文件链接
用chkconfig控制的服务:
chkconfig tftp on
注意:centos7无xinetd,但其实systemd就替代了xinetd功能,大部分服务都不启动,由systemd监控,需要时唤醒,节省资源,开机速度快

总结:
CentOS 6启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) -->rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认
运行级别 --> 系统初始化脚本 rc.sysinit --> 关闭或启动对应级别的服务 --> 启动终端

grub
三个阶段:
stage1:mbr(前446字节,引导信息)
stage1.5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub/)和内核通常放置于一个基本磁盘分区
用法:
1、
grub-install /引导分区,更方便的修复工具
2、
grub,交互式修复
grub>root(hd#,#),指定/boot/grub所在位置,1#表示硬盘位置,2#表示分区位置,从0开始
grub>setup(hd#),#表示安装到哪块硬盘
/boot/grub下的文件是grub命令的重要文件,若没有这些文件,虽然不影响启动,但grub命令将无法修复引导分区;一旦利用这些文件修复过引导分区,这些文件也会对启动有影响
配置文件:
/boot/grub/grub.conf <-- /etc/grub.conf
关键配置:
default=0,默认启动的内核,多个内核时可选择使用哪个内核启动
timeout=5,超时时长,定时内不选择便进入默认内核
splashimage=(hd0,0)/grub/splash.xpm.gz,内核选择界面的背景图片
hiddenmenu,隐藏菜单,隐藏的是后续的内容
title,定义菜单项“标题”, 可出现多次
后跟启动所需的所有项目:root、kernel、initrd
注意:
配置中添加passwd项,在内核选择前需要先输入密码,才能往下执行,可以增加安全性,使用户不能轻易利用单用户模式破解密码
grub-md5-crypt命令可生成MD5加密口令(passwd --md5)
grub-crypt命令可生成SHA512加密口令(passwd --encrypt)

CentOS6启动流程终极版
1、post加电自检,检查硬件环境
2、grub(stage1),检查mbr-446
3、grub(stage1.5),加载/boot所在分区文件系统
4、grub(stage2),/boot/grub/grub.conf(文件中定义了内核路径)
5、加载内核文件(vmlinuz)和辅助文件(initramfs),加载/(根)
6、启动/下第一个进程(/sbin/init),读取配置文件(/etc/inittab)
7、加载初始化脚本(rc.sysinit)
8、根据预先设置的运行级别(模式),运行/etc/rc#.d/下的脚本(实际指向/etc/init.d/)
9、所有服务运行完后执行/etc/rc.local
10、显示登录界面,login

/proc目录
作用:
内核把自己内部状态信息、统计信息,以及可配置参数通过proc伪文件系统加以输出
参数:
只读:输出信息
可写:可接受用户指定“新值”来实现对内核某功能或特性的配置,修改的配置保存不住,想要保存住,就需要写进配置文件(/etc/sysctl.conf)
/proc/sys管理:
sysctl命令用于查看或设定此目录中诸多参数
echo命令通过重定向方式也可以修改大多数参数的值

sysctl命令
设置某参数:
sysctl -w parameter(参数)=VALUE
通过读取配置文件设置参数:
sysctl -p [/path/to/conf_file]
查看所有生效参数:
sysctl -a
常用参数:
net.ipv4.ip_forward
net.ipv4.icmp_echo_ignore_all
vm.drop_caches

/sys目录
sysfs:
为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息,有些参数是可以修改的,用于调整硬件工作特性
udev:
通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序
专用工具:udevadmin, hotplug
udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下

内核编译
借助编译好的内核,以它作为模板,在他基础上做修改
编译文档:/boot/config-VERSION-RELEASE,其中编译了内核功能的开启和关闭
内核功能存放位置:
1、核心文件:vmlinuz-VERSION-RELEASE(存放基本功能)
2、/lib/modules/VERSION-RELEASE/(其他功能)

步骤:
1、准备好模板,放到/boot/下命名为config-VERSION-RELEASE
2、配置内核:make menuconfig
3、内核编译启动:make -j #(指定使用cpu核数)
4、安装模块:make modules_install
5、安装内核相关文件:make install
若想对已经执行过编译操作的内核源码树做重新编译,需要先做清理操作:
make clean:清理大多数编译生成的文件,但会保留config文件等
make mrproper:清理所有编译生成的文件、config及某些备份文件
make distclean:最彻底清除

内核相关命令
uname命令:
打印内核信息
-n:显示节点名称
-r:显示VERSION-RELEASE
-a:显示所有信息
lsmod命令:
显示由核心已经装载的内核模块
显示的内容来自于:/proc/modules文件
modinfo命令:
显示模块的详细描述信息
-n: 只显示模块文件路径
-p: 显示模块参数
-a: author(创造者)
-d: description(描述)
-l: license(许可证)
modprobe命令:
装载或卸载内核模块
depmod命令:
内核模块依赖关系文件及系统信息映射文件的生成工具
insmod命令:
装载或卸载内核指定模块文件,不自动解决依赖模块
rmmod命令:
卸载模块

CentOS7启动流程
Systemd:
系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源、服务器进程和其它进程
新特性:
系统引导时实现服务并行启动
按需启动守护进程(代替xinetd功能)
自动化的服务依赖关系管理
同时采用socket式与D-Bus总线式激活服务
系统状态快照

核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息
配置文件:
/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面优先运行
unit类型
Systemctl -t help:查看unit类型
Service:文件扩展名为.service,用于定义系统服务
Target:.target,用于模拟实现运行级别
Device:.device,用于定义内核识别的设备
Mount:.mount,定义文件系统挂载点
Socket:.socket,标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
Snapshot:.snapshot,管理系统快照
Swap:.swap,用于标识swap设备
Automount:.automount,文件系统的自动挂载点
Path:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool目录(该目录下文件不会开机启动,会触发执行)

特性:
关键特性:
基于socket的激活机制:socket与服务程序分离
基于d-bus的激活机制:
基于device的激活机制:
基于path的激活机制:
系统快照:保存各unit的当前状态信息于持久存储设备中
向后兼容sysv init脚本
不兼容:
systemctl命令固定不变,不可扩展
非由systemd启动的服务,systemctl无法与之通信和控制

服务命令
管理服务:
CentOS7:service unit
注意:能兼容早期的服务脚本
命令:systemctl COMMAND name.service
启动: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
条件式重启:已启动才重启,否则不做操作
service name condrestart ==> systemctl try-restart name.service
重载或重启服务:先加载,再启动
systemctl reload-or-restart name.service
重载或条件式重启服务:
systemctl reload-or-try-restart 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 sshd –list ==>ls /etc/systemd/system/*.wants/sshd.service
查看服务是否开机自启:
systemctl is-enabled name.service
查看服务的依赖关系:
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:开机不启动,但可被另一个启用的服务激活

CentOS7启动流程
1、UEFi或BIOS初始化,运行POST开机自检
UEFi或BIOS初始化,运行POST开机自检
2、选择启动设备
3、引导装载程序, centos7是grub2
4、加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub/boot/grub2/grub.cfg
5、加载initramfs驱动模块
6、加载内核选项
7、内核初始化,centos7使用systemd代替init
8、执行initrd.target所有单元,包括挂载/etc/fstab
9、从initramfs根文件系统切换到磁盘根目录
10、systemd执行默认target配置,配置文件/etc/systemd/system/default.target
11、systemd执行sysinit.target初始化系统及basic.target准备操作系统
12、systemd启动multi-user.target下的本机与服务器服务
13、systemd执行multi-user.target下的/etc/rc.d/rc.local
14、systemd执行multi-user.target下的getty.target及登录服务
15、systemd执行graphical需要的服务

修复grub2
主要配置文件:
/boot/grub2/grub.cfg
修复配置文件:
grub2-mkconfig /boot/grub2/grub.cfg
修复grub
grub2-install /dev/sda BIOS环境
grub2-install UEFI环境
调整默认启动内核
vim /etc/default/grub,GRUB_DEFAULT=0

猜你喜欢

转载自blog.51cto.com/13672914/2119050