shell基础-环境变量配置文件de作用(图文超级详细)

前言

在用户登录的时候,这五个环境变量配置文件,它都会生效,他们之间有没有先后顺序,是否有优先级,在这些文件当中到底定义了哪些环境变量,请看下面详细 分析。

1.系统当中的环境变量配置文件

  • /etc/profile
    /etc/profile.d/*.sh
    /etc/bashrc
    ~/.bash_profile
    ~/.bashrc

(1)/etc/profile的作用

           USER变量
            LOGNAME变量
            MAIL变量
            PATH变量
            HOSTNAME变量
            HISTSIZE变量
            umask
            调用/etc/profile.d/*.sh文件

(2) ~/.bash_profile 的作用

            调用了~/.bashrc文件
            在PATH变量后面加入了":$HOME/bin"这个目录

(3) ~/.bashrc的作用

            定义默认别名
            调用/etc/bashrc

(4) /etc/bashrc 的作用

            PS1变量
            umask
            PATH变量
            调用/etc/profile.d/*.sh文件

提示:/etc/下的配置文件是对任何用户登录都会生效。相当于校规。
           另外两个,相当于班规。写在哪个家目录下的就对哪个用户生效。
注释: ~ 代表家目录,*代表通配符

2.配置文件流程图

原始图:
在这里插入图片描述

  • 环境变量配置文件当中,他们之间是优先级的,谁先会读取,谁先会接下来读取,谁会最后读取。用户登录的时候首先读取的,就是/etc/profile文件,通过这个文件,分了两组,一组调用家目录下的.bash_profile文件,另外一组是调用了/etc/profile.d*sh文件。(如下图所示) 这些文件当中,写的任何一个跟用户登录相关的一个环境变量的配置,都会在登录的时候生效,这些文件在登录的时候就会读取,只要在这里写入想要的环境变量,给他设个值保存就可以永久生效了。
  • 比如说环境变量path,为什么在每次登录的时候PATH都会有值那???都会有一个固定查找命令的路径那???那是因为PATH的值,在这一系列文件中都已经进行了定义。所以用户只要一登录,读取这个文件中的PATH变量,就会得到它里面的值,然后当他达到提示符之前,就会给PATH赋值。 所以每个用户登录,只要拿到提示符都会有它自己的PATH变量,定义的这样的路径
    在这里插入图片描述
    那path变量当中为什么会有这样的值那,是因为把path变量的定义,事先写在了这些配置文件当中,用户一旦登录就会从这些文件当中读取这个变量,或者其他变量的定义方式给他赋值,当用户达到命令提示符,这些变量都已经有默认值了。
  • 这个环境变量默认赋值的时候,分两种情况。
    第一种情况: 用户登录的情况,就是需要输入用户名和密码。
    第二种情况: 没有登录的,就是没有输入用户名密码的过程。比如bash切换一个子shell,这种情况下切换是没有登录
    一个输用户名密码,另一个不输用户名密码,读取的文件是不一样的

3.读取配置文件的第一种情况

在这里插入图片描述
开始分析:

  • (1) 输入完用户名密码,到达命令提示符之前,先读取/etc/profile这个文件。
    vim /etc/profile打开这个文件分析一下。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后再调用/etc/profile/*.sh文件。怎么调用的那???
    在这里插入图片描述

  • (2) 用户登录,先读取这个/etc/profile文件当中所有的默认的环境变量配置。读完之后就读取/etc/profile.d/*.sh文件。下面的文件全部都会被调用。
    在这里插入图片描述
    最主要的是调用lang.sh这个文件,定义系统语言的脚本。vim /etc/profile.d/lang.sh打开这个文件看一下。
    在这里插入图片描述

  • (3) 因为/etc/profile.d/lang.h文件调用了/etc/sysconfig/i18vim这个文件,vim /etc/sysconfig/i18n 所以打开这个文件看一下
    在这里插入图片描述

  • (4) 这一组调用完之后,/etc/profile会把他的调用传递给下一个环境变量配置文件,也就是~(家目录下)/.bash_profile。我当前所在的用户是root。vim /root/.bash_profile打开这个文件。
    在这里插入图片描述
    在这里插入图片描述
    小提示: 如果想把某一个目录作为一个系统默认搜索命令的路径,而且让他永久生效,就可以写在/root/.bash_profile配置文件当中PATH=$PATH:$HOME/bin的后面,用冒号分隔开就行。
    在这里插入图片描述

  • (5) 然后调用下一个~(当前的家目录,我所在的是/root)/.bashrc这个环境变量配置文件。vim /root/.bashrc打开这个文件看一下
    在这里插入图片描述
    在这里插入图片描述
    备注: 如果不想让别名放在这个文件当中,能放在其他的环境变量配置文件当中吗??? 没可以的,只要想让这个用户登录的同时,让这个别名生效,就可以放在这些环境变量当中的任意一个。注意:(1)有一个又登录过程的,一个是没有登录过程的(/etc/bashrc)(2)写在后面的会覆盖前面的,除非用变量叠加。横着一系列,越后面读取的文件,你定义的值它的优先级越高。举个栗子,aa=11 aa=22 echo $aa 会显示22.因为是后给他的赋值会覆盖前面给的值。
    在这里插入图片描述
    比如:PATH不是直接覆盖的,而是用的变量的叠加,再原始变量的后面加入新值。 并没又覆盖它的原始值。如果没有用变量叠加,后定义的变量,就会覆盖前面的内容。(3)~/.bash_profile    ~/.bashrc这两个只对当前用户生效。如果把别名写在/etc/profile这个文件当中就会所有登录用户生效。

  • (6) 然后再调用/etc/bashrc这个文件,打开这个文件。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    注意事项:再前面/etc/profile文件中定义了PATH、umask,再最后的/etc/bashrc这个文件当中,又把这些事干了。 而且又重新调用了/etc/profile/*.sh这个文件。那这两个文件定义的值重复了吗???并没有重复,仔细看文件会发现一句话We’re not a login shell
    在这里插入图片描述
    登录分两种情况,一种是输入用户名密码(会调用这个文件的一部分内容比如PS1
    另一种是不输入用户名密码,直接就切换。

4.读取配置文件的第二种情况

在这里插入图片描述

  • 再/etc/bashrc文件中读取一个没有登录shell的情况的时候的环境变量。然后再调用其他文件。最后显示命令提示符。
    在这里插入图片描述

5. 总结

(1)要知道环境配置文件的作用是什么,能读懂文件里的内容。
(2)一个输用户名密码,另一个不输用户名密码,分两种情况,读取的文件是不一样的
(3)要知道这两情况的相互关系,以及他们读取文件的顺序。

猜你喜欢

转载自blog.csdn.net/weixin_46818279/article/details/107416774