guide.deepin.org/docs/deepin进阶教程/1.GNU-linux教程/1.7.环境变量.md
2023-03-06 16:23:48 +08:00

170 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 环境变量
## 环境变量的作用
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)