Linux环境变量

环境变量是一个命名对象,其中包含一个或多个应用程序使用的数据。简单来说,就是一个有名字有值的变量。例如,环境变量的值可以是文件系统中所有可执行文件的位置、应使用的默认编辑器或系统区域设置。刚接触 Linux 的用户可能经常会发现这种管理设置的方式有点难以管理。但是,环境变量提供了一种在 Linux 中的多个应用程序和进程之间共享配置设置的简单方法。

1、实用程序

coreutils包包含程序printenvenv。列出当前环境变量的值:

$ 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/environmentpam_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/binPATH变量中,但不希望系统上的所有其他用户也拥有该变量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}没有链接到HOMESHELL环境变量,默认情况下没有设置。

该格式还允许使用 扩展其他变量的值中已定义的变量,如下所示: ${VARIABLE}

GOPATH DEFAULT=${XDG_DATA_HOME}/go

VARIABLE=value也允许对,但这些对不支持变量扩展。有关详细信息,请参阅pam_env.conf(5)

注意:这些文件在其他文件之前读取,特别是在 ~/.profile~/.bash_profile ~/.zshenv之前。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值