bash脚本编程之十二(Linux系统裁剪之二)-系统函数库
系统启动流程:
POST-->BIOS(boot sequence)-->BootLoader(MBR) -->Kernel(initrd,initramfs(redhat6))-->init(/etc/inittab,upstart(RHEL6))
注:upstart包含:/etc/inittab和/etc/init/*.conf
/etc/inittab功能:
设定默认运行级别
系统初始化(/etc/rc.d/rc.sysinit)
运行指定级别的服务脚本
/etc/rc.d/init.d
/etc/rc.d/rc#.d
rc0.d--rc6.d
K*
S*
00--99:运行次序
启动虚拟终端
启动图形终端
/etc/rc.d/rc.sysinit功能:
检测并以读写方式重新挂载根文件系统;
设定主机名;
检测并挂载/etc/fstab中的其他文件系统
启动swap分区
初始化外围硬件设备的驱动
根据/etc/sysctl.conf设定内核参数
激活udev和selinux
激活LVM和RAID设备
清理过期锁和PID文件
装载键映射
内核初始化工作:
硬件探测
装载驱动
挂载根文件系统(rootfs)
启动用户空间中的第一进程init
本章节实现功能:
1、关机和重启;
2、主机名;
3、运行对应服务脚本;
4、启动终端;
5、运行用户;
6、定义单用户级别;
7、装载网卡驱动,启用网络功能;
8、提供一个web服务器;
mount:
-n:挂载时不更新/etc/mtab文件;
cat /proc/mounts :显示当前系统上挂载的所有系统
bincp.sh 脚本:使其实现输入一个命令,能够自动将其配置文件及依赖库文件拷贝到/mnt/sysroot目录下:
#!/bin/bash
#
DEST=/mnt/sysroot
libcp() {
LIBPATH=${1%/*}
[ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo echo "copy lib $1 finished."
}
bincp() {
CMDPATH=${1%/*}
[ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
libcp $LIB
done
}
read -p "Your command: " CMD
until [ $CMD == 'q' ]; do
! which $CMD && echo "Wrong command" && read -p "Input againe" CMD && continue
COMMAND=`which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
bincp $COMMAND
echo "copy $COMMAND finished."
read -p "Continue: " CMD
done
将根文件系统重新挂载为读写模式(litle系统为只读模式):mount -n -o remount,rw /
脚本编程知识点:
1、变量中字符的长度:${#VARNAME}
例:[root@localhost sysroot]# A="Starting tserver."
[root@localhost sysroot]# echo ${#A}
17
2、显示屏幕长度及列宽:stty -F /dev/console size
[root@localhost sysroot]# stty -F /dev/console size
25 80 #表示25行,80列#
例:
[root@localhost ~]# cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz
编写脚本etc/rc.d/init.d/functions ,实现每行字符串后面的标示符[OK],[FAILED] 上下对齐;
#!/bin/bash
#
SCREEN=`stty -F /dev/console size`
COLUMNS=${SCREEN#* }
SPA_COL=$[$COLUMNS-14]
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
NORMAL='\033[0m'
success() {
string=$1
RT_SPA=$[$SPA_COL-${#string}]
echo -n "$string"
for I in `seq 1 $RT_SPA`; do
echo -n " "
done
echo -e "[ ${GREEN}OK${NORMAL} ]"
}
failure() {
string=$1
RT_SPA=$[$SPA_COL-${#string}]
echo -n "$string"
for I in `seq 1 $RT_SPA`; do
echo -n " "
done
echo -e "[ ${RED}FAILED${NORMAL} ]"
}
success "starting tserver."
success "string hello world how are you."
failure "starting tserver."
阅读(911) | 评论(0) | 转发(0) |