Linux之环境变量
环境变量
- 一、什么是环境变量?
- 二、常见的环境变量
- (一)`PATH`
- (二)`HOME`
- (三)`SHELL`
- 三、查看和修改环境变量
- (一)查看环境变量
- (二)修改环境变量
- 四.和环境变量相关的命令
- 一、查看环境变量
- 二、设置和修改环境变量
- 三、其他相关命令
- 六.环境变量的组织方式
- 七.环境变量的全局属性
- 1. **定义**
- 2. **作用**
一、什么是环境变量?
环境变量是一种动态的值,它存储在操作系统中,用于影响程序运行时的行为。它们就像系统中的“全局变量”,在用户登录时或程序启动时被加载,并在运行过程中被程序引用。环境变量可以包含各种信息,比如文件路径、用户身份、语言设置等。
举个简单的例子,PATH
环境变量是一个非常重要的环境变量,它定义了系统在哪些目录中查找可执行文件。当你在终端输入一个命令时,系统会按照 PATH
中定义的顺序去查找这个命令的可执行文件。如果没有 PATH
环境变量,你可能每次都要输入完整的文件路径来运行一个程序,这显然是非常不方便的。
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
二、常见的环境变量
(一)PATH
PATH
是最常用的环境变量之一。它是一个由冒号分隔的目录列表,系统会按照这个顺序在这些目录中查找可执行文件。例如,当你输入 ls
命令时,系统会在 PATH
中定义的目录中查找 ls
的可执行文件。
你可以通过以下命令查看当前的 PATH
值:
echo $PATH
如果你需要添加一个新的目录到 PATH
中,可以通过以下命令(以添加 /usr/local/bin
为例):
export PATH=$PATH:/usr/local/bin
这个命令会将 /usr/local/bin
添加到 PATH
的末尾。不过需要注意的是,这种修改只对当前终端会话有效。如果你希望永久修改 PATH
,需要将其添加到用户的配置文件中,比如 ~/.bashrc
或 ~/.profile
。
(二)HOME
HOME
环境变量指向当前用户的主目录。对于大多数用户来说,HOME
的值是 /home/username
,其中 username
是你的用户名。这个变量在很多场景中都非常有用,比如当你在脚本中需要引用用户的主目录时,可以直接使用 $HOME
,而不需要硬编码具体的路径。
例如,你可以通过以下命令快速切换到自己的主目录:
cd $HOME
(三)SHELL
SHELL
环境变量表示当前用户使用的默认 shell。在 Linux 系统中,常见的 shell 有 bash
、zsh
、dash
等。通过查看 SHELL
的值,你可以知道系统为你分配了哪种 shell。
你可以通过以下命令查看当前的 SHELL
值:
echo $SHELL
如果你想要切换到其他 shell,可以通过 chsh
命令(change shell)来修改默认 shell。
三、查看和修改环境变量
(一)查看环境变量
你可以通过以下命令查看当前所有的环境变量:
env
或者使用 printenv
命令:
printenv
如果你想查看某个特定环境变量的值,可以直接使用 echo
命令,比如:
echo $PATH
(二)修改环境变量
修改环境变量可以通过 export
命令来完成。例如,修改 PATH
:
export PATH=$PATH:/new/path
如果你需要修改一个变量的值,可以直接覆盖它。比如:
export EDITOR=nano
需要注意的是,这种修改只对当前终端会话有效。如果你希望永久修改环境变量,需要将修改命令添加到用户的配置文件中,比如 ~/.bashrc
或 ~/.profile
。然后,你需要重新加载配置文件,或者重新登录用户,才能使修改生效。
四.和环境变量相关的命令
- 查看环境变量:
printenv
env
echo
- 设置环境变量:
export
- 删除环境变量:
unset
- 持久化环境变量:修改配置文件(如
~/.bashrc
或/etc/environment
)并使用source
命令重新加载 - 其他相关命令:
set
、typeset
、declare
一、查看环境变量
printenv
printenv
命令用于显示当前环境变量的内容。它可以显示所有环境变量,也可以指定显示某个特定的环境变量。
-
显示所有环境变量
printenv
这个命令会列出当前环境中所有的键值对。
-
显示特定环境变量
printenv PATH
这个命令会显示
PATH
环境变量的值。
env
env
命令用于显示当前环境变量,也可以用于运行程序时临时设置环境变量。
-
显示所有环境变量
env
这个命令与
printenv
类似,会列出当前环境中所有的键值对。 -
运行程序时设置环境变量
env VAR=value command
例如:
env JAVA_HOME=/usr/lib/jvm/java-8-openjdk java -version
这个命令会临时设置
JAVA_HOME
环境变量,并运行java -version
命令。
echo
echo
命令用于显示变量的值,通常与$
符号一起使用来获取环境变量的值。
- 显示特定环境变量
这个命令会显示echo $PATH
PATH
环境变量的值。
二、设置和修改环境变量
export
export
命令用于在当前终端会话中设置环境变量。它将变量导出为环境变量,使其对当前会话中的所有子进程都可用。
-
临时设置环境变量
export VAR=value
例如:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
这个命令会将
JAVA_HOME
设置为/usr/lib/jvm/java-8-openjdk
,并且在当前终端会话中有效。 -
将变量添加到
PATH
export PATH=$PATH:/new/path
这个命令会将
/new/path
添加到PATH
环境变量中。
unset
unset
命令用于删除环境变量,使其不再可用。
- 删除环境变量
例如:unset VAR
这个命令会删除unset JAVA_HOME
JAVA_HOME
环境变量。
三、其他相关命令
set
set
命令用于显示当前 shell 的所有变量和函数定义。它不仅显示环境变量,还会显示局部变量和函数。
- 显示所有变量和函数
set
typeset
typeset
命令用于声明变量的类型,并可以设置变量的属性。它在某些 shell(如ksh
和bash
)中可用。
- 声明变量类型
这个命令会将变量typeset -x VAR=value
VAR
声明为环境变量。
declare
declare
命令与typeset
类似,用于声明变量的类型和属性。它主要用于bash
shell。
- 声明变量类型
这个命令会将变量declare -x VAR=value
VAR
声明为环境变量。
六.环境变量的组织方式
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。
七.环境变量的全局属性
1. 定义
全局环境变量是系统范围内的变量,它们的值对所有用户和所有进程都有效。这些变量通常在系统启动时初始化,并且可以通过修改系统配置文件来设置或修改。
2. 作用
- 统一配置:全局环境变量可以为系统中的所有用户和程序提供统一的配置信息。例如,
PATH
环境变量定义了系统查找可执行文件的路径,通过全局设置可以确保所有用户都能访问到相同的命令路径。 - 资源管理:全局环境变量可以用于管理系统的资源分配。例如,
TMPDIR
可以指定全局的临时文件存储位置,避免默认的/tmp
目录被填满。 - 程序依赖:许多系统级程序依赖全局环境变量来获取运行时参数。