source /etc/profile关闭终端后失效要重新输入的原因

Posted 码农下的天桥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了source /etc/profile关闭终端后失效要重新输入的原因相关的知识,希望对你有一定的参考价值。

前言

问题如题目所言。。嗯,很多人有这种疑问。
下面倒是疑问的解释了:
详解/etc/profile、/etc/bash.bahsrc、/.profile、/.bashrc的用途

抄录备份

原文如下:

 之前安装Linux的一些软件时,总要修改Linux的配置文件。当时也是一知半解。而且,网上有些安装教程,会说,修改配置文件后要重启Linux。但事实上是不需要重启的。



    Linux安装时可能要修改的配置文件:/etc/profile、/etc/bashrc(ubuntu没有这个文件,对应地,其有/etc/bash.bashrc文件。我用的是ubuntu系统,所以下面将一律使用/etc/bash.bashrc来叙述)、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc。

我的ubuntu系统(版本为10.04)默认情况下,只有/etc/profile、/etc/bash.bahsrc、/.profile、/.bashrc这四个文件。其他文件可以创建。

    现在来简单说一下这些配置文件。

1.这些文件的作用
这些文件的作用有很多,比如环境变量的设定、定制符合自己风格的shell、还可以设置缩写功能,那个ll命令是 ls –alF命令的缩写。

    相信大家最关心这些文件在安装软件时候的作用。为什么要配置这些文件?配置后,要不要重启Linux才能使得生效。



    要弄清这些问题。首先要知道打开一个终端或者打开一个新shell时(注意,两者是不同的。比如在终端里输入bash,会进入一个新shell。此时并没有打开新终端),会读取到哪些文件。

    之所以是要配置这些文件,是因为这些软件要在环境变量中添加属于自己的信息,或者新建一个属于自己的环境变量(如安装JDK时要新建一个JAVA_HOME环境变量)。系统会根据环境变量里的值,找到软件的一些文件的路径。

2.这些文件的访问顺序
2.1测试
如果对测试过程没兴趣的,直接跳过这一步,到结论部分看结论。

    分别在这个四个文件的最后,加入一个新的环境变量TESTBASH。每一个文件都为这个环境变量加入不同的值。如下图所示:

/etc/profile

/etc/bash.bashrc

~/.profile

~/.bashrc

    都保存后,在原来这个终端输入$export(这个命令可以用来导入和查看环境变量),并没有在输出中看到这个TESTBASH。现在输入$bash ,打开一个新的shell。再输入$export 可以看到输出已经有这个环境变量了(如果在一大串输出中没有找到这个TESTBASH,那么就用命令$echo $TESTBASH)。并且,该环境变量的值为: /etc/bash.bashrc:/home/luotuo/.bashrc。

    现在打开一个新的终端。输入$export 可以看到其结果和输入$bash命令,再输入$export 一样。只有其中两项。



    现在输入$su root 切换到root用户。再输入$export 其结果是在原来的基础上加上了 /home/luotuo/.bashrc:/etc/bash.bashrc。

    输入$exit 退出root。然后再输入$su –l root 切换到root用户,此时输入$export 看到其结果仅仅为 /etc/bash.bashrc:/etc/profile。

    (这两种方式是不同的。分别叫做nonlogin shell和login shell。另外,在终端输入bash打开一个新的shell也是non login )



    现在是时候重启Linux了。



    重启之后,在终端输入 $export ,其结果为:   

    已经有/etc/profile和/etc/bash.bashrc了。

    此时,输入$bash 打开一个新的shell 。再输入$export .可以看到:

    

    是在原来的基础上加入了 /etc/bash.bashrc:/home/luotuo/.bashrc



    输入$exit 退出这个shell(注意,此时这个终端是没有被关闭了。因为在这个终端打开了两个shell。一个exit只能退出一个).

    此时,输入$su root 切换到root用户。然后再输入$export 。可以看到输出为:

    

    在原来的基础上加入了/etc/bash.bashrc。

    现在输入$pwd ,可以看到其路径为:

     

    现在输入$exit 退出这个root。然后输入$su –l root 切换到root用户。此时再输入$export 其结果为:

    

    现在输入$pwd,可以看到其路径为:

     

    两者有不同的路径。后者是转到了root用户的用户目录下,而前者还是在之前所在的目录。

2.2、结论
从测试过程可以看到。打开一个新的shell(包括打开一个新终端和在终端上输入bash),都会重新读取/etc/bash.bashrc 和 ~/.bashrc文件里面的内容。

    而Linux启动登录时会读取/etc/profile和~/.profile文件的内容。所以,在测试的时候,重启登录时会读取/etc/profile和~/.profile文件的内容(此时并不读取/etc/bash.bashrc和~/.bashrc文件)。然后再打开终端时,会去读取/etc/bash.bashrc和 ~/.bashrc文件。这就出现了那种结果。



    使用login和non login术语来说,就是使用login 方式是会读取/etc/profile 和 ~/.profile文件。使用non login方式的话,会读取/etc/bash.bashrc 和 ~/.bashrc文件的内容。

也就是说/etc/profile 和 ~/.profile文件是在login时才会读取。所以,在不使用su命令的情况下,只有在Linux启动登录的时候才会被读取(这也就导致了有些软件安装后,要重启才能生效)。

    因为我的ubuntu没有~/.bash_profile和 ~/.bash_login文件。如果有这两个文件的话,那么用login方式登录,将只读取 ~/.bash_profile 、~/.bash_login、~/.profile三个中的一个。其读取顺序在上面的排序顺序。



    说了这么多。到讲安装软件时的修改这些文件的配置信息 了。安装软件修改这个文件,一般是为了在这个文件中添加用于那些软件的环境变量。在这些配置文件中都可以添加环境变量。但由于,有些文件会被读取,有些文件却不会被读取(这个上面已经说了),所以在不同文件下的配置信息的有效性或者说生效日期就有所不同了。这也导致了在这些文件添加配置信息,要不要重启的问题。



    如果是在/etc/bash.bashrc 和 ~/.bashrc文件中添加配置信息,那么打开一个新的shell,就生效了,可以用了(因为打开新的shell会读取这个两个文件)。也可以输入$source /etc/bash.bashrc或者$./etc/bash.bashrc命令( .和/之间还有一个空格)来使得在本shell中,也可以生效使用。

    如果是在/etc/profile 和 ~/.profile 文件中添加配置信息。那么就只能重启了。因为这个两个文件只会在login 下才会读取。当然,也是可以使用$source /etc/profile 命令的。但也只能在使用过这个命令的shell才能使用。

3.总结
如果为了一完成配置信息就能使用,那么就不用在/etc/profile 和 ~/.profile文件中添加关于软件的配置信息。而是在/etc/bash.bashrc 或者 ~/.bashrc 中添加,这样就能马上使用了。

作者:jirryzhang
来源:CSDN
原文:https://blog.csdn.net/jirryzhang/article/details/70833544
版权声明:本文为博主原创文章,转载请附上博文链接!

以上是关于source /etc/profile关闭终端后失效要重新输入的原因的主要内容,如果未能解决你的问题,请参考以下文章

source命令 与 设置环境变量的四个文件 (设置永久环境变量)

问题:Mac 打开终端后要‘source ~/.bash_profile’ 环境变量才生效

深度Linux /etc/profile 环境变量生效问题

Ubuntu14.04 maven每次打开终端均需执行source /etc/profile,否则无法使用mvn命令

Linux解决Source /etc/profile配置环境不生效

Linux ubuntu 修改终端普通用户root用户命令(命令行)配色(颜色)(命令行自动计数)(/etc/profile)(~/bashrc)(source命令)