1、描述centos6系統開機啓動流程;
1.1加載BIOS的硬件信息與進行自我測試,並依據設置取得第一個可啓動的設備;
1.2讀取並執行第一個啓動設備內MBR的boot Loader(即是grub,spfdisk等程序);
1.3依據bootloader的設置加載Kernel,Kernel會開始檢測硬件與加載驅動程序;
1.4在硬件驅動成功後,Kernel會主動調用init進程,而init會取得run-level信息;
1.5init執行/etc/rc.d/rc.sysinit文件來準備軟件執行的操作環境(如網絡,時區等);
1.6init執行run-level的各個服務的啓動(script方式);
1.7init執行/etc/rc.d/rc.local文件;
1.8init執行終端機模擬程序mingetty來啓動login進程,最後就等待用戶登錄。
2、描述/etc/rc.d/sysinit腳本功能;
2.1 取得網絡環境與主機類型:
讀取網絡配置文件/etc/sysconfig/network ,取得主機名與默認網關(gateway) 等網絡環境。
2.2測試與掛載內存裝置 /proc 及 USB 裝置 /sys:
除掛載內存裝置 /proc之外,還會主動偵測系統上是否具有 usb 的裝置, 若有則會主動加載 usb 的驅勱程序,並且嘗試掛載 usb 的文件系統。
2.3決定是否啓動SELinux :
並且檢測是否需要幫所有的檔案重新編寫標準的 SELinux 類型 (auto relabel)。
2.4啓動系統的隨機數生成器
隨機數生成器可以幫劣系統迚行一些密碼加密演算的功能,在此需要啓動兩次隨機數生成器。
2.5設定終端機 (console) 字形:
2.6設定顯示於開機過程中的歡迎畫面 (textbanner);
2.7.設定系統時間(clock) 與時區設定:需讀入 /etc/sysconfig/clock 設定值
2.8.接口設備的偵測Plug and Play (PnP) 參數的測試:
根據核心在開機時偵測的結果 (/proc/sys/kernel/modprobe ) 開始進行 ide /scsi / 網絡 / 音效 等接口設備的偵測,以及利用以加載的核心模塊進行 PnP 裝置的參數測試。
2.9.用戶自定義模塊的加載
使用者可以在 /etc/sysconfig/modules/*.modules 加入自定義的模塊,則此時會被加載到系統當中
2.10.加載核心的相關設定:
系統會主動去讀取 /etc/sysctl.conf 這個檔案的設定值,使核心功能成爲我們想要的樣子。
2.11.設定主機名與初始化電源管理模塊 (ACPI)
2.12.初始化軟件磁盤陣列:
主要是透過 /etc/mdadm.conf 來設定好的。
2.13.初始化 LVM 的文件系統功能
2.14.以 fsck 檢驗磁盤文件系統:會迚行 filesystem check
2.15.進行磁盤配額 quota 的轉換 (非必要):
2.16.重新以可擦寫模式掛載系統磁盤:
2.17.啓動 quota 功能:所以我們不需要自定義 quotaon 的動作
2.18.啓動系統虛擬隨機數生成器(pseudo-random):
2.19.清除開機過程當中的臨時文件:
2.20.將開機相關信息加載/var/log/dmesg 檔案中。
3、寫一個腳本,生成10個隨機數,並按從小到大進行排序(要求至少使用2中方法);
腳本一:
#!/bin/bash
#Program:
# RANDOM 10 integer and sort from min tomax ,then print them!
#History:
# 2016/01/25 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
declare-i min
declare-i max
declare-i i
declare-a arrayRAN
i=1
echo "The 10 Random integer are: "
arrayRAN[i]=$RANDOM
min=${arrayRAN[i]}
max=${arrayRAN[i]}
while[ $i -le 10 ]
do
echo ${arrayRAN[i]}
if[ ${arrayRAN[i]} -lt $min ];then
min=${arrayRAN[i]}
elif [ ${arrayRAN[i]} -gt $max ];then
max=${arrayRAN[i]}
fi
i=i+1
arrayRAN[i]=$RANDOM
done
echo"The Min Random integer is:" $min
echo"The Max Random integer is:" $max
運行結果一:
腳本二:
#!/bin/bash
#Program:
# RANDOM 10 integer and sort from min tomax ,then print them!
#History:
# 2016/01/27 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
declare-i min
declare-i max
declare-i i
declare-i m
echo"The 10 Random integer are: "
m=$RANDOM
min=$m
max=$m
echo$m
for((i=2; i<=10; i++))
do
m=$RANDOM
echo $m
if [ $m -lt $min ];then
min=$m
elif [ $m -gt $max ];then
max=$m
fi
done
echo"The Min Random integer is:" $min
echo"The Max Random integer is:" $max
運行結果二:
4、在每週二的凌晨1點5分執行腳本/data/get_username.sh,並將腳本的輸出至/tmp/get_username.log日誌文件中;
4.1啓用週期服務crond
4.2測試腳本
4.3 本題的腳本
5、寫一個腳本:如果某路徑不存在,則將其創建爲目錄;否則顯示其存在,並顯示內容類型;
腳本:
#!/bin/bash
#Program:
# Test the file directory is exists ornot.And test the file's filetype.
#History:
# 2016/01/27 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
read-p "Please input a file directory,I will check the directory's type." fd
test-z $fd && echo "You MUST input a file directory." &&exit 0
if[ -f "$fd" ];then
echo "The $fd is exists"
test -b $fd &&filetype="block file"
test -c $fd &&filetype="character file"
test -f $fd && filetype="regularefile"
test -h $fd &&filetype="symbolic link"
test -p $fd &&filetype="named pipe"
test -S $fd &&filetype="socket file"
echo "The filename: $fd is a$filetype"
else
mkdir $fd
echo "Creat the directory $fdsucceed"
fi
結果截圖:
6、寫一個腳本,打印9X9乘法表;
腳本:
#!/bin/bash
#Program:
# Print Nine Nine Multiplication Table
#History:
# 2016/01/27 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
declare-i i
declare-i m
for((i=1;i<=9;i++))
do
m=1
while [ $m -le $i ]
do
echo -e -n "${m}x${i}=$[$i*$m] \t"
m=m+1
done
echo
done
結果截圖: