1、描述centos6系统开机启动流程;
1.1加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备;
1.2读取并执行第一个启动设备内MBR的boot Loader(即是grub,spfdisk等程序);
1.3依据bootloader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序;
1.4在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息;
1.5init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络,时区等);
1.6init执行run-level的各个服务的启动(script方式);
1.7init执行/etc/rc.d/rc.local文件;
1.8init执行终端机模拟程序mingetty来启动login进程,最后就等待用户登录。
2、描述/etc/rc.d/sysinit脚本功能;
2.1 取得网络环境与主机类型:
读取网络配置文件/etc/sysconfig/network ,取得主机名与默认网关(gateway) 等网络环境。
2.2测试与挂载内存装置 /proc 及 USB 装置 /sys:
除挂载内存装置 /proc之外,还会主动侦测系统上是否具有 usb 的装置, 若有则会主动加载 usb 的驱劢程序,并且尝试挂载 usb 的文件系统。
2.3决定是否启动SELinux :
并且检测是否需要帮所有的档案重新编写标准的 SELinux 类型 (auto relabel)。
2.4启动系统的随机数生成器
随机数生成器可以帮劣系统迚行一些密码加密演算的功能,在此需要启动两次随机数生成器。
2.5设定终端机 (console) 字形:
2.6设定显示于开机过程中的欢迎画面 (textbanner);
2.7.设定系统时间(clock) 与时区设定:需读入 /etc/sysconfig/clock 设定值
2.8.接口设备的侦测Plug and Play (PnP) 参数的测试:
根据核心在开机时侦测的结果 (/proc/sys/kernel/modprobe ) 开始进行 ide /scsi / 网络 / 音效 等接口设备的侦测,以及利用以加载的核心模块进行 PnP 装置的参数测试。
2.9.用户自定义模块的加载
使用者可以在 /etc/sysconfig/modules/*.modules 加入自定义的模块,则此时会被加载到系统当中
2.10.加载核心的相关设定:
系统会主动去读取 /etc/sysctl.conf 这个档案的设定值,使核心功能成为我们想要的样子。
2.11.设定主机名与初始化电源管理模块 (ACPI)
2.12.初始化软件磁盘阵列:
主要是透过 /etc/mdadm.conf 来设定好的。
2.13.初始化 LVM 的文件系统功能
2.14.以 fsck 检验磁盘文件系统:会迚行 filesystem check
2.15.进行磁盘配额 quota 的转换 (非必要):
2.16.重新以可擦写模式挂载系统磁盘:
2.17.启动 quota 功能:所以我们不需要自定义 quotaon 的动作
2.18.启动系统虚拟随机数生成器(pseudo-random):
2.19.清除开机过程当中的临时文件:
2.20.将开机相关信息加载/var/log/dmesg 档案中。
3、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2中方法);
脚本一:
#!/bin/bash
#Program:
# RANDOM 10 integer and sort from min tomax ,then print them!
#History:
# 2016/01/25 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
declare-i min
declare-i max
declare-i i
declare-a arrayRAN
i=1
echo "The 10 Random integer are: "
arrayRAN[i]=$RANDOM
min=${arrayRAN[i]}
max=${arrayRAN[i]}
while[ $i -le 10 ]
do
echo ${arrayRAN[i]}
if[ ${arrayRAN[i]} -lt $min ];then
min=${arrayRAN[i]}
elif [ ${arrayRAN[i]} -gt $max ];then
max=${arrayRAN[i]}
fi
i=i+1
arrayRAN[i]=$RANDOM
done
echo"The Min Random integer is:" $min
echo"The Max Random integer is:" $max
运行结果一:
脚本二:
#!/bin/bash
#Program:
# RANDOM 10 integer and sort from min tomax ,then print them!
#History:
# 2016/01/27 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
declare-i min
declare-i max
declare-i i
declare-i m
echo"The 10 Random integer are: "
m=$RANDOM
min=$m
max=$m
echo$m
for((i=2; i<=10; i++))
do
m=$RANDOM
echo $m
if [ $m -lt $min ];then
min=$m
elif [ $m -gt $max ];then
max=$m
fi
done
echo"The Min Random integer is:" $min
echo"The Max Random integer is:" $max
运行结果二:
4、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中;
4.1启用周期服务crond
4.2测试脚本
4.3 本题的脚本
5、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;
脚本:
#!/bin/bash
#Program:
# Test the file directory is exists ornot.And test the file's filetype.
#History:
# 2016/01/27 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
read-p "Please input a file directory,I will check the directory's type." fd
test-z $fd && echo "You MUST input a file directory." &&exit 0
if[ -f "$fd" ];then
echo "The $fd is exists"
test -b $fd &&filetype="block file"
test -c $fd &&filetype="character file"
test -f $fd && filetype="regularefile"
test -h $fd &&filetype="symbolic link"
test -p $fd &&filetype="named pipe"
test -S $fd &&filetype="socket file"
echo "The filename: $fd is a$filetype"
else
mkdir $fd
echo "Creat the directory $fdsucceed"
fi
结果截图:
6、写一个脚本,打印9X9乘法表;
脚本:
#!/bin/bash
#Program:
# Print Nine Nine Multiplication Table
#History:
# 2016/01/27 Tryrus First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH
declare-i i
declare-i m
for((i=1;i<=9;i++))
do
m=1
while [ $m -le $i ]
do
echo -e -n "${m}x${i}=$[$i*$m] \t"
m=m+1
done
echo
done
结果截图: