在 Linux 系统中,环境变量用于定义系统运行环境的一些参数。例如,家目录的位置一般存放在 HOME
环境变量中,可以通过执行 echo $HOME
命令来查看。
常见环境变量 我们可以使用 env
命令来查看 Linux 系统中所有的环境变量。执行该命令的方式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [11:01:53] uos :: uos-PC ➜ ~ » env CLUTTER_IM_MODULE=fcitx COLORTERM=truecolor DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus DESKTOP_SESSION=deepin DISPLAY=:0 D_DISABLE_RT_SCREEN_SCALE=1 D_DXCB_FORCE_OVERRIDE_HIDPI=1 GDK_BACKEND=x11 GDMSESSION=Wayland GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/deepin-terminal.desktop GIO_LAUNCHED_DESKTOP_FILE_PID=11851 GNOME_DESKTOP_SESSION_ID=this-is-deprecated GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1 GTK_IM_MODULE=fcitx GTK_MODULES=gail:atk-bridge HOME=/home/uos IM_CONFIG_CHECK_ENV=1 IM_CONFIG_PHASE=1 INPUT_METHOD=fcitx KWIN_USE_BUFFER_AGE=1 LANG=zh_CN.UTF-8 LANGUAGE=zh_CN LOGNAME=uos PATH=/home/uos/.autojump/bin:/home/uos/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin PWD=/home/uos QT_ACCESSIBILITY=1 QT_DBL_CLICK_DIST=15 QT_IM_MODULE=fcitx QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1 QT_LOGGING_RULES=kwin*=true ;kwin_libinput=false ; QT_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/qt5/plugins QT_QPA_PLATFORM= QT_SCALE_FACTOR_ROUNDING_POLICY=PassThrough QT_WAYLAND_FORCE_DPI=96 QT_WAYLAND_SHELL_INTEGRATION=kwayland-shell SDL_IM_MODULE=fcitx SHELL=/bin/bash SHLVL=1 SSH_AUTH_SOCK=/run/user/1000/keyring/ssh SYS_PRODUCT_NAME= TERM=xterm-256color USER=uos WAYLAND_DISPLAY=wayland-0 WINDOWID=0 XCURSOR_SIZE=24 XDG_CURRENT_DESKTOP=Deepin XDG_GREETER_DATA_DIR=/var/lib/lightdm/data/uos XDG_RUNTIME_DIR=/run/user/1000 XDG_SEAT=seat0 XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 XDG_SESSION_CLASS=user XDG_SESSION_DESKTOP=Wayland XDG_SESSION_ID=2 XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0 XDG_SESSION_TYPE=wayland XDG_VTNR=1 XMODIFIERS=@im=fcitx auto_proxy=https://it.uniontech.com/proxy/proxy.pac OLDPWD=/home/uos ZSH=/home/uos/.oh-my-zsh PAGER=less LESS=-R LSCOLORS=Gxfxcxdxbxegedabagacad LS_COLORS=rs=0:di=01;34:ln =01;36:mh=00:pi=40;33:so=01;35:do =01;35:bd=40;33;01:cd =40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm =01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: AUTOJUMP_SOURCED=1 AUTOJUMP_ERROR_PATH=/home/uos/.local/share/autojump/errors.log _=/usr/bin/env [11:01:56] uos :: uos-PC ➜ ~ »
为了使Linux系统能够正常运行并为用户提供服务,需要数百个环境变量协同工作。然而,我们并不需要逐一学习每个变量。下表列出了 10 个非常重要的环境变量,详见表1
环境变量名称
作用
HOME
用户的主目录(也称家目录)
SHELL
用户使用的 Shell 解释器名称
PATH
定义命令行解释器搜索用户执行命令的路径
EDITOR
用户默认的文本解释器
RANDOM
生成一个随机数字
LANG
系统语言、语系名称
HISTSIZE
输出的历史命令记录条数
HISTFILESIZE
保存的历史命令记录条数
PS1
Bash解释器的提示符
MAIL
邮件保存路径
请注意:上述变量的名称并不固定。例如,在某些Linux系统中,HOSTNAME
可能被设置为 HOST
。
Linux环境变量分类 按照生命周期来分,Linux环境变量可以分为两类:
永久的:需要用户修改相关的配置文件,变量将永久生效。
临时的:用户利用 export
命令在当前终端下声明环境变量,关闭Shell终端后该变量将失效。
按照作用域来分,Linux环境变量可以分为:
系统环境变量:系统环境变量对该系统中所有用户都有效。
用户环境变量:这种类型的环境变量只对特定的用户有效。
设置环境变量的方法 (1). 在/etc/profile文件中添加环境变量(对所有用户生效)
要在 /etc/profile
文件中添加一个变量,使其对所有用户生效并且是“永久的”,可以按照以下步骤进行:
打开终端并以管理员身份登录。
使用文本编辑器(例如vim)打开 /etc/profile
文件。例如,执行以下命令打开文件:
在文件末尾添加所需的变量,例如 CLASSPATH
。例如:
1 export CLASSPATH=/usr/local/lib
这将在每次系统启动时为所有用户设置 CLASSPATH
环境变量。
保存并关闭文件。
现在,新添加的环境变量将对所有用户生效。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [10:55:16] uos :: uos-PC ➜ ~ » cat /etc/profile if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin" fi export PATHif [ "$PS1 " ]; then if [ "$BASH " ] && [ "$BASH " != "/bin/sh" ]; then if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi tty | egrep -q tty [1-6] && export LC_ALL=Ctty | egrep -q tty [1-6] && export TMOUT=900ulimit -c unlimited
(2). 添加环境变量到单个用户的.bash_profile文件中(对单一用户生效)
要将一个变量添加到单个用户的 .bash_profile
文件中,使其仅对该用户有效并且是“永久的”,可以按照以下步骤进行:
打开终端并以所需用户的身份登录。
使用文本编辑器(例如vim)打开 ~/.bash_profile
文件。例如,执行以下命令打开文件:
1 2 bashCopy code vim ~/.bash_profile
在文件末尾添加所需的变量,例如 CLASSPATH
。例如:
1 2 javascriptCopy code export CLASSPATH=/usr/local/lib
这将在用户登录时为该用户设置 CLASSPATH
环境变量。
保存并关闭文件。
现在,新添加的环境变量将仅对该用户生效。注意:修改文件后需要重新登录该用户才能使更改生效。
(3). 直接使用export命令定义环境变量(只对当前shell有效)
要在当前shell(BASH)中定义一个临时的环境变量,可以按照以下步骤进行:
打开终端并启动所需shell(BASH)。
在命令行中使用 export
命令定义所需变量。例如:
1 2 javascriptCopy code export CLASSPATH=/usr/local/lib
这将在当前shell中定义 CLASSPATH
环境变量。
在需要使用该变量的命令中使用该变量。
请注意,当当前shell(BASH)关闭时,该环境变量也将被销毁。要使该变量永久生效,您需要将其添加到适当的配置文件中(如 /etc/profile
或 ~/.bash_profile
)。
修改和查看环境变量 以下是一些在 Linux 中修改和查看环境变量的常用命令:
echo
:显示某个环境变量的值。例如,可以通过执行 echo $PATH
命令来查看 $PATH
变量的值。
export
:设置一个新的环境变量。例如,可以通过执行 export HELLO="hello"
命令来定义一个名为 HELLO
的环境变量并将其值设置为 “hello”。
env
:显示所有环境变量。执行 env
命令可以列出当前环境中的所有环境变量及其值。
set
:显示本地定义的 shell 变量。执行 set
命令可以查看当前 shell 中定义的所有变量,包括环境变量和本地变量。
unset
:清除环境变量。例如,可以通过执行 unset HELLO
命令来清除名为 HELLO
的环境变量。
readonly
:设置只读环境变量。例如,可以通过执行 readonly HELLO
命令将名为 HELLO
的环境变量设置为只读,以防止其被修改。
Systemd服务环境变量设置 systemd服务创建的dbus服务,提供了一些方法用于设置派生进程的环境变:
Service:org.freedesktop.systemd1
Path:/org/freedesktop/systemd1
Interface:org.freedesktop.systemd1.Manager
这些方法可以用来管理systemd服务以及它们所创建的派生进程的环境变量。
Method
Usage
SetEnvironment (Array of [String] arg_0) ↦ ()
SetEnvironment() may be used to alter the environment block that is passed to all spawned processes. It takes a string array of environment variable assignments. Any previously set environment variables will be overridden.
UnsetEnvironment (Array of [String] arg_0) ↦ ()
UnsetEnvironment() may be used to unset environment variables. It takes a string array of environment variable names. All variables specified will be unset (if they have been set previously) and no longer be passed to all spawned processes. This method has no effect for variables that were previously not set, but will not fail in that case.
UnsetAndSetEnvironment (Array of [String] arg_0, Array of [String] arg_1) ↦ ()
UnsetAndSetEnvironment() is a combination of UnsetEnvironment() and SetEnvironment(). It takes two lists. The first list contains variables to unset, the second one contains assignments to set. If a variable is listed in both, the variable is set after this method returns, i.e. the set list overrides the unset list.
注:事实上提供的服务中还允许我们调用接口实现systemctl的一些功能,提供启动或停止服务,对应的接口分别为StartUnit和StopUnit
DBus服务环境变量设置 类似于systemd,dbus的服务中也提供了相应的方法来管理环境变量: Service:org.freedesktop.DBus Path:/org/freedesktop/DBus Interface:org.freedesktop.DBus
Method
Usage
UpdateActivationEnvironment (Dict of {String, String} arg_0) ↦ ()
…
这个服务中提供了许多方法来控制进程环境变量的设置,例如 GetEnvironment() 方法可以获取当前进程的所有环境变量,SetEnv() 方法可以设置指定的环境变量,UnsetEnv() 方法可以取消指定的环境变量等等。通过这些方法,我们可以在DBus服务中方便地设置和管理进程环境变量。
附录
本文资料为以下链接的总结,可能大量借鉴其中内容,仅做分享之用,如有侵权,告知必删。
Linux环境变量总结
什么是环境变量,Linux环境变量及作用
org.freedesktop.systemd1
环境变量