一、什么是环境变量?
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
环境变量的主要用途:
-
身份认证
-
动态库查找
-
保存工作路径(pwd)
-
特定路径查找
-
保存特定变量值
二、环境变量分类
按生命周期分:
-
永久的:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
-
临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
按作用域分:
-
系统环境变量:公共的,对全部的用户都生效。【变量名通常使用大写字母】
-
用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。【变量名通常使用小写字母】
三、环境变量相关操作命令
1)echo 查看指定环境变量的值
echo ${环境变量名} 查看某个环境变量
export PATH = $PATH: 目录 修改环境变量, 修改一般只进行追加。不进行原来的内容去掉
可以通过重启终端来恢复PATH
修改这个文件~/.bashrc 能够让环境变量持久生效
利用export命令 在PATH路径中添加 /home/wrfpoi/test 路径
2)env 查看当前用户全部的环境变量
3)export / setven 设置或显示环境变量
-
export【可用于ubuntu系统】
在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
语法格式
export [-fnp][变量名称]=[变量设置值]
参数说明:
- -f 代表[变量名称]中为函数名称。
- -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
- -p 列出所有的shell赋予程序的环境变量。
实例
1.列出当前所有的环境变量
# export -p //列出当前的环境变量值
declare -x HOME=“/root“
declare -x LANG=“zh_CN.UTF-8“
declare -x LANGUAGE=“zh_CN:zh“
declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
declare -x LESSOPEN=“| /usr/bin/lesspipe %s“
declare -x LOGNAME=“root“
declare -x LS_COLORS=““
declare -x MAIL=“/var/mail/root“
declare -x OLDPWD
declare -x PATH=“/opt/toolchains/arm920t-eabi/bin:/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
declare -x PWD=“/root“
declare -x SHELL=“/bin/bash“
declare -x SHLVL=“1“
declare -x SPEECHD_PORT=“6560“
declare -x SSH_CLIENT=“192.168.1.65 1674 22“
declare -x SSH_CONNECTION=“192.168.1.65 1674 192.168.1.3 22“
declare -x SSH_TTY=“/dev/pts/2“
declare -x TERM=“XTERM“
declare -x USER=“root“
declare -x XDG_SESSION_COOKIE=“93b5d3d03e032c0cf892a4474bebda9f-1273864738.954257-340206484“
2.定义环境变量
# export MYENV //定义环境变量
# export -p //列出当前的环境变量
declare -x HOME=“/root“
declare -x LANG=“zh_CN.UTF-8“
declare -x LANGUAGE=“zh_CN:zh“
declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
declare -x LESSOPEN=“| /usr/bin/lesspipe %s“
declare -x LOGNAME=“root“
declare -x LS_COLORS=““
declare -x MAIL=“/var/mail/root“
declare -x MYENV
declare -x OLDPWD
declare -x PATH=“/opt/toolchains/arm920t-eabi/bin:/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
declare -x PWD=“/root“
declare -x SHELL=“/bin/bash“
declare -x SHLVL=“1“
declare -x SPEECHD_PORT=“6560“
declare -x SSH_CLIENT=“192.168.1.65 1674 22“
declare -x SSH_CONNECTION=“192.168.1.65 1674 192.168.1.3 22“
declare -x SSH_TTY=“/dev/pts/2“
declare -x TERM=“XTERM“
declare -x USER=“root“
declare -x XDG_SESSION_COOKIE=“93b5d3d03e032c0cf892a4474bebda9f-1273864738.954257-340206484“
3.定义环境变量赋值
# export MYENV=7 //定义环境变量并赋值
# export -p
declare -x HOME=“/root“
declare -x LANG=“zh_CN.UTF-8“
declare -x LANGUAGE=“zh_CN:zh“
declare -x LESSCLOSE=“/usr/bin/lesspipe %s %s“
declare -x LESSOPEN=“| /usr/bin/lesspipe %s“
declare -x LOGNAME=“root“
declare -x LS_COLORS=““
declare -x MAIL=“/var/mail/root“
declare -x MYENV=“7“
declare -x OLDPWD
declare -x PATH=“/opt/toolchains/arm920t-eabi/bin:/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
declare -x PWD=“/root“
declare -x SHELL=“/bin/bash“
declare -x SHLVL=“1“
declare -x SPEECHD_PORT=“6560“
declare -x SSH_CLIENT=“192.168.1.65 1674 22“
declare -x SSH_CONNECTION=“192.168.1.65 1674 192.168.1.3 22“
declare -x SSH_TTY=“/dev/pts/2“
declare -x TERM=“XTERM“
declare -x USER=“root“
declare -x XDG_SESSION_COOKIE=“93b5d3d03e032c0cf892a4474bebda9f-1273864738.954257-340206484“
-
setven(set environment variable)【可用于centos系统】
该命令为 tsch 中查询或设置环境变量的指令。
语法格式
setenv [变量名称] [变量值]
常用参数:
ENVVAR | 所要设置的环境变量的名 |
value | 所要设置的环境变量的值 |
参考实例
1.显示环境变量:
[root@coonote ~] setenv
2.设置环境变量:
[root@coonote ~] setenv USER lx138
注意:通过此函数并不能添加或修改 shell 进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止后再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。
4)set 显示本地定义的shell变量和环境变量
5)unset 取消本地变量和环境变量
# 删除环境变量
unset <变量名>
6)printenv
printenv 环境变量名:查看指定环境变量的值。
四、常见的环境变量
HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
PWD:显示当前目录。
SHELL:当前用户用的是哪种Shell。
HISTSIZE:保存历史命令记录的条数。
HOSTNAME:主机的名称,应用程序如果要用到主机名的话,通常是从这个环境变量中取得。
LOGNAME:当前用户的登录名。
LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
1)PATH
-
功能和作用
PATH表示可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。
我们都知道之所以要加上 ./
,是因为在程序运行时,需要说明该可执行程序所处的路径,执行一个命令的前提是先找到它。
如果我们愿意,也可以使用绝对路径来说明。
接下来我们思考一下为什么同为可执行程序的 ls 、 pwd 等等诸多指令在使用时不需要加 ./ 来说明其所处路径呢?
这是因为在系统中存在一个环境变量帮助我们在特定路径下搜索这些默认指令,这个环境变量叫做 PATH 。
如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录,这就是执行不在PATH中的可执行程序时为什么要加./
或者绝对路径的原因。
-
书写格式
PATH环境变量存放的是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录。
export PATH=目录1:目录2:目录3:......目录n:.
PATH缺省包含Linux系统命令所在目录(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含这些目录,Linux的常用命令也无法执行(要输入绝对路径才能执行)。
-
添加格式
export PATH=$PATH:$HOME/bin 或 export PATH=$HOME/bin:$PATH
2)LD_LIBRARY_PATH
功能和作用
C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要。
LD_LIBRARY_PATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。
书写格式
export LD_LIBRARY_PATH=目录1:目录2:目录3:......目录n:.
3)C_INCLUDE_PATH、CPLUS_INCLUDE_PATH
功能和作用
C_INCLUDE_PATH 指明C头文件的搜索路径,CPLUS_INCLUDE_PATH指明C++头文件的搜索路径。
添加格式
推荐
一般情况下Linux是不会设置这些环境变量的。
所以在对某一个环境变量第一次设置时,应该直接将其赋值为所需的目录,在之后的设置中再使用递归式的赋值;或者直接一次性将所有目录用:分隔开,一起赋值;或者索性不使用这些环境变量,而是在编译时使用-I参数来添加包含目录。
4)CLASSPATH
JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要。
CLASSPATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。
五、环境变量文件
本小节介绍Linux下几个与环境变量配置相关的配置文件。
1. /etc/profile 文件
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
并从 /etc/profile.d
目录的配置文件中收集 shell 的设置。
如果你有对 /etc/profile 有修改的话必须得手动执行 source /etc/profile
,修改才会生效,此修改对每个用户都生效。
2. /etc/profile.d 目录(推荐)
/etc/profile 在每次启动时会执行 /etc/profile.d
下全部的脚本文件。
3. /etc/bashrc 文件
为每一个运行终端的用户执行此文件。当终端被打开时,该文件被读取。如果你想对所有的使用终端的用户修改某个配置并在以后打开的终端都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个终端即可生效。
Ubuntu没有此文件,与之对应的是 /etc/bash.bashrc
。
4. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 文件(推荐)
每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的 ~/ .bashrc
文件。此文件类似于 /etc/profile
,也是需要手动执行 source ~/.profile
,修改才会生效,/etc/profile
对所有用户生效,~/.profile
只对当前用户生效。
~/.bash_profile、 ~/.bash_login 和 ~/.profile
文件往往只存在一个,这与Linux的发行版本有关。centos中为 ~/.bash_profile
,ubuntu则为 ~/.profile
。
执行的顺序为:~/.bash_profile > ~/.bash_login > ~/.profile
5. ~/.bashrc 文件
当用户登录时以及每次打开新的Shell时该文件都将被读取。(每个用户都有一个 ~/.bashrc 文件,在用户目录下) 此文件类似于 /etc/bashrc,不需要重启就可以生效,重新打开一个 bash 即可生效,/etc/bashrc 对所有用户新打开的 bash 都生效,但 ~/.bashrc 只对当前用户新打开的 bash 生效。不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
一旦更新了用户目录下的.bashrc文件后,下次重新打开新Shell后就会发现全局环境变量生效了。如果期望在当前Shell中立即生效,只需执行source命令(source .bashrc)即可
6. ~/.bash_logout 文件
当每次退出系统(退出 bash shell)时,执行该文件。可把一些清理工作的命令放到这文件中。
7. 执行顺序
1. /etc/profile
2. /etc/bashrc
3. /etc/profile.d
4. ~/.bash_profile | ~/.bash_login | ~/.profile
5. ~/.bashrc
六、获取环境变量
1. 全局变量environ
environ 变量是一个char** 类型,存储着系统的环境变量
实例:
执行结果:
2. 命令行参数
也可以通过命令行参数传递环境变量
实例:
执行结果:
3. getenv
要想直接获取某个环境变量,也可以调用函数去获取,可以使用库函数getenv()
获取环境变量。
举例:通过getenv获取环境变量PWD, 实现自己的PWD指令:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char*pwd=getenv("PWD");
if(pwd==NULL)
perror("getenv");
else
printf("%s\n", pwd);
return 0;
}
七、参考资料
1.Linux环境变量,知识点汇总https://mp.weixin.qq.com/s/zPfvZ04iNdgkUl11EmS2nA
2.Linux中环境变量的设置——setenv/export_linux export 和setenv-CSDN博客文章浏览阅读2.3w次,点赞5次,收藏35次。Linux中环境变量的设置——setenv/export环境变量境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程..._linux export 和setenvhttps://blog.csdn.net/qq_41595735/article/details/902391593.Linux export命令 | 菜鸟教程Linux export 命令 Linux 命令大全 Linux export 命令用于设置或显示环境变量。 在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。 语法export [-fnp][变量名称]=[变量设置值] 参数说明: -f 代表[变量名称]中为函数名称。 -n 删除指定的变量。变量实际上并未删除,..https://www.runoob.com/linux/linux-comm-export.html