Linux环境变量
环境变量是一个命名对象,其中包含一个或多个应用程序使用的数据。简单来说,就是一个有名字有值的变量。例如,环境变量的值可以是文件系统中所有可执行文件的位置、应使用的默认编辑器或系统区域设置。刚接触 Linux 的用户可能经常会发现这种管理设置的方式有点难以管理。但是,环境变量提供了一种在 Linux 中的多个应用程序和进程之间共享配置设置的简单方法。
1、实用程序
coreutils包包含程序printenv和env。列出当前环境变量的值:
$ printenv
注意:一些环境变量是用户特定的。通过比较printenv作为非特权用户和root的输出来检查。
env实用程序可用于在修改后的环境下运行命令。以下示例将启动xterm并将环境变量EDITOR设置为vim. 这不会影响全局环境变量EDITOR。
$ env EDITOR=vim xterm
shell内置set(1p)允许您更改 shell 选项的值、设置位置参数以及显示 shell 变量的名称和值 。
每个进程都将它们的环境存储在/proc/$PID/environ
文件中。此文件包含由 nul 字符 ( \x0
) 分隔的每个键值对。使用sed可以获得更易于阅读的格式,例如sed 's:\x0:\n:g' /proc/$PID/environ
.
2、定义变量
2.1 全局变量Globally
大多数 Linux 发行版都会告诉您在/etc/profile或其他位置更改或添加环境变量定义。请记住,还有一些特定于包的配置文件包含变量设置,例如/etc/locale.conf. 请务必维护和管理环境变量,并注意可能包含环境变量的众多文件。原则上,任何 shell 脚本都可以用于初始化环境变量,但是按照传统的 UNIX 约定,这些语句应该只出现在某些特定的文件中。
以下文件可用于定义系统上的全局环境变量,每个文件都有不同的限制:
- /etc/environment由pam_env 模块使用,并且与 shell 无关,因此不能使用脚本或全局扩展。该文件只接受variable=value对。
- /etc/profile仅为登录 shell 初始化变量。但是,它确实运行脚本并且可以被所有Bourne shell兼容的 shell 使用。
- Shell 特定配置文件 - 您的shell的全局配置文件,初始化变量并运行脚本。例如/etc/profile、~/.bash_profile、~/.bash_logout、~/.bashrc、/etc/bash.bash_logout、/etc/bash.bashrc。
在这个例子中,我们将创建一个函数来为各个用户的PATH添加几个目录(例如~/mybin和~/scripts) 。只需将其放入您首选的全局环境变量配置文件(/etc/profile或/etc/bash.bashrc)中:
set_path(){
# Check if user id is 1000 or higher
[ "$(id -u)" -ge 1000 ] || return
for i in "$@";
do
# Check if the directory exists
[ -d "$i" ] || continue
# Check if it is not already in your $PATH.
echo "$PATH" | grep -Eq "(^|:)$i(:|$)" && continue
# Then append it to $PATH and export it
export PATH="${PATH}:$i"
done
}
set_path ~/mybin ~/scripts
验证:
在每个用户的~目录下,mkdir -p ~/{mybin,scripts}
然后执行echo $PATH查看
2.2 每个用户
您并不总是希望全局定义环境变量。例如,您可能想要添加/home/my_user/bin
到PATH
变量中,但不希望系统上的所有其他用户也拥有该变量PATH
。本地环境变量可以在许多不同的文件中定义:
- 您的shell的用户配置文件,例如/etc/profile、~/.bash_profile、~/.bash_logout、~/.bashrc、/etc/bash.bash_logout、/etc/bash.bashrc。
- systemd 用户环境变量从
~/.config/environment.d/*.conf
.
要将目录添加到PATH
本地使用,请输入以下内容~/.bash_profile
:
export PATH="${PATH}:/home/my_user/bin"
要更新变量,请重新登录或source文件:$ source ~/.bash_profile
.
Note:
- dbus 守护进程和 systemd 的用户实例不继承在
~/.bashrc
等位置设置的任何环境变量。这意味着,例如,dbus 激活的程序(如 Gnome Files)默认情况下不会使用它们。 ~/.pam_environment
不推荐使用该功能,并且该功能将在将来的某个时候被删除。
2.3 每个会话
有时甚至需要更严格的定义。人们可能希望临时从创建的特定目录运行可执行文件,而不必键入每个文件的绝对路径,或者在运行它们所需的短时间内编辑 shell 配置文件。
在这种情况下,您可以PATH
在当前会话中定义变量,并结合export命令。只要您不注销,该PATH
变量就会使用临时设置。要将特定于会话的目录添加到PATH
,请发出:
$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"
2.4 使用 pam_env
PAM模块pam_env(8)按顺序从以下文件加载要在环境中设置的变量: /etc/security/pam_env.conf
,
/etc/environment
(以及已弃用的~/.pam_environment
)。
/etc/environment
必须由单独的行上的简单对组成,例如: VARIABLE
=value
EDITOR=nano
/etc/security/pam_env.conf
和~/.pam_environment
分享以下格式:
VARIABLE [DEFAULT=value] [OVERRIDE=value]
@{HOME}
并且 @{SHELL}
是扩展为/etc/passwd
. 以下示例说明了如何将HOME
环境变量扩展为另一个变量:
XDG_CONFIG_HOME DEFAULT=@{HOME}/.config
注意:变量${HOME}
和${SHELL}
没有链接到HOME
和SHELL
环境变量,默认情况下没有设置。
该格式还允许使用 扩展其他变量的值中已定义的变量,如下所示: ${VARIABLE}
GOPATH DEFAULT=${XDG_DATA_HOME}/go
VARIABLE
=value
也允许对,但这些对不支持变量扩展。有关详细信息,请参阅pam_env.conf(5)。
注意:这些文件在其他文件之前读取,特别是在 ~/.profile
和~/.bash_profile
、
~/.zshenv
之前。
相关文章
- linux修改yum源镜像源
- Linux字符设备驱动
- Linux下查看和添加环境变量
- Linux探秘之I/O效率
- linux环境变量的概述
- linux环境变量
- linux cp -d复制软链接文件
- linux下的环境变量/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件
- Linux环境变量加载的研究
- linux命令使用笔记
- Linux程序写入oralce数据库中文显示为问号??? 代码实现设置环境变量!
- Linux服务器集群管理工具——APPNode的搭建与使用
- 在 Linux 中设置和列出环境变量
- Linux命令之printenv,查看u-boot环境变量
- linux 配置环境变量 —— 筑梦之路
- geo ftp环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件 ftp.ncbi.nlm.nih.gov linux下载 ftp下载geo非原始数
- 【测试入门百科】1000字Linux 环境变量配置总结
- linux crontab 定时任务,任务失败后发邮件问题
- linux下环境变量PATH设置错误的补救
- linux python 修改环境变量 添加自定义模块路径
- Linux环境变量
- 【看表情包学Linux】插叙:实现简易的 Shell | 通过内建命令实现路径切换 | 再次理解环境变量
- webRTC(linux native层)之video capture流程(十六)