N25_第十周作業

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

POST –> BootSequence(BIOS) –>Bootloader(MBR) –>Kernel(ramdisk)–>rootfs(readonly)–>switchroot–>/sbin/init(設置默認運行級別–>運行系統初始化腳本,完成系統初始化–>關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務–>設置登陸終端[啟動圖形界面])

1)加電自檢(POST),BIOS啟動引導階段;

     在該過程中實現硬件的初始化以及查找啟動介質;

     從MBR中裝載啟動引導管理器(GRUB)并運行該啟動引導管理;

     MBR才512bytes,所以現在很多都用UEFI,GPT方式咯

2)GRUB(Grand Uniform Bootloader)啟動引導階段;

   功能:提供一個菜單,允許用戶要選擇啟動的不同系統或內核版本,把其內核加載到RAM中的特定空間,解壓、展開,讓后控制權移交給kernel

     裝載stage1

     裝載stage1.5

     裝載stage2(因為MBR很小,所以這里沒有限制哦)

     讀取/boot/grub.conf文件并顯示啟動菜單;

     裝載所選的kernel和initrd文件到內存中

  PS:LILO:支持柱面1024,現在基本都用在android手機,不用再PC機了

3)內核階段:

    探測可識別到所有硬件設備

    加載各種硬件驅動程序;(有可能會借助于randisk加載驅動)

    以只讀方式掛載根文件系統

    運行用戶空間的第一個應用程序:/sbin/init

 ps: ramdisk:Linux 內核特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問:

ramdisk –> ramfs

initramfs — dracut,mkinitrd (CenetOS6,7

4)init用戶空間初始化階段:

     啟動/sbin/init程序;

     運行rc.sysinit腳本,設置系統環境,啟動swap分區,檢查和掛載文件系統;

     讀取/etc/inittab文件,運行在/et/rc.d/rc<#>.d中定義的不同運行級別的服務初始化腳本;

     打開字符終端1-6號控制臺/打開圖形顯示管理,設置登錄

   

  init程序:

CentOS 5 : /ect/inittab

