Linux 和 Windows 系统相似,在安装许多软件的时候是需要去配置环境变量。同样,在 Linux 里也是需要去配置相应的环境变量。而在 Linux 中的环境变量主要是系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是用户使用系统时加载的环境变量。
系统级
/etc/profile
文件:当用户登录时,操作系统为用户定制的用于登录到系统的每个用户的第一个文件,通常是调用/etc/bash.bashrc
文件。/etc/environment
文件:在登录时操作系统调用的第二个文件,在读取profile
之前,系统用于设置环境文件的环境变量。用户级(文件主要是在
/home
目录下)~/.profile
:每个用户都可以调用来输入自己使用的shell
信息,不过在用户登录时,该文件只执行一次。~/.bashrc
: 包含登录用户的专用bash shell
的bash
信息。也就是说每开一个shell
,该文件都会被读取一次。临时的
针对当前
shell
的环境变量。
简单来说,环境变量就是指定一个目录,软件在运行的时候,相关程序会按照该目录来查找相关文件。
前面是从系统和用户级来划分环境变量。 若按照变量的生存周期来划分,那么变量就可以分为:
永久的:需要修改配置文件,变量永久生效。
临时的:使用
export
命令来声明就行,变量在关闭shell
的时候失效。
若按照环境变量自身的信息来划分,则可以分为:
当前
shell
进程私有用户自定义变量。此时变量只在当前shell
中有效shell
自身的内建变量从自定义变量导出的环境变量
变量的设置方法:
/etc/profile 文件中添加变量(永久的)
用 vim 编辑器编辑 /etc/profile
文件来增加变量,将作用于 Linux 下所有用户,且具有永久性。(此方法谨慎使用!)
修改 ~/.profile 文件(对单一用户生效(永久的))
这种方法较为安全,可以把使用这些环境变量的权限控制到用户级别,主要是针对某一特定的用户,如果需要给某个用户权限使用这些环境变量,只需要修改其个人用户主目录下的 .profile
文件就可以了。
eg:编辑shiaynlou
用户目录(/home/shiyanlou)下的 .profile
,即 /home/shiyanlou/.profile
文件。
5.2.3 直接运行export
命令定义环境变量(临时的)
在控制台中设置,不赞成这种方式,这种设置只对当前的 shell 起作用,换一个 shell 设置就无效了。 在 shell 的命令行下直接使用 [export 变量名=变量值] 来定义变量。
在每个用户的 home
目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh
的配置文件是 .zshrc
,相应 Bash
的配置文件为 .bashrc
。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。因此在退出当前 shell
后,临时的自定义环境变量不会在新打开的 shell
中出现。
添加一个自定义的变量
$ export shiyanlou="shiyanlou001"$ echo $shiyanlou
注:使用 echo
输出变量时需要在变量名前面加 $
符号
export shiyanlou="shiyanlou001"
echo $shiyanlou
export 命令查看
可以用来显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。
可以简单体会一下,先在 Shell 中设置一个变量 temp=shiyanlou
,然后再新创建一个子 Shell 查看 temp
变量的值:
$ ~ $ $ $ zsh # 创建子进程,实验楼环境使用的是 zsh ,ubuntu 默认的 shell 为bash $ $ $ temp $ $
echo 命令
例如,我们查看 PATH
环境变量
env 命令查看所有的环境变量
可以用来显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。
set 命令查看本地定义的环境变量
可以用来显示当前 Shell所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。
使用vimdiff
直观查看环境变量
对于刚才讲到的三种环境变量的查看 :export
、env
、set
我们还可以通过 vimdiff
工具来直观的比较它们之间的差别:
$ temp=shiyanlou $ temp_env=shiyanlou $ env|sort>env.txt $ |sort>export.txt $ |sort>set.txt
命令的输出是用到了管道|
和用sort
命令来排序,将文本文件重定向。