第十周:Linux系統啟動流程及shell腳本練習

1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)

一張圖足以說明一切:

第十周:Linux系統啟動流程及shell腳本練習

2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;

  (1) 為硬盤新建兩個主分區;并為其安裝grub

  (2) 為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs

  (3) rootfs提供bash、lscat程序及所依賴的庫文件;

  (4) grub提供配置文件;

  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

1.創建2個主分區,sdb1,sdb2
[root@bogon ~]# fdisk -l /dev/sdb
 
Disk /dev/sdb: 11.8 GB, 11811160064 bytes
255 heads, 63 sectors/track, 1435 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: 0xa5b8f2f4
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  83  Linux
/dev/sdb2             655        1308     5253255   83  Linux
2.格式化分區,格式為ext4
[root@bogon ~]# mke2fs -t ext4 /dev/sdb{1,2}
3.掛載分區sdb1到/mnt下
[root@bogon ~]# mount /dev/sdb1  /mnt/boot
4.安裝grub到sdb1上
[root@bogon ~]# grub-install  --root-directory=/mnt /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
 
(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb
5.復制內核及ramdisk文件到sdb1上
[root@bogon ~]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img  /mnt/boot/initramfs.img
[root@bogon ~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz
6.編輯grub.conf文件,/mnt/boot/grub/grub.conf
[root@bogon grub]# vim grub.conf
default=0
timeout=5
title CentOS6(test)
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
7.卸載/mnt目錄
[root@bogon /]# umount /mnt
8.掛載分區/dev/sdb2到/mnt下
[root@bogon /]# mount /dev/sdb2 /mnt/sysroot
9.創建系統必須的目錄
[root@bogon mnt]# mkdir -p /mnt/sysroot{bin,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}
10.拷貝命令的到/mnt下
[root@bogon boot]# cp /bin/{bash,ls,cat} /mnt/bin/
10.拷貝命令的依賴文件
[root@bogon boot]# cp `ldd /bin/{bash,ls,cat}  |grep -oe "/lib.*[[:space:]]"|sort -u` /mnt/lib64/
12.測試并同步
[root@bogon boot]# chroot /mnt/sysroot
bash-4.1# ls
bin  boot  dev  etc  lib  lib64  lost+found  proc  sbin  sys  tmp  usr  var
bash-4.1# ls
bin  boot  dev  etc  lib  lib64  lost+found  proc  sbin  sys  tmp  usr  var
bash-4.1# cat bin
cat: bin: Is a directory
bash-4.1# cd bin 
bash-4.1# ls
bash  cat  ls
bash-4.1# exit
exit
[root@bogon boot]# sync
13.重啟后,將這塊硬盤添加到新創建的虛擬機做引導盤

3、制作一個kickstart文件以及一個引導鏡像。描述其過程。

可以直接手動編輯或使用工具在桌面模式下用system-config-kickstart(centos6.x)來創建ks.cfg
#命令段
firewall --disabled//禁用防火墻
install//執行新安裝
cdrom//用光盤安裝
lang en_US.UTF-8//默認安裝語言
keyboard us//選擇鍵盤
rootpw --iscrypted $1$gWoGuWzn$E7polUWsUlS6qPXzQryRm //管理員密碼
authconfig --enableshadow --passalgo=sha512
selinux --enforcing//激活selinux
logging --level=info//信息等級
timezone --utc Asia/Shanghai//系統時區
bootloader --location=mbr --driveorder=sdb --append="crashkernel=auto rhgb quiet"
clearpart --all//刪除所有現在分區
part /boot --fstype=ext4 --size=500//分區掛載
part / --fstype=ext4 --size=20480
part swap --size=4096
#腳本段
%pre//安裝前腳本
echo "start install"
%end
%post//安裝后腳本
echo "install end"
#程序包段
%packages
@chinese-support//中文支持
@development//開發工具
@graphical-desktop-clients//圖形化工具
@remote-desktop-clients//遠程桌面客戶端
%end
簡單引導鏡像光盤制作:
1)復制系統安裝光盤除Packages和repodata外的所有目錄下的所有文件到一自定義目錄(/centos6.5)
mount -r /dev/cdrom /mnt/
mkdir /centos6.5
cp -arf /mnt/{CentOS_BuildTag,isolinux,R*,E*,GPL,T*,images} /centos6.5/
cd /centos6.6/
2)創建引導光盤:把/centos6.5目錄創建為光盤鏡像boot.iso
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V 
 "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat 
  -o /root/boot.iso /centos6.5/
