馬哥教育網絡班21期+第10周課程練習

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

POST -->Boot Sequence(BIOS) --> Boot Loader(MBR) --> Kernel(ramdisk) -->rootfs --> switchroot --> /sbin/init -->(/etc/inittab,/etc/init/*.conf) --> 設定默認運行級別 -->系統初始化腳本 -->關閉或啟動對應級別下的服務 -->啟動終端
第一階段:BIOS啟動引導階段;在該過程中實現硬件的初始化以及查找啟動介質;從MBR中裝載啟動引導管理器(GRUB)并運行該啟動引導管理
第二階段:GRUB啟動引導階段;裝載stage1,裝載stage1.5,裝載stage2,讀取/boot/grub.conf文件并顯示啟動菜單,裝載所選的kernel和initrd文件到內存中
第三階段:內核階段:運行內核啟動參數;解壓initrd文件并掛載initd文件系統,裝載必須的驅動;掛載根文件系統
第四階段:Sys V init初始化階段:啟動/sbin/init程序;運行rc.sysinit腳本,設置系統環境,啟動swap分區,檢查和掛載文件系統;讀取/etc/inittab文件,運行在/et/rc.d/rc.d中定義的不同運行級別的服務初始化腳本;打開字符終端1-6號控制臺/打開圖形顯示管理的7號控制臺

馬哥教育網絡班21期+第10周課程練習

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

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

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

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

  4. 為grub提供配置文件;

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

[root@www boot]# fdisk /dev/sdb
Command (m for help): n
Partition number (1-4): 1
First cylinder (1-522, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-522, default 522): +200M
 
Command (m for help): n
Partition number (1-4): 2
First cylinder (27-522, default 27): 
Using default value 27
Last cylinder, +cylinders or +size{K,M,G} (27-522, default 522): +3G
 
Command (m for help): p
Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 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: 0xb38f53ee
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          26      208813+  83  Linux
/dev/sdb2              27         419     3156772+  83  Linux
 
Command (m for help): w
The partition table has been altered!
[root@www boot]# cat /proc/partitions
major minor  #blocks  name
 
   8        0    8388608 sda
   8        1     204800 sda1
   8        2    6144000 sda2
  ...
[root@www ~]# mke2fs -t ext4 /dev/sdb1
[root@www ~]# mke2fs -t ext4 /dev/sdb2
[root@www ~]# mkdir /mnt/boot
[root@www ~]# mount /dev/sdb1 /mnt/boot
[root@www ~]# grub-install --root-directory=/mnt /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
...
 
(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb
[root@www ~]# cd /mnt
[root@www mnt]# ll
總用量 5
drwxr-xr-x  4 root root 1024 8月  16 22:14 boot
drwxr-xr-x. 4 root root 4096 8月  14 19:21 sysroot
[root@www mnt]# ll boot
總用量 13
drwxr-xr-x 2 root root  1024 8月  16 22:14 grub
drwx------ 2 root root 12288 8月  16 22:08 lost+found 
[root@www mnt]# cp /boot/vmlinuz-2.6.32-642.el6.i686 /mnt/boot/vmlinuz-2.6.32-l42.el6.i686
[root@www mnt]# cp /boot/initramfs-2.6.32-642.el6.i686.img /mnt/boot/initramfs-2.6.32-642.el6.i686.img
[root@www mnt]# vim /mnt/boot/grub/grub.conf
  編輯如下:
defaut=0
timeout=5
title CenOS
        root (hd0,0)
        kernel /vmlinuz-2.6.32-l42.el6.i686 ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs-2.6.32-642.el6.i686.img
[root@www ~]# mount -t ext4 /dev/sdb2 /mnt/sysroot 
[root@www boot]#cd /mnt/sysroot
[root@www sysroot]# mkdir -p bin sbin usr tmp root dev proc sys var mnt media lib lib64 home 
[root@www sysroot]# ll
總用量 56
drwxr-xr-x. 2 root root 4096 8月  14 19:25 bin
drwxr-xr-x  2 root root 4096 8月  16 22:32 dev
...
drwxr-xr-x  2 root root 4096 8月  16 22:32 var 
執行庫文件復制

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

系統安裝完成后,anaconda一般都會在root 家目錄生成一個當前系統的kickstart 文件,我參考這個文件制作我自己的kickstart文件。
[root@www ~]# cp anaconda-ks.cfg myks.cfg
[root@www ~]# vim myks.cfg 
編輯是myks.cfg 內容:
# Kickstart file automatically generated by anaconda.and I modify it by myself
 
#version=DEVEL
install
cdrom
lang zh_CN.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$IjI6cJDojRCvIVR6$I59v2xYd8ikloSXoQH6MVZdUv/ikm0yNqBhrO8jXrlHY7iqbnE86sPPJ8sg.yfqs6oYCuG8TvogX.kjGY15nI1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all
part /boot --fstype=ext4 --size=200
part / --fstype=ext4 --size=6000
part swap --size=600
repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
%packages --nobase
@core
%end
 
制作引導鏡像的過程:
1.把安裝光盤放入光驅
2.
[root@www ~]# mkdir /media/cdrom
[root@www ~]# mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@www ~]# ls /media/cdrom
CentOS_BuildTag  GPL     isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL
EULA             images  Packages  repodata                  RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6
[root@www ~]# mkdir /tmp/myiso
[root@www myiso]#cd /tmp/myiso
[root@www myiso]# cp /media/cdrom/isolinux /tmp/myiso -a -r
[root@www myiso]# cp -r -a /root/myks.cfg /tmp/myiso
[root@www myiso]# ll
總用量 8
dr-xr-xr-x. 2 root root 4096 5月  22 12:17 isolinux
-rw-------. 1 root root  903 8月  17 19:20 myks.cfg
[root@www myiso]# 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/
這樣我們就在/root目錄下創建了名為boot.iso的光盤引導鏡像

4、寫一個腳本

  1. 能接受四個參數:start, stop, restart, status
      start: 輸出“starting 腳本名 finished.”
      …

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

#!/bin/bash
#	
if [ $# -lt 1 ];then
cat << EOF
Usage:service.sh start|stop|restart|status
EOF
	exit 1
fi
case $1 in
start)
	echo "start $0 finish"
;;
stop)
	echo "stop $0 finish"
;;
restart)
	echo "stop $0 fiish."
	echo "start $0 fiish."
;;
status)
	echo "$0 status"
;;
*)
	echo "Erro command."
	exit 2
;;
esac

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

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

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

#!/bin/bash
read -p "Enter a user name: " username
until who | grep "^$username" &> /dev/null; do
    sleep 3
done    
echo "$username logged on." 
    exit 0

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

  • cpu) display cpu info

  • mem) display memory info

  • disk) display disk info

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

#!/bin/bash
#
info() {
cat << EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF
}
info
read -p "Enter command:" cmd
case $cmd in
cpu)
	cat /proc/cpuinfo
;;
mem)
	cat /proc/meminfo
;;
disk)
	fdisk -l
;;
quit)
	echo "quiting"
	exit 0
;;
*)
	echo "Erro command."
	info			
read -p "Enter command.": $1
;;
esac

7、寫一個腳本

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

  2. 提示用戶輸入一個用戶名或輸入“quit”退出;
    當輸入的是用戶名,則調用函數顯示用戶信息;
    當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:

#!/bin/bash
#
userinfo() {
   uid=`cat /etc/passwd | grep "^$user" |cut -d: -f3`
   bs=`cat /etc/passwd | grep "^$user" |cut -d: -f7`
	echo "$user uid:$uid bash:$bs"
}
qt() {
			if [ $cmd == "quit" ];then
				break
			else
				echo "No exist $cmd user."
				read -p "Enter username or quit :" cmd
			fi	
}
cs() {
	while `id $cmd &>/dev/null` ;do
		user=$cmd
		userinfo
		read -p "Enter username or quit :" cmd
		until `id $cmd &> /dev/null`;do
			qt
		done
			cs
	done
}
read -p "Enter username or quit :" cmd
if [ $cmd != '' ];then
	until `id $cmd &> /dev/null`;do
		qt
	done
		cs
else
	read -p "Enter username or quit :" cmd
	cs
fi

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

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

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

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

#!/bin/bash
#
syspath=/mnt/sysroot
[ -d $syspath ] || mkdir /mnt/sysroot
 
read -p "please input a command:" cmd 
libcp() {
    for lib in $(ldd $1 |  grep -o "[^[:space:]]*/lib[^[:space:]]*"); do
        libdir=$(dirname $lib)
        [ -d $syspath$libdir ] || mkdir -p $syspath$libdir
        [ -f $syspath$lib ] || cp $lib $syspath$lib
    done
}
 
