linux系統(tǒng)啟動和內(nèi)核管理

1、編寫腳本,接受二個位置參數(shù),magedu和/www,判斷系統(tǒng)是否有magedu,如果沒有則自動創(chuàng)建magedu用戶,并自動設(shè)置家目錄為/www

[root@localhost scripts]# vim magedu.sh       
#!/bin/bash
#
USERNAME=$1
USERHOME=$2
if [ $# -ne 2 ];then
echo -e "please give me two arguments,one is username,one is u
serhome\n" 
fi
if [ $# -eq 2 ];then
        if id $USERNAME &> /dev/null;then
                echo "$USERNAME is exist"
                exit 3
        else
            useradd -m -d $USERHOME $USERNAME
            grep "$USERNAME" /etc/passwd
        fi
fi

~                                                             
                                                            
"magedu.sh" 17L, 316C written
[root@localhost scripts]# bash magedu.sh magedu /www
magedu:x:1001:1001::/www:/bin/bash

2、使用expect實現(xiàn)自動登錄系統(tǒng)。

#首先用expect實現(xiàn)自動登陸
#!/usr/bin/expect
spawn ssh root@192.168.44.129
expect {
 "yes/no" {send "yes\n";exp_continue}
 "password" {send "magedu\n"}
}
interact

#expect腳本
[root@localhost scripts]# vim expect2.ext    
#!/usr/bin/expect
#expect中的變量聲明要用set
set ip 192.168.44.129
set user root
set password magedu
set timeout 10
spawn ssh $user@$ip
expect {
   "yes/no" {send "yes\n";exp_continue}
   "password" {send "$password\n"}
}
interact
~                                                             
                                                    
"expect2.ext" 12L, 207C written             
[root@localhost scripts]# expect expect2.ext 
spawn ssh root@192.168.44.129
root@192.168.44.129's password: 
Last login: Sat Mar 28 20:43:25 2020 from 192.168.44.10

#如何在shell中調(diào)用expect實現(xiàn)自動登陸
#!/bin/bash
#
ip=$1
user=$2
password=$3
expect <<EOF
set timeout 20
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue}
"password" { send "$password\n" }
}
#expect eof一定要加,要不然會出錯
expect eof
EOF

3、簡述linux操作系統(tǒng)啟動流程

首先來說一說操作系統(tǒng)的啟動流程,主要分為硬件層次啟動,BootLoader層次啟動和操作系統(tǒng)層次啟動。先來說一說硬件層次的啟動過程,這也是所有計算機通用的啟動過程:

硬件層次啟動過程

1. POST過程

給計算機通電,按下電源開關(guān),主板上電,讀取CMOS上的BIOS程序,做如下動作:

? A: 檢測硬件配置信息,完成硬件初始化;

? B:根據(jù)BIOS設(shè)置好的啟動順序去尋找啟動設(shè)備,并發(fā)起硬中斷INT13;

2. MBR過程

根據(jù)在BIOS設(shè)置中設(shè)置好的啟動設(shè)備,例如:第一啟動順序為硬盤,這時候硬中斷INT13直接讀取

其硬盤中第一個扇區(qū)里代碼,這個第一個扇區(qū)中的代碼真的很重要,沒有它你的硬盤分區(qū)找不到,你的硬盤就不能啟動操作系統(tǒng)。這小小的512字節(jié)的MBR的主要內(nèi)容是這樣的:

A:446字節(jié)的引導(dǎo)記錄,也稱作為Boot Loader

B:64字節(jié)的分區(qū)表,Partion Table

C:55AA 狀態(tài)位,也可以稱為停止位,稱為狀態(tài)位是因為,沒有55AA就不被識別為MBR,55AA也標識了MBR到此為止。

到此整個硬件層次啟動過程就結(jié)束了,接下來就是要啟動Boot Loader了。

BootLoader層次啟動過程

在硬件層次這個446字節(jié)的BootLoader啟動代碼里,不需要裝載任何驅(qū)動程序就能執(zhí)行;BootLoader主要有以下幾種Grub、LiLo和spfdisk,BootLoader是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核做好一切準備。最初的BootLoader的主要功能:

A:引導(dǎo)至另一個loader或內(nèi)核;

到了后來硬盤接口,從IDE,演變成SCSI,SATA,USB等,而其文件系統(tǒng)也發(fā)生了變化,windows的

fat16/32 ntfs,linux的ext2 ext3 ext4 xfs等等。446字節(jié)代碼了,太小了,只有將其在后續(xù)的文件系統(tǒng)里找個地方存放,所以有了stage1,stage1_5,stage2階段:

stage1階段:就可以看成這446字節(jié)的代碼;

stage1_5階段:其實就是loader所在分區(qū)存放的的驅(qū)動程序;

stage2階段:真正的Loader代碼,主要是為了加載內(nèi)核;

所以一個完整的BootLoader的功能有:

A:引導(dǎo)至另一個loader或內(nèi)核;

B:提供菜單選擇功能;

C:管理菜單;

D:加載內(nèi)核,以及內(nèi)核所在文件系統(tǒng)驅(qū)動;