簡單自動安裝系統光盤制作
1)復制安裝系統光盤的所有目錄下的所有文件和ks.cfg文件到一自制目錄(/centos6.5)
cd /centos6.6/
cp -r /mnt/* .
cp /root/ks.cfg .
2)在/centos6.5/isolinux/isolinux.cfg文件中append initrd=initrd.img條目中添加ks文件讀取路徑 ks=cdrom:/ks.cfg
3)創建引導光盤:把centos6.5目錄創建為光盤鏡像centos.iso 
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table 
 -V "CentOS 6.5 x86_64 boot"  -b isolinux/isolinux.bin -c isolinux/boot.cat 
 -o /root/boot.iso /centos6.5

圖形界面制造kistart文件的補充說明:

通過system-config-kickstart圖像工具制造kickstart文件

(1)必須按照桌面圖形化工具

yum groupinstall "Desktop"
yum groupinstall "X Window System"
yum groupinstall "Chinese Support"

(2)按照system-config-kickstart圖形工具

yum install system-config-kickstart

(3)執行system-config-kickstart命令

system-config-kickstart

(4)通過File里的Open File打開/root/目錄下,按照本系統自動生成的anaconda-ks.cfg文件,根據此文件作為模板編輯,就簡單多了

blob.png

blob.png

4、寫一個腳本

  (1) 能接受四個參數:start, stop, restart, status

   start: 輸出“starting 腳本名 finished.

   …

  (2) 其它任意參數,均報錯退出;

#!/bin/bash
if [ $# -eq 0 ]; then
        echo "Input arug"
        exit 1
fi
case $1 in
        start)
                echo "starting finished";;
        stop)
                echo "stoping finished";;
        restart)
                echo "restart finished";;
        *)
                exit 2
esac

5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;

  (1) 如果登錄了,則顯示用戶登錄,腳本終止;

  (2) 3秒鐘,查看一次用戶是否登錄;

#!/bin/bash
#
if [ $# -eq 0 ]; then
        echo "Input argu"
        exit 1
fi

while true; do
        if `w | grep "^$1\>" &>/dev/null`; then
                echo "$1 is login"
                exit 1
        fi
        sleep 3
done

6、寫一個腳本,顯示用戶選定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;

#!/bin/bash
#
while true; do
read -p "Input you argu(cpu/mem/disk/quit):" argu
case $argu in
        cpu)
                lscpu;;
        mem)
                cat /proc/meminfo;;
        disk)
                fdisk -l s[hd][a-z];;
        quit)
                exit 1;;
        *)
                echo "error"
                continue;;
esac
done

7、寫一個腳本

  (1) 用函數實現返回一個用戶的UIDSHELL;用戶名通過參數傳遞而來;

  (2) 提示用戶輸入一個用戶名或輸入“quit”退出;

當輸入的是用戶名,則調用函數顯示用戶信息;

當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:

#!/bin/bash
cat << EOR
user) show user uid and shell
quit) quit
EOR
 
 
while true; do
read -p "Please input username or quit:"  username
  if id $username &> /dev/null; then
   uid=`cat /etc/passwd |grep "^$username\>"|cut -d: -f3`
   shell=`cat /etc/passwd |grep "$username\>"|cut -d: -f7`
   echo "userid is:" $uid
   echo "usershell is:" $shell
   continue
   elif [ $username == quit ];then
    exit 0
   else
    echo "ERROR option"
   fi
done

8、寫一個腳本,完成如下功能(使用函數)

   (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;

   (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;

   (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;

#!/bin/bash
#

cpcomd () {
read -p "input a command:" comd
dirname=`dirname $(which --skip-alias $comd)`
if [ -d /mnt/sysroot$dirname ]; then
        \cp $(which --skip-alias $comd) /mnt/sysroot$dirname
else
        mkdir -p /mnt/sysroot$dirname
        \cp $(which --skip-alias $comd) /mnt/sysroot$dirname
fi
for i in `ldd $(which --skip-alias $comd) | grep -o "/lib.*[[:space:]]"`; do
        dirname=`dirname $i`
        if [ -d /mnt/sysroot$dirname ]; then
                \cp $i /mnt/sysroot$dirname
        else
                mkdir /mnt/sysroot$dirname
                \cp $i /mnt/sysroot$dirname
        fi
done
}
cpcomd


原創文章,作者:dawning,如若轉載,請注明出處:http://www.www58058.com/61601

(0)
dawningdawning
上一篇 2016-11-30 16:31
下一篇 2016-11-30 17:27

相關推薦

  • 用shell腳本實現每天定時收集全網日志到一臺服務器

    需求 現在公司有這樣一個需求,需要收集每天全網運行業務的設備上的某個特定目錄底下的日志到一臺服務器(這臺服務器我們簡稱logserver),這并在這臺logserver上生成以日期為名字的目錄 解決思路: 在logserver的crontab里設置兩個腳本,在當日晚上23:30執行腳本1收集當日即將被刪除的全網腳本;在并在早上8:30執行腳本2,收集昨日全網…

    Linux干貨 2015-07-27
  • 8月3號 用戶權限作業

     1,當用戶xiaoming 對/testdir  目錄無執行權限時,意味著無法做哪些操作?   先創建目錄/testdir,接著修改目錄的/testdir的權限,用xiaoming的身份去進入/testdir目錄 [root@localhost ~]# mkdir /testdir [root@l…

    Linux干貨 2016-08-08
  • 實戰演練su命令與sudo服務

    su和su- 切換方式 實例: sudo 提權 sudo的特色功能 sudo命令的常用參數 注意 案例1——允許zhanghe用戶執行所有命令: 案例2——僅允許linuxprobe用戶以root用戶身份執行cat命令。 案例3——允許linuxprobe用戶以任意身份執行命令,且每次都不需要密碼驗證。 su命令與sudo服務 在工作生產環境中不要去使用ro…

    Linux干貨 2016-09-05
  • 文本查找之find組合拳

    find命令不僅能幫助我們在數目眾多的文件中快速找到滿足條件的文本,我們還能通過find處理動作對查找到的文件進行進一步的處理。 一、find的特點:               遍歷查找,因此查找速度略慢   &nbs…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班21期+第9周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash  declare -i loginable=0 declare -i unloginable=0  &n…

    Linux干貨 2016-09-07

評論列表(1條)

  • N24_Jerry
    N24_Jerry 2017-02-17 11:06

    一張圖足以說明一切 ,這個裝逼我給滿分!?。?/p>

欧美性久久久久