第15章,系統啓動和內核管理

更多內容請點擊: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

相關文章
相關標籤/搜索