Linux 环境变量

一、环境变量

1.1 概念

存储有关 shell 会话和工作环境的信息。这项特性允许在内存存储数据。以便程序或 shell 运行的脚本能够轻松访问它们

环境变量分为两类:

  • 全局变量
  • 局部变量

当然,有些人不分类,只把全局环境变量称为环境变量,不把局部环境变量称为环境变量。

1.2 全局变量和局部变量

全局环境变量可以在对其做出定义的父进程所创建的子进程中使用。

局部环境变量只能在定义它们的进程中使用。

1.3 三个对应的命令

命令

说明

set

显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量(局部变量)及导出的全局环境变量。一般用该命令查看局部环境变量,因为没有查看局部变量的特定命令。

env

显示与当前用户相关的全局环境变量,还可以让命令在指定环境中运行。

export

显示从 Shell 中导出成环境变量的变量,也能通过它将自定义局部变量导出为全局环境变量。

运用三个命令来理解全局变量和局部变量:

# 首先在此 shell 中创建一个变量 temp
temp=test    # 等号两边不能是空格,即不能是 temp = test

使用 echo 命令可以显示变量的值,但需要在变量前加上 $(有点像 C++ 中的引用)

echo $temp

# 结果是 test

创建一个子 shell,并再次显示变量值

zsh
echo $temp

# 结果为空

结果为空表明该变量只能在在定义它们的进程中使用,此时变量为局部环境变量

返回到之前的 shell 进程,将并该变量导出为全局环境变量:

exit
export temp
zsh
echo $temp

# 结果为 test

说明此时变量为全局环境变量了。

【注】改变子 shell 中的全局变量不会影响父 shell 中全局变量。即使子 shell 重新定义并导出变量。

1.4 删除环境变量

unset命令。

$ echo $temp
test
$ unset temp
$ echo $temp
$

【注】$ 的使用。如果使用变量,加上 $;如果操作 $,不使用 $。

1.5 设置PATH环境变量

当在 shell 命令行界面中输入一个外部命令时,shell 必须搜索系统来找到对应的程序。PATH 环境变量定义了用于进行命令和程序查找的目录。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:
/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

输出显示了 8 个可供 shell 用来查找的命令和程序。PATH中的目录使用冒号分隔。

如果命令或程序的位置没有在 PATH 变量中,那么若不使用绝对路径的话,shell 是没法找到。

$ PATH=$PATH:/home/shiyanlou/mybin

使用上述命令可以把 mybin 目录添加至 PATH。冒号后跟的是绝对路径。

此时在命令行中可运行 mybin 中的命令或程序。

# hello_world.c 在 mybin 目录内,hello_world.c已编译为 hello_world
# 将 mybin 添至 PATHhello_woeld 前
$ hello_world
-bash: hello_world.c: command not found

# 将 mybin 添至 PATHhello_woeld 后
$ hello_world
hello world!

程序员通常将单点符也加入 PATH 中。该单点符代表当前目录

$ PATH=$PATH:.
$ cd /home/shiyanlou/mybin
$ hello_world
hello world!

1.6 定位系统环境变量

在登入 Linux 启动一个 bash shell 时,默认情况下 bash 会在几个文件中查找命令,这些文件叫作启动文件或环境文件。而这些启动文件取决于启动 bash 的方式。

启动 bash 的方式:

  • 作为默认登录 shell
  • 作为非登录 shell 的交互式 shell
  • 作为运行脚本的非交互 shell
1.6.1 登录 shell

此种启动方式有 5 种不同的启动文件:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile是默认的 bash shell 主启动文件;

剩下的启动文件都起一个作用:提供一个用户专属的启动文件来定义该用户所用到的环境变量。

另外两种方式以后再说,有些东西是以后的知识。

1.6.4 环境变量持久化
  • 将新的或修改的变量放在 /etc/profile 文件中(但若升级该发行版,该文件也会更新)
  • 在 /etc/profile.d 目录中创建一个以 .sh 结尾的文件