集中練習8-bash腳本及系統啟動

集中練習8-bash腳本及系統啟動

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

2. 為運行于虛擬機上的CentOS6添加一塊硬盤,提供兩個主分區;
(1) 為硬盤新建兩個主分區,并為其安裝grub
(2) 為硬盤的第一個主分區提供內核和ramdisk文件,第二個分區提供rootfs
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件
(4) 為grub提供配置文件
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機
“`
~]# fdisk -l /dev/sdb

Disk /dev/sdb: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 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: 0x00000000

~]# fdisk /dev/sdb,創建兩個主分區,并設置為83格式。

~]# kpartx -af /dev/sdb

~]# mkdir -pv /mnt/boot
mkdir: created directory `/mnt/boot’

~]# mkfs.ext4 /dev/sdb1

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

~]# 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

~]# 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
default=0
timeout=5
title CentOS (Express)
root (hd0,0)
kernel=/vmlinuz ro selinux=0 root=/dev/sda2 init=/bin/bash
initrd /initramfs.img

~]# mkdir /mnt/sysroot
~]# mkfs.ext4 /dev/sdb2
~]# mount /dev/sdb2 /mnt/sysroot

使用拷貝命令及其依賴庫的腳本進行命令復制。
==========================================================================
#!/bin/bash
#
DEST=/mnt/sysroot
read -p “Please enter a command: ” CPCMD
until [ $CPCMD == ‘q’ ]; do
if `/usr/bin/which $CPCMD &> /dev/null`; then
CMDPATH=`/usr/bin/which $CPCMD | grep -o “/.*$CPCMD”`
DESTCMD=`dirname $CMDPATH`
ls $DEST$DESTCMD &> /dev/null || mkdir -pv “$DEST$DESTCMD” &> /dev/null
cp $CMDPATH $DEST$DESTCMD/
echo -e “\n\033[31mCommand $CPCMD has been copied to $DEST$DESTCMD.\033[0m\n”
for dep in `ldd $CMDPATH | grep -o “/[^[:space:]]*”`; do
DESTLIB=`dirname $dep`
ls $DEST$DESTLIB &> /dev/null || mkdir -pv “$DEST$DESTLIB” &> /dev/null
cp $dep $DEST$DESTLIB/
echo -e “\033[35mDependency Library $dep has been copied to $DEST$DESTLIB.\033[0m”
done
else
echo “Wrong command or builtin command.”
fi
read -p “Please reenter a command: ” CPCMD
done
==========================================================================

執行sync命令確保數據已經全部寫入到磁盤
新建虛擬機,并指定該新增磁盤為新虛擬機的唯一磁盤,啟動即可。
“`
3. 制作一個kickstart文件以及一個引導鏡像。描述其過程。
~]# yum -y install system-config-kickstart
這個命令是需要單獨安裝的:
~]# yum -y install system-config-kickstart
該軟件需要調用圖形界面,首先應該確保服務器上的圖形界面已經安裝完成,并且X windows已經啟動了。
~]# startx
~]# ps -ef | grep X
使用SecureCRT SSH遠程連接到服務器,需要設置幾個地方才能夠使用system-config-kickstart命令
“`
(1) 編輯sshd_config:
~]# vi /etc/ssh/sshd_config 確保有如下的行:
X11Forwarding yes
這樣配置的作用就是允許 SSH的X 轉發。
(2) 下載并安裝Xming
Xming 是一個配置簡單而功能強大的開源 X Server,可以運行在MS的XP/2003/Vista操作系統下。
Xming 的主頁:http://www.straightrunning.com/XmingNotes/
Xming 的SourceForge 頁面:http://sourceforge.net/projects/xming/
這里下載到Xming-6-9-0-31-setup.exe,雙擊安裝至完成。
(3) 在SecureCRT中右鍵點擊要使用system-config-kickstart命令的Linux服務器 –> 屬性(properities)–> Connection –> Port Forwarding –> Remote/X11 –> 勾選“Forward X11 packets”和“Enforce X11 authentication”
(4) 在SecureCRT中右鍵點擊要使用system-config-kickstart命令的Linux服務器 –> 屬性(properities)–> Connection –> Port Forwarding –> Add –> 輸入轉發名稱(自己決定)–> 端口號6000 –> 在Application處選擇xming.exe文件的絕對路徑 –> 點擊OK
“`
~]# system-config-kickstart &
按照自己的想法設定所有安裝選項,并將配置最終保存下來。

將Linux安裝光盤加載至光驅
~]# mkdir /mnt/media
~]# mount /dev/sr0 /mnt/media
~]# cp -r /mnt/media/isolinux/ /myboot/
~]# cp /PATH/TO/KS_FILE /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/
使用boot.iso啟動系統
4. 寫一個腳本
(1) 能接受四個參數:start,stop,restart,status
start:輸出“starting 腳本名 finished.”
……
(2) 其他任意參數,均報錯退出
“`
#!/bin/bash
#
read -p “Please make a choice {start|stop|restart|status}: ” Choice
case $Choice in
start)
echo “Starting script finished.”
;;
stop)
echo “Stopping script finished.”;;
restart)
echo “Restarting script finished.”;;
status)
echo “Checking script status finished.”;;
*)
echo “Wrong choice.”
esac
“`
5. 寫一個腳本,判斷給定的用戶是否登陸了當前系統;
(1) 如果登陸了,則顯示用戶登錄,腳本終止
(2) 每3秒鐘,查看一次用戶是否登陸;
“`
#!/bin/bash
#
while true; do
who | grep “tom” &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo user tom has logged into the system at `date +’%Y%m%d %H:%M’`
exit 0
fi
sleep 3
done
“`
6. 寫一個腳本,顯示用戶選定要查看的信息
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項,則提示錯誤,并要求用戶重新選擇,直到給出正確選擇為止
“`
#!/bin/bash
#
cat << EOF
Please make a choice:
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF

