Log:
9.4 KiB
环境变量
环境变量的作用
Linux环境变量是一种在操作系统中定义的变量,它们包含了一些操作系统或应用程序的设置信息,可以在程序运行时动态地改变。环境变量的作用如下:
- 程序的执行路径:环境变量PATH定义了操作系统在哪些目录中查找可执行文件。通过将可执行文件所在的目录添加到PATH中,可以使程序在任何位置运行。
- 配置文件的路径:环境变量HOME指定了用户主目录的路径,一些应用程序会在这个目录中查找配置文件。
- 资源限制:环境变量ULIMIT可以控制操作系统对进程的资源使用限制,例如内存、CPU时间等。
- 应用程序的配置:一些应用程序会使用环境变量来配置其行为,例如JAVA_HOME用于指定Java安装的位置。
- 程序运行时的临时设置:有些程序在运行时需要根据不同的环境进行不同的配置,例如GOPATH用于指定Go编译器的工作路径。
总之,环境变量在Linux系统中扮演着非常重要的角色,它们可以方便地配置操作系统和应用程序的行为,提高系统的可维护性和可定制性。
环境变量的查看
在Linux中,可以使用以下命令来查看当前的环境变量:
-
printenv
命令使用
printenv
命令可以显示当前所有的环境变量及其对应的值。例如,执行以下命令可以查看当前所有的环境变量:printenv
-
env
命令env命令也可以用来查看当前所有的环境变量及其对应的值。例如,执行以下命令可以查看当前所有的环境变量:
env
-
echo $变量名
命令使用
echo $变量名
命令可以查看指定环境变量的值。例如,执行以下命令可以查看PATH环境变量的值:echo $PATH
在上述命令中,$符号用于获取变量的值。
-
set
命令set
命令可以显示当前所有的环境变量和用户定义的shell变量。执行以下命令可以查看当前所有的变量:set
这些命令可以帮助你查看当前的环境变量,并根据需要进行相应的配置和修改。
环境变量的配置
Linux中环境变量的配置通常有两种方式:临时设置和永久设置。下面是它们的具体配置方法:
临时设置环境变量
可以通过以下命令在当前终端中临时设置环境变量:
export 变量名=变量值
例如,要在当前终端中设置GOPATH变量,可以执行以下命令:
export GOPATH=/path/to/your/gopath
永久设置环境变量
-
修改shell配置文件(影响范围:当前用户) ::: tip 提示 如果你使用的Shell不是bash,那么你需要编辑相应的配置文件,例如,如果你使用的是zsh,那么你需要编辑
~/.zshrc
文件。 :::要永久设置环境变量,需要编辑用户主目录下的
.bashrc
或.bash_profile
文件。.bashrc
文件包含了Bash shell运行时需要加载的命令,比如命令别名、环境变量设置、设置PS1提示符等。每次新打开一个终端窗口,.bashrc
文件都会被读取并执行其中的命令。.bash_profile
文件在用户登录时被读取,它一般包含用户登录时需要执行的命令,比如设置PATH环境变量、定义shell函数等。.bash_profile
只会在用户登录时被读取一次,所以如果需要立即生效,则需要手动执行source .bash_profile
或者重新登录。编辑.bashrc文件:
vim ~/.bashrc
在文件末尾添加以下内容,其中变量名为你要设置的环境变量的名称,变量值为你要设置的环境变量的值:
export 变量名=变量值
保存并退出文件后,执行以下命令使配置生效:
source ~/.bashrc
-
修改desktop文件(影响范围:使用desktop文件启动的应用程序) 你可以通过修改
/usr/share/applications
目录下的desktop文件来永久设置环境变量,具体参照XDG桌面文件规范。 -
修改图形环境配置文件 (影响范围:图形会话) 你可以通过修改图形环境的配置文件来永久设置环境变量,比如deepin使用的x11环境你可以更改
/etc/X11/Xsession.d/00deepin
文件来实现配置 ::: danger 注意 请谨慎修改图形环境的配置文件,因为它们会影响到整个图形会话。除非你知道你在做什么,否则不要修改这些文件。 ::: -
Systemd 环境变量配置文件(影响范围:所有用户或者某个用户) systemd 用户实例不会继承类似
.bashrc
中定义的 环境变量。systemd 用户实例有三种设置环境变量的方式:- 对于有 $HOME 目录的用户,可以在 ~/.config/environment.d/ 目录中新建一个".conf"文件,然后在其中写入格式为NAME=VAL这样的行。这些设置只对指定用户的用户单元有效 。更多信息可以参考 environment.d(5) 。
- 使用
/etc/systemd/user.conf
文件中的 DefaultEnvironment 选项。这个配置在所有的用户单元中可见。 - 在
/etc/systemd/system/user@.service.d/
下增加配置文件设置。 这个配置在所有的用户单元中可见。 - 在任何时候, 使用
systemctl --user set-environment
或systemctl --user import-environment
. 对设置环境变量之后启动的所有用户单元有效,但已经启动的用户单元不会生效。 - 使用由 dbus提供的
dbus-update-activation-environment --systemd --all
命令。和systemctl --user import-environment
有同样的效果,但是会影响D-Bus会话。你可以把这个添加到shell初始化文件的末尾。 - 对于用户环境的“全局”环境变量,可以使用会被某些生成器解析的
environment.d
目录。 更多信息可以参考environment.d(5)和 systemd.generator(7)。 - 您还可以编写一个
systemd.environment-generator(7)
脚本,该脚本可以生成因用户而异的环境变量,如果您需要分别给每个用户环境配置变量,这可能是最好的方法( XDG_RUNTIME_DIR, DBUS_SESSION_BUS_ADDRESS等就是这种情况 )。 ::: tip 提示 如果想一次设置多个环境变量,可以写一个配置文件,文件里面每一行定义一个环境变量,用 "key=value" 的键值对表示,然后在你的启动脚本里添加xargs systemctl --user set-environment < /path/to/file.conf。 ::: 一般情况下,你需要设置 PATH 这个环境变量。 配置完成后,可以使用命令 systemctl --user show-environment 来验证值是否正确。
环境变量的配置文件
Linux系统中环境变量相关的配置文件主要有三个,分别是/etc/profile
、/etc/bash.bashrc
和~/.bashrc
,这三个文件的作用分别是:
/etc/profile
:该文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d/
目录的配置文件中搜集 shell 的设置。/etc/bash.bashrc
:该文件为每个运行 bash shell 的用户执行此文件,当 bash shell 被打开时,该文件被读取。~/.bashrc
:该文件仅仅针对登录当前系统的用户执行,当用户登录时,该文件仅仅执行一次。因此,如果需要让修改立即生效,需要重新登录或者执行source ~/.bashrc
命令。
如果你安装了其他软件,可能会在/etc/profile.d/
目录下创建新的配置文件,这些文件会在/etc/profile
文件中被引用,因此,如果你想让这些软件的环境变量生效,需要重新登录系统。
还有上文提到的Systemd环境变量配置文件,以及图形环境配置文件,这些配置文件的作用范围也不同,具体参照上文。
环境变量的删除
要删除环境变量,可以使用unset
命令。例如,要删除GOPATH环境变量,可以执行以下命令:
unset GOPATH
注意事项
::: warning 注意
在Bash中,环境变量的名称是区分大小写的,因此,如果你设置了GOPATH环境变量,那么你需要使用echo $GOPATH
命令来查看GOPATH环境变量的值,而不能使用echo $gopath
命令。而zsh不区分大小写,至于其他Shell参照其官方文档。
:::
::: warning 注意
在Linux中,环境变量的名称不能包含空格,因此,如果你设置了GOPATH环境变量,那么你不能使用export GOPATH=/path/to/your gopath
命令来设置GOPATH环境变量,而应该使用export GOPATH=/path/to/your/gopath
命令来设置GOPATH环境变量。
:::
::: warning 注意
在Linux中,环境变量的名称不能包含等号,因此,如果你设置了GOPATH环境变量,那么你不能使用export GOPATH=/path/to/your=gopath
命令来设置GOPATH环境变量,而应该使用export GOPATH=/path/to/your/gopath
命令来设置GOPATH环境变量。
:::
::: danger 警告
不要随意修改系统的环境变量,因为这可能会导致系统无法正常启动。不要随意修改.profile
文件,无论其是系统级还是用户级的,均可导致session无法启动。
如果你了解相关知识并且执意修改,请先备份相关文件,并且创建一个新的管理员用户,以便在修改后无法启动时可以使用新的管理员用户恢复系统。(或者准备好liveCD以便于修复系统
:::
参考文献
archlinux wiki: Environment variables