10.腳本練習2

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


POST?-->?Boot?Sequence(BIOS)?-->?Boot?Loader(MBR)?
?-->?Kernel+ramdisk(initrd)?-->?rootfs?-->?/sbin/init?
?-->?(/etc/inittab,/etc/init/*.conf)

(1)加電自檢:POST
????通電后主板CMOS中的BIOS進行硬件自檢;

(2)BIOS,引導加載次序:Boot?Squence
????按照BIOS中的設備啟動順序,找到第一個有引導程序的設備作為啟動的設備;

(3)bootloader
????引導加載器,引導并提供菜單,讓用戶選擇要啟動的系統把選定的內核裝載到
????內存中的特定空間中,解壓、展開,并把系統控制權限移交給內核;

(4)kernel初始化操作
????探測可識別的所有硬件設備;加載硬件驅動;以只讀方式掛在根文件系統;
????運行用戶空間的第一個應用程序:/sbin/init

(5)init階段
????根據對應的運行級別運行對應的運行級別定義的腳本

(6)運行初始化腳本
????系統初始化腳本對應文件:/etc/rc.d/rc.sysinit,設置主機名等信息,檢測
????根文件系統,激活swap等;

(7)啟動系統服務
????根據/etc/rc.d/init.d目錄下的腳本啟動相應的系統服務;

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

  • (1) 為硬盤新建兩個主分區;并為其安裝grub;
  • (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
  • (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
  • (4) 為grub提供配置文件;
  • (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

[root@localhost?~]#?lsblk?/dev/sdb
??NAME???MAJ:MIN?RM?SIZE?RO?TYPE?MOUNTPOINT
??sdb??8:16???0??60G??0?disk?
??├─sdb1???8:17???0??10G??0?part?
??└─sdb2???8:18???0??10G??0?part

[root@localhost?~]#?mkfs.ext4?/dev/sdb1
[root@localhost?~]#?mkfs.ext4?/dev/sdb2

[root@localhost?~]#?mkdir?/mnt/{boot,sysroot}

[root@localhost?~]#?mount?/dev/sdb1?/mnt/boot/
[root@localhost?~]#?mount?/dev/sdb2?/mnt/sysroot/

[root@localhost?~]#?grub-install?--root-directory=/mnt?/dev/sdb

[root@localhost?~]#?cp?/boot/initramfs-2.6.32-358.el6.x86_64.img?/mnt/boot/initramfs.img
[root@localhost?~]#?cp?/boot/vmlinuz-2.6.32-358.el6.x86_64?/mnt/boot/vmlinuz

[root@localhost?~]#?vim?/mnt/boot/grub/grub.conf
??default=0
??timeout=5
??title?CentOS?6
??root?(hd0,0)
??kernel?/vmlinuz?ro?root=/dev/sda2?selinux=0?init=/bin/bash
??initrd?/initramfs.img

[root@localhost?~]#?bash?cpcommand.sh??#第八題的腳本
????????????????????將ls,bash,cat命令及所依賴的庫文件復制到/mnt/sysroot/中,
????????????????????并將新加的磁盤掛載到新虛擬機中啟動測試

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


創建kickstart文件的方式:
????????????(1)?直接手動編輯;
????????????????依據某模板修改;
????????????(2)?可使用創建工具:system-config-kickstart?(CentOS?6)
????????????????依據某模板修改并生成新配置;

[root@localhost?~]#?yum?install?system-config-kickstart?-y
[root@localhost?~]#?system-config-kickstart??#使用kickstart圖形另存為一個kickstart文件


kickstart文件的格式:
????????命令段:指明各種安裝前配置,如鍵盤類型等;
????????程序包段:指明要安裝的程序包組或程序包,不安裝的程序包等;
????????????%packages
????????????@group_name
????????????package
????????????-package
????????????%end
????????腳本段:
????????????%pre:?安裝前腳本
????????????????運行環境:運行于安裝介質上的微型Linux環境

????????????%post:?安裝后腳本
????????????????運行環境:安裝完成的系統;

????????命令段中的命令:
????????????必備命令
????????????????authconfig:?認證方式配置
????????????????????authconfig?--useshadow??--passalgo=sha512
????????????????bootloader:bootloader的安裝位置及相關配置
????????????????????bootloader?--location=mbr?--driveorder=sda?
???????????????????????????????--append="crashkernel=auto?crashkernel=auto?
?????????????????????????????????rhgb?rhgb?quiet?quiet"
????????????????keyboard:?設定鍵盤類型
????????????????lang:?語言類型
????????????????part:?創建分區
????????????????rootpw:?指明root的密碼
????????????????timezone:?時區

????????????可選命令
????????????????install?OR?upgrade
????????????????text:?文本安裝界面
????????????????network
????????????????firewall
????????????????selinux
????????????????halt
????????????????poweroff
????????????????reboot
????????????????repo
????????????????user:安裝完成后為系統創建新用戶
????????????????url:?指明安裝源

創建引導光盤:
????????????1)復制系統安裝光盤/Packages?/repodata外的所有文件到目錄/myiso/
????????????2)創建引導光盤鏡像
????????????#?mkisofs?-R?-J?-T?-v?--no-emul-boot?--boot-load-size?4?
??????????????--boot-info-table?-V?"CentOS?6.6?x86_64?boot"?
??????????????-b?isolinux/isolinux.bin?-c?isolinux/boot.cat?-o?/root/boot.iso?myiso/

4、寫一個腳本

  • (1) 能接受四個參數:start, stop, restart, status
  • start: 輸出“starting 腳本名 finished.”
  • (2) 其它任意參數,均報錯退出;

[root@localhost?~]#?cat?status.sh?
#!/bin/bash
#
[?-d?/var/log/subsys?]?||?mkdir?-p?/var/log/subsys
lockfile=/var/log/subsys/$0
Usage(){
????echo?"Usage:$0?(start|stop|restart|status)"?
}

Start(){
????[?-e?$lockfile?]?&&?echo?"$0?already?Started."?||?touch?$lockfile?&&?echo?"Starting?$0?finished."
}

Stop(){
????[?-e?$lockfile?]?&&?rm?-f?$lockfile?&&?echo?"Stoping?$0?finished."?||?echo?"$0?no?Running."
}

Status(){
????[?-e?$lockfile?]?&&?echo?"$0?is?Running."?||?echo?"$0?is?Stopped."
}

[?$#?-ne?1?]?&&?Usage?&&?exit?1

case?$1?in
????start)
????????Start;;
????stop)
????????Stop;;
????restart)
????????Stop&&Start;;
????status)
????????Status;;
????*)
????????Usage
????????exit?2
????????;;
esac

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

  • (1) 如果登錄了,則顯示用戶登錄,腳本終止;
  • (2) 每3秒鐘,查看一次用戶是否登錄;

[root@localhost?~]#?cat?userlogin.sh?
#!/bin/bash
#
[?$#?-ne?1?]?&&?echo?"Usage:$0?username"?&&?exit?1
while?true;do
????who?|?grep?"^\<$1\>"?&>/dev/null?&&?echo?"$1?Login."?&&?exit?0?||?sleep?3
done

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

  • cpu) display cpu info
  • mem) display memory info
  • disk) display disk info
  • quit) quit
  • 非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;

[root@localhost?~]#?cat?display.sh?
#!/bin/bash
#
cat?<<?EOF
cpu)?display?cpu?info
mem)?display?memory?info
disk)?display?disk?info
quit)?quit
========================
EOF
Chose(){
read?-p?"Choose?a?option:(cpu|mem|disk|quit)"?option
}

Chose
until?[?$option?==?"quit"?];do
????case?$option?in
????????cpu)
????????????lscpu?&&?Chose;;
????????mem)
????????????free?-m?&&?Chose;;
????????disk)
????????????lsblk?&&?Chose;;
????*)
????????????echo?"Error,chose?again!"?&&?Chose;;?
????esac
done

7、寫一個腳本

  • (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
  • (2) 提示用戶輸入一個用戶名或輸入“quit”退出;
  • 當輸入的是用戶名,則調用函數顯示用戶信息;
  • 當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:

[root@localhost?~]#?cat?uidshell.sh?
#!/bin/bash
Show(){
????uid=`id?-u?$1`
????usershell=`grep?"^\<$1\>"?/etc/passwd?|?cut?-d:?-f7`
????echo?"UID:$uid??Shell:$usershell"?&&?chose
}

chose(){
????read?-p?"Enter?a?Username?or?quit:"?username
}

chose
until?[?$username?==?"quit"?];do
????!?id?$username?&>/dev/null?&&?echo?"No?such?User."?&&?chose?||?Show?$username
done

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

  • (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
  • (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
  • (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;

[root@localhost?~]#?cat?cpcommand.sh?
#!/bin/bash
#
dir=/mnt/sysroot
cpbin(){
bincmddir=`echo?$cmd?|?grep?-o?-E?"^/.*/"`
[?-d?$dir$bincmddir?]?||?mkdir?-p?$dir$bincmddir
[?-z?$dir$cmd?]?||?cp?$cmd?$dir$bincmddir
}

