更多內容請點擊:linux
Linux學習從入門到打死也不放棄,徹底筆記整理(持續更新,求收藏,求點贊~~~~)
ios
https://blog.51cto.com/13683480/2095439web
第15章,系統啓動和內核管理shell
本章內容vim
Centos5和6的啓動流程windows
服務管理centos
Grub管理緩存
自制Linux安全
啓動排錯bash
編譯安裝內核
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的配置文件,刪除不須要的內核啓動列表
練習:
一、破解root口令,併爲grub設置保護功能
二、破壞本機grub stage1,然後在救援模式下修復之
三、刪除vmlinuz和initramfs文件後沒法啓動,兩種方法恢復之
四、增長新硬盤,在其上製做能單獨運行kernel和bash的系統
五、在U盤上定製linux,使其可啓動系統,並具備網絡功能
六、刪除/etc/fstab和/boot目錄的全部文件,並恢復之
七、編譯安裝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