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 /wwwuseradd magedu finished.
2、使用expect實現自動登入系統。
(1)安裝expect包
# yum install expect -y
(2)編輯expect指令碼
#!/usr/bin/expectset 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 傳...