linux启动过程

来源:互联网 发布:网中网会计软件答案 编辑:程序博客网 时间:2024/04/29 22:45

1、启动电源,查询BIOS(Basic Input/Output System)信息,如CPU、内存、网卡、显卡等

2、读取MBR里的bootloader,它是在硬盘的第一个扇区里,有LILO和GRUB之分,现在一般的linux用的都是GRUB,如果你的机器装的是双系统,它也能识别到WIN系统的存在,双系统中WIN损坏,可以重装WIN,不需要重装linux只需修复下GRUB就可以了。

3、GRUB会指定内核的路径,这一步就是将内核加载到内存里,一般内核放在/boot里。

4、运行第一个程序/sbin/init,它的PID是1,是所有进程的父进程,它会去读inittab文件,定义了7种启动等级(run-level)

0  halt
1  single user mode
2  multi-user,without NFS
3  full multi-user mode
4  unused
5  X11
6  reboot


5、知道了run-level后,系统就执行/etc/rc(run-level).d/下的服务,以S打头的表示开机启动,K打头的表示开机不启动,数字表示启动的顺序,数字越小,启动越早。这些服务都是链接到/etc/rc.d/init.d/下的相关文件。

6、启动相应服务后,系统会读取/etc/rc.d/rc.local文件,执行文件里指定的命令,你可以把需要开机自的服务写在这里面,非常方便。

7、接下来系统会执行getty进程,它会去读取/etc/issue文件,提示用户输入用户各及密码

8、启动login进程,根据/etc/passwd文件,判断用户名及密码是否正确,若正确,往下执行,若有误,返回步骤7

9、显示文件/etc/motd内容,这相当于一个欢迎语句,然后启动shell,这里面也包括.bash_profile和.bashrc的内容

http://blog.chinaunix.net/u3/93196/showart.php?id=1973206。 

 

/etc/profile

为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置,etc/profile中设定的变量的可以作用于任何用户,而~/.bashrc等中设定的变量只能继承/etc/profile中的变量。


/etc/bashrc

为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。


~/.bash_profile

用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件被执行一次。它设置一些环境变量,执行用户的.bashrc文件。


~/.bashrc

该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。


~/.bash_logout

当每次退出bash shell时,执行该文件。


~/.bash_history

记录历史输入命令




我的系统中的相关文件如下所示,调用关系也很清楚。

/etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

pathmunge () {
        if ! echo $PATH | /bin/egrep -"(^|:)$1($|:)" ; then
           if [ "$2" = "after" ] ; then
              PATH=$PATH:$1
           else
              PATH=$1:$PATH
           fi
        fi
}

# ksh workaround
if [ -"$EUID" --/usr/bin/id ]; then
        EUID=`id -u`
        UID=`id -ru`
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
        pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
fi

# No core files by default
ulimit --c 0 > /dev/null 2>&1

if [ -/usr/bin/id ]; then
        USER="`id -un`"
        LOGNAME=$USER
        MAIL="/var/spool/mail/$USER"
fi
JAVA_HOME=`/usr/java/jdk1.6.0_14`
HOSTNAME=`/bin/hostname`
HISTSIZE=1000

if [ -"$INPUTRC" -! -"$HOME/.inputrc" ]; then
    INPUTRC=/etc/inputrc
fi

export PATH USER JAVA_HOME LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

for i in /etc/profile.d/*.sh ; do
    if [ -"$i" ]; then
        . $i
    fi
done

unset i
unset pathmunge

.bash_profile

# Get the aliases and functions
if [ -~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

JAVA_HOME=/usr/java/jdk1.6.0_14

export JAVA_HOME
PATH=$PATH:$HOME/bin
BASH_ENV=$HOME/.bashrc
USERNAME="root"

export USERNAME BASH_ENV PATH
export LC_ALL=zh_CN.gb2312
export LANG=zh_CN.gb2312
export LANGUAGE=zh_CN.2312

unset USERNAME

vi .bashrc
.bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -/etc/bashrc ]; then
        . /etc/bashrc
Fi

~/.bash_logout

clear

原创粉丝点击