天天看點

系統啟動和核心管理

                                        系統啟動和核心管理

-----------------------------------------------------------------------------------------------------------------------------------------------

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

繼續閱讀