linux啓動流程詳解、破解root密碼、添加服務腳本


1.Linux的組成linux

    kernel+rootfsshell

    kernel:進程管理、內存管理、網絡管理、安全管理、文件系統管理、驅動程序c#

    rootfs:程序和glibccentos

        庫:函數集合,function,調用接口(頭文件負責描述)緩存

            過程調用:procedure  ,無返回值安全

            結果調用:functionbash

        程序:二進制文件網絡

2.內核設計流派ide

        單內核(monolithic kernel):Linux模塊化

            把全部功能集成於同一個程序

        微內核(micro kernel):Windows, Solaris

            每種功能使用一個單獨子系統實現

3.內核特色及組成

    支持模塊化:.ko(內核對象)

    支持內核模塊的裝載和卸載

4.內核的組成

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

                      僞文件系統:ramdisk

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

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

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

5.centos6啓動流程

(1)主動讀取BIOS,經過CMOS加載硬件信息 ,並進行POST,指定第一個可啓動的設備

            ROM:BIOS,Basic Input and Output System,保存着計算機系統最重要的基本輸入輸出程序,系統信息設置,開機加電自檢程序

            RAM:保存各項參數的設定

(2)讀取第一個可啓動設備MBR的引導加載程序(grub)的啓動信息

        <1>MBR:  446 boot loader  64:分區表  2 :55aa

                BIOS經過硬件的INT13中斷功能來讀取MBR的

        <2>Windows:ntloader  僅是啓動OS

               Linux:   提供菜單;  轉交系統控制權;  直接指向內核文件

                        LILO:LInuxLOader

                        GRUB: GRandUnified Bootloader

                                primary boot loader:1st stage,1.5stage

                                secondary boot loader:2 stage,分區文件


                    bootloader的1stage是在MBR內進行的,1.5stage是再0面0磁道0扇區的後續扇區,2stage是在/boot分區上邊

                1stage是 尋找/boot分區的文件系統驅動

                1.5stage內就是/boot分區文件系統驅動,識別/boot分區

                2stage是/boot分區相關操做

                /boot/grub下的stage類文件(除了stage2)都是備份


        <3>ramdisk:使用緩存或緩衝來加速對磁盤上文件的訪問

                centos5:initrd  工具程序:mkinitrd

                centos6:initramfs   工具程序:mkinitrd,dracut\


                本身建立initramfs文件

                    mkinitrd [-v] [-with=模塊名稱] initrd文件名 內核版本

                        -v 顯示mkinitrd的過程

                        --with=[模塊名稱]:模塊名稱指的是模塊的名字,不需填寫文件名

                    若是在救援模式下,須要切根,由於救援模式下好多庫文件不存在


        <4>解壓縮內核到內存中,

                加載可識別的全部硬件設備(以本身的功能從新檢查一次硬件,不必定適用BIOS的檢測結果)

                加載硬件驅動

                以只讀方式掛載根系統

                運行用戶空間的第一個程序:/sbin/init

        <5>內核內容

        

wKioL1fXx0XwqAJ9AAA1mdK5ajA507.png

