shell腳本實例及Linux系統(tǒng)啟動過程

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

~]# cat add_user.sh
#!/bin/bash
SCRIPT=$(basename $0)
function usage(){
    echo -e "\nUSAGE: $SCRIPT user_name home_dir \n"
    exit 1
}
if [ $# -ne 2 ] ; then
    usage
fi
id $1 &> /dev/null
if [ $? -eq 1 ] ; then
   if [ -d $2 ] ; then
      mkdir -p $2
   fi
   useradd $1 -d $2
fi

~]# bash add_user.sh magedu /www

~]# id magedu
uid=1000(magedu) gid=1000(magedu) groups=1000(magedu)

# 切換到 magedu 用戶
~]# su - magedu
Last login: Sat Feb  8 21:48:01 CST 2020 on pts/0
[magedu@localhost ~]$ pwd
/www

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

# 首先需要安裝 expect
~]# yum install expect -y
~]# cat ssh-expect.sh 
#!/usr/bin/expect -f

set timeout 20
set hostname [lindex $argv 0]
set username [lindex $argv 1]
set passwd   [lindex $argv 2]

spawn ssh -l $username $hostname
expect {
   "(yes/no)" {
       send "yes\n";
       exp_continue
   }
   "password:" {
       send "$passwd\n";
   }
}
interact

# 給腳本賦予可執(zhí)行權(quán)限
~]# chmod u+x ssh-expect.sh 

# 執(zhí)行腳本
~]# ./ssh-expect.sh  localhost root root
spawn ssh -l root localhost
root@localhost's password: 
Last login: Sun Feb  9 22:01:22 2020 from 192.168.58.1
[root@localhost ~]# 

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

1.BIOS,(Basic Input/Output System) 基本輸入輸出系統(tǒng),該系統(tǒng)存儲于主板的ROM芯片上,計算機在開機時,會最先讀取該系統(tǒng),然后會有一個加電自檢過程, 這個過程其實就是檢查CPU和內(nèi)存,計算機最基本的組成單元(控制器、運算器和存儲器),還會檢查其他硬件,若沒有異常就開始加載BIOS程序到內(nèi)存當(dāng)中。

2.MBR,(Master Boot Record) 主引導(dǎo)記錄,MBR存儲于磁盤的頭部,大小為512bytes 其中,446bytes用于存儲BootLoader程序,64bytes用于存儲分區(qū)表信息,最后2bytes用于MBR的有效性檢查。

3.GRUB,(Grand Unified Bootloader) 多系統(tǒng)啟動程序,其執(zhí)行過程可分為三個步驟:

* Stage1:這個其實就是MBR,它的主要工作就是查找并加載第二段Bootloader程序(stage2),但系統(tǒng)在沒啟動時,MBR根本找不到文件系統(tǒng),也就找不到stage2所存放的位置,因此,就有了stage1_5  
* Stage1_5:該步驟就是為了識別文件系統(tǒng)
* Stage2:GRUB程序會根據(jù)/boot/grub/grub.conf文件查找Kernel的信息,然后開始加載Kernel程序,當(dāng)Kernel程序被檢測并在加載到內(nèi)存中,GRUB就將控制權(quán)交接給了Kernel程序。 

4.Kernel,內(nèi)核,Kernel是Linux系統(tǒng)最主要的程序,實際上,Kernel的文件很小,只保留了最基本的模塊,并以壓縮的文件形式存儲在硬盤中,當(dāng)GRUB將Kernel讀進內(nèi)存,內(nèi)存開始解壓縮內(nèi)核文件。講內(nèi)核啟動,應(yīng)該先講下initrd這個文件, initrd(Initial RAM Disk),它在stage2這個步驟就被拷貝到了內(nèi)存中,這個文件是在安裝系統(tǒng)時產(chǎn)生的,是一個臨時的根文件系統(tǒng)(rootfs)。 因為Kernel為了精簡,只保留了最基本的模塊,因此,Kernel上并沒有各種硬件的驅(qū)動程序,也就無法識rootfs所在的設(shè)備, 故產(chǎn)生了initrd這個文件,該文件裝載了必要的驅(qū)動模塊,當(dāng)Kernel啟動時,可以從initrd文件中裝載驅(qū)動模塊,直到掛載真正的rootfs,然后將initrd從內(nèi)存中移除。 Kernel會以只讀方式掛載根文件系統(tǒng),當(dāng)根文件系統(tǒng)被掛載后,開始裝載第一個進程(用戶空間的進程),執(zhí)行/sbin/init,之后就將控制權(quán)交接給了init程序 Init

5.init,初始化,顧名思義,該程序就是進行OS初始化操作,實際上是根據(jù)/etc/inittab(定義了系統(tǒng)默認運行級別)設(shè)定的動作進行腳本的執(zhí)行   第一個被執(zhí)行的腳本為/etc/rc.d/rc.sysinit,這個是真正的OS初始化腳本,簡單講下這個腳本的任務(wù)(可以去看看實際腳本,看看都做了什么):

1、激活udev和selinux;       
2、根據(jù)/etc/sysctl.conf文件,來設(shè)定內(nèi)核參數(shù);   
3、設(shè)定系統(tǒng)時鐘;   
4、裝載硬盤映射;   
5、啟用交換分區(qū);   
6、設(shè)置主機名;   
7、根文件系統(tǒng)檢測,并以讀寫方式重新掛載根文件系統(tǒng);  
8、激活RAID和LVM設(shè)備;  
9、啟用磁盤配額;   
10、根據(jù)/etc/fstab,檢查并掛載其他文件系統(tǒng);  
11、清理過期的鎖和PID文件 執(zhí)行完后,根據(jù)配置的啟動級別,執(zhí)行對應(yīng)目錄底下的腳本,最后執(zhí)行/etc/rc.d/rc.local這個腳本,至此,系統(tǒng)啟動完成。 

6.Runlevel ,運行級別,不同的級別會啟動的服務(wù)不一樣,init會根據(jù)定義的級別去執(zhí)行相應(yīng)目錄下的腳本,Linux的啟動級別分為以下幾種

0:關(guān)機模式
1:單一用戶模式(直接以管理員身份進入)
2:多用戶模式(無網(wǎng)絡(luò))
3:多用戶模式(命令行)
4:保留
5:多用戶模式(圖形界面)
6:重啟

在不同的運行級別下,/etc/rc.d/rc這個腳本會分別執(zhí)行不同目錄下的腳本

Run level 0 – /etc/rc.d/rc0.d/ 
Run level 1 – /etc/rc.d/rc1.d/ 
Run level 2 – /etc/rc.d/rc2.d/ 
Run level 3 – /etc/rc.d/rc3.d/ 
Run level 4 – /etc/rc.d/rc4.d/ 
Run level 5 – /etc/rc.d/rc5.d/ 
Run level 6 – /etc/rc.d/rc6.d/

這些目錄下的腳本只有K和S開頭的文件,K開頭的文件為開機需要執(zhí)行關(guān)閉的服務(wù),S開頭的文件為開機需要執(zhí)行開啟的服務(wù)。

4、破解centos7 密碼。

  1. 進入系統(tǒng)啟動頁面 按 e 鍵,進入grub編輯頁面
reset-passwd-01.png
  1. 找到 linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 所在行,在其后添加 init /bin/sh ,然后 ctrcl + x 鍵 啟動單用戶模式
reset-passwd-02.png
  1. 重新掛載根目錄、修改密碼、 創(chuàng)建 /.autorelabel 文件,重啟
reset-passwd-03.png
  1. 用修改后的密碼登錄
reset-passwd-04.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)容