操作系統(tǒng)層次啟動

BootLoader將控制權(quán)轉(zhuǎn)交給操作系統(tǒng)或者內(nèi)核以后,其基本需要如下過程,才能將一個真正意義上的操作系統(tǒng)啟動完畢:

A:硬件初始化,加載各硬件所需驅(qū)動;

B:運行初始化操作系統(tǒng)過程,例如:IP地址,主機名,開機啟動那些服務(wù)等等。

C:提供用戶交互界面。

有了上述的鋪墊,我們再來說一說Linux的啟動過程

1、POST : 加電自檢

2、加載BootLoader

linux系統(tǒng)里BootLoader就是GRUB,C6的GRUB0.97程序是,C7是GRUB2.0

[root@centos6 ~]# rpm -qi grub
Name        : grub                         Relocations: (not relocatable)
Version     : 0.97                              Vendor: CentOS
Release     : 99.el6                        Build Date: Thu 23 Mar 2017 08:34:51 PM CST
Install Date: Mon 27 Jan 2020 11:44:13 AM CST      Build Host: c1bm.rdu2.centos.org
Group       : System Environment/Base       Source RPM: grub-0.97-99.el6.src.rpm
Size        : 2496968                          License: GPLv2+
Signature   : RSA/SHA1, Thu 23 Mar 2017 11:03:24 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/grub/
Summary     : Grand Unified Boot Loader.
Description :
GRUB (Grand Unified Boot Loader) is an experimental boot loader
capable of booting into most free operating systems - Linux, FreeBSD,
NetBSD, GNU Mach, and others as well as most commercial operating
systems.
#c7 GRUB2.X
[root@centos7 scripts]# rpm -qi grub2
Name        : grub2
Epoch       : 1
Version     : 2.02
Release     : 0.2.10.el7.centos.1
Architecture: x86_64
Install Date: Mon 27 Jan 2020 08:03:27 PM CST
Group       : System Environment/Base
Size        : 7390102
License     : GPLv3+
Signature   : RSA/SHA256, Fri 04 Jul 2014 09:46:10 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : grub2-2.02-0.2.10.el7.centos.1.src.rpm
Build Date  : Tue 01 Jul 2014 12:17:46 AM CST
Build Host  : kbuilder.dev.centos.org
Relocations : (not relocatable)
URL         : http://www.gnu.org/software/grub/
Summary     : Bootloader with support for Linux, Multiboot and more
Description :
The GRand Unified Bootloader (GRUB) is a highly configurable and customizable
bootloader with modular architecture.  It support rich varietyof kernel formats,
file systems, computer architectures and hardware devices.  This subpackage
provides support for PC BIOS systems.

stage1: 加載Bootloader的主程序(位于MBR中)用于加載stage 1.5的代碼;

? stage1.5: 位于MBR之后的扇區(qū),讓statge1中的bootloader能夠識別stage2所在的分區(qū)文件系統(tǒng);

? stage2:通過Bootloader加載所有的配置文件及相關(guān)參數(shù),這些參數(shù)都位于磁盤/boot/grub中;

3、內(nèi)核初始化

? 此時BootLoader需要將內(nèi)核程序加載至內(nèi)存,并進行解壓,展開,控制權(quán)也移交給內(nèi)核;內(nèi)核需要檢測硬件設(shè)備,并加載硬件驅(qū)動;但是內(nèi)核程序本身也是放在硬盤的/boot分區(qū)上,這就需要先加載硬盤驅(qū)動;

? 此時就需要一個臨時根文件系統(tǒng)代替一個真正的文件系統(tǒng)行使權(quán)力,即initrd. Bootloader會將initrd程序加載至內(nèi)存,initrd會模擬出一個虛擬的根文件系統(tǒng),這樣就可以加載硬件驅(qū)動等啟動過程中需要的程序,加載完成后,并完成根切換;然后內(nèi)核運行用戶空間第一個程序/sbin/init ,至此,系統(tǒng)將交由init進行管理;

4、init 初始化

? init 主要是進行軟件環(huán)境初始化,它會讀取配置文件/init/inittab(cent5/6)讀取默認運行級別;運行 /etc/rc.d/rc.sysinit 進行系統(tǒng)初始化;關(guān)閉相應(yīng)級別的需要停止的服務(wù),啟動對應(yīng)級別下需要開啟的服務(wù)--->設(shè)置登錄終端;整個啟動過程如圖所示:

clipboard.png

4、破解centos7 密碼

方法1

a. 啟動時任意鍵暫停啟動


image-20200416134607543.png

b.按e鍵進入編輯模式,將光標移動linux16開始的行,添加內(nèi)核參數(shù)rd.break,按ctrl-x啟動


image-20200416134648031.png

image-20200416134852853.png

c.重新掛在真正的根mount –o remount,rw /sysroot 并且切換到根里chroot /sysroot
image-20200416135025261.png

d.修改密碼重啟即可。

方法2

同樣的方法,只不過在linux16開始的行,改為rw init=/sysroot/bin/sh,也就是相當于
mount –o remount,rw /sysroot 這一步。


image-20200416140007113.png

image-20200416140023593.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容