(3)內核執行init程序,獲取默認運行信息

         <1>init程序類型:

                SysV: init, CentOS 5以前

                        配置文件:/etc/inittab

                Upstart: init,CentOS6

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

                Systemd:systemd, CentOS 7

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

                                        /etc/systemd/system

            <2>運行級別

                    0  halt(系統直接關機)

                    1 單用戶模式下,用在系統出問題時的維護

                    2 相似下面的runlevel 3,但無NFS服務

                    3 純文本模式

                    4  系統保留功能

                    5 字符界面

                    6 從新啓動


                 切換等級:init #

                 查看等級: runlevel who -r

        <3>/etc/inittab文件相關知識

            每一行定義一種action以及與之對應的process

            id : runlevel : action : process

                id:表明init的主要工做選項,只是簡單表明說明

                runlevel:在那些等級下運行

                action:  initdefault:表明默認的runlevel設置值

                sysinit:表明系統初始化的操做選項

                ctrlaltdel:表明ctrl+alt+del三個按鍵是否能夠從新啓動

                wait:表明後面設置的命令項目必需要執行完畢才能繼續下面的其餘操做

                respawn:表明後邊字段的命令能夠無限制的從新啓動

                process:能夠進行的命令

                例如:

                    ca::ctrlaltdel:/sbin/shutdown -t3 -r now

                    id:3:initdefault:

                    si::sysinit:/etc/rc.d/rc.sysinit

                    l0:0:wait:/etc/rc.d/rc0

                    l1:1:wait:/etc/rc.d/rc1

                    1:2345:respawn:/sbin/mingetty tty

                    x:5:resawn:/etc/prefdm -nodaemon  x window 則是這行決定的

        <4>/etc/init/*.conf

(4)init程序執行/etc/rc.d/rc.sysinit文件

        取得網絡環境與主機類型:/etc/sysconfig/network

        設置顯示與啓動過程當中的歡迎界面(textbanner)

        檢查根文件系統,並以讀寫方式從新掛載根文件系統

        掛載/etc/fstab文件中定義的文件系統

        設置系統時間:讀入/etc/sysconfig/clock設置值  修改時區的話,把/user/share/zoneinfo/Asia  /Shanghai複製到/etc/local下

        激活udev和selinux

        激活swap設備

        初始化軟件磁盤陣列、初始化lvm文件系統、、磁盤配額

        加載內核相關設置:/etc/sysctl.conf

        用戶自定義模塊加載:/etc/sysconfig/modules.conf設置

        清除啓動過程當中產生的臨時文件

        將啓動相關信息加載到/var/log/dmesg中

(5)啓動核心的外掛模塊/etc/modeprobe.conf文件

(6)init執行各個批處理文件

        <1>各個運行級別腳本所在目錄:

            /etc/rc.d/rc 0.d

            /etc/rc.d/rc 1.d

            /etc/rc.d/rc 2.d

            /etc/rc.d/rc 3.d

            /etc/rc.d/rc 4.d

            /etc/rc.d/rc 5.d

            /etc/rc.d/rc 6.d

         <2>腳本文件運行規則:

                進入到某個運行級別的腳本目錄/etc/rc.d/rc?.d

                k*:  k##*: ##運行次序;數字越小,越先運行;數字越小的服務,一般爲依賴到別的服務

                s*:  S##*:##運行次序;數字越小,越先運行;數字越小的服務,一般爲被依賴到的服務


                s開頭的文件,運行

                k開頭的文件,關閉

        <3>chkconfig命令詳解

                查看服務所在級別的啓動或關閉情形

                    chkconfig [--list] name

                添加服務給chkconfig管理

                SysV的的服務腳本放置於/etc/init.d

                    chkconfig --add name

                服務腳本格式信息

                        #!/bin/bash

                        #LLLL 表示初始在哪一個級別下運行  「-」表示都不啓動

                        # LLLL mm nn  mm表示啓動次序  nn表示古幣次序

                刪除

                        chkconfig --del name

                修改制定的連接類型

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

                        --level LLLL:省略是表示2345

                圖形化界面ntsysv


(7)init執行/etc/rc.d/rc.local

        正常狀況下,最後啓動一個服務S99local沒有連接至/etc/init.d下的腳本,而是指向了/etc/rc.d/rc.local腳本

        不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中

(8)執行/bin/login程序,等待用戶登陸

            1:2345:respawn:/usr/sbin/mingettytty1

            2:2345:respawn:/usr/sbin/mingettytty2

            ...

            6:2345:respawn:/usr/sbin/mingettytty6

            mingetty會自動調用login程序

            x:5:respawn:/etc/X11/prefdm -nodaemon

(9)登陸後以shell控制主機

            BIOS加載硬件信息--》post加電自檢--》加載MBR裏grub信息--》stage1.5--》stage2--》initramfs--》    rootfs-->init-->/etc/inittab-->設置默認運行級別-->初始化/etc/rc.d/rc.sysinit-->/etc/rc.d/rc#.d-->/etc/rc.local


7.使用gzip -d 解壓縮gz格式文件,此文件必須是.gz後綴,要不沒法解壓縮


8.破解centos5的root口令

    (1)進入centos5 的grub界面,按a修改內核選項



wKioL1fX5YzAy6SIAACZ2GlTVsg520.png

    (2)在命令行尾部追加1 或 S 或single,而後按enter鍵保存修改

wKiom1fX5zLjf76sAABbTATPxu0732.png

    (3)進入以下命令行模式,用passwd root  修改密碼

wKiom1fX502yDB18AAAqKgwt8is227.png

    (4)從新啓動,用剛纔修改的密碼登陸系統

wKiom1fX53fT1lb0AAcvjWNpwco385.png


9.編寫centos5服務腳本

    (1)在/root/bin寫編寫腳本testsrv,內容以下

wKioL1fX6OeiqWZUAAAlGjmCq-I204.png

    (2)在/root/bin和/etc/init.d目錄下分別執行chkconfig --add testsrv發現沒法成功加載testsrv服務wKiom1fX6TyQHevlAAAu6cr-KMs317.png


把腳本複製到/etc/init.d下,執行上述命令,發現能夠實現

wKiom1fX6X3ineuyAABP87H8FNY488.png

    (3)

在/etc/rc.d/rc3.d下查看testsrv文件時什麼字母開頭的

wKiom1fX6aOiknkQAAARNv3-Axo134.png

發現此命令在level 3啓動等級下,是須要開啓的服務,與設定一致

相關文章
相關標籤/搜索