您的位置:首页 > 运维架构 > Shell

环境配置文件: login, non-login shell, /etc/profile, ~/.bash_profile, source, ~/.bashrc

2015-06-28 17:35 591 查看
login 与 non-login shell

    在开始介绍 bash 的配置文件前,我们一定要先知道的就是 login shell 与 non-login shell! 重点在于有没有登入 (login) !

    login shell:取得 bash 时需要完整的登入流程。举例来说,要由 tty1 ~ tty6 登入,需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』;
    non-login shell:取得 bash 接口的方法不需要重复登入的举动,举例来说(1)以 X window 登入 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。(2)在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

    为什么要介绍 login, non-login shell 呢?这是因为这两个取得 bash 的情况中,读取的配置文件数据并不一样所致。 由于我们需要登入系统,所以先谈谈 login shell 会读取哪些配置文件?一般来说,login shell 其实只会读取这两个配置文件:

1. /etc/profile:这是系统整体的设定,你最好不要修改这个档案;

2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定,你要改自己的数据,就写入这里!

 /etc/profile (login shell 才会读)

你可以使用 vim 去阅读一下这个档案的内容。这个配置文件可以利用使用者的标识符 (UID) 来决定很多重要的变量数据, 这也是每个使用者登入取得 bash 时一定会读取的配置文件! 所以如果你想要帮所有使用者设定整体环境,那就是改这里啰!不过,没事还是不要随便改这个档案喔 这个档案设定的变量主要有:

      PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;

      MAIL:依据账号设定好使用者的 mailbox 到 /var/spool/mail/账号名;

      USER:根据用户的账号设定此一变量内容;

      HOSTNAME:依据主机的 hostname 指令决定此一变量内容;

      HISTSIZE:历史命令记录笔数。CentOS 5.x 设定为 1000 ;

/etc/profile 可不止会做这些事而已,他还会去呼叫外部的设定数据喔!比如底下这些数据会依序的被呼叫进来:

/etc/inputrc 

其实这个档案并没有被执行啦!/etc/profile 会主动的判断使用者有没有自定义输入的按键功能,如果没有的话, /etc/profile 就会决定设定『INPUTRC=/etc/inputrc』这个变量!此一档案内容为 bash 的热键、[tab]要不要有声音啦等等的数据! 因为 bash 预设的环境已经很棒了,所以不建议修改这个档案!

/etc/profile.d/*.sh 

其实这是个目录内的众多档案!只要在 /etc/profile.d/ 这个目录内且扩展名为 .sh ,另外,使用者能够具有 r 的权限, 那么该档案就会被 /etc/profile 呼叫进来。这个目录底下的档案规范了 bash 操作接口的颜色、 语系、ll 与 ls 指令的命令别名、vi 的命令别名、which 的命令别名等等。如果需要帮所有使用者设定一些共享的命令别名时, 可以在这个目录底下自行建立扩展名为 .sh 的档案,并将所需要的数据写入即可喔!

/etc/sysconfig/i18n 

这个档案是由 /etc/profile.d/lang.sh 呼叫进来的!这也是我们决定 bash 预设使用何种语系的重要配置文件! 档案里最重要的就是 LANG 这个变量的设定!反正只要记得,bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是 /etc/profile 还会呼叫出其他的配置文件,所以让我们的 bash 操作接口变的非常的友善! 接下来,再来瞧瞧,个人偏好的配置文件又是怎么回事?

~/.bash_profile

    bash 在读完了整体环境设定的 /etc/profile 并藉此呼叫其他配置文件后,接下来则是会读取使用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:

1. ~/.bash_profile

2. ~/.bash_login

3. ~/.profile

    其实 bash 的 login shell 设定只会读取上面三个档案的其中一个, 而读取的顺序则是依照上面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个档案不论有无存在,都不会被读取。 如果 ~/.bash_profile 不存在才会去读取 ~/.bash_login,而前两者都不存在才会读取 ~/.profile 的意思。 会有这么多的档案,其实是因应其他 shell 转换过来的使用者的习惯而已。 先看一下 root 的 /root/.bash_profile 的内容是怎样呢? 

sz-guessing-db:~ #  cat  ~/.bash_profile

umask 077

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

if [ -f ~/.profile ]; then . ~/.profile; fi

if [ -f ~/.bash_login ]; then . ~/.bash_login; fi

source :读入环境配置文件的指令

由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的配置文件,所以, 如果将自己的偏好设定写入上述的档案后,通常都是得注销再登入后,该设定才会生效。如果要直接读取配置文件而不注销登入!那就得要利用 source 这个指令了! 

[root@www ~]# source 配置文件档名

范例:将家目录的 ~/.bashrc 的设定读入目前的 bash 环境中

[root@www ~]# source ~/.bashrc                        <==底下这两个指令是一样的! 

[root@www ~]# . ~/.bashrc
利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前的 shell 环境中! 举例来说,我修改了 ~/.bashrc ,那么不需要注销,立即以 source ~/.bashrc 就可以将刚刚最新设定的内容读进来目前的环境中!

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息