6

『忘了再学』Shell基础 — 22、主要的环境变量配置文件说明 - 繁华似锦Fighting

 2 years ago
source link: https://www.cnblogs.com/liuyuelinfighting/p/16326049.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1、source命令

通过source命令可以直接环境变量配置文件。

命令格式如下:

shell
[root@localhost ~]# source 配置文件
或用.
[root@localhost ~]# . 配置文件

配置完成的环境变量配置文件,是需要用户退出并重新登陆才能生效,并不一定需要重启。

那如果重新登陆觉得很不方便,可以使用source命令和.命令重新加载该配置文件,使其直接生效。

2、Linux系统中环境变量配置文件

(1)登录时生效的环境变量配置文件

在Linux系统登录时,主要生效的环境变量配置文件有以下五个:

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

一类是放在/etc/目录下的环境变量配置文件,一类是放在家目录中的环境变量配置文件。

区别在于放在/etc/目录下的环境变量配置文件中的配置内容是对所有用户生效的,

而放在家目录中的环境变量配置文件中的配置内容只对当前用户生效。

(2)/etc/profile环境变量配置文件

在用户登录过程先调用/etc/profile文件

在这个环境变量配置文件中会定义一些默认环境变量:

  • USER变量:根据登录的用户,给这个变量赋值(就是让USER变量的值是当前用户)。
  • LOGNAME变量:根据USER变量的值,给这个变量赋值。
  • MAIL变量:根据登录的用户,定义用户的邮箱为/var/spool/mail/用户名
  • PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包含/sbin/usr/sbin/usr/local/sbin这三个系统命令目录。
    这里需要注意的是,我们登陆时候看到的PATH环境变量的内容,可能不是上边三个目录,是因为后边加载的环境变量配置文件对PATH环境变量重新赋值了,就覆盖了。
  • HOSTNAME变量:填加主机名,给这个变量赋值。
  • HISTSIZE变量:定义历史命令的保存条数。
  • umask:定义umask默认权限。注意/etc/profile文件中的umask权限是在“有用户登录过程(也就是输入了用户名和密码)”时才会生效。

(3)/etc/profile.d/*.sh环境变量配置文件

/etc/profile文件调用/etc/profile.d/*.sh文件。

也就是/etc/profile文件会调用/etc/profile.d/目录下所有以.sh结尾的文件。这里最常用的就是lang.sh文件,而这个文件又会调用/etc/sysconfig/i18n文件。(/etc/sysconfig/i18n文件就是我们前面讲过的默认语系配置文件)

/etc/profile文件中通过一个for循环调用的/etc/profile.d/*.sh文件,如下:

909968-20220530104706105-1213840974.png

(4)~/.bash_profile环境变量配置文件

/etc/profile文件调用~/.bash_profile文件(家目录中)。
~/.bash_profile文件就没有那么复杂了,这个文件主要实现了两个功能:

  • 调用~/.bashrc文件(如果有则调用)。
  • 在PATH变量后面叠加了:$HOME/bin这个目录。
    也就是说,如果我们在自己的家目录中建立bin目录,然后把自己的脚本放入~/bin目录,就可以直接执行脚本,而不用通过目录执行了。

(5)~/.bashrc环境变量配置文件

~/.bash_profile文件调用~/.bashrc文件。

~/.bashrc文件中主要实现了:

  • 定义默认别名,把自己定义的别名也放入这个文件。
  • 调用/etc/bashrc文件。

提示:定义别名的时候,定义在/etc/profile~/.bash_profile~/.bashrc/etc/bashrc这个四个配置文件中的哪个文件中都可以,因为他们是一条线,顺序加载的,只要别名的值没有被覆盖。

(6)/etc/bashrc环境变量配置文件

~/.bashrc文件调用了/etc/bashrc文件。

/etc/bashrc文件中主要定义了以下内容:

  • PS1变量:也就是用户的提示符,如果我们想要永久修改提示符,就要在这个文件中修改。
  • umask:定义umask默认权限。
    这个文件中定义的umask是针对“没有登录过程(也就是不需要输入用户名和密码时,比如从一个终端切换到另一个终端,或进入子Shell)"时生效的(非登陆情况下)。
    如果是“有用户登录过程”,则是/etc/profile文件中的umask生效。
  • PATH变量:会给PATH变量追加值,这些值是在“没有登录过程”时才生效的(非登陆情况下)。
  • /etc/profile.d/*.sh文件,这是在“没有用户登录过程”时才调用(非登陆情况下)。
    在“有用户登录过程”时,/etc/profile.d/*.sh文件已经被/etc/profile文件调用过了。

3、环境变量配置文件调用过程

909968-20220530104725463-172766563.png

环境变量配置文件调用过程有两个方向:

1)用户正常登陆Linux系统时的环境变量配置文件加载方向。

也就是登陆Linux系统的时候,输入账户密码,正常进行登陆。

/etc/profile文件调用/etc/profile.d/*.sh文件和~/.bash_profile文件。

909968-20220530104750226-1595862884.png

最终加载/etc/sysc onfig/i18n文件和看到命令提示符。

2)非登陆情况下的环境变量配置文件加载方向。

什么是非登陆状态,比如说我是root用户,通过su命令切换成user1用户。

这个时候是不需要输入用户密码的,直接就可以切换进去。

还有是在父Shell中开启一个子Shell,这种情况下,也不需要输入用户名密码,就可以直接进入子Shell中。

上面这两种情况都属于非登陆情况,user1用户和子Shell中的环境变量配置文件都是这种加载方向。

非登陆情况下环境变量配置文件加载方向是在/etc/bashrc文件开始加载,

加载/etc/profile.d/*.sh文件,之后加载/etc/profile.d/lang.sh,然后加载/etc/sysconfig/i18n文件,最终显示命令提示符。

909968-20220530104812391-720085218.png
  • 这样这五个环境变量配置文件会被依次调用,那么如果是我们自己定义的环境变量应该放入哪个文件呢?
    如果你的修改是打算对所有用户生效的,那么可以放入/etc/profile环境变量配置文件中;
    如果你的修改只是给自己使用的,那么可以放入~/.bash_profile~/.bashrc这两个配置文件中的任一个。
  • 可是如果我们误删除了这些环境变量,比如删除了/etc/bashrc文件,或删除了~/.bashrc文件,那么这些文件中配置就会失效。
    根据上边的环境变量配置文件加载流程,如果误删除了/etc/bashrc文件,那么命令提示符就无法正常定义和显示了,命令提示符就会显示成简单的bash版本的提示符了-bash-4.1#
  • /etc/目录下的环境变量配置文件,我们一般很少动,但是家目录中的两个配置文件,我们会有很大的几率误删除。
    根据环境变量配置文件加载的顺序,最终都会导致/etc/bashrc文件无法正常加载。
    出现这种现象最直观的现象就是,你看到的命令提示符,变成了一个简易bash的提示符。
    解决方式,找一个其他的系统把这两个文件拷贝回来即可。

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK