linux 出行日记(2)

来源:互联网 发布:景安域名备案查询 编辑:程序博客网 时间:2024/05/01 05:19

整理之前做的笔记。

猿课笔记

第一篇下 linux 启动。

以上图为参照。

开机通电--->BIOS自检--->BIOS设置启动介质--->MBR磁盘0柱面0磁头1扇区,55AA结尾。里面存储系统分区表,系统引导程序,bootloader。

此处拿grub做例子。grub主要由四部分组成。stage1,stage1-5,stage2以及/boot/grub其它文件。就像一个mini os,它拥有自己的shell,支持script。这其中安装过后,会把stage1汇编成一个512字节的文件拷贝到MBR。

系统启动后,运行到MBR后,就由GRUB的stage1文件接管,它会调用BIOS中断方式INT 13h把stage1-5调入内存,这是文件系统解释代码,就是描述操作系统格式如何去读取。一般会在磁盘前面的扇区存放。这个时候,stage1,就可以识别系统盘,读取系统文件。然后调入stage2文件。而stage2是grub最核心的部分。它将系统由实模式转换为保护模式,设置好c运行环境,然后寻找menulist启动菜单,并把控制权交给启动菜单中的ROOT。如果没有找到,就执行一个shell,等待输入命令。 

我们来看menulist菜单:

# ls -l menu.lst

lrwxrwxrwx. 1 root root 11 7月  18 11:44 menu.lst -> ./grub.conf

#指向了grub.conf

#vi grub.conf

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS 6 (2.6.32-504.el6.i686)

        root (hd0,0)

        kernel /vmlinuz-2.6.32-504.el6.i686 ro root=UUID=c087c97b-9129-4557-805e-d6f42c6dcf03 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

        initrd /initramfs-2.6.32-504.el6.i686.img


grub.conf 主要起的作用是加载内核 kernel /vmlinuz.....,装载内核镜像  /initramfs.....,并执行 initrd进程 ,这里面包含了各种可执行程序和驱动程序,最后使用 chroot  filesystem转换到真正的linux系统。调用/sbin/init进程,控制权转交操作系统。


这其中 splashimage=(hd0,0)/grub/splash.xpm.gz 是背景图片。

title 标题。root (hd0,0) 启动磁盘分区。


init 进程的配置文件是存放于/etc/inittab. 它定义了,系统初始化,电源故障的操作、以及在Ctrl-Alt-Delete 键反应信息。

# vi /etc/inittab


# inittab is only used by upstart for the default runlevel.

#

# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# System initialization is started by /etc/init/rcS.conf

#

# Individual runlevels are started by /etc/init/rc.conf

#

# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf

#

# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,

# with configuration in /etc/sysconfig/init.

#

# For information on how to write upstart event handlers, or how

# upstart works, see init(5), init(8), and initctl(8).

#

# Default runlevel. The runlevels used are:

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

#

id:3:initdefault:



最后一行是配置文件。通用格式  id:runlevels:action:process。

这里启动级别是3,Full multiuser mode,多用户模式,文本命令模式。


这里可以看到系统首先会执行,/etc/init/rcS.conf这个配置文件,然后呢是/etc/init/rc.conf

1

# vi /etc/init/rcS.conf

#查看这个文件,提醒 vi显示行号命令    :set nu

。。。。。。

28        exec /etc/rc.d/rc.sysinit

。。。。。。


#看到这里执行 /etc/rc.d/rc.sysinit命令。

#vi /etc/rc.d/rc.sysinit

#这下面配置主机名,网络,配置内核参数、挂载root文件系统、检查文件系统、设置系统时钟、配置机器、开启交换空间等。那么返回继续查看 /etc/init/rcS.conf,发现第39行有最后一个执行命令

39                 exec telinit $runlevel


# 这里看到后面是运行级别,即 /etc/inittab中设的3.我们再查这个命令。


#which telinit

/sbin/telinit

#ls -l /sbin/telinit

-rwxr-xr-x. 1 root root 50728 3月  12 2014 /sbin/telinit

# man telinit

NAME

       telinit - change system runlevel

SYNOPSIS

       telinit [OPTION]...  RUNLEVEL


DESCRIPTION

       telinit may be used to change the system runlevel.

..........
#这里发现,这不是更改用户级别的init 命令嘛。也就是切换到用户$runlevel.这里是3.

到这里,/etc/init/rcS.conf任务已经完成,下面该 /etc/init/rc.conf了。

2 

继续查看。

#ls -l /etc/init/rc.conf

-rw-r--r--. 1 root root 417 7月  22 2014 /etc/init/rc.conf

#vi /etc/init/rc.conf

。。。。

17    exec /etc/rc.d/rc $RUNLEVEL


#这里发现仅执行一条命令:命令参数是运行级别3.

#vi /etc/rc.d/rc


#前面是判断运行级别,然后runlevel判断运行级别,设置。


28 . /etc/init.d/functions

#运行一些脚本。


     59 # First, run the KILL scripts.

     60 for i in /etc/rc$runlevel.d/K* ; do

     61 

     62         # Check if the subsystem is already up.

     63         subsys=${i#/etc/rc$runlevel.d/K??}

     64         [ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init         ] || continue

     65         check_runlevel "$i" || continue

     66 

     67         # Bring the subsystem down.

     68         [ -n "$UPSTART" ] && initctl emit --quiet stopping JOB=$subsys

     69         $i stop

     70         [ -n "$UPSTART" ] && initctl emit --quiet stopped JOB=$subsys

     71 done

     72 

     73 # Now run the START scripts.

     74 for i in /etc/rc$runlevel.d/S* ; do

     75 

     76         # Check if the subsystem is already up.

     77         subsys=${i#/etc/rc$runlevel.d/S??}

     78         [ -f /var/lock/subsys/$subsys ] && continue

     79         [ -f /var/lock/subsys/$subsys.init ] && continue

     80         check_runlevel "$i" || continue

     81 

     82         # If we're in confirmation mode, get user confirmation

     83         if [ "$do_confirm" = "yes" ]; then

     84                 confirm $subsys

     85                 rc=$?

     86                 if [ "$rc" = "1" ]; then

     87                         continue

     88                 elif [ "$rc" = "2" ]; then

     89                         do_confirm="no"

     90                 fi

     91         fi


#59~91 这里比较重要。是按顺序关闭和运行服务,/etc/rc3.d/K开头的服务关闭,S开头的服务开启。

注查看系统服务命令:chkconfig --list


这里比较重要的是 /etc/rc3.d/S99local.这是最后一个开启的服务,我们看看。

# ls -l S99local 

lrwxrwxrwx. 1 root root 11 7月  18 11:35 S99local -> ../rc.local


#这是个软链接文件,指向了/etc/rc.local.我们看看这个文件:

#

# ls -l /etc/rc.d/rc.local 

-rwxr-xr-x. 1 root root 220 10月 16 2014 /etc/rc.d/rc.local

#vi /etc/rc.d/rc.local

。。。。。

touch /var/lock/subsys/local

。。。。。


只有一条命令,创建文件。其实呢,这个rc.local文件比较重要,这里呢,我们可以添加自己的初始化命令。


----------------------------------------------------------------

到这里呢,我们系统的设置就差不多了,下一次就是开启TTY终端。

在/etc/inittab 配置文件中,下个执行的是 /etc/init/tty.conf和/etc/init/serial.conf.我们来看

# vi /etc/init/tty.conf          

     11 instance $TTY

     12 exec /sbin/mingetty $TTY

     13 usage 'tty TTY=/dev/ttyX  - where X is console id'


首先在11行运行创建TTY命令。

在/etc/init/下有个start-tty.conf首先调用/etc/sysconfig/init设置系统环境,然后创建1-6,总共6个TTY终端。第16行 启动TTY.


# vi /etc/init/start-ttys.conf 


    13  . /etc/sysconfig/init

     14         for tty in $(echo $ACTIVE_CONSOLES) ; do

     15                 [ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue

     16                 initctl start tty TTY=$tty

     17         done

这个时候,再去看/etc/init/tty.conf 第12行。启动mingetty,这个是精减版的getty,用户登入程序。


--------------------------------------------------------------------------------------

如果觉得好,留个评论。如有错误,欢迎指正。


0 0