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的整个配置文件处理流程:
个人需要的设置写在“~./bashrc”文件中即可。由于/etc/profile与~/.bash_profile都是在取得login shell的时候才会读取配置文件,所以修改这两个文件中的设置后,需要再登录相应的配置才能生效。其他的配置可以通过source命令将配置文件的内容 读入当前shell环境中。
本文转自 wdy198622 51CTO博客,原文链接:http://blog.51cto.com/weimouren/1734451