linux环境变量介绍
# 1. 介绍
在我们开发的时候,通常会到专门的文件下面去配置环境变量,例如/etc/profile, ~.bash_profile,然后还会执行source,这么多配置文件,他们区别是什么,这些配置文件配置环境变量的本质是什么?通过本文可以找到答案。
①环境变量文件配置的本质就是在系统启动或者连接建立的时候自动执行某些脚本export环境变量
# 2. 分类
在 Linux 系统中,环境变量可以分为系统级环境变量和用户级环境变量两种:
- 系统级环境变量是指每一个登录到系统的用户都能够读取到系统级的环境变量。
- 用户级环境变量是指每一个登录到系统的用户只能够读取属于自己的用户级的环境变量。
# 系统级别环境变量
1) /etc/profile文件 当用户登录 Linux 系统即 Login Shell 启动时,首先需要执行的启动脚本就是 /etc/profile 文件。
注意,只有在 Login Shell 启动时才会运行 /etc/profile 脚本文件,Non-login Shell 则不会调用这个脚本文件。 一些比较重要的变量都是在此脚本文件中设置,例如:
- PATH:预设可执行文件或命令的搜索路径。
- USER:用户登录时使用的用户名。
- LOGNAME:其值为$USER。
- HOSTNAME:所使用的主机名。
- MAIL:存放用户电子邮件的邮箱,其实是ASCII码文件。
- HISTSIZE:历史记录的行数。
注意,在 /etc/profile 文件中设置的变量是全局变量
在该文件中可以执行的操作如下:
- 添加环境变量。可以在profile文件的最后直接添加环境变量,但在profile文件添加或修改的内容需要注销系统才能生效。
- 重复定义变量。在peofile文件中默认对PATH变量都有设置,而新添加的环境变量一般都会加在profile文件的最后,因此相同名字的环境变量,后添加的最先起到作用。
- 特殊字符。“:”表示并列含义,例如a的变量值有多个,可以使用“:”符号进行分隔。“.”表示操作的当前目录。
- 使用 env 命令显示所有的环境变量。在Linux系统中,使用以下命令可以使配置文件立刻生效。
2) /etc/bashrc文件 /etc/bashrc 为每一个运行 Bash Shell 的用户执行此文件。当 Bash Shell 被打开时,该文件将被读取。Bash Shell 有不同的类别,不同的类别所使用的环境变量配置文件也有所不同。
一般情况下,非登录 Shell 不会执行任何 profile 文件,非交互 Shell 模式不会执行任何 bashrc 文件:
- 登录 Shell 需要输入用户密码,例如,使用 ssh 登录或者 su - 命令切换用户都会启动 login Shell 模式。
- 非登录 Shell 无须输入用户密码。
- 交互 Shell 提供命令提示符等待用户输入命令的是交互 Shell 模式。
- 非交互 Shell 直接运行脚本文件是非交互 Shell 模式。
3)/etc/environment文件 在系统启动时运行,用于配置与系统运行相关但与用户无关的环境变量,修改该文件配置的环境变量将影响全局。
# 用户级别环境变量
1)~/.bash_profile文件 ~/.bash_profile 文件:每个用户都可使用该文件输入只限于自己使用的 Shell 信息,当用户登录时,该文件仅仅执行一次。默认情况下,该文件中可以设置一些环境变量,执行用户的 .bashrc 文件。
在 Linux 系统中的 ~/.bash_profile 文件的内容,也可以通过 cat 命令查看,感兴趣的读者可自行查看。
2)~/.bashrc文件 该文件包含专用于用户的 Bash Shell 的 Bash 信息,当登录以及每次打开新的 Shell 时,该文件将被读取。
3)~/.profile文件 在 ~/.profile 文件中可以设定用户专有的路径、环境变量等,它只在登录的时候执行一次。
4)~/.bash_logout 当每次退出系统(退出 Bash Shell)时,执行该文件。另外,/etc/profile 中设定的全局变量可以作用于任何用户,而 ~/.bashrc 等中设定的局部变量只能继承 /etc/profile 中的变量,他们属于“父子”关系。 注意,~/.bash_profile 是交互式、login 方式进入 Bash 运行的;~/.bashrc 是交互式、non-login 方式进入 Bash 运行。通常二者设置大致相同,所以通常前者会调用后者。
# 3. 注意事项
在登录 Linux 时要执行文件的过程为:登录 Linux 时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、~/.bash_login 或 ~/.profile 文件中的其中一个。如果 ~/.bash_profile 文件存在的话,一般还会执行 ~/.bashrc 文件。
怎么知道linux当前用的什么shell?
echo $SHELL
cat /etc/shells #这将显示系统中可用的 Shell 列表。默认的 Shell 通常会在列表的顶部。
2
3
一般用的是bash shell
参考 https://www.weixueyuan.net/a/512.html (opens new window) https://blog.csdn.net/u010533843/article/details/54986646 (opens new window)