cplib(){
liblist=`/usr/bin/ldd?$cmd?|?grep?-o?"[^[:space:]]*/lib[^[:space:]]*"`
for?lib?in?$liblist;do
????cmddir=`echo?$lib?|?grep?-o?-E?"^/.*/"`
????[?-d?$dir/$cmddir?]?||?mkdir?-p?$dir$cmddir
????[?-z?$dir/$lib?]?||?cp?$lib?$dir$cmddir
done
}
???
while?true;do
read?-p?"Enter?a?Command:(Commamd|quit)"?command
[?$command?==?"quit"?]?&&?echo?"quit..."?&&?exit?0
which?$command?&>/dev/null?&&?cmd=`which?--skip-alias?$command`?||?echo?"No?correct?Command."
[[?-x?$cmd?]]?&&?cpbin?$command?&&?cplib?$command?||?echo?"No?correct?Command."
done

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87434

(0)
N27_jiangyefanN27_jiangyefan
上一篇 2017-09-20 00:03
下一篇 2017-09-20 00:12

相關推薦

  • 文本處理-vim編輯器

    命令格式、(1)模式、(2)關閉文件、(3)可視化模式、(4)使用多個“窗口”、(5)定制vim的工作特性、(6)示例

    2018-03-13
  • Linux入門命令(一)

    已經一年沒有在接觸過Linux了,經過一個星期的Linux學習之后,又重新對她產生了興趣,本周學習了一些Linux入門級的命令: (1)     (1)tty 這個命令是查看當前所處于的中終端信息的,同樣也可以使用 who am i ,who以及w來查看終端信息. 終端也還有物理終端、虛擬終端以及偽終端之分,在虛擬機下…

    2017-07-16
  • 誤刪除centos6.8內核修復全過程

    關于誤刪除系統內核或內核損壞修復教程,本教程主要詳細描述系統內核或內核損壞修復過程中步驟詳解 一.操作環境 硬件:華碩筆記本 軟件:VMware Workstation Pro 12版本  Centos 6.8.iso鏡像 二,修復步驟 第一步,我們先要掛載centos6.8的鏡像,然后光盤啟動 進入系統救援模式 進入當前系統的根目錄 我們需要手動…

    Linux干貨 2016-09-05
  • Storm集群安裝詳解

    storm有兩種操作模式: 本地模式和遠程模式。 本地模式:你可以在你的本地機器上開發測試你的topology, 一切都在你的本地機器上模擬出來;  遠端模式:你提交的topology會在一個集群的機器上執行。 本文以Twitter Storm官方Wiki為基礎,詳細描述如何快速搭建一個Storm集群,其中,項目實踐中遇到的問題及經驗總結,在相應章…

    Linux干貨 2015-04-04
  • shell入門 (一)

    Shell就是一個命令行解釋器 ,它的作用是解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條,這種方式稱為交互式(Interactive)。 Shell還有一種執行命令的方式稱為批處理 (Batch),用戶事先寫一 個Shell腳本 (Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一…

    Linux干貨 2017-08-26
  • Python函數式編程指南(三):迭代器

    這一篇我們將討論迭代器。迭代器并不是函數式編程特有的東西,但它仍然是函數式編程的一個重要的組成部分,或者說是一個重要的工具。 轉載請注明原作者和原文地址:) 3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是訪問集合內元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素都被訪問一遍后結束。 迭代器不能回退,只能往前進行迭代。這并…

    Linux干貨 2015-03-11
欧美性久久久久