第十周作業
?
1、CentOS系統啟動流程:
1.加電自檢:由bios去檢測各硬件是否存在且是否正常運行,然后進行硬件初始化
2.選擇啟動順序,加載mbr:根據bios設置的設備啟動順序,找到第一個安裝有bootloader的設備進行啟動,bootloader去識別加載操作系統中的核心文件,并提交到內存中運行,進而來啟動相對應的操作系統
由于bootloader處于mbr中,而mbr只有446bytes用來存儲bootloader,而446bytes無法容納下bootloader,因此linux將bootloader運行和加載分成三個階段:
stage1:運行bootloader主程序,這個程序必須要被安裝在啟動區,即MBR中。因為mbr空間有限,因此在mbr當中僅安裝bootloader的最小主程序,并沒有安裝bootloader的相關配置文件
stage1.5:在mbr隨后的扇區中存放,主要用于與stage2所在的分區的文件系統進行交互。
stage2:通過bootloader加載所有配置文件及相關的環境參數信息,這些配置文件及相關的環境參數都存放于磁盤分區上的/boot目錄下。
3.加載系統內核,執行系統初始化信息:bootloader加載內核和initrd,然后在內存中讓initrd解壓縮成根目錄,然后內核可以在這個虛擬的根文件系統之上加載合適的驅動程序,來加載硬盤等設備,之后釋放虛擬的根文件系統,并以只讀的方式掛載磁盤上的真實的根文件系統,之后就開始正常的啟動過程
4.啟動用戶空間第一個執行程序/sbin/init:init主要功能是準備軟件運行環境,包括系統的主機名稱,網絡配置、文件系統格式等其他服務的啟動管理
init是通過自上而下讀取inittab文件來依次執行的,因此init的處理流程是:
1、讀取默認的runlevel,
2、使用/etc/rc/d/rc.sysinit進行系統初始化。
1、根據配置文件中的設定來設定主機名(讀取/etc/sysconfig/network文件中的HOSTNAME進行)
2、打印文本歡迎信息;
3、激活SELinux和udev;
4、掛在所有定義在/etc/fstab文件中的文件系統
5、激活swap設備
6、檢測根文件系統,并實現以讀寫方式重新掛載;
7、設置系統時鐘
8、更具/etc/sysctl.conf文件設定內核參數的值
9、激活LVM和RAID設備
10、加載額外的設備啟動
11、清理操作
3、由于采用的的是3級別,因此只進行l3:3:wait:/etc/rc.d/rc 3,其他的則忽略
4、配置好ctrl+alt+del組合件的功能
5、配置不斷電系統pf、pr兩種機制
6、啟動mingetty 6個終端
7、如果是5級別,則會以/etc/X11/prefdm-nodaemon啟動圖形化界面
2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
1、 為硬盤新建兩個主分區;并為其安裝grub;
#創建兩個分區,/dev/sdb1為500M,/dev/sdb2為5G
[root@centos6 mnt]# fdisk -l /dev/sdb
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x473aab9e
Device Boot????? Start???????? End????? Blocks?? Id? System
/dev/sdb1?????????????? 1????????? 65????? 522081?? 83? Linux
/dev/sdb2????????????? 66???????? 719???? 5253255?? 83? Linux
#格式化分區為ext4格式
[root@centos6 script]# mke2fs -t ext4 /dev/sdb1
[root@centos6 script]# mke2fs -t ext4 /dev/sdb2
#創建掛載目錄并掛載分區
[root@centos6 script]# mkdir -p /mnt/{boot,sysroot}
[root@centos6 script]# mount /dev/sdb1 /mnt/boot/
[root@centos6 script]# mount /dev/sdb2 /mnt/sysroot/
[root@centos6 grub]# df -h
Filesystem??? ??Size? Used Avail Use% Mounted on
/dev/sda2?????? 116G? 1.7G? 109G?? 2% /
tmpfs?????????? 364M???? 0? 364M?? 0% /dev/shm
/dev/sda1?????? 477M?? 32M? 420M?? 7% /boot
/dev/sdb1?????? 486M?? 29M? 432M?? 7% /mnt/boot
/dev/sdb2?????? 4.9G?? 11M? 4.6G?? 1% /mnt/sysroot
2、為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
#復制核心文件和虛擬鏡像文件到新的boot目錄下
[root@centos6 grub]#cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/vmlinuz
[root@centos6 grub]#cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/initramfs.img
#創建新的根目錄下必要的文件夾
[root@centos6 grub]# cd /mnt/sysroot/
[root@centos6 sysroot]# mkdir bin dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var
3、為rootfs提供bash、ls、cat程序及所依賴的庫文件;
#查看bash、ls、cat命令所需要用到的動態鏈接庫文件
[root@centos6 sysroot]# ldd /bin/bash
linux-vdso.so.1 =>? (0x00007fffc89c6000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f688f4e3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f688f2df000)
libc.so.6 => /lib64/libc.so.6 (0x00007f688ef4a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f688f70d000)
[root@centos6 sysroot]# ldd $(which –skip-alias ls)
linux-vdso.so.1 =>? (0x00007ffc5dd97000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f8dd942a000)
librt.so.1 => /lib64/librt.so.1 (0x00007f8dd9222000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f8dd901d000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f8dd8e15000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8dd8a81000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8dd887c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8dd9652000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8dd865f000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f8dd845a000)
[root@centos6 sysroot]# ldd $(which –skip-alias cat)
linux-vdso.so.1 =>? (0x00007ffc04752000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6754cba000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6755057000)
#復制動態鏈接庫文件到新的根目錄下
[root@centos6 bin]# cp /bin/cat /mnt/sysroot/bin/
[root@centos6 bin]# cp /bin/ls /mnt/sysroot/bin/
[root@centos6 sysroot]# ldd $(which –skip-alias bash) |grep -o “/.*\.[[:digit:]]”|xargs -I {} cp {} /mnt/sysroot/lib64
[root@centos6 sysroot]# ldd $(which –skip-alias ls) |grep -o “/.*\.[[:digit:]]”|xargs -I {} cp {} /mnt/sysroot/lib64
[root@centos6 sysroot]# ldd $(which –skip-alias cat) |grep -o “/.*\.[[:digit:]]”|xargs -I {} cp {} /mnt/sysroot/lib64
[root@centos6 sysroot]# ll /mnt/sysroot/lib64/
total 2560
-rwxr-xr-x 1 root root? 154664 Mar? 1 05:38 ld-linux-x86-64.so.2
-rwxr-xr-x 1 root root?? 31280 Mar? 1 05:38 libacl.so.1
-rwxr-xr-x 1 root root?? 18712 Mar? 1 05:38 libattr.so.1
-rwxr-xr-x 1 root root?? 16600 Mar? 1 05:38 libcap.so.2
-rwxr-xr-x 1 root root 1923352 Mar? 1 05:38 libc.so.6
-rwxr-xr-x 1 root root?? 19536 Mar? 1 05:38 libdl.so.2
-rwxr-xr-x 1 root root? 142688 Mar? 1 05:38 libpthread.so.0
-rwxr-xr-x 1 root root?? 43944 Mar? 1 05:38 librt.so.1
-rwxr-xr-x 1 root root? 122056 Mar? 1 05:38 libselinux.so.1
-rwxr-xr-x 1 root root? 132408 Mar? 1 05:21 libtinfo.so.5
#使用chroot命令切換根目錄到/mnt/sysroot進行測試
[root@centos6 bin]# chroot /mnt/sysroot/
bash-4.1# ls
bin? dev? etc? home? lib? lib64? lost+found? media? mnt? opt? proc? root? sbin? selinux? srv? sys? tmp? usr? var
bash-4.1# bash
bash-4.1# cat <<EOF
> hello world
> EOF
hello world
4、為grub提供配置文件;
#創建grub配置文件
[root@centos6 sysroot]# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS (MyDIY)
root (hd0,0)
kernel /vmlinuz ro root=/dev/sdb2 init=/bin/bash
initrd /initramfs.img
5、將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;
在BIOS中將新創建的磁盤作為第一啟動設備
重啟后進入grub,編輯kernel參數,設置selinux=0 (注意:該參數要放置在init之前)
編輯完成后,按b鍵啟動后即可進入新建的系統。
3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
1、創建鏡像生成目錄并將光盤下isolinux目錄copy到該目錄下,并對其下的文件賦予寫權限。
[root@centos6 ~]# mkdir -p /myboot/
[root@centos6 ~]# cp -a /mnt/cdrom/isolinux/ /myboot/
[root@centos6 ~]# cd /myboot/
[root@centos6 myboot]# chmod -R 777 isolinux/
2、創建kickstart配置文件
[root@centos6 myboot]# vim ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall –disabled
# Install OS instead of upgrade
install
# Use network installation
url –url=”http://mirrors.aliyun.com/centos/6/os/x86_64″
# Root password
rootpw –iscrypted $1$ifhHlqT/$mZ5IcE3P2Nn54UG3i/SI//
# System authorization information
auth? –useshadow? –passalgo=sha512
# Use text mode install
text
firstboot –disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux –disabled
# Installation logging level
logging –level=info
# Reboot after installation
reboot
# System timezone
timezone? Asia/Shanghai
# Network information
network? –bootproto=dhcp –device=eth0 –onboot=on
# System bootloader configuration
bootloader –append=”crashkernel=auto rhgb quiet” –location=mbr –driveorder=”sda”
# Partition clearing information
clearpart –all? –drives=sda
# Disk partitioning information
part /boot –fstype=ext4 –size=500
part pv.01 –size=100000
volgroup myvg –pesize=4096 pv.01
logvol /home –fstype=ext4 –name=lv_home –vgname=myvg –size=5000
logvol / –fstype=ext4 –name=lv_root –vgname=myvg –size=50000
logvol swap –name=lv_swap –vgname=myvg –size=2000
logvol /usr –fstype=ext4 –name=lv_usr –vgname=myvg –size=15000
logvol /var –fstype=ext4 –name=lv_var –vgname=myvg –size=10000
%packages
@core
@server-policy
@workstation-policy
%end
3、創建光盤引導鏡像
[root@centos6 ~]# cd /myboot/
[root@centos6 myboot]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS 6 x86_64 boot” -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso ../myboot/
4、新建一臺虛擬機并使用上一步創建的光盤引導鏡像進行安裝,在光盤啟動菜單輸入下面參數指定使用kickstart配置文件進行一鍵安裝。
4、寫一個腳本 ? (1) 能接受四個參數:start, stop, restart, status ? ?start: 輸出“starting 腳本名 finished.” ? ?… ? (2) 其它任意參數,均報錯退出;
#!/bin/bash
# testsrv?????? service testing script
#
# chkconfig:??? 2345 50 60
# discrption: test
#
#
prog=$(basename $0)
if [ $# -lt 1 ];then
echo “usage:$prog {start|stop|restart|status}”
exit 1
fi
if [ $1 == start ];then
echo “starting $prog finished”
elif [ $1 == stop ];then
echo “stopping $prog finished”
elif [ $1 == restart ];then
echo “restart $prog finished”
elif [ $1 == status ];then
if pidof $prog &> /dev/null;then
echo “$prog is running”
else
echo “$prog is stopped”
fi
else
echo “usage:$prog {start|stop|restart|status}”
exit 2
fi
把次腳本復制到/etc/rc.d/init.d 下
然后執行 chkconfig –add SCRIPTNAME
服務就開啟了。
5、寫一個腳本,判斷給定的用戶是否登錄了當前系統; ? (1) 如果登錄了,則顯示用戶登錄,腳本終止; ? (2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash
read -p “send a username:” UNAME
while true ;do
if who | grep “$UNAME” > /dev/null ;then
break
fi
sleep 3
done
6、寫一個腳本,顯示用戶選定要查看的信息; ? ?cpu) display cpu info ? ?mem) display memory info ? ?disk) display disk info ? ?quit) quit ? ?非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
cat << eof
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
eof
while true; do
read PARA
if [ $PARA == cpu ];then
lscpu
break
elif [ $PARA == mem ];then
free
break
elif [ $PARA == disk ];then
fdisk -l
break
elif [ $PARA == quit ];then
break
else
echo “need a right choose”
fi
done
7、寫一個腳本 ? (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來; ? (2) 提示用戶輸入一個用戶名或輸入“quit”退出; ? ? 當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bashuserinfo() {??? uid=$(id -u $1)??? shell=$(cat /etc/passwd|grep fangtao|awk -F: ‘{print $NF}’)??? echo “UID: $uid”??? echo “SHELL: $shell”}?while true;do??? read -p “Input username[input ‘quit’ if you don’t want to continue]: ” input??? [ “$input” == “quit” ] && exit 0??? if [ -z “$input” ];then??????? echo “Blank not allowed!”??????? continue??? else??????? if id $input &>/dev/null;then??????????? userinfo “$input”??????????? continue??????? else??????????? echo “$input not exists!”??????????? continue??????? fi??? fidone
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88333
寫的很好,命令可以考慮用腳本語言表姐,排版出來就會很好看。