第15章,系统启动和内核管理

更多内容请点击:

Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~)

http://blog.51cto.com/13683480/2095439

本章内容

Centos5和6的启动流程

服务管理

Grub管理

自制Linux

启动排错

编译安装内核

Centos7启动流程

Unit介绍

服务管理和查看

启动排错

破解口令

修复grub2

Linux组成:---------------------------------------------------------------------

Linux:kernel+rootfs

kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

rootfs:程序和glibc

库:函数集合,function,调用接口

过程调用:procedure,无返回值

函数调用:function

程序:二进制执行文件

内核设计流派:

单内核(monolithic kernel):linux

把所有功能集成于同一个程序

微内核(micro kernel):windows,solaris

内核:

linux内核特点:

支持模块化:.ko

如:文件系统,硬件驱动,网络协议等

支持内核模块的动态装载和卸载

组成部分

核心文件:/boot/vmlinuz-VERSION-release

ramdisk:辅助的伪根文件系统

centos5:/boot/initrd-VERSION-release.img

centos6,7:/boot/initramfs-VERSION-release.img

模块文件:/lib/modules/VERSION-release

Centos5,6 启动流程:----------------------------------------------------------------

post--mbr引导--bootloader加载grub--加载内核--启动init--读取默认运行级别--

--执行rc.sysinit系统初始化脚本--根据运行级别执行rc N,开启运行级别下默认开启的服务

--执行/etc/rc.d下rc.local--执行/bin/login,等待用户登录

POST加电自检

boot sequence 按照启动顺序查找第一个拥有启动功能的设备

读取MBR前446个字节的bootloador,也就是grub第一阶段

第一阶段的目的是在磁盘分区表之后的扇区上寻找grub1.5阶段

grub1.5阶段读取boot分区文件系统驱动,并且找到boot分区,读取grub第2阶段

grub第2阶段会根据事先写好的配置文件加载选定内核 和ramdisk或ramfs

内核启动之后首先会进行自身初始化,加载硬件驱动程序(可能借助于ramdisk或者ramfs)

内核完成初始化之后,找根,借助grub.conf第二阶段配置文件root=找到根

借助ramdisk或者ramfs加载真正的根文件系统驱动,之后只读挂载真正的根文件系统