CentOS 6 :Upstart

  /etc/inittab:這個文件已廢

  /etc/init/*.conf,

CentOS 7 : systemd

  配置文件:/usr/lib/systemd/system/, /etc/systemd/system/


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

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

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

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

  (4) 為grub提供配置文件;

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

    功能:在其他系統上制作一個完整的grub引導系統,并且能跑起來?。?/strong>

    在虛擬機中另外添加磁盤,fdisk /dev/sdb  # 創建三個分區,boot,/,swap

    ~]#partx -a /dev/sdb

    ~]#mke2fs -t ext4 /dev/sdb1

    ~]#mke2fs -t ext4 /dev/sdb3

    ~]#mkswap /dev/sdb2

    注意:這個在centos7沒有做成功,centos6可以的

    注意:安裝grub引導時,必須要指定boot的,不能用當前系統

    ~]#mkdir /mnt/boot

    ~]#mount /dev/sdb1  /mnt/boot/

    安裝grub

    ~]#grub-install –root-directory=/mnt  /dev/sdb   ;指定根在什么地方,不能寫到/mnt/boot

    ~]#cd /mnt/boot ;有了第一階段和第二階段的文件,還差,配置文件、內核和rootfs

    ~]#cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz

    ~]#cp /boot/initramfs-2.6.32-431.el6.x86_64.img   /mnt/boot/initramfs.img

    ~]#vim /mnt/boot/grub/grub.conf ; 注意,下列信息 是配置后單獨分系統使用的,所以,sda,不是sdb

    default=0

    timeout=5

    title CentOS (smile)

            root (hd0,0)

            kernel /vmlinuz ro root=/dev/sda3  selinux=0  init=/bin/bash

            initrd /initramfs.img

    mkdir /mnt/sysroot

    mount /dev/sdb3 /mnt/sysroot

    cd /mnt/sysroot

    mkdir -pv  etc bin sbin lib lib64 usr home tmp mnt var proc root

    cp /bin/bash  /mnt/sysroot/bin

    ldd /bin/bash | grep "/lib[^[:space:]]*"  ;獲取這個命令依賴的庫文件

    注意:這里調用我寫的一個腳本,復制命令以及相關的依賴庫文件

    

    #!/bin/bash

    #

    #Athor:smile

    #Date:2017-1-22

    #Filename: copy_Command_Lib.sh

    #Pragram:

    #

    #  Copy enter "command" and "libraries" file

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    export PATH

     

    #指定的根路徑

    dir_path=/mnt/sysroot/  

     

    # 傳遞給函數可執行命令,復制命令程序和依賴庫文件到指定目錄 ,并且取掉絕對路徑

    f_copy_com_lib() {

     command_path=$(which  –skip-alias "$1" ) #命令取絕對路徑

     temp_dir=${command_path#*/} # 取掉絕對路徑/

     temp_dir=${temp_dir%/*} # 取掉后面的文件文件名

     mkdir -p $dir_path$temp_dir # 創建/mnt/sysroot下對應的的目錄

     cp -rf $command_path  $dir_path$temp_dir

     

    #獲取命令路徑要注意兩個問題:第一個要避開which查出結果有alias別名問題, which COM | grep -v "alias" 除去別名

     #第一步,查出命令路徑,第二步,去掉alias,第三步,查出命令所以來的庫,第四步,獲取庫的準確路徑

     for lib_file in $( ldd $(which –skip-alias  "$1"  ) | grep -o "/lib[^[:space:]]*") ; do

     temp_dir=${lib_file#*/} #取掉絕對路徑 ${string#*word}

     temp_dir=${temp_dir%/*} #去掉基名

     mkdir -p $dir_path$temp_dir #創建一個庫文件的路徑

     cp -rf $lib_file   $dir_path$temp_dir  #復制庫文件到指定的目錄中

     #echo "${a_library[$i]}" #let i++

     echo "$lib_file"

     echo

     done

    }

     

    while true ; do

     

    cat << EOF

    +++++++++++++++++++++++++++++++++++++++++++++++++

    command)Please enter the system existing  command

    quit) quit script

    +++++++++++++++++++++++++++++++++++++++++++++++++

    EOF

     

     read -p "Please enter existing command:" v_command

     if [ $v_command == "quit" ] ; then

     break

     fi

     #如果輸入的不存在的命令,處理

     if ! ( which $v_command &>/dev/null ) ; then

     echo "ERROR:command not found!"

     continue # 進行下一次循環

     fi

     f_copy_com_lib  $v_command

     

    done

    cp ….

    chroot  /mnt/sysroot   ;切換根命令 ,進行測試

    exit

    sync   ;同步到磁盤

    第二步:

    創建新的虛擬機,加載配置好的分區

blob.png

如果需要啊添加虛擬機的話,就能就在grub中添加引導記錄
mount /dev/sdb1   /mnt/boot

blob.png

blob.png

blob.png

blob.png


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

制作kickstart文件,我目前我喜歡去安裝一個文件系統,等系統安裝好了,在/root/anaconda-ks.cfg下獲取,再來針對改一改(自己能力弱吧,也可以在網上獲取的,CentOS6和CentOS7產生的kickstart文件還是有點不一樣,不過CentOS應該可以兼容的)

kickstart文件的模板

命令段

指定各種安裝前配置選項,如鍵盤類型

必備命令

可選命令

程序段

指明要安裝程序包,以及包組,也包括不安裝的包

%packages ;程序包開始了

@group_name

package

-package  ;指定不要的程序包

程序包

%end

腳本段

%pre:安裝前腳本

運行環境:運行安裝介質微型linux系統環境

%end

%post:安裝后腳本

運行環境:安裝后的運行環境

%end

有多種方式自動話實現安裝,引導光盤中,http和ftp網絡上,

用光盤下的最小引導系統單獨做成關盤鏡像:

~]# cp -rf  /media/isolinux   /mnt/myiso

~]# cp   myks.cfg  /mnt/myiso

mnt]# 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 myiso/

#創建時,把制作好的myks.cfg文件 放在myiso目錄下,并且和isolinux目錄同一個

怎加載ks.cfg文件

boot:linux ip=192.168.10.19  netmask=255.255.255.0  ks=http://192.168.10.100/ks.cfg  ;前面的ip地址是配置當前主機的地址

boot: linux ks=cdrom:/path/to/ks_file


kickstart文件中各個字段的解讀:

authconfig:認證方式配置

authconfig –enableshadow –passalgo=sha512

bootloader:定義bootloader的安裝位置及相關配置

bootloader –location=mbr –driveorder=sda –append="crashkernel=auto rhgb quiet"

keyboard us 

lang:語言類型

part:分區

part /boot –fstype=ext4 –size=500

part pv.008002  –size=51200

clearpart:清除分區

   clearpart –none –drives=sda;清空磁盤分區

 volgroup:創建卷組

    volgroup myvg  –pesize=4096 pv.008002

 

 logvol:創建邏輯卷

  logvol /home –fstype=ext4 –name=lv_home –vgname=myvg –size=4122


rootpw:管理員密碼

rootpw –iscrypted $llll

生成密碼的方式:

~]#openssl passwd -1 -salt `openssl rand -hex4` 

timezone:時區

timezone Asia/Shanghai

可選命令

install OR upgrade:安裝或升級

text:安裝界面類型,text為tui,默認是gui

network:配置網絡接口

network –noboot yes –device eth0 –bootproto dhcp  –noipv6 

防火墻:firewall  –server=ssh 

firewall –disabled

selinux :SELinux(內核安全機制

selinux  disabled

  halt,poweroff 或者reboot,安裝后的行為

  repo:指明安裝時使用的repository

  repo –name="CentOS" –baseurl=cdrom:sr0  –cost=100 ;cost是開銷,默認是1000,這里比較優先 

  url:指明安裝時使用的 repository ,但為url格式

  url –url=http://192.168.10.102/cobbler/ks_mirror/CentOS-7.0-x86_64/


4、寫一個腳本

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

   start: 輸出“starting 腳本名 finished.”

   …

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

blob.png

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

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

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

blob.png

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

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

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

blob.png

blob.png

7、寫一個腳本

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

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

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

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

blob.png

blob.png

原創文章,作者:不忘初衷,如若轉載,請注明出處:http://www.www58058.com/67426

(0)
不忘初衷不忘初衷
上一篇 2017-02-14 15:02
下一篇 2017-02-14 16:04

相關推薦

  • 軟鏈接和硬鏈接的區別

    軟鏈接和硬鏈接的區別 什么是鏈接: 文件都是文件名和數據組成的,在linux中被分成兩部分:數據和元數據。數據是記錄文件的真實內容的地方;元數據是記錄文件屬性的地方:創建者、大小、創建時間等信息。元數據中的inode號這是唯一標識文件身份的屬性。在linux中,文件的inode號可以通過ls –i命令查看。在linux中為了解決文件共享使用,引入了兩種鏈接:…

    Linux干貨 2016-10-20
  • 第一天上課

                      2016.10.11 第一天上課 上課環境安排 電腦IP安排 學生IP地址安排     上課軟件安裝    虛擬機安裝 操作系統發展史    第一代計算機:電子管計算機&nb…

    Linux干貨 2016-10-18
  • 【N25第六周作業】VIM、crontab、簡單腳本

    請詳細總結vim編輯器的使用并完成以下練習題 第二周有寫過vim的用法,請查看連接: 周期性任務計劃:cron 服務程序: cronie:主程序包,提供了crond守護進程及相關輔助工具; 確保crond守護進程(daemon)處于運行狀態: CentOS 7: systemctl  status  cron…

    Linux干貨 2016-12-27
  • Linux程序包管理

    Linux程序包管理 RPM包基礎 RPM YUM 編譯安裝 概述 Linux上的程序包管理,是我們的必備技能,本文將從三個視角:rpm、yum、源碼編譯來淺析Linux的程序包管理。首先,我們來看下本文的主要內容: – 程序包的命名- RPM: 程序包管理器    安裝、卸載、升級、查詢…

    Linux干貨 2016-08-29
  • 第一次測試

    1.第一層  video  視頻 2.第二層  audio  音頻 3.第三層  字幕 查看視頻詳細信息 ffmpeg -i 視頻文件 轉碼修改視頻格式 ffmpeg -i 輸入文件   輸出文件格式 視頻文件中提取音頻和視頻 提取視頻中的音頻 ffmpeg -i CP0454900262.ts -…

    Linux干貨 2017-02-06
  • 淺談正則表達式

    1.       什么是正則表達式 基本說來,正則表達式是一種用來描述一定數量文本的模式。Regex代表Regular Express。本文將用<<regex>>來表示一段具體的正則表達式。 一段文本就是最基本的模式,簡單的匹配相同的文本。   2. &n…

    Linux干貨 2016-08-12

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-03-30 14:09

    非常非常詳細,很棒。

欧美性久久久久