Skip to content
此页的大纲

环境变量

环境变量的作用

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配置文件(影响范围:当前用户)

    提示

    如果你使用的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桌面文件规范

  • 修改图形环境配置文件 (影响范围:图形会话) 你可以通过修改图形环境的配置文件来永久设置环境变量,比如deepin使用的x11环境你可以更改/etc/X11/Xsession.d/00deepin文件来实现配置

    警告

    请谨慎修改图形环境的配置文件,因为它们会影响到整个图形会话。除非你知道你在做什么,否则不要修改这些文件。

  • 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-environmentsystemctl --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等就是这种情况 )。

    提示

    如果想一次设置多个环境变量,可以写一个配置文件,文件里面每一行定义一个环境变量,用 "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

注意事项

小心

在Bash中,环境变量的名称是区分大小写的,因此,如果你设置了GOPATH环境变量,那么你需要使用echo $GOPATH命令来查看GOPATH环境变量的值,而不能使用echo $gopath命令。而zsh不区分大小写,至于其他Shell参照其官方文档。

小心

在Linux中,环境变量的名称不能包含空格,因此,如果你设置了GOPATH环境变量,那么你不能使用export GOPATH=/path/to/your gopath命令来设置GOPATH环境变量,而应该使用export GOPATH=/path/to/your/gopath命令来设置GOPATH环境变量。

小心

在Linux中,环境变量的名称不能包含等号,因此,如果你设置了GOPATH环境变量,那么你不能使用export GOPATH=/path/to/your=gopath命令来设置GOPATH环境变量,而应该使用export GOPATH=/path/to/your/gopath命令来设置GOPATH环境变量。

警告

不要随意修改系统的环境变量,因为这可能会导致系统无法正常启动。不要随意修改.profile文件,无论其是系统级还是用户级的,均可导致session无法启动。 如果你了解相关知识并且执意修改,请先备份相关文件,并且创建一个新的管理员用户,以便在修改后无法启动时可以使用新的管理员用户恢复系统。(或者准备好liveCD以便于修复系统

参考文献

archlinux wiki: Environment variables