启动第一个进程/sbin/init,centos5  /etc/inittab centos6 /etc/inittab /etc/init/*.conf

根据运行配置文件运行默认运行级别

运行/etc/rc.d/rc.sysinit 初始化脚本

1     设置主机名

2     设置欢迎信息

3     激活udev和selinux

4     挂载/etc/fstab文件中定义的文件系统

5     检测根文件系统,并以读写方式重新挂载根文件系统

6     设置系统时钟

7     激活swap设备

8     根据/etc/sysctl.conf文件设置内核参数

9     激活lvm及software.conf文件设置内核参数

10   加载额外设备的驱动程序

11    清理操作

根据选择的运行级别,执行rc N,关闭/开启 对应级别的服务以及/etc/rc.d/rc.local

执行/bin/login,等待用户登录

登录之后开启shell获取控制权

启动流程:

POST:power-on-self-test,加电自检,是bios功能的一个主要部分。负责完成对cpu、

主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测

ROM:bios(basic input and output  system),保存着有关计算机系统最重要的

基本输入输出程序,系统信息设置,开机加电自检程序和系统启动自举程序等

RAM:CMOS互补禁书氧化物半导体,保存各项参数的设定

按次序查找引到设备,第一个有引到程序的设备为本次启动设备

bootloader:引到加载器,引到程序

window:ntloader,仅是启动os

linux:功能丰富,提供菜单,雨荨用户选择要启动系统或不同的内核版本,把用户选定的

内核装载到内存中的特定空间中,解压,展开,并把系统控制权移交给内核

lolo:linux loader

grub:grand unified  bootloader

MBR:446 bootloader ,64  分区表,2 55AA标识符

Grub:    stage1 bootloader

stage1.5  0扇区之后的扇区

stage2           磁盘文件系统上,boot目录下

kernel 自身初始化:

探测可识别到的所有硬件设备

加载硬件驱动程序(借助于ramdisk加载驱动)

以只读方式挂载根文件系统

运行用户空间的第一个应用程序:/sbin/init

ramdisk:

与内核一起被grub加载进内存,放在内存指定的地方,模拟磁盘上的微型根文件系统

centos5,6上为gz压缩之后的cpio文件,如要查看,改名解压 使用cpio -tv <  查看

centos7  直接为cpio文件,没有压缩

centos 5  initrd

工具程序:mkinitrd

centos 6,7      initramfs

工具程序,mkinitrd,dracut

ramdisk管理:

ramdisk文件的制作:

mkinitrd         1.      mkinitrd命令

为当前正在使用的内核重新制作ramdisk文件

mkinitrd  /boot/initramfs-`uname -r`.img $`uname -r`

dracut                   2     dracut命令

为当前正在使用的内核重新制作ramdisk文件

dracut  /boot/initramfs-`uname -r`.img $`uname -r`

PS:   mkinitrd 本是是一个脚本  根据参数:   $(uname -r)  来生成initramfs文件

init程序:

init程序的类型:

sysv:init  centos5之前

配置文件:     /etc/inittab

upstart:init,centos  6

配置文件:     /etc/inittab,/etc/init/*.conf

systemd:systemd,centos7

配置文件:     /usr/lib/systemd/system

/etc/systemd/system

PS:          init命令通过   /var/lock/subsys/文件存在与否来判断服务是否是开启状态

/etc/inittab 文件:

初始运行级别(0-6)          centos6 只剩这一项了

系统初始化脚本,/etc/rc.d/rc.sysinit

rc N  运行对应级别的脚本目录

捕获某个关键字顺序

定义UPS电源终端、恢复脚本

在虚拟控制台生成getty,mingetty会自动调用login程序

在运行级别5初始化X

每一行定义一种action以及与之对应的process

id:runlevel:action:process

action:

wait:切换至此级别运行一次

respawn:此process终止,就重新启动

initdefault:设定默认运行级别;process省略

sysinit:设定系统初始化方式,此处一般为指定  /etc/rc.d/rc.sysinit

ca::ctrlaltdel:/sbin/shutdown -t3 -r now    ctrl+alt+del 重启

/etc/rc.d/rc.sysinit 初始化脚本

1     设置主机名

2     设置欢迎信息

3     激活udev和selinux

4     挂载/etc/fstab文件中定义的文件系统

5     检测根文件系统,并以读写方式重新挂载根文件系统

6     设置系统时钟

7     激活swap设备

8     根据/etc/sysctl.conf文件设置内核参数

9     激活lvm及software.conf文件设置内核参数

10   加载额外设备的驱动程序

11    清理操作

CentOS 6 /etc/inittab和相关文件

/etc/inittab

设置系统默认的运行级别

id:3:initdefault:

/etc/init/control-alt  -delete.conf

/etc/init/tty.conf

/etc/init/start  -ttys.conf

/etc/init/rc.conf

/etc/init/prefdm.conf           ·

rc N :

N为运行级别,读取/etc/rc.d/rcN.d/中的文件

K*,K##*: 关闭服务,数字越小,越先运行;数字越小的服务,通常为依赖到别的服务

S*,S##*: 开启服务,数字越小,越先运行;数字越小的服务,通常为被依赖到的服务

注意:     正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个

服务脚本,而是指向了/etc/rc.d/rc.local脚本

?           不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行

的命令,可直接放置于/etc/rc.d/rc.local文件中

/etc/rc.d/rc.local在指定运行级别脚本后运行

可以根据情况,进行自定义修改

init:服务管理命令----------------------------------------------------------------

chkconfig命令:

查看服务在所有级别的启动或者关闭设定

chkconfig [--list]  name

添加服务:

SysV的服务脚本放在/etc/rc.d/init.d 下(centos6   /etc/init.d为软链接      centos5为硬链接)

chkconfig --add  name

#!/bin/bash

#chkconfig:LLLL nn mm

LLLL:运行级别

nn:S##编号,开启的顺序

mm:K##编号,关闭的顺序

删除:

chkconfig --del  name

修改服务的默认启动/关闭

chkconfig [--level  LLLL] name <on | off |reset >

LLLL  为运行级别,默认2345

ntsysv      [--level=LLLL] 字符下的窗口界面,修改服务的默认启动或者关闭

service命令:

通过chkconfig --add 添加的服务,可以被service命令手动管理

设置开启,关闭,重启,查看

service SERVERNAME  start|stop|restart|status

查看所有服务当前状态:

service  --status-all

grub:--------------------------------------------------------------------------

安装grub:

grub-install  --root-directory=DIR /dev/DISK

安装grub stage1 和stage1.5到/dev/DISK 磁盘上,并复制GRUB相关文件到

DIR/boot目录下

grub命令:交互式

grub>root(hd#,#)

grub>setup(hd#)

grub legacy

配置文件:/boot/grub/grub.conf  <--/etc/gurb.conf

stage2及内核等通常放置于一个基本磁盘分区

功用:

1     提供启动菜单、并提供交互式接口

a     内核参数

e     编辑模式,用于编辑菜单

c      命令模式,交互式接口

2     加载用户选择的内核或操作系统

允许传递参数给内核

可以隐藏启动菜单

3     为菜单提供了保护机制

为编辑启动菜单进行认证(可设置密码)

为启动内核或操作系统进行认证(设置密码)

grub的命令行接口:

help | help  KEYWORD

find  (hd0,0)/path/to/file

root(hd0,0)

kernerl

initrd

boot  引导启动选定的内核

内核参数文档:

cat  /usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

需安装kernel-doc包

cat  /proc/cmdline  查看内核参数

识别硬盘设备:

(hd#,#)

hd#:磁盘编号,用数字表示;从0开始编号

#:分区编号,用数字表示,从0开始编号

(hd0,0)第一块硬盘的第一个分区

手动在grub命令行接口启动系统

root  (hd0,0)

kernerl

initrd

boot

配置文件:/boot/grub/grub.conf

default=#               设定默认启动的菜单项;title编号从0开始

timeout=#             指定菜单项等待选项选择的时间。单位为秒

splashimage=(hd#,#)/grub/abc.xpm.gz            菜单背景图片文件路径

password [--md5|--encrypted] STRING           启动菜单编辑认证密码可以明文

hiddenmenu:      隐藏菜单

title TITLE               定义菜单项“标题”  ,可以有多个

root(hd#,#)    查找stage2及kernel文件所在的设备分区,为grub的根

kernel  [/boot]/kernel-   使用启动的内核

initrd  [/boot]/initramfs-       使用的ramfs文件

password  [--md5|--encrypted] STRING            启动内核编辑的认证密码可以明文

grub加密:

生成grub口令

grub-md5-crypt          md5

grub-crypt                   sha512

修改grub.conf文件:

password  [--md5|--encrypted] STRING

破解root口令

启动系统时,设置其运行级别为1

进入单用户模式,编辑grub菜单,kernel后加 1 s S single 都可以

使用passwd命令修改密码

设置grub背景图片

1     提供一张图片,640*480尺寸 pic.jpg

2     安装ImageMagick工具包,使用       convert工具转化格式为xpm  色深14

convert -resize 640x480  -colors 14 pic.jpg pic.xpm

可以使用head 查看pic.xpm属性

3     使用gzip 压缩pic.xpm  复制pic.xpm.gz到grub目录下

4     修改grub.conf      splashimage=(hd0,0)/grub/pic.xpm.gz

自制linuz系统:-------------------------------------------------------------------

1     分区并创建文件系统

fdisk /dev/sdb  分两个必要的分区

/dev/sdb1----boot

/dev/sdb2----root

mkfs.ext4  创建文件系统

2     挂载boot

mkdir  /mnt/boot

mount /dev/sdb1  /mnt/boot

3     安装grub

grub-install  --root-directory=/mnt /dev/sdb

4     复制内核和initramfs文件

cp  /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

cp  /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot

5     创建grub.conf文件

vim  /mnt/boot/grub/grub.conf

default=0

timeout=5

splasgimage=(hd0,0)/grub/pic.xpm.gz

title  minicentos

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2  selinux=0  init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

6     复制root文件

mkdir  /mnt/sysroot

mount /dev/sdb2  /mnt/sysroot

mkdir -pv  {etc,lib,usr,home,root,proc,sys,boot,dev,mnt...}

7     复制bash和相关库文件

复制相关命令及相关库文件

如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid,insmod,lsmod,modinfo等

可是使用如下脚本复制

8      如果需要使用网路功能,还需要复制驱动程序e1000

cp  /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  /mnt/sysroot/lib/

自制系统开机之后:

使用insmod /lib/e1000.ko 安装驱动

使用ifconfig 配置IP即可

救援环境,inittab文件误删除恢复

centos6:毫无影响,正常启动,自行复制就可

centos5:

现象:

使用reboot命令无法重启,开机提示输入runlevel,之后启动处于停止状态

修复:

救援模式,页面输入linux rescue进入

chroot  /mnt/sysimage

bikid  可以查看到光盘

mount  /dev/hdc /mnt

cd  /mnt/Server

rpm  -ivh initscripts-8.45.30-2.el5.i386.rpm  --force|--replacepkgs

也可以使用

rpm2cpio  /mnt/Server/initscripts-8.45.30-2.el5.i386.rpm |cpio -idv ./etc/inittab  /etc/

/proc目录

/proc:

内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

参数:

只读:输出信息

可写:可接受用户指定"新值"来实现对内核某功能或特性的配置

/proc/sys

1     sysctl命令用来查看或设定此目录中诸多参数

sysctl  -w path.to.paremeter=VALUE

sysctl  -w kernel.hostname=HOSTNAME

2     echo 命令用于查看或设定此目录中诸多参数

echo  "VALUE" > /proc/sys/PATH/TO/PARAMETER

echo  "websrv" > /proc/sys/kernel/hostname

PS:          如果使用sysctl命令修改,使用"."作为分隔

如果使用echo 1|0 > 修改,使用"/"作为分隔

sysctl命令:

默认配置文件:/etc/sysctl.conf

1     设置某参数

sysctl -w  parameter=VALUE

2     通过读取配置文件设置参数

sysctl -p  /path/file

3     查看所有生效参数

sysctl  -a

常用的几个参数:

net.ipv4.ip_forword                           路由转发功能

net.ipv4.icmp_echo_ignore_all      禁ping

vm.drop_caches                                清除缓存

/sys目录

sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有

内核对硬件特性的设定信息;有些参数时可以修改的,用于调整硬件工作特性

udev通过此路径下输出的信息动态为个设备创建所需要设备文件,udev是运行用户空间程序

专用工具:     udevadmin hotplug

udev为设备创建设备文件时,会读取其实现定义好的规则文件,一般在

/etc/udev/rules.d

/usr/lib/udev/rules.d

内核组成部分:

分类:单内核,微内核

kernel:一般为:/boot/vmlinuz-VERSION-release

kernel object  内核模块,一般位于  /lib/modules/VERSION-RELEASE/

辅助文件: ramdisk: /boot/initrd 或者 initramfs

运行中的内核:

uname  [option]

-n          显示节点名称

-r          显示VERSION-RELEASE

-a          显示所有信息

内核模块命令:

lsmod:

显示由核心已经装载的内核模块

显示的内容来自于:/prco/modules

moinfo

显示模块的详细描述信息,当前没有装载也可以查看

modeinfo [-k kernel]  [modulename | filename]

-n          只显示模块文件路径

-p          只显示模块参数

-a          作者

-d          description     描述

-l           license    遵守的协议类型

modprobe

装载或卸载内核模块

modprobe  modname   装载

-r                        卸载

配置文件:     /etc/modprobe.conf

/etc/modprobe.d/*.conf

depmod:        内核模块依赖关系文件及系统信息映射文件的生成工具

insmod 装载内核模块,不会自动解决依赖关系

insmod [filename] [module  options..]

insmod `modinfo -n  xfs`

rmmod    卸载模块

rmmod  xfs

编译安装内核:--------------------------------------------------------------------

前提:

1     准备好开发环境

包组:    Server Platform  Development     (centos7没有)

Development Tools

2     获取目标主机上硬件设备的相关信息

CPU:       cat /proc/cpuinfo,x86info  -a,lscpu

PCI: lspci -v -vv ,lsusb -v -vv     lsblk

3     获取目标主机系统功能的相关信息

例如:需要启用相应的文件系统

4     获取内核源代码包

内核编译安装流程

完整编译:

安装开发包组

下载源码文件              解压并cd进入解压生成的目录

装备文本配置文件,".config" 可以从现有系统复制改名得到 (/boot下config-VERSION)

make menuconfig        配置内核选项,选择或者不选择相应模块

make [-j #]           编译,可选择cpu个数

make  modules—install 安装模块

make install                  安装核心

vmlinuz-

initramfs-

编辑grub配置文件

reboot

部分编译:

只编译某子目录中的相关代码

cd  进入解压目录,

make  dir/       只能使用相对路径

只编译一个特定的模块:

make  dir/file.ko

交叉编译:

如何交叉编译内核:

编译的目标平台与当前平台不相同

make  ARCH=arch_name

获取特定目标平台的使用帮助

make  ARCH=arch_name help

make ARCH=arm help 手机平台

清理:

make clean           清理大多数编译生成的文件,但会保留config文件等

make mrproper     清理所有编译生成的文件、config及某些备份文件

make distclean      mrproper、patches以及编辑器备份文件

卸载内核:

删除/lib/modules/ 下不需要的内核

删除/usr/src/linux 解压目录下不需要的内核源码

删除/boot 目录下启动的内核和initramfs文件

更改grub的配置文件,删除不需要的内核启动列表

练习:

? 1、破解root口令,并为grub设置保护功能

? 2、破坏本机grub  stage1,而后在救援模式下修复之

? 3、删除vmlinuz和initramfs文件后无法启动,两种方法恢复之

? 4、增加新硬盘,在其上制作能单独运行kernel和bash的系统

? 5、在U盘上定制linux,使其可启动系统,并具有网络功能

? 6、删除/etc/fstab和/boot目录的所有文件,并恢复之

? 7、编译安装kernel,启用支持ntfs文件系统功能

systemd:-----------------------------------------------------------------------------

syetemd:centos7 上的第一个进程

系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源、

服务器进程和其他进程

新特性:

系统引导时实现服务并行启动

按需启动守护进程

自动化的服务依赖关系管理

同时采用socket式和D-bus总线式激活服务

系统状态快照

核心概念:unit

unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了

系统服务、监听socket、保存的系统快照以及其他与init相关的信息

配置文件:     /usr/lib/systemd/system       每个服务最主要的启动脚本设置,类似于/etc/init.d/

/run/systemd/system           系统执行过程中所产生的服务脚本,比上面的优先运行

/etc/systemd/system            管理员建立的执行脚本,比上面的目录优先运行

特性:     向后兼容sysv init 脚本

systemctl命令固定不变,不可扩展

非由systemd启动的服务,systemctl无法与之通信的控制

unit类型:

systemctl -t help         查看unit类型

service unit .service      用于定义系统服务

.target            用于模拟实现运行级别

.device           用于定义内核识别的设备

.mount          定义文件系统挂载点

.socket           用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动

.snapshot       管理系统快照

.automount    文件系统的自动挂载点

.path              用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,

延迟激活服务,如spool目录

管理服务:

管理系统服务:service unit

命令:

systemctl  [start|stop|restart|status] name.service

条件式重启:已启动才重启,否则不做操作

systemctl  try-restart name.service

重载或重启服务:先加载,启动

systemctl  reload-or-restart name.service

重载或条件式重启:

systemctl  reload-or-try-restart name.service

禁止自动和手动启动:

systemctl mask  name.service              通过创建软链接指向/dev/null来禁止启动

取消禁止

systemctl unmask  name.service

查看某服务当前激活与否的状态:

systemctl is-active  name.service 激活状态$?为0   非激活状态非0

查看所有已激活的服务:

systemctl list-units  --type|-t service

-t  service

systemctl单独使用:

等于systemctl list-units       查看所有活动units

查看所有服务:

systemctl list-units  -type|-t service --all|-a

-at   service

设定某服务开机启动:

systemctl enable  name.service

设置某服务开机禁止启动

systemctl disable  name.service

查看所有服务的开机自启状态:

systemctl  list-unit-files -t service

查看服务是否开机自启:

systemctl is-enabled  name.service

自启$?为0   否则为1

用来列出该服务在那些运行级别下启用和禁用

ls  /etc/systemd/system/*.wants/name.service

查看服务的依赖关系:

systemctl  list-dependencies name.service

杀掉进程:

systemctl kill  unitname

服务状态:

使用systemctl -at service查看状态

loaded:               unit配置文件已处理

active(running) 一次或多次持续处理的运行

active(exited)     成功完成一次性的配置

active(waiting)   运行中,等待一个事件

inactive                 不运行

enabled                       开机启动

disabled                开机不启动

static                             开机不启动,但可被另一个启动的服务激活

service unit 文件格式

/etc/systemd/system:           系统管理员和用户使用

/usr/lib/systemd/system:      发行版打包使用

以"#"开头的行后面的内容被任务是注视

相关布尔值,1,yes,on,true都是开启,0,no,of,false都是关闭

时间单位默认是秒,所以要用毫秒ms 分钟m  等需要显式说明

servic unit file 通常由三部分组成:

[UNIT]:    定义与unit类型无关的通用选项,用于提供unit的描述信息,unit行为以及依赖性关系

Dsecription: 描述信息

After:                 定义unit的启动次序,表示当前unit应该晚于哪些unit启动,与Before相反

Requires:            依赖到的其他units,强依赖,被依赖的unit无法激活时

当前unit也无法激活

Wants:               弱依赖

Conflicts:            定义units间的冲突关系

[Service]: 与unit类型相关的专用选项,service|socket 等

Type:             定义影响Execstart及相关参数的功能的unit进程启动类型

simple: 默认值,这个daemon主要由ExceStart接的指令串来启动,启动后

常驻于内存中

forking:        有ExceStart启动的程序通过spawns延伸出其他子程序来作为此daemon

的主要服务,原生父进程在启动结束后就会终止

oneshot:      与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中

dbus:           与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作。

因此通常也要同时设定BusName=  才行

notify:   在启动完成后发送一个通知消息,还需要配合NotifyAccess来让Systemd接受消息

idle:             与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。

这类的daemon通常是开机到最后才执行即可的服务

EnvironmentFile: 环境配置文件

ExecStart:                  指明启动unit要运行命令或脚本的绝对路径

ExecStartPre:             ExecStart前运行

ExecStartPost:        ExecStart后运行

ExecStop:                  指明停止unit要运行的命令或脚本

Restart:              当设定Restart=1时,则当次daemon服务以外终止后,会再次自动启动

[install]:        定义由"systemctl enable" 以及"systemctl disable" 命令在实现服务启用

或禁用时用到的一些选项

Alias:    别名,可使用systemctl command Alias.service

RequiredBy: 被哪些units所依赖,强依赖

WantedBy:          被哪些units所依赖,弱依赖

Also:                   安装本服务的时候还要安装别的相关服务

注意:     对于新创建的unit文件,或者修改了unit文件,要通知systemd重载此配置文件,

而后可以选择重启

systemctl  daemon-reload

服务Unit文件示例:

? vim  /etc/systemd/system/bak.service

[Unit]

Description=backup /etc

Requires=atd.service

[Service]

Type=simple

ExecStart=/bin/bash -c "echo /testdir/bak.sh|at  now"

[Install]

WantedBy=multi-user.target

?systemctl  daemon-reload

?systemctl start bak

target units

unit配置文件: .target

查看所有target

ls  /usr/lib/systemd/system/*.target

systemctl  list-unit-files -t target -a

运行级别

/usr/lib/systemd/system/runlevel0.target ->  poweroff.target

/usr/lib/systemd/system/runlevel1.target ->  rescue.target

/usr/lib/systemd/system/runlevel2.target ->  multi-user.target

/usr/lib/systemd/system/runlevel3.target ->  multi-user.target

/usr/lib/systemd/system/runlevel4.target ->  multi-user.target

/usr/lib/systemd/system/runlevel5.target ->  graphical.target

/usr/lib/systemd/system/runlevel6.target ->  reboot.target

查看依懒性:

systemctl  list-dependencies graphical.target

级别切换:     init N ==> systemctl isolate name.target

注意:只有/lib/systemd/system/*.target 文件中AllowIsolate=yes,才能切换

(修改文件需执行 systemctl daemon-reload  才能生效)

查看target:

runlevel         链接指向systemctl

who  -r

systemctl  list-units -t target

获取默认运行级别:

/etc/inittab ===>  systemctl get-default

ll  /etc/systemd/system/default.target

修改默认运行级别:

systemctl  set-default name.target

进入默认target:

systemctl  default

其他命令:

切换至紧急救援模式:

systemctl  rescue

切换至emergency模式

systemctl  emergency

其他常用命令:

传统命令:    init  poweroff halt reboot 都称为systemctl的软链接

关机:    systemctl hatl  、systemctl poweroff

重启:    systemctl reboot

挂起:    systemctl  suspend

休眠:    systemctl  hibernate

休眠并挂起:systemctl hybrid-sleep

CentOS 7 引到顺序:

POST开机自检

boot sequence  选择启动设备

引导装载程序,grub2

加载装载程序的配置文件:/boot/grub2/grub.cfg,给出内核选项

加载内核,以及initramfs

内核初始化

开启第一个进程:systemd

执行initrd.target所有单元,包括挂载/etc/fstab

切换根文件系统

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 需要的服务

设置启动内核参数:

启动时,在linux16行后添加 systemd.unit=multi-user.target  启动进入3模式

systemd.unit=rescue.target

systemd.unit=emergency.target

rescue.target 比emergency 支持更多的功能,例如日志等

centos7 破解root口令

方法1:

启动项e键修改

找到lunux16 内核这一项,rd.break,ctrl+x启动

mount -o  rw,remount /sysroot

chroot  /sysroot

passwd  修改密码

如果selinux启动状态,则需要touch  /.autorelabel

exit

reboot

方法2:

启动项e键修改

找到linux16,行尾添加 rw  init=/sysroot/bin/sh ,ctrl+x启动

chroot  /sysroot

passwd  修改密码

如果selinux启动状态,则需要touch  /.autorelabel

exit

reboot

修复grub2

主要配置文件:       /boot/grub2/grub.conf

辅助配置文件:/etc/default/grub

修复配置文件:

grub2-mkconfig >  /boot/grub2/grub.cfg

修复grub2

grub2-install  /dev/sda        BIOS环境

grub2-install  UEFI环境

调整默认启动内核:

vim  /etc/default/grub

GRUB_DEFAULT=0

grub2-mkconfig >  /boot/grub2/grub.cfg

练习:

? 为编译安装的httpd服务,实现service unit文件

? 破解centos7  口令

? 修改默认的启动内核为新编译内核

? 启动时临时禁用SELinux

? 启动时进入emergency模式

? 卸载编译安装的新内核

笔记整理完成时间:2018年5月19日17:37:21

原文地址:http://blog.51cto.com/13683480/2120916

时间: 2024-10-11 16:10:19

第15章,系统启动和内核管理的相关文章

Liunx 系统启动和内核管理总结

Liunx 系统启动和内核管理总结 Liunx系统启动 一.硬件启动流程 (1).打开电源 (2).BIOS: 1. POST 初始化硬件设备,检查系统外围主要设备(CPU,内存,硬盘,显卡i-o设备,键盘鼠标) 2.确定启动设备 -根据BIOS设置的启动顺序,检测驱动器(硬盘,光盘,U盘,网络) --如果硬盘是启动项,读取硬盘第一个扇区(MBR,512字节)到内存 ---控制区转给MBR中的Boot loader (3).MBR 1.执行MBR中Bootloader 2.MBR由主引导程序,硬

linux基础—课堂随笔010_系统启动和内核管理

系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 程序:二进制执行文件 内核设计流派: 单内核(monolithic kernel):Linux 把所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂 微内核(micro kernel):Windows, Solaris 每种功能使一个单独子系统实现,将内核功能

系统启动与内核管理 ;AWK部分 重要内容 (实验及awk的常见面试题)

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.local9.执行/bin/login程序,等待用户登录10.登录之

系统启动和内核管理

CentOS 5和6的启动流程 服务管理 Grub管理 自制Linux 启动排错 编译安装内核 Linux组成 Linux: kernel+rootfs kernel: 进程管理. 内存管理. 网络管理. 驱动程序. 文件系统. 安全功能 rootfs:程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 过程调用:procedure,无返回值 函数调用:function 程序:二进制执行文件 内核设计流派: 单内核(monolithic kernel):Linux

Linux系统启动和内核管理

Linux组成 由 kernel 和 rootfs 组成 单内核:(进程管理,内存管理,网络管理, 驱动程序,文件系统, 安全功能) /boot/vmlinuz-VERSION-release 辅助的伪根系统 /boot/initramfs-VERSION-release.img            这是一个cpio格式的归档文件,存放的是各种驱动模块 md5sum vmlinuz /boot/vmlinuz       查看两个文件中的内容是否完全一致,只要有一个字符不一样,两个文件的md5

Linux系统启动与内核管理(下)

从上一篇介绍了系统启动流程可以得知,在BIOS读取相关信息之后,接下来就是去找第一个可以启动的设备当中的MBR中读取Boot Loader信息,Boot Loader提供具有惨淡功能,直接加载内核信息,以及相关的控制权转交功能.启动系统必须有Boot Loader,然后才能去加载内核,Boot Loader存储于MBR当中,MBR只有512字节,其中前446字节存储Boot Loader,区区只有446自己不可能容纳较多的功能,Linux将Boot Loader的程序运行与配置项加载分成三个阶段

Linux之系统启动和内核管理

系统启动 常用命令: runlevelwho -r/etc/inittab:定义启动级别/etc/rc.d/init.d/NetworkManager 定义网络管理程序的详细信息/etc/rc.d/rc.sysinit 系统初始化脚本/etc/rc.d//rc[0-6].d/定义6个级别对应的服务程序开启或关闭/etc/rc.d/rc.local 开机最后一步要执行的脚本可以放到此文件中自定义服务 chkconfig --list 查看定义服务程序详情列表testsrv需要放入/etc/rc.d

Linux系统管理——系统启动和内核管理

1.内核 1.1内核分类 内核设计流派:     单内核(monolithic kernel):Linux     把所有功能集成于同一个程序 微内核(micro kernel):     Windows, Solaris     每种功能使用一个单独子系统实现 1.2.内核组成 组成部分:     核心文件:/boot/vmlinuz-VERSION-release 1.3.centos6启动     1.加载BIOS的硬件信息,获取第一个启动设备     2.读取第一个启动设备MBR的引导加

Linux启动和内核管理

系统启动和内核管理 Linux组成 Linux:kerne+rootfs(应用程序) kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 roots:程序和glibc 函数:相当于命令的集合 库:函数集合,function,调用接口(头文件负责描述) 过程调用:procedure,无返回值 函数调用:function 程序:二进制执行文件 内核设计: 单内核(monolithic kernel):Linux 把所有功能集成于一个同一个程序 微内核(micro kernel)