bash的配置文件

 来自阿里巴巴集团的资深Linux系统专家赵鑫磊《Linux就是这个范儿》

 

       输入登录用户名和密码后shell才启动,这是login shell。还有一种non-login shell,不需要做重复的登录操作获取bash界面。例如在x-window环境下来启动终端,测试终端界面不需要再次输入账户与密码,这个bash环 境就是non-login shell。login和non-login有什么区别呢?那得先从bash的配置文件说起。

1. 系统设置文件

只有login shell才会读取系统设置文件/etc/profile。它是系统整体的配置文件,该配置文件里包含很多重要的变量信息,每个用户登录取得bash后一 定会读取这个配置文件。如果你想要所设置的环境变量对所有用户起作用,就要在这个地方设置。该文件主要有以下设置变量:

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

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

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

USER="`id -un`" LOGNAME=$USER

#MAIL:根据账户设置/var/spool/mail/账号名称;
 

MAIL="/var/spool/mail/$USER"

#依据主机的hostname指令设置此变量的内容;
 

HOSTNAME=`/bin/hostname`  HISTSIZE=2000

#HISTSIZE:历史命令记录数。
 

HISTTIMEFORMAT='[%F %T] '

除了完成以上设置,/etc/profile还会调用如下的外部设置文件:

/etc/inputrc:用来设置bash的热键、[Tab]是否有声音等信息。

/etc/profile.d/*.sh:这个目录下的文件规定了bash的操作界面、语系以及一些公共的命令别名。

/etc/sysconfig/i18n:这个文件是供/etc/profile.d/lang.sh调用,决定bash默认使用何种语系。

2. 用户的个性设置文件

login shell读完了/etc/profile配置文件后,接下来就会读取用户的个人配置文件。个人配置文件主要有三个隐藏文件,依次是:~ /.bash_profile 、/.bash_login 和 ~/.profile。如果~/.bash_profile存在,那么bash就不会理睬其他两个文件。如果~/.bash_profile不存 在,bash才会读取~/.bash_login。而前两个文件都不存在的话,bash才会读取~/.profile文件。个人设置文件主要是获取与用户 有关的环境、别名和函数等。如果~/.bashrc存在的话,~/.bash_profile还会调用它,所以你可以把你的一些环境设置写到~ /.bashrc这个文件中。在用户目录下,还有两个个人文件~/.bash_history和~/.bash_logout。默认情况下,历史命令就记 录在bash_history中。每次登录bash后,bash读取这个文件,将所有的历史命令读入内存。?~/.bash_logout告诉系统在离开 “我”之前需要帮“我”做什么。默认情况下,文件只让bash清掉屏幕的消息。你可以添加一些信息到在这个文件中,例如备份要求等。

3. 用户的通用设置

系统层的函数、别名和环境等设置一般在/etc/profile。但是对于非交互的non-login shell,我们也希望通过~./bashrc做一些的设置。如果/etc/bashrc存在的话,它会被~./bashrc调用。它的主要工作有:

(1)依据不同的UID给出umask值

(2)依据不同的UID给出PS1变量

(3)调用/etc/profile.d/*.sh的设置

图2.7和图2.8分别展示了login shell和non login shell的整个配置文件处理流程:

系统和个人设置文件_设置文件 

系统和个人设置文件_设置文件_02

个人需要的设置写在“~./bashrc”文件中即可。由于/etc/profile与~/.bash_profile都是在取得login shell的时候才会读取配置文件,所以修改这两个文件中的设置后,需要再登录相应的配置才能生效。其他的配置可以通过source命令将配置文件的内容 读入当前shell环境中。