Linux关于profile 、bashrc 、.bash_profile、.bashrc的区别

前提

  首先,在理解这些文件之前还需要了解Shell,Shell的login(登入)和 interactive(交互式)模式。

Shell

  系统的Shell有很多种,比如bash、sh、zsh等。如果要查看某一个用户使用的是什么Shell,可以通过finger [USERNAME]命令来查看。这里只讨论Shell 是bash的情况,因为如果是其他Shell,显然是不会运行bashrc的。

login shell 和 non-login shell

  取得bash时需要完整的登入流程,就称为login shell(需要用户名、密码登录)。bash是login shell时,其进程名为-bash而非bash

  non-login shell取得bash时不需要重复登入的动作,是在终端下输入bash或者bash -c启动Shell的情况(不需要输入用户名和密码即可打开)。

  执行exit命令,退出一个Shell(登录或非登录Shell);执行logout命令,退出登录Shell。

interactive shell 和 non-interactive shell

  interactive shell顾名思义就是用来和用户交互的,提供了命令提示符可以输入命令(交互式Shell)。

  non-interactive shell则一般是通过bash -c "CMD"来执行的bash(脚本)。

两者联系

  login shell、non-login shell和interactive shell、non-interactive shell可以互相独立存在。

bashrc和profile的区别

profile

  profile是某个用户唯一的用来设置环境变量的地方,用户可以有多个Shell,但环境变量只需要统一初始化就可以了,这就是profile

bashrc

  bashrc用来给bash初始化,比如初始化bash的设置、代码补全、别名、颜色等。以此类推,还会有shrc、zshrc等文件存在,一般只说bashrc只是 bash太常用了而已。

执行顺序

  login shell(包括interactive login shell和使用“–login”选项的non-interactive shell),会首先读取和执行/etc/profile中的命令,然后依次查找~/.bash_profile~/.bash_login~/.profile这三个配置文件,读取和执行这三个中的第一个存在且可读的文件中的命令。除非被--noprofile选项禁止。

  non-login shell只读取~/.bashrc(和/etc/bash.bashrc或者/etc/bashrc)文件,不同的发行版可能有所不同。如RHEL6.3中no-login shell只读取了~/.bashrc(没有读取/etc/bashrc),而Ubuntu10.04中却依次执行了/etc/bash.bashrc~/.bashrc文件。

简单总结

/etc/profile/etc/bashrc~/.bash_profile~/.bashrc
作用范围系统全局所有用户系统全局所有用户针对单个用户有效针对单个用户有效
作用内容设置全局系统环境参数设置全局系统bash shell相关的配置类似于/etc/profile类似于/etc/bashrc
是否为
login shell
login shellnon-login shell

interactive login shellnon-login shell
生效时间所有用户登入时所有用户登入时针对的用户,在登入的时候加载一次针对的用户,每次执行shell脚本时都会使用它一次

  profile即时生效命令:

source ${FILEPATH}
#source /etc/profile

引用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据