第九周 小練習

2022-04-29 15:51:10 字數 3949 閱讀 7419

1、編寫指令碼,接受二個位置引數,magedu和/www,判斷系統是否有magedu,如果沒有則自動建立magedu使用者,並自動設定家目錄為/www

(1)建立判斷使用者是否存在指令碼

#!/bin/bash

#if [ "$1" == "magedu" -a "$2" == "/www" ];then

if grep "^$1" /etc/passwd &> /dev/null;then

echo "user $1 exists."

else

useradd -d $2 $1

echo $1 | passwd --stdin $1 &> /dev/null

echo useradd $1 finished.

fielse

echo "give two args : "magedu" "/www""

exit 2

fi

(2)執行指令碼進行測試

[root@centos7 ~]# bash user.sh magedu /www

useradd magedu finished.

2、使用expect實現自動登入系統。

(1)安裝expect包

#  yum install expect  -y

(2)編輯expect指令碼

#!/usr/bin/expect

set ip 192.168.7.100 使用set 給ip賦值為192.168.8.100 ,等於shell裡面的ip=192.168.8.100

set user root 使用set 給user賦值為root

set password centos 密碼賦值

set timeout 10 超時時間賦值

spawn ssh $user@$ip 登入 呼叫user和ip兩個變數的值

expect 有發現yes/no 輸入yes\n

"password" 有發現password輸入$password的值

}interact 允許使用者互動

執行指令碼

[root@centos7 ~]# ./expect.sh

3、簡述linux作業系統啟動流程 

#### 啟動第一步--加電自檢,載入bios

當你開啟計算機電源,計算機會首先載入bios資訊,bios資訊是如此的重要,以至於計算機必須在最開始就找到它。這是因為bios中包含了cpu的相關資訊、裝置啟動順序資訊、硬碟資訊、記憶體資訊、時鐘資訊、pnp特性等等。開機時將rom中的指令對映到ram的低位址空間,cpu讀取到這些指令,硬體的健康狀況進行檢查,按照bios中設定的啟動裝置來啟動。

#### 啟動第二步--讀取mbr

硬碟上第0磁軌第乙個扇區被稱為mbr,也就是master boot record,即主引導記錄,它的大小是512位元組,其中前446位元組為主引導記錄,後64位元組為分割槽表資訊,最後2個位元組為對應的校驗。系統找到bios所指定的硬碟的mbr後,就會將其複製到0×7c00位址所在的物理記憶體中。被複製到物理記憶體的內容就是boot loader,那就是lilo或者grub了。

#### 啟動第三步--boot loader

boot loader 就是在作業系統核心執行之前執行的一段小程式。bootloader供乙個選單,允許使用者選擇要啟動的系統或不同的核心版本; 把使用者選定的核心裝載到ram中的特定空間中,解壓、展開,而後把系統控制權移交給核心。boot loader有若干種,其中grub、lilo和spfdisk是常見的。

grub啟動引導階段:

在stage1階段,stage1是安裝時被寫入到mbr中,因為mbr空間有限,因此mbr當中安裝bootloader的最小程式;

在stage1.5階段,在mbr後面的分割槽,能識別啟動分割槽檔案系統,是stage和stage2的橋梁,grub訪問/boot分割槽grub目錄下的stage2檔案,將stage2載入記憶體並執行。

在stage2階段,解析grub的配置檔案/boot分割槽下/grub/grub.conf檔案,顯示作業系統的啟動選單,載入核心映象到記憶體中,通過/boot/initrd開頭檔案建立虛擬dam disk虛擬檔案系統,並轉交給核心。

#### 啟動第四步--載入核心

根據grub設定的核心映像所在路徑,系統讀取記憶體映像來解壓縮核心,同時還會載入核心所需的驅動程式檔案,從而對核心進行掛載以及驅動根檔案系統。

initrd(initial ram disk),它在stage2這個步驟就被拷貝到了記憶體中,這個檔案是在安裝系統時產生的,是乙個臨時的根檔案系統(rootfs)。因為kernel為了精簡,只保留了最基本的模組,因此,kernel上並沒有各種硬體的驅動程式,也就無法識rootfs所在的裝置,故產生了initrd這個檔案,該檔案裝載了必要的驅動模組,當kernel啟動時,可以從initrd檔案中裝載驅動模組,直到掛載真正的rootfs,然後將initrd從記憶體中移除。

kernel會以唯讀方式掛載根檔案系統,當根檔案系統被掛載後,開始裝載第乙個程序(使用者空間的程序),執行/sbin/init,之後就將控制權交接給了init程式。

#### 啟動第五步--使用者層init依據inittab檔案來設定執行等級

核心被載入後,第乙個執行的程式便是/sbin/init,該檔案會讀取/etc/inittab檔案,並依據此檔案來進行初始化工作。其實/etc/inittab檔案最主要的作用就是設定linux的執行等級,其設定形式是「:id:5:initdefault:」,這就表明linux需要執行在等級5上。

執行級別

對應說明

0關機,shutdown

1單使用者模式,root使用者,無須認證,一般是維護模式

2不帶nfs網路服務的多使用者多工模式,一般也是維護模式

3多使用者多工的完全功能模式,文字行介面

4預留模式

5多使用者多工的完全功能模式,圖形介面

6重啟,reboot

啟動第六步--init程序執行rc.sysinit

在設定了執行等級後,linux系統執行的第乙個使用者層檔案就是/etc/rc.d/rc.sysinit指令碼程式,它做的工作非常多,包括設定path、設定網路配置(/etc/sysconfig/network)、啟動swap分割槽、設定/proc等等。

啟動第七步--啟動核心模組,執行不同執行級別的指令碼程式

具體是依據/etc/modules.conf檔案或/etc/modules.d目錄下的檔案來裝載核心模組。根據執行級別的不同,系統會執行rc0.d到rc6.d中的相應的指令碼程式,來完成相應的初始化工作和啟動相應的服務。

啟動第八步--執行/etc/rc.d/rc.local

/etc/rc.d/rc.local是給使用者自定義啟動時需要執行的檔案。

啟動第九步--啟動mingetty,進入系統登陸介面

執行/bin/login程式,等待使用者登入

4、破解centos7 密碼。

1.啟動時按任意鍵

2.按e鍵進入編輯模式

3.將游標移動到linux16開始的行,再行尾新增核心引數rd.break

4.按ctrl+x啟動

5.查詢當前掛載的跟:mount,得知當前掛載的在sysroot下

6.由於當前根只有唯讀,需要重新掛載修改許可權:

# mount –o remount,rw /sysroot

# chroot /sysroot

# passwd root

# touch /.autorelabel

# exit

# reboot

oj第九周練習 切麵條

問題及 煙台大學計算機學院 2016 完成日期 2016年10月30日 問題描述 description 一根高筋拉麵,中間切一刀,可以得到2根麵條。如果先對折1次,中間切一刀,可以得到3根麵條。如果連續對折2次,中間切一刀,可以得到5根麵條。那麼,連續對折10次,中間切一刀,會得到多少麵條呢?in...

第九周 工資

設計乙個工資類 salary 其中的資料成員包括職工人數 number,人數不定 和number個職工的工資salary,要求輸入職工工資並逐個輸出。class salary 下面定義類的成員函式 下面是測試函式 int main 答案 includeusing namespace std clas...

第九周總結

二 從 activitythread main 到 activity oncreate handler 訊息機制 handler 訊息機制除了 handler 本身外,還包含 looper messagequeue message,訊息機制需要有訊息佇列 訊息迴圈 訊息處理 如下 handler 傳...