read -p “Your choice: ” CHOICE
while true; do
case $CHOICE in
cpu)
cat /proc/cpuinfo
exit 0;;
mem)
free -m
exit 0;;
disk)
fdisk -l
exit 0;;
quit)
echo “Quiting…”
exit 0;;
*)
echo “Wrong choice.”
read -p “Your choice: ” CHOICE
esac
done
“`
7. 寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當輸入quit,則退出腳本;進一步地,顯示鍵入的用戶相關信息后,再次提醒輸入用戶名或quit
“`
#!/bin/bash
#
function User_UID_Shell {
User_UID=`cat /etc/passwd | grep “^$1” | cut -d’:’ -f3`
User_SHELL=`cat /etc/passwd | grep “^$1” | cut -d’:’ -f7`
echo “User $1’s UID is $User_UID.”
echo “User $1’s Shell is $User_SHELL.”
}

read -p “Please input a username or ‘quit’ to quit this script: ” user_name
while true; do
[ $user_name == ‘quit’ ] && echo “Quiting…” && exit 0
id $user_name &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
User_UID_Shell $user_name
read -p “Please input a username or ‘quit’ to quit this script: ” user_name
else
echo “User $user_name does not exist.”
read -p “Please input a username or ‘quit’ to quit this script: ” user_name
fi
done
“`

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

(1)
N27_sapbcsN27_sapbcs
上一篇 2017-12-06
下一篇 2017-12-06

相關推薦

  • LINUX-用戶和組管理

    LINUX用戶和組管理 linux用戶分類:Username/UID      管理員:root,UID 0號,擁有最高權限;負責系統的啟功、停止,安裝新軟件,               增加、刪除用戶,保證系統正常運轉;     &nb…

    2017-05-30
  • ldirectord 結合ipvsadm 配置nat,dr模型

    ldirectord 結合ipvsadm 配置nat,dr模型  一、nat模型 1、 drector # wget ftp://172.16.0.1/pub/Sources/7.x86_64/crmsh/ldirectord-3.9.6-0rc1.1.1.x86_64.rpm # yum -y install nginx (同…

    Linux干貨 2016-11-24
  • linux基礎學習第十天(文件查找與壓縮)

    2016-08-12 授課內容: shell的流程控制 文件查找和壓縮 shell的流程控制: 過程式編程語言: 順序執行 選擇執行 循環執行(未講) 順序執行: if語句: 單分支 if 判斷條件; then 條件為真的分支代碼 fi 雙分支 if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi 多分支 if CONDITIO…

    Linux干貨 2016-08-15
  • 2016全球運維大會,優云蔣君偉演講“CMDB+自動化的管理融合”成一大亮點

    2016全球運維大會于9月23日-24日在上海盛大開幕。作為國內運維行業的重量級大會,優云產品總監蔣君偉在自動化專場與來自全國各地的運維同行一起探討、分享業內自動化運維的最佳實踐。現場情緒熱烈,氣氛高漲,成為了本屆全球運維大會的一大亮點。 全新梳理自動化與CMDB的融合之道 全球運維大會當天,運維自動化專場很多大牛針對自動化運維管理中的CMDB進行了激烈的討…

    Linux資訊 2016-12-05
  • 實現NFS為lamp環境web站點提供共享存儲

    1.實驗需求 (1)nfs server導出/data/application/web,在目錄中提供wordpress; (2)nfs client掛載nfs server導出的文件系統,至/var/www/html; (3)客戶端1(lamp)部署wordpress,并讓其正常訪問,要確保正常發文章,上傳圖片。 (4)客戶端2(lamp),掛載nfs se…

    Linux干貨 2017-05-02
  • N25_第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 2、寫一個腳本     (1) 獲取當前主機的主機名,保存于hostname變量中;     (2) 判斷此變量的值是否為localhost,如果是…

    Linux干貨 2017-02-02

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-12-08 16:48

    圖如果是你自己畫的,那就很牛逼了。下面的作業注意排版。

欧美性久久久久