while [ "$cmd" != 'quit' ]; do
    if ! which $cmdname &> /dev/null; then
        read -p "No such command, enter again: " cmd
        continue
    fi
    cmd=$(which --skip-alias $cmdname)
    cmnddir=$(dirname $cmd)
 
    [ -d $syspath$cmnddir ] || mkdir -p $syspath$cmnddir
    [ -f $syspath$cmd ] || cp $cmdname $syspath$cmd
    libcp $cmd
    read -p "Another command(quit): " cmd
done

   

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

(0)
Net21_LionNet21_Lion
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • 編寫服務腳本/root/bin/testsrv.sh和備份腳本/root/bin/copycmd.sh

    編寫服務腳本/root/bin/testsrv.sh,完成如下要求 (1) 腳本可接受參數:start, stop, restart, status (2) 如果參數非此四者之一,提示使用格式后報錯退出 (3) 如是start:則創建/var/lock/subsys/SCRIPT_NAME, 并顯示“啟動成功” 考慮:如果事先已經啟動過一次,該如何處理? (…

    Linux干貨 2016-08-24
  • N25-第五周

    – 1     顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;     grep "^[[:space:]]\+" /boot/grub/grub.conf2 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的…

    Linux干貨 2017-01-02
  • Linux下which、locate、find 命令查找文件

    在Linux下我們經常要查找某個文件,但是又不記得文件位置,可以使用一些命令來搜索,目前接觸到的文件命令有以下幾個 which 查看可執行文件的位置 locate 基于數據庫查找文件位置 find 實時搜索文件 1、 Which   語法:which 可執行二進制文件名稱   Which是通過PATH環境變量查找文件的,在PATH 指定的…

    2017-08-14
  • 硬鏈接和軟鏈接的區別

    硬鏈接和軟鏈接在文件系統實現上的區別決定了兩者之間功能上的不同,也就是說硬鏈接和軟鏈在文件系統上兩者實現的方式不同,讓其各自具有不同的功能和特色,也決定了各自的優點和缺點。接下同文件系統上創建硬鏈接和軟鏈接看各自的特點。 一文件系統上創建硬鏈接 下面命令是在文件系統上創建一個硬鏈接: ~]# ln test /testdir/t…

    Linux干貨 2016-10-29
  • 如何在微軟Azure云機上添加新磁盤

    大家好: 最近在項目實踐中,分享下如何在微軟Azure云機上添加新磁盤。 首先需要查看下是否有未用上的磁盤,先fdisk -l查(看下圖)并和Azure技術確認該磁盤是否可永久保存數據: 然后找到未分區的磁盤號,如上圖中的/dev/sdc,再 fdisk /dev/sdc后開始在該新磁盤上進行分區創建: 為方便管理,我們一般就創建一個分區,然后進行格式化: …

    Linux干貨 2016-11-27
  • LAMP及nfs、samba的綜合練習

    練習一: 配置第一臺主機:服務端共享目錄: [root@localhost /]# yum install nfs-utils [root@localhost /]# systemctl start rpcbind [root@localhost /]# sy…

    Linux干貨 2016-10-24
欧美性久久久久