# 环境变量 ## 环境变量的作用 Linux环境变量是一种在操作系统中定义的变量,它们包含了一些操作系统或应用程序的设置信息,可以在程序运行时动态地改变。环境变量的作用如下: 1. 程序的执行路径:环境变量PATH定义了操作系统在哪些目录中查找可执行文件。通过将可执行文件所在的目录添加到PATH中,可以使程序在任何位置运行。 2. 配置文件的路径:环境变量HOME指定了用户主目录的路径,一些应用程序会在这个目录中查找配置文件。 3. 资源限制:环境变量ULIMIT可以控制操作系统对进程的资源使用限制,例如内存、CPU时间等。 4. 应用程序的配置:一些应用程序会使用环境变量来配置其行为,例如JAVA_HOME用于指定Java安装的位置。 5. 程序运行时的临时设置:有些程序在运行时需要根据不同的环境进行不同的配置,例如GOPATH用于指定Go编译器的工作路径。 总之,环境变量在Linux系统中扮演着非常重要的角色,它们可以方便地配置操作系统和应用程序的行为,提高系统的可维护性和可定制性。 ## 环境变量的查看 在Linux中,可以使用以下命令来查看当前的环境变量: - `printenv`命令 使用`printenv`命令可以显示当前所有的环境变量及其对应的值。例如,执行以下命令可以查看当前所有的环境变量: ```Shell printenv ``` - `env`命令 env命令也可以用来查看当前所有的环境变量及其对应的值。例如,执行以下命令可以查看当前所有的环境变量: ```Shell env ``` - `echo $变量名`命令 使用`echo $变量名`命令可以查看指定环境变量的值。例如,执行以下命令可以查看PATH环境变量的值: ```Shell echo $PATH ``` 在上述命令中,$符号用于获取变量的值。 - `set`命令 `set`命令可以显示当前所有的环境变量和用户定义的shell变量。执行以下命令可以查看当前所有的变量: ```Shell set ``` 这些命令可以帮助你查看当前的环境变量,并根据需要进行相应的配置和修改。 ## 环境变量的配置 Linux中环境变量的配置通常有两种方式:临时设置和永久设置。下面是它们的具体配置方法: ### 临时设置环境变量 可以通过以下命令在当前终端中临时设置环境变量: ```Shell export 变量名=变量值 ``` 例如,要在当前终端中设置GOPATH变量,可以执行以下命令: ```Shell 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文件: ```Shell vim ~/.bashrc ``` 在文件末尾添加以下内容,其中变量名为你要设置的环境变量的名称,变量值为你要设置的环境变量的值: ```Shell export 变量名=变量值 ``` 保存并退出文件后,执行以下命令使配置生效: ```Shell source ~/.bashrc ``` - 修改desktop文件(影响范围:使用desktop文件启动的应用程序) 你可以通过修改`/usr/share/applications`目录下的desktop文件来永久设置环境变量,具体参照[XDG桌面文件规范](https://wiki.deepin.org/zh/desktop%E6%96%87%E4%BB%B6%E8%A7%84%E8%8C%83)。 - 修改图形环境配置文件 (影响范围:图形会话) 你可以通过修改图形环境的配置文件来永久设置环境变量,比如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环境变量,可以执行以下命令: ```Shell 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](https://wiki.archlinuxcn.org/wiki/%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F)