Linux下设置和查看环境变量
Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
- 永久的:需要修改配置文件,变量永久生效。
- 临时的:使用export命令声明即可,变量在关闭shell时失效。
设置环境变量
- 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用vi在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
示例:
编辑/etc/profile文件,添加CLASSPATH变量vi /etc/profile export CLASSPATH=$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行source /etc/profile不然只能在下次重进此用户时生效。
- 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用vi在用户目录下的.bash_profile文件中增加变量,该变量仅会对当前用户有效,并且是“永久的”。
示例:
编辑xueying用户目录(/home/xueying)下的.bash_profile
vi /home/xueying/.bash_profile 添加如下内容:vi /home/xueying/.bash_profile export CLASSPATH=$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行source /home/xueying/.bash_profile不然只能在下次重进此用户时生效。
- 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量。该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
查看环境变量
- 使用echo命令查看单个环境变量。例如:
echo $PATH - 使用env查看所有环境变量。例如:
env - 使用set查看所有本地定义的环境变量。
使用unset删除指定的环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。
示例如下:
export TEST="Test..." #增加一个环境变量TEST env | grep TEST #此命令有输入,证明环境变量TEST已经存在了 TEST=Test... unset TEST #删除环境变量TEST env | grep TEST #此命令没有输出,证明环境变量TEST已经删除
常用的环境变量
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
扩展阅读一
set,env和export这三个命令都可以用来显示shell变量,其区别?
set 用来显示本地变量
env 用来显示环境变量
export 用来显示和设置环境变量
set 显示当前shell的变量,包括当前用户的变量
env 显示当前用户的变量
export 显示当前导出成用户变量的shell变量
每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量;但shell自己的变量对于不同的shell是不同的,比如BASH_ARGC,BASH等,这些变量只有set才会显示,是bash特有的;export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。
[root@linux ~]# aaa=bbb
[root@linux ~]# echo $aaa
bbb
[root@linux ~]# set | grep aaa
aaa=bbb
[root@linux ~]# env | grep aaa
[root@linux ~]# export aaa
[root@linux ~]# env | grep aaa
aaa=bbb
扩展阅读二
set、env、export — Linux中的环境变量命令
Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。
- 什么是环境变量
环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序将使用到的信息。通过使用环境变量,你可以很容易的修改一个牵涉到一个或多个应用程序的配置信息。 - 常见的环境变量
- PATH 指定命令的搜索路径。
- LIBRARY_PATH 用于在程序编译期间查找动态链接库时指定查找共享库的路径。
指定gcc编译需要链接动态链接库的目录。
设置libtest1和libtest2目录# export LIBRARY_PATH=libtest1:libtest2:$LIBRARY_PATH # gcc *.c -L./libtest1 -L./libtest2 -ltest1 -ltest2 // 编译时分别链接libtest1目录下的libtest1.so库与libtest2目录的libtest2.so库。
- LD_LIBRARY_PATH 用于在程序运行期间查找动态链接库时指定除了系统默认路径(/usr/lib)之外的路径。
可执行文件运行程序之前执行:
# export LD_LIBRARY_PATH=libtest1:libtest2:$LD_LIBRARY_PATH # ./program // 运行可执行程序
除此之外,还有下面一些常见环境变量。
HISTSIZE 保存历史命令记录的条数。
LOGNAME 当前用户的登录名。
HOSTNAME 主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
SHELL 当前用户用的是哪种Shell。
LANG/LANGUGE 和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
MAIL 当前用户的邮件存放目录。
PS1 基本提示符,对于root用户是#,对于普通用户是$。PS2是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt”。
扩展阅读三
关于 LIBRARY_PATH 和 LD_LIBRARY_PATH 的关系。
- Linux gcc编译链接时的动态库搜索路径
GCC编译、链接生成可执行文件时,动态库的搜索路径顺序如下(注意不会递归性地在其子目录下搜索):
1. gcc编译、链接命令中的-L选项;
2. gcc的环境变量的LIBRARY_PATH(多个路径用冒号分割);
3. gcc默认动态库目录:/lib:/usr/lib:usr/lib64:/usr/local/lib。
- 执行二进制文件时的动态库搜索路径
链接生成二进制可执行文件后,在运行程序加载动态库文件时,搜索的路径顺序如下:
1. 编译目标代码时指定的动态库搜索路径:用选项-Wl, rpath和include指定的动态库的搜索路径,比如gcc -Wl, -rpath, include -L. -ltest hello.c,在执行文件时会搜索路径`./include`;
2. 环境变量LD_LIBRARY_PATH(多个路径用冒号分割);
3. 在 /etc/ld.so.conf.d/ 目录下的配置文件指定的动态库绝对路径(通过ldconfig生效,一般是非root用户时使用);
4. gcc默认动态库目录:/lib:/usr/lib:usr/lib64:/usr/local/lib等。