系統啟動和核心管理
-----------------------------------------------------------------------------------------------------------------------------------------------
Linux組成
<1>Linux: kernel+rootfs
kernel: 程序管理、記憶體管理、網絡管理、驅動程式、檔案系統、安全功能
rootfs:程式和glibc
庫:函數集合, function, 調用接口(頭檔案負責描述)
過程調用:procedure,無傳回值
函數調用:function
程式:二進制執行檔案
<2>核心設計流派:
單核心(monolithic kernel):Linux,linux單核心檔案即vmlinuz,放的核心功能的内容,但其它功能放到了/lib/modules,每一塊都是一個子產品驅動

微核心:把所有功能內建于同一個程式
微核心(micro kernel):Windows, Solaris,每種功能使用一個單獨子系統實作
核心
<1>Linux核心特點:
支援子產品化:.ko(核心對象),kernel object
如:檔案系統,硬體驅動,網絡協定等
支援核心子產品的動态裝載和解除安裝
<2>組成部分:
核心檔案:/boot/vmlinuz-VERSION-release
ramdisk:輔助的僞根系統,即/boot下的initramfs檔案,是一個小作業系統,裡面有必要的硬體驅動,啟動時系統通過initramfs找到檔案系統驅動,進而識别檔案系統,之後便可以挂根了
CentOS 5: /boot/initrd-VERSION-release.img,放的驅動,如果破壞系統啟用無法加載驅動
CentOS 6,7: /boot/initramfs-VERSION-release.img,放的驅動,如果破壞系統啟用無法加載驅動
子產品檔案:/lib/modules/VERSION-release
救援模式下,df顯示/mnt/sysimage為實際根,chroot /mnt/sysimage切根,使用mkinitrd /boot/initramfs-$(uname -r).img $(uname -r),恢複/initramfs…… .img
ramdisk檔案的制作:
(1) mkinitrd指令
為目前正在使用的核心重新制作ramdisk檔案
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut指令
為目前正在使用的核心重新制作ramdisk檔案
dracut /boot/initramfs-$(uname -r).img $(uname -r)
CentosOS6啟動流程
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控制主機
<1>POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主機闆、記憶體、硬碟子系統、顯示子系統、串并行接口、鍵盤等硬體情況的檢測
ROM:BIOS,Basic Input and Output System,儲存着有關計算機系統最重要的基本輸入輸出程式,系統資訊設定、開機加電自檢程式和系統啟動自舉程式等
RAM:CMOS互補金屬氧化物半導體,儲存各項參數的設定
按次序查找引導裝置,第一個有引導程式的裝置為本次啟動裝置
<2>bootloader: 引導加載器,引導程式
windows: ntloader,僅是啟動OS
Linux:功能豐富,提供菜單,允許使用者選擇要啟動系統或不同的核心版本;把使用者標明的核心裝載到記憶體中的特定空間中,解壓、展開,并把系統控制權移交給核心
LILO:LInux LOader
GRUB: GRand Unified Bootloader
GRUB 0.X: GRUB Legacy, GRUB2
<3>MBR:
446: bootloader, 64: 分區表, 2: 55AA
<4>GRUB:
primary boot loader : 1st stage,1.5 stage,不屬于任何檔案,隻是01010101的資料
secondary boot loader :2nd stage,分區檔案
<5>kernel:
自身初始化:
探測可識别到的所有硬體裝置
加載硬體驅動程式(借助于ramdisk加載驅動)
以隻讀方式挂載根檔案系統
運作使用者空間的第一個應用程式:/sbin/init
<6>ramdisk:
<7>核心中的特性之一:使用緩沖和緩存來加速對磁盤上的檔案通路,并加載相應的硬體驅動
ramdisk --> ramfs 提高速度
CentOS 5: initrd
工具程式:mkinitrd
CentOS 6,7: initramfs
工具程式:mkinitrd, dracut
<8>系統初始化:
P OST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(隻讀) --> init(systemd)
故障排錯
/boot下該檔案被删除後,救援模式下複制CD光牒内/lisolinux的該檔案到/boot目錄
核心檔案
cp vmlinuz-`uname -r`
系統啟動流程
<1>nit程式的類型:
<2>SysV: init, CentOS 5之前
配置檔案:/etc/inittab
<3>Upstart: init,CentOS 6
配置檔案:/etc/inittab, /etc/init/*.conf
<4>Systemd:systemd, CentOS 7
配置檔案:/usr/lib/systemd/system
/etc/systemd/system
啟動流程
<1>/sbin/init CentOS6之前
<2>運作級别:為系統運作或維護等目的而設定;0-6:7個級别
0:關機
1:單使用者模式(root自動登入), single, 維護模式
2: 多使用者模式,啟動網絡功能,但不會啟動NFS;維護模式
3:多使用者模式,正常模式;文本界面
4:預留級别;可同3級别
5:多使用者模式,正常模式;圖形界面
6:重新開機
<3>預設級别:3, 5
<4>切換級别:init #
<5>檢視級别:runlevel ; who -r
這就是init指令後的數字及其意思
如果這裡改成6,錯誤糾正:
該界面輸入a
輸入數字,輸入3就以init 3啟動,輸入5就以 init5,啟動後改動将其改回3或者5
init 1:進入單人模式,最有用的是破解root密碼
露出系統選擇的菜單項,敲a,進入單元項,然後輸入1;或者s或S或single都行
進去後passwd更改密碼即可
CentOS5、6的init讀取及其初始化檔案,/etc/inittab,CentOS5及其以前版本裡該檔案很多功能,但6隻定義開機啟動init 級别,7将完全無用
根據init級别進入目錄定義服務,/etc/rc/rc1.d-rc5.d中都是各項服務的軟連接配接,如果存在S95atd則atd開機啟動,将其改名為K05atd将不再開機啟動
init初始化
init讀取其初始化檔案:/etc/inittab
初始運作級别(RUN LEVEL)
系統初始化腳本
對應運作級别的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢複腳本
在虛拟控制台生成getty
在運作級别5初始化X
<1>/etc/rc.d/rc.sysinit: 系統初始化腳本
(1) 設定主機名
(2) 設定歡迎資訊
(3) 激活udev和selinux
(4) 挂載/etc/fstab檔案中定義的檔案系統
(5) 檢測根檔案系統,并以讀寫方式重新挂載根檔案系統
(6) 設定系統時鐘
(7) 激活swap裝置
(8) 根據/etc/sysctl.conf檔案設定核心參數
(9) 激活lvm及software raid裝置
(10) 加載額外裝置的驅動程式
(11) 清理操作
<2>說明:rc N --> 意味着讀取/etc/rc.d/rcN.d/
K*: K##*:##運作次序;數字越小,越先運作;數字越小的服務,通常為依賴到别的服務,指向的服務關閉
S*: S##*:##運作次序;數字越小,越先運作;數字越小的服務,通常為被依賴到的服務
是以自己編寫服務腳本時候随機啟動往後排,S開頭的腳本數字要大,關機時候提前結束,K開頭的腳本數字要小,指向的服務開啟
chkconfig指令
<1>ntsysv指令,進入後有*表面該服務都是K開頭的,随機不啟動,預設改目前運作模式
改其他模式:ntsysv --level=3
注:光标上下點選,空格選中取消,帶*的開機啟動,不帶*的不開機啟動,這裡改完,/etc/rc.d/rcN.d裡的檔案随之更改
<2>chkconfig指令,影響下次重新開機後的效果,本次不生效,立即生效用service SERVER start
chkconfig –level 23 atd on:init2 init3的atd服務随機啟動,
chkconfig atd on:改2345模式的開機啟動atd服務
<3>檢視服務在所有級别的啟動或關閉設定情形:
chkconfig --list檢視全部服務開機啟動或者開機關閉狀态
chkconfig –list atd(服務名) 檢視atd服務開機啟動或者關閉狀态
<4>添加:
SysV的服務腳本放置于/etc/rc.d/init.d ,CentOS6在(/etc/init.d),自己編寫的服務需要放到此目錄下
開機啟動的腳本存放路徑:/etc/init.d
CentOS5版本中此檔案存放:init 級别,注釋ctrl alt delete行可以關閉按鍵重新開機,更改圖形模式号
自己編寫腳本格式,内容也是腳本形式
/etc/rc.d/rcN.d下有一個S99local,指向/etc/rc.local,裡面的腳本是最後啟動,是以如果自己寫腳本不想按上圖的規則走,可以把腳本寫入該檔案内
chkconfig --add name
#!/bin/bash
#LLLL 表示初始在哪個級别下啟動,-表示都不啟動
# chkconfig: LLLL nn nn
<5>删除:
chkconfig --del name
<6>修改指定的連結類型
chkconfig [--level levels] name <on|off|reset>
--level LLLL: 指定要設定的級别;省略時表示2345
開機啟動卡某服務,重新開機進入init 1,chkconfig SERVER off關閉該服務,開啟裝置後再做檢查
非獨立服務
xinetd管理的服務
<1>service 指令:手動管理服務,
service 服務 start|stop|restart
service --status-all
<2>瞬态(Transient)服務被xinetd程序所管理,平時這些服務不啟動,當有通路請求被xinetd将喚醒服務,通路結束後關閉,适用于用的不多的服務
進入的請求首先被xinetd代理
配置檔案:/etc/xinetd.conf、/etc/xinetd.d/<service>
與libwrap.so檔案連結
用chkconfig控制的服務:
超級守護程序:xinted
xinetd非獨立服務更改服務:/etc/xinetd.d
以下實驗需要關閉防火牆和SELinux,chkconfig iptables off,将第一個/etc/sysconfig/selinux裡将SELINUX=disabled
CentOS啟動1階段被破壞修複:不出現核心選擇菜單,被破壞系統找連接配接主機上的其他裝置找mbr引導,此時沒有cenots的logo閃過
mbr分區446位元組被破壞,有備份進救援模式,切根後dd if=備份目錄 of=目标硬碟 vs=1 count=446
沒有備份的情況
進救援模式後必須切根,grub-install –root-directory=/ /dev/sda,root-directory指的不是root目錄,是boot的父目錄
第二種修複方法:删除引導後未重新開機時,grub回車後輸入root (hd0,0)回車setup (hd0)回車後quit退出,執行完sync多輸入幾次
1.5階段被破壞修複:卡在booting from ……
dd if=/dev/zero of=/dev/sda bs=1 count=12040 seek=512,從mbr512位元組後開始破壞
救援模式切根後grub-install –root-directory=/ /dev/sda
2階段被破壞:
CentOS啟動菜單項:/boot/grub/grub.conf
default:預設第幾個啟動
timeout:幾秒後啟動
splash:背景圖檔,必須是xpm格式,而且還要經過gz壓縮,工具包ImageMagik
passwd:進init 1模式需要先點p輸入密碼,passwd –encrypted密碼經過sha512加密
hiddenmenu:隐藏菜單
title:開機啟動菜單顯示内容
kernel一行必須在initrd一行之上,否則會報錯
/boot/grub/grub.conf被破壞修複
kernel /vmlinuz-(tab補全)
删除/boot/grub目錄:
加載CD光牒救援模式,切根,grub-install /dev/sda,此指令可以修複1階段、1.5階段、2階段
在/boot/grub裡手寫grub.conf,default、title、root、kernel、initrd内容重新開機
删除/boot目錄
進救援模式,切根,挂載CD光牒,修複核心,修複從CD光牒拷貝的isolinux/vmlinuz拷貝到/boot和用mkinitrd /boot/initramfs.img `uname -r`(參數`uname -r`不寫指令無效果)生成initrd,再grub-install /dev/sda生成grub,手工寫/boot/grub/grub.conf
default=0
timeout=5
root (hd0,0)
kernel /vmlinuz-版本号 root=/dev/sda3作業系統的根
initrd /initramfs-版本号
方法二
挂載CD光牒,安裝核心包
/etc/fstab被破壞
救援模式下,blkid還能檢視到各分區,fdisk -l檢視分區大小,之後建立檔案夾并挂載,可以找到根目錄,在挂載目錄下的根的/etc/裡寫一份fstab,舉例
之後退出重進救援模式,讓CD光牒自動再挂在一次
邏輯卷裝的系統,邏輯卷被破壞修複:
進救援模式,lvs檢查lv的大小,激活所有邏輯卷vgchange -ay,之後才可以挂載,繼續寫/etc/fstab,重新開機讓CD光牒加載一次
init程序被破壞,/sbin/init,菜單欄界面點a,輸入root=/init/bash,重新挂載根可讀可寫,之後挂載CD光牒,rpm -ivh /mnt/Package/upstart……
自制linux系統
1、準備新的硬碟,進行分區
2、建立boot檔案夾,将計劃好的分區挂載boot,mount /dev/sdbn /mnt/boot
3、grub-install –root-directory=/mnt /dev/sdb,生成的grub生成到新的系統下
4、拷貝核心檔案vmlinuz和initramfs,編寫grub.conf
内容如下:
timeout=3
title linux
kernel /vmlinuz root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
5、建立根,挂載根,for dir in /*;do mkdir /mnt/root/$dir ;done
6、複制bash和相關庫檔案
7、複制常用指令及其庫檔案
8、配置網卡子產品,locate 網卡驅動 ,複制到/mnt/root/lib
9、bash啟動界面,insmod 網卡驅動目錄,此時目錄變為/root
10、自己加/etc/fstab
/proc目錄
<1>/proc目錄:
核心把自己内部狀态資訊及統計資訊,以及可配置參數通過proc僞檔案系統加以輸出
<2>參數:隻讀:輸出資訊
可寫:可接受使用者指定“新值”來實作對核心某功能或特性的配置
<3>/proc/sys
(1)sysctl指令用于檢視或設定此目錄中諸多參數
sysctl -w path.to.parameter=VALUE
sysctl -w kernel.hostname=mail.magedu.com
(2)echo指令通過重定向方式也可以修改大多數參數的值
echo "VALUE" > /proc/sys/path/to/parameter
echo “websrv” > /proc/sys/kernel/hostname
sysctl指令
<1>sysctl指令:
預設配置檔案:/etc/sysctl.conf
(1)設定某參數
sysctl -w parameter=VALUE
(2)通過讀取配置檔案設定參數
sysctl -p [/path/to/conf_file]
(3)檢視所有生效參數
sysctl -a
<2>常用的幾個參數:
net.ipv4.ip_forward
net.ipv4.icmp_echo_ignore_all
vm.drop_caches,echo 1 > vm/drop_caches 清除緩存
/sys目錄
<1>/sys目錄:
sysfs:為使用者使用的僞檔案系統,輸出核心識别出的各硬體裝置的相關屬性資訊,也有核心對硬體特性的設定資訊;有些參數是可以修改的,用于調整硬體工作特性
udev通過此路徑下輸出的資訊動态為各裝置建立所需要裝置檔案,udev是運作使用者空間程式
專用工具:udevadmin, hotplug
udev為裝置建立裝置檔案時,會讀取其事先定義好的規則檔案,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下
核心編譯
<1>單核心體系設計、但充分借鑒了微核心設計體系的優點,為核心引入子產品化機制
<2>核心組成部分:
kernel: 核心核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE
kernel object: 核心對象,一般放置于
/lib/modules/VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
輔助檔案:ramdisk
initrd
initramfs
核心版本
運作中的核心:
uname指令:
uname - print system information
uname [OPTION]...
-n: 顯示節點名稱
-r: 顯示VERSION-RELEASE
-a:顯示所有資訊
核心子產品指令
lsmod指令:
顯示由核心已經裝載的核心子產品
顯示的内容來自于: /proc/modules檔案
modinfo指令:
顯示子產品的較長的描述資訊
modinfo [ -k kernel ] [ modulename|filename... ]
-n: 隻顯示子產品檔案路徑
-p: 顯示子產品參數
-a: author
-d: description
-l: license
核心子產品管理
<1>modprobe指令:裝載或解除安裝核心子產品
<2>modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]
<3>配置檔案:/etc/modprobe.conf, /etc/modprobe.d/*.conf
<4>modprobe [ -r ] modulename…
編譯核心
前提:
(1)準備好開發環境
(2)擷取目标主機上硬體裝置的相關資訊
(3)擷取目标主機系統功能的相關資訊
例如:需要啟用相應的檔案系統
(4)擷取核心源代碼包
www.kernel.org
開發環境準備
<1>包組(CentOS 6):
Server Platform Development
Development Tools
<2>目标主機硬體裝置相關資訊:
CPU:
cat /proc/cpuinfo
x86info -a
lscpu
硬體裝置
PCI裝置:
lspci
-v
-vv
lsusb
lsblk 塊裝置
了解全部硬體裝置資訊
hal-device:CentOS6
編譯安裝核心示例
<1>解壓包并安裝開發工具tar xf linux-3.10.67.tar.xz -C /usr/src,yum groupinstall “development-tools”
<2>cd /usr/src/linux……,參照系統格式cp /boot/config-`uname -r)`./.config,然後make menuconfig進入圖形選擇界面進行需要的功能選擇
<3>l
<4>cd /usr/src/linux
<5>
<6>m
<7>make menuconfig
<8>make -j 2
<9>make modules_install
<10>make install
<11>reboot
<1>配置核心選項
支援“更新”模式進行配置:make help
(a)make config:基于指令行以周遊的方式配置核心中可配置的每個選項
(b)make menuconfig:基于curses的文本視窗界面
(c)make gconfig:基于GTK (GNOME)環境視窗界面
(d)make xconfig:基于QT(KDE)環境的視窗界面
支援“全新配置”模式進行配置
(a)make defconfig:基于核心為目标平台提供的“預設”配置進行配置
(b)make allyesconfig: 所有選項均回答為“yes“
(c)make allnoconfig: 所有選項均回答為“no“
<2>編譯
全編譯:make [-j #]
編譯核心的一部分功能:
(a)隻編譯某子目錄中的相關代碼
cd /usr/src/linux
make dir/
(b)隻編譯一個特定的子產品
make dir/file.ko
例如:隻為e1000編譯驅動:
make drivers/net/ethernet/intel/e1000/e1000.ko
<3>如何交叉編譯核心:
編譯的目标平台與目前平台不相同
make ARCH=arch_name
<4>要擷取特定目标平台的使用幫助
make ARCH=arch_name help
make ARCH=arm help
<1>在已經執行過編譯操作的核心源碼樹做重新編譯
<2>需要事先清理操作:
make clean:清理大多數編譯生成的檔案,但會保留config檔案等
make mrproper: 清理所有編譯生成的檔案、config及某些備份檔案
make distclean:mrproper、patches以及編輯器備份檔案
解除安裝核心
<1>删除/lib/modules/目錄下不需要的核心庫檔案
<2>删除/usr/src/linux/目錄下不需要的核心源碼
<3>删除/boot目錄下啟動的核心和核心映像檔案
<4>更改grub的配置檔案,删除不需要的核心啟動清單
支援NTFS檔案系統的檔案管理,安裝包名稱:ntfs-3g
systemd:系統啟動和伺服器守護程序管理器,負責在系統啟動或運作時,激活系統自由,伺服器程序和其它程序
systemd新特性
系統引導時實作服務并行啟動
按需啟動守護程序
自動化的服務依賴關系管理
同時采用socket和D-Bus總線式激活服務
系統狀态快照
核心概念:unit
unit表示不同類型的systemd對象,通過配置檔案進行辨別和配置;檔案中主要包含了系統服務、監聽socket、儲存的系統快照以及其它與init相關的資訊
配置檔案:從上往下優先級越來越高,普通運維工程師一般修改第一個目錄,檔案字尾為service
/usr/lib/systemd/system:每個服務最主要的啟動腳本設定,類似于之前的/etc/init.d/
/run/systemd/system:系統執行過程中所産生的服務腳本,比上面目錄優先運作
/etc/systemd/system:管理者建立的執行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運作
Unit類型
<1>Systemctl –t help 檢視unit類型
<2>Service unit: 檔案擴充名為.service, 用于定義系統服務
<3>Target unit: 檔案擴充名為.target,用于模拟實作運作級别
<4>Device unit: .device, 用于定義核心識别的裝置
<5>Mount unit: .mount, 定義檔案系統挂載點
<6>Socket unit: .socket, 用于辨別程序間通信用的socket檔案,也可在系統啟動時,延遲啟動服務,實作按需啟動
<7>Snapshot unit: .snapshot, 管理系統快照
<8>Swap unit: .swap, 用于辨別swap裝置
<9>Automount unit: .automount,檔案系統的自動挂載點
<10>Path unit: .path,用于定義檔案系統中的一個檔案或目錄使用,常用于當檔案系統變化時,延遲激活服務,如:spool 目錄
特性
<1>關鍵特性:
基于socket的激活機制:socket與服務程式分離
基于d-bus的激活機制:
基于device的激活機制:
基于path的激活機制:
系統快照:儲存各unit的目前狀态資訊于持久儲存設備中
向後相容sysv init腳本
<2>不相容:
systemctl指令固定不變,不可擴充
非由systemd啟動的服務,systemctl無法與之通信和控制,總之如果想要讓systemd管理該服務,就需要安裝其規則,比如啟動apache,如果apachectl start啟動服務,systemd便無法管理,如果用systemctl啟動apache,則後續可以用systmed進行管理
管理服務
<1>管理系統服務:
CentOS 7: service unit
注意:能相容早期的服務腳本
<2>指令:systemctl COMMAND name.service
<3>啟動:service name start ==> systemctl start name.service
<4>停止:service name stop ==> systemctl stop name.service
<5>重新開機:service name restart ==> systemctl restart name.service
<6>狀态:service name status ==> systemctl status name.service
<7>條件式重新開機:已啟動才重新開機,否則不做操作
service name condrestart ==> systemctl try-restart name.service
<8>重載或重新開機服務:先加載,再啟動
systemctl reload-or-restart name.service
<9>重載或條件式重新開機服務:
systemctl reload-or-try-restart name.service
<10>禁止自動和手動啟動:
systemctl mask name.service
<11>取消禁止:
systemctl unmask name.service
服務檢視
<1>檢視某服務目前激活與否的狀态:
systemctl is-active name.service
<2>檢視所有已經激活的服務:
systemctl list-units --type|-t service
<3>檢視所有服務:
systemctl list-units --type service --all|-a
<4>chkconfig指令的對應關系:
<5>設定某服務開機自啟:
chkconfig name on ==> systemctl enable name.service
<6>設定某服務開機禁止啟動:
chkconfig name off ==> systemctl disable name.service
<7>檢視所有服務的開機自啟狀态:
chkconfig --list ==> systemctl list-unit-files --type service
<8>用來列出該服務在哪些運作級别下啟用和禁用
chkconfig sshd –list ==>
ls /etc/systemd/system/*.wants/sshd.service
<9>檢視服務是否開機自啟:
systemctl is-enabled name.service
<10>其它指令:
檢視服務的依賴關系:
systemctl list-dependencies name.service
<11>殺掉程序:
systemctl kill unitname
服務狀态
<1>systemctl list-unit-files --type service --all顯示狀态
<2>loaded:Unit配置檔案已處理
<3>active(running):一次或多次持續處理的運作
<4>active(exited):成功完成一次性的配置
<5>active(waiting):運作中,等待一個事件
<6>inactive:不運作
<7>enabled:開機啟動
<8>disabled:開機不啟動
<9>static:開機不啟動,但可被另一個啟用的服務激活
systemctl 指令示例
<1>顯示所有單元狀态
systemctl 或 systemctl list-units
<2>隻顯示服務單元的狀态
systemctl --type=service
<3>顯示sshd服務單元
systemctl –l status sshd.service
<4>驗證sshd服務目前是否活動
systemctl is-active sshd
<5>啟動,停止和重新開機sshd服務
systemctl start sshd.service
systemctl stop sshd.service
systemctl restart sshd.service
<6>重新加載配置
systemctl reload sshd.service,編寫完服務後用此項啟動
<7>列出活動狀态的所有服務單元
systemctl list-units --type=service
<8>列出所有服務單元
systemctl list-units --type=service --all
<9>檢視服務單元的啟用和禁用狀态
systemctl list-unit-files --type=service
<10>列出失敗的服務
systemctl --failed --type=service
<11>列出依賴的單元
systemctl list-dependencies sshd
<12>驗證sshd服務是否開機啟動
systemctl is-enabled sshd
<13>禁用network,使之不能自動啟動,但手動可以
systemctl disable network
<14>啟用network
systemctl enable network
<15>禁用network,使之不能手動或自動啟動
systemctl mask network
<16>啟用network
systemctl unmask network
service檔案格式
<1>/etc/systemd/system:系統管理者和使用者使用/usr/lib/systemd/system:發行版打包者使用
<2>以 “#” 開頭的行後面的内容會被認為是注釋
<3>相關布爾值,1、yes、on、true 都是開啟,0、no、off、false 都是關閉
<4>時間機關預設是秒,是以要用毫秒(ms)分鐘(m)等須顯式說明
<5>service unit file檔案通常由三部分組成:
(1)[Unit]:定義與Unit類型無關的通用選項;用于提供unit的描述資訊、unit行為及依賴關系等
(2)[Service]:與特定類型相關的專用選項;此處為Service類型
(3)[Install]:定義由“systemctl enable”以及"systemctl disable“指令在實作服務啟用或禁用時用到的一些選項
<6>Unit段的常用選項:
<7>Description:描述資訊
<8>After:定義unit的啟動次序,表示目前unit應該晚于哪些unit啟動,其功能與Before相反
<9>Requires:依賴到的其它units,強依賴,被依賴的units無法激活時,目前unit也無法激活
<10>Wants:依賴到的其它units,弱依賴
<11>Conflicts:定義units間的沖突關系
<12>Service段的常用選項:
<13>Type:定義影響ExecStart及相關參數的功能的unit程序啟動類型
(1)simple:預設值,這個daemon主要由ExecStart接的指令串來啟動,啟動後常駐于記憶體中
(2)forking:由ExecStart啟動的程式透過spawns延伸出其他子程式來作為此daemon的主要服務。原生父程式在啟動結束後就會終止
(3)oneshot:與simple類似,不過這個程式在工作完畢後就結束了,不會常駐在記憶體中
(4)dbus:與simple類似,但這個daemon必須要在取得一個D-Bus的名稱後,才會繼續運作.是以通常也要同時設定BusNname= 才行
(5)notify:在啟動完成後會發送一個通知消息。還需要配合 NotifyAccess 來讓 Systemd 接收消息
(6)idle:與simple類似,要執行這個daemon必須要所有的工作都順利執行完畢後才會執行。這類的daemon通常是開機到最後才執行即可的服務
運作級别
<1>target units:
unit配置檔案:.target,和runlevel相似
ls /usr/lib/systemd/system/*.target
systemctl list-unit-files --type target --all
<2>運作級别:
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
<3>檢視依賴性:
systemctl list-dependencies graphical.target
級别切換:init N ==> systemctl isolate name.target
systemctl isolate multi-user.target
注:隻有/lib/systemd/system/*.target檔案中AllowIsolate=yes 才能切換(修改檔案需執行systemctl daemon-reload才能生效)
<4>檢視target:
runlevel ;who -r
systemctl list-units --type target
<5>擷取預設運作級别:
/etc/inittab ==> systemctl get-default
<6>修改預設級别:
/etc/inittab ==> systemctl set-default name.target
systemctl set-default multi-user.target
ls –l /etc/systemd/system/default.target
CentOS7開機進入模式 systemctl set-default multi-user.target 切換init 3
systemctl set-default graphical.target 切換init 5
其它指令
<1>切換至緊急救援模式:
systemctl rescue
<2>切換至emergency模式:
systemctl emergency
<3>其它常用指令:
傳統指令init,poweroff,halt,reboot都成為
systemctl的軟連結
關機:systemctl halt、systemctl poweroff
重新開機:systemctl reboot
挂起:systemctl suspend
休眠:systemctl hibernate
休眠并挂起:systemctl hybrid-sleep
CentOS7引導順序
<1>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需要的服務
設定核心參數
設定核心參數,隻影響當次啟動
啟動時,在linux16行後添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=rescue.target
rescue.target 比emergency 支援更多的功能,例如日志等
systemctl default 進入預設target
啟動排錯
<1>檔案系統損壞
先嘗試自動修複,失敗則進入emergency shell,提示使用者修複
<2>在/etc/fstab不存在對應的裝置和UUID
等一段時間,如不可用,進入emergency shell
<3>在/etc/fstab不存在對應挂載點
systemd 嘗試建立挂載點,否則提示進入emergency shell.
<4>在/etc/fstab不正确的挂載選項
提示進入emergency shell
破解CentOS7的root密碼
方法一:
<1>啟動時任意鍵暫停啟動
<2>按e鍵進入編輯模式
<3>将光标移動linux16開始的行,添加核心參數rd.break
<4>按ctrl-x啟動
<5>mount –o remount,rw /sysroot
<6>chroot /sysroot
<7>passwd root
<8>touch /.autorelabel
<9>exit
<10>reboot
<3>将光标移動linux16開始的行,改為rw init=/sysroot/bin/sh
<5>chroot /sysroot
<6>passwd root
<7>touch /.autorelabel
<8>exit
<9>reboot
修複GRUB2
<1>GRUB“the Grand Unified Bootloader”
引導提示時可以使用指令行界面
可從檔案系統引導
<2>主要配置檔案 /boot/grub2/grub.cfg
<3>修複配置檔案
grub2-mkconfig > /boot/grub2/grub.cfg
<4>修複grub
grub2-install /dev/sda BIOS環境
grub2-install UEFI環境
<5>調整預設啟動核心
vim /etc/default/grub
GRUB_DEFAULT=0
grub2-setpasswd輸入密碼,生成/boot/grub2/usere.cfg,給grub界面加入密碼
grub2目錄: /boot/grub2,配置檔案在此目錄下的grub.cfg
還原grub2配置檔案:grub2-mkconfig > /boot/grub2/grub.cfg
删除核心
删除核心目錄
/lib/modules/帶有核心版本的目錄
grub2-mkconfig -o /boot/grub2/grub.cfg重新生成grub配置檔案
CentOS7 /boot删除修複:
切根
挂載CD光牒
安裝核心包:rpm -ivh /CD光牒目錄/Packakge/kernel-……,之後sync同步多次
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
insmod xfs
set root=(hd0,1)
linux16 /vm(tab補全) root=/dev/sda selinux=0