1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)
(1)post:加電自檢
主要是bios完成,檢查主機各個組件是否完好,能否達到運行要求;
(2)Boot Sequence:啟動順序
這一步是按照bios的預先設置來選擇首選啟動項;
(3)Boot Loader:引導加載器
這一步是在選擇啟動介質后,在介質的第一扇區會有一段小程序來引導我們啟動不同的系統或內核版本;
(4)kernel:加載內核
當選定內核或系統,由Bootloader將內核或系統加載到 內存中特定空間中,解壓、展開,而后把系統控制權叫給內核;
(5)運行/sbin/init
當內核被喚醒后,它開始完成系統的構建、加載驅動,然后開始運行第一個程序:init;
(6)選擇默認級別:
init會根據/etc/inittab等文件的定義來選擇默認啟動級別,完成系統開啟;
(7)運行系統初始化腳本,完成系統初始化:
在系統開啟后,init會根據/etc/rc.d/rc.sysinit來初始化系統,包括設置主機名、設置歡迎信息、激活udev和SELinux、掛載/etc/fstab文件中定義的所有文件系統等;
(8)關閉對應級別下要停止的服務和啟動對應級別下需要開啟的服務:
根據init配置文件,關閉/etc/rc.d/rc#.d/下K*的所有服務,開啟S*的所有服務,注#代表啟動級別;
(9)設置登陸終端:
這一步主要是開啟一個登陸接口,并為之加載環境變量、別名配置等文件,如果是5級別的話,還會開啟圖形界面,加載圖形界面所需的各種插件。
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
(1) 為硬盤新建兩個主分區;并為其安裝grub;
~]# mkdir /mnt/{sysboot,sysroot}
~]# fdisk /dev/sdb
n–> p–>1–>+500M
n–> p–>2–>+2G
w
~]# partprobe /dev/sdb
~]# mkfs.ext4 /dev/sdb1
~]# mkfs.ext4 /dev/sdb2
~]# mount /dev/sdb1 /mnt/sysboot
~]# mount /dev/sdb2 /mnt/sysroot
~]# grub-install –root-directory=/mnt /dev/sdb
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/sysboot/vmlinuz
~]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/sysboot/initramfs.img
~]# mkdir /mnt/sysroot/{bin,proc,lib64,mnt,sbin,…}
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
[root@localhost sysroot]# ldd /bin/{cat,ls,bash}
/bin/cat:
linux-vdso.so.1 => (0x00007fff91dff000)
libc.so.6 => /lib64/libc.so.6 (0x000000354a200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003549a00000)
/bin/ls:
linux-vdso.so.1 => (0x00007fffc3f22000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x000000354ba00000)
librt.so.1 => /lib64/librt.so.1 (0x000000354b200000)
libcap.so.2 => /lib64/libcap.so.2 (0x000000354de00000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003555a00000)
libc.so.6 => /lib64/libc.so.6 (0x000000354a200000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000354aa00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003549a00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000354a600000)
libattr.so.1 => /lib64/libattr.so.1 (0x0000003558600000)
/bin/bash:
linux-vdso.so.1 => (0x00007fff00dff000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x000000355b200000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000354aa00000)
libc.so.6 => /lib64/libc.so.6 (0x000000354a200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003549a00000
[root@localhost ~]#cp /bin/{bash,ls,cat} /mnt/sysroot/bin
[root@localhost ~]# cd /mnt/sysroot/lib64/
[root@localhost lib64]# cp /lib64/libc.so.6 ./
[root@localhost lib64]# cp /lib64/libselinux.so.1 ./
[root@localhost lib64]# cp /lib64/librt.so.1 ./
[root@localhost lib64]# cp /lib64/libcap.so.2 ./
[root@localhost lib64]# cp /lib64/libacl.so.1 ./
[root@localhost lib64]# cp /lib64/libc.so.6 ./
[root@localhost lib64]# cp /lib64/libdl.so.2 ./
[root@localhost lib64]# cp /lib64/ld-linux-x86-64.so.2 ./
[root@localhost lib64]# cp /lib64/libpthread.so.0 ./
[root@localhost lib64]# cp /lib64/libattr.so.1 ./
[root@localhost lib64]# cp /lib64/libtinfo.so.5 ./
[root@localhost lib64]# cp /lib64/libdl.so.2 ./
[root@localhost lib64]# cp /lib64/libc.so.6 ./
(4) 為grub提供配置文件;
vim /mnt/sysboot/grub/grub.conf
default=0
timeout=5
title Linux test
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
新建虛擬機,再選擇磁盤時選擇這塊磁盤;
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
首先安裝system-config-kickstart,然后打開;
基本配置:主要是語言為中文,鍵盤默認,設置根密碼;
安裝方法:根據情況選擇,以光盤驅動器為例;
引導裝載程序選項:默認即可;
分區信息:清除主引導記錄,然后開始添加磁盤分區,主要是根分區、swap、boot和home四個分區;
網絡配置:最好配置一塊網卡,設定好ip等信息;
防火墻配置:建議都先關閉,可在完成后激活;
顯示配置:默認;
軟件包選擇:基本系統;
配置好以后保存,路徑為/var/ftp/ks.cfg,然后安裝vsftpd服務,并啟動,測試是否可以正常訪問;
然后新建一個虛擬機,在啟動時加載鏡像,在安裝界面摁esc,出現字符界面:boot::,輸入以下命令:
linux ip=IP(根據實際情況,必須與有ftp訪問的服務器在同一網段上) netmask=NETMASK ks=ftp://ks.cfg完整路徑
如果不出意外地話,虛擬機會根據ks.cfg來安裝部署。
4、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/sh
case $1 in
start)
echo “starting $0 finished “;;
stop)
echo “stop $0 finished”;;
restart)
echo “restart $0 finished”;;
status)
echo “status $0 finished”;;
*)
echo “error!!”
exit 1
esac
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash
[ $# -ne 1 ] && echo “need 1 user!!” &&exit 1
usr(){
if who | grep $1 &>/dev/null;then
echo “$1 is login..”
return 0
else
echo “$1 is not login..”
return 2
fi
}
while true;do
usr $1
rt=$?
[ $rt -eq 0 ] && break || sleep 3
done
6、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
#!/bin/sh
cat <<a
=========================
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
=========================
a
ab() {
read -p “Please enter your choice: ” i
case $i in
cpu)
lscpu;;
mem)
free -h;;
disk)
fdisk -l /dev/[s,h]d[a-z];;
quit)
exit 0;;
*)
echo “Please choose again!!”
ab
esac
}
ab
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
7、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash
usr() {
grep “^$1\>” /etc/passwd|awk -F: ‘{print $3,$7}’
}
cat <<a
user) display user info;
quit) quit
a
ub() {
while true;do
read -p “please input: ” i
case $i in
quit)
exit 0;;
$i)
usr $i
ub
esac
done
}
ub
原創文章,作者:N25_韓奇洋,如若轉載,請注明出處:http://www.www58058.com/70591
操作系統的啟動過程能用圖示來說明會更好~~cp的那部分可以使用循環~~繼續加油~