上星期5出差回来的,周末休息了2天,开始上班了,又开始忙了,所以没多少时间写东西了,今天有空又写一点,那就加紧不废话了
if [ "$(get_KV)" -ge "$(KV_to_int '2.5.68')" ] then have_devpts="$(awk '($2 == "devpts") { print "yes"; exit 0 }' /proc/filesystems)"
if [ "${have_devpts}" = "yes" ] then if [ ! -d /dev/pts ] && \ [ "${devfs}" = "yes" -o "${udev}" = "yes" ] then # Make sure we have /dev/pts
mkdir -p /dev/pts &>/dev/null || \ ewarn "Could not create /dev/pts!" fi
if [[ -d /dev/pts ]] ; then ebegin "Mounting devpts at /dev/pts" if [[ ${RC_USE_FSTAB} = "yes" ]] ; then mntcmd=$(get_mount_fstab /dev/pts) else unset mntcmd fi try mount -n ${mntcmd:--t devpts devpts /dev/pts -o gid=5,mode=0620,noexec,nosuid} eend $? fi fi fi
|
前面我们分析过,get_KV和KV_to_int,这个判断调试其实就如果但前的内核版本比2.5.68大或者等于的话,就需要执行下面的代码。
have_devpts="$(awk '($2 == "devpts") { print "yes"; exit 0 }' /proc/filesystems)"
if [ "${have_devpts}" = "yes" ]
|
判断/proc/filesystems下面是否有devpts,如果有,那么执行下面的代码,cat /proc/filesystems,确实有devpts,那么就执行
nodev sysfs nodev rootfs nodev bdev nodev proc nodev cpuset nodev sockfs nodev pipefs nodev anon_inodefs nodev futexfs nodev tmpfs nodev inotifyfs nodev configfs nodev devpts reiserfs ext3 ext4dev ext2 squashfs nodev ramfs vfat iso9660 udf xfs ocfs2 nodev ocfs2_dlmfs gfs2 gfs2meta nodev mqueue nodev usbfs jfs nodev rpc_pipefs nodev nfs
|
在下面的判断,我是不知道开机的时候有没有/dev/pts这个目录,开机后是有,那么根据判断的话,是执行下面的if语句,在原来的分析里面也知道,RC_USE_FSTAB这个值为no,所以最后会执行
mount -n -t devpts devpts /dev/pts -o uid=5,mode=0620, noexec,nosuid
|
在接下去的话,就开始执行/etc/init.d/里面的脚本了,先介绍一下一个大功能函数
start_critical_service() { local service="$1" ( local retval= local myservice="${service}"
profiling name "/etc/init.d/${service} start" splash "svc_start" "${service}" source "/etc/init.d/${service}" retval=$? if [[ ${retval} -ne 0 ]] ; then eerror "Failed to source /etc/init.d/${service}" return "${retval}" fi
local conf="$(add_suffix /etc/conf.d/${service})" [[ -e ${conf} ]] && source "${conf}" conf="$(add_suffix /etc/rc.conf)" [[ -e ${conf} ]] && source "${conf}"
start ) if [[ $? == "0" ]] ; then splash "svc_started" "${service}" "0" return 0 fi
eerror "Failed to start /etc/init.d/${service}" splash "critical" &>/dev/null & echo eerror "One or more critical startup scripts failed to start!" eerror "Please correct this, and reboot ..." echo; echo sulogin ${CONSOLE} einfo "Unmounting filesystems" /bin/mount -a -o remount,ro &>/dev/null einfo "Rebooting" /sbin/reboot -f }
|
看函数名字就很清楚start_critical_service,开始关键的服务,那肯定很重要咯,根据传进来的第一个参数,进行判断,然后执行
source "/etc/init.d/${service}"
|
在接下去根据/etc/conf.d下面是否有对应文件和/etc/rc.d,如果存在就source
[[ -e ${conf} ]] && source "${conf}"
[[ -e ${conf} ]] && source "${conf}"
|
马上就要进入/etc/init.d/了,有写激动了,嘿嘿,那就休息休息,不要着急,To Be Continue!!!!!!!!!!!!!!!!!!!!!!!!!!!!
阅读(2247) | 评论(0) | 转发(0) |