环境变量(environment variables)一般是指在操作系统当中用来指定操作系统运行环境的一些参数。环境变量通常具有某些特殊用途,在系统当中通常具有全局特性。
PATH: 保存可执行程序路径的环境变量
HOME: 保存用户家目录的环境变量
SHELL: 保存当前使用的命令行解释器
LD_LIBRARY_PATH: 程序运行时依赖的库文件的搜索路径的环境变量
补充:
LD_LIBRARY_PATH 环境变量:会让操作系统搜索可执行程序依赖的动态库的路径,但并不是在编译阶段其效果的。在编译时,是需要使用
-L
选项指定依赖库的路径的。静态库:Linux中后缀为 .a 文件
动态库:Linux 中后缀为 .so 文件
echo
显示某个环境变量值
export
设置一个新的环境变量
env
显示所有环境变量
unset
清除环境变量
set
显示本地定义的 shell 变量和环境变量
sources [profile]
操作系统重新加载该文件
在 Linux 中,查看文件信息最常用的命令就是 ls 。通过下图可以看到 ls 保存在 /usr/bin 目录下,是一个可执行程序,这也体现了 Linux 中一切皆文件的思想。
问题:为什么 ls 在任何目录文件下都可以执行,而我们自己编译出来的可执行程序,只能在当前编译出来的目录下运行呢?
其实这就是我们刚刚说到的 PATH 环境变量,PATH 它是保存可执行程序路径的环境变量。ls 之所以能够在任意目录下执行, 一定是因为 ls 这个可执行程序所对应的目录被 PATH 环境变量保存下来了。
/usr/local/bin:
/usr/bin:
/usr/local/sbin:
/usr/sbin:
/home/cos/.local/bin:
/home/cos/bin
可以看到 PATH 环境变量中保存了很多路径,它们之间以冒号分隔。 ls 可执行程序所对应的目录 /usr/bin 也包含在其中,这就佐证了上述所说的。
那么,如何能够让我们自己编译出来的可执行程序像 ls 一样在任意目录下都可以执行,这就得用到 export 设置一个新的环境变量。
万能公式:
export [环境变量名称] = $[环境变量名称] + [新增加的环境变量的值]
注意: 在命令行中使用 export 是临时生效的,只在当前终端内有效,当前终端关闭之后,重新打开就没有之前设置的值。
将环境变量的值写到下面文件当中可以达到永久生效
普通用户: ~/.bashrc 或者 ~/.bash_profile
系统环境变量: /etc/bashrc
● ~/.bashrc
: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取
● ~/.bash_profile
:每个用户*都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件 仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
● /etc/bashrc
:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
注意: 普通用户的环境变量千万千万不要往 /etc/bashrc 这个文件下添加!!!在添加完成之后,需要 source 一下,让操作系统重新加载该文件。
我们现在有一个 test1 的可执行程序,现在使用 export 来临时新一个增环境变量的值。将 test1 可执行程序的路径,按照 5.1 中的万能公式添加,使用 echo $PATH
查看是否添加成功。
再来验证一下,在当前 test1 编译出来的目录下可以执行成功。
在家目录下执行 test1 也可以执行成功。
在根目录下执行 test1 也可以执行成功。即在的当前终端中已成功新增 test1 这个环境变量的值,不过要注意的是,这是临时生效的。
我们普通用户一般在 ~/.bashrc 或者 ~/.bash_profile 添加就可以了,不要往 /etc/bashrc 里添加(大牛可随意~)。注意:以 . 开头的文件时隐藏文件。
要永久生效,就得 vim ~/.bash_profile
进入文件中,按照 5.1 中的万能公式添加,保存退出。
source 让造作系统内核重新加载 .bash_profile 文件,echo $PATH 查看是否添加成功。
再来验证一下,在当前终端的家目录下可以执行成功。
重新开启一个终端,可以看到在任意目录下都可以执行成功。即在操作系统内核中已成功新增 test1 这个环境变量的值,并且是永久生效的。
临时生效:
万能公式: export [环境变量名称] = $[环境变量名称] + [新增加的环境变量的值]
永久生效:
普通用户: ~/.bashrc 或者 ~/.bash_profile
系统环境变量: /etc/bashrc