Man page - environ(7)

Packages contains this manual

Available languages:

en fr it pl ja ro zh_TW zh_CN de

Manual

environ

名 称
概 述
描 述
备 注
缺 陷
参 见


名 称

environ - 用 户 环 境

概 述

extern char ** environ ;

描 述

变 量 environ 指 向 一 个 存 储 指 针 的 数 组 , 这 些 指 针 指 向 被 称 为 “环 境 ( environment) ”的 字 符 串 。 数 组 中 最 后 一 个 指 针 的 值 为 NULL。 该 字 符 串 数 组 在 新 程 序 启 动 时 被 execve (2) 调 用 提 供 给 进 程 。 当 子 进 程 被 fork (2) 创 建 时 , 它 继 承 其 父 进 程 环 境 的 一 份 副 本

习 惯 上 约 定 在 environ 中 的 字 符 串 有 类 似 “ 名 称 = ”的 形 式 。 其 中 的 名 称 是 大 小 写 敏 感 的 , 且 不 能 包 含 字 符 “ = ”。 其 中 的 值 可 以 为 任 何 字 符 串 可 以 表 示 的 文 本 。 名 称 和 值 不 能 包 含 内 嵌 的 空 字 节 字 符 ( '\0') , 以 此 避 免 其 被 误 认 为 字 符 串 终 止 位 置 。

环 境 变 量 可 由 sh (1) 中 的 export 命 令 在 shell 的 环 境 中 被 设 定 , 或 者 在 使 用 csh (1) 时 使 用 setenv 命 令 。

对 shell 来 说 , 其 初 始 的 环 境 相 关 变 量 可 经 由 多 种 方 式 被 填 充 , 如 在 使 用 了 pam (8) 的 系 统 上 , pam_env (8) 会 对 所 有 用 户 在 登 录 时 启 用 /etc/environment 中 的 定 义 。 除 此 之 外 , 许 多 shell 初 始 化 脚 本 , 如 系 统 层 级 的 /etc/profile 脚 本 和 各 个 用 户 的 初 始 化 脚 本 , 可 能 包 含 一 些 会 向 shell 的 环 境 中 添 加 变 量 的 命 令 ; 请 参 考 您 使 用 的 shell 的 手 册 页 了 解 详 细 信 息 。

Bourne 风 格 的 shell 支 持 下 面 的 语 法

名 称 =值 命 令

它 可 被 用 来 仅 在 执 行 命 令 时 创 建 对 应 的 环 境 变 量 定 义 。 在 命 令 之 前 , 可 以 存 在 多 个 变 量 定 义 , 其 间 使 用 空 格 进 行 分 隔 。

参 数 还 可 以 在 调 用 exec (3)时 被 放 置 于 环 境 之 中 。 C 程 序 可 以 使 用 诸 如 getenv (3), putenv (3), setenv (3) 和 unsetenv (3) 的 函 数 操 纵 其 环 境 。

本 文 的 下 述 部 分 列 出 了 系 统 上 常 见 的 环 境 变 量 。 这 个 列 表 并 不 完 整 , 且 仅 包 含 普 通 用 户 在 日 常 使 用 中 常 见 的 变 量 。 特 定 程 序 或 软 件 库 函 数 所 使 用 的 环 境 变 量 通 常 会 在 其 对 应 的 手 册 页 中 的 “环 境 ”一 节 中 进 行 描 述 。

USER

已 登 录 用 户 的 名 称 ( 被 某 些 BSD 衍 生 的 程 序 所 使 用 ) 。 其 在 登 录 时 被 设 置 , 请 见 下 文 的 备 注 一 节 。

LOGNAME

已 登 录 用 户 的 名 称 ( 被 某 些 System-V 衍 生 的 程 序 所 使 用 ) 。 其 在 登 录 时 被 设 置 , 请 见 下 文 的 备 注 一 节 。

HOME

用 户 登 录 时 的 目 录 。 其 在 登 录 时 被 设 置 , 请 见 下 文 的 备 注 一 节 。

LANG

用 于 语 言 和 区 域 设 置 类 别 的 名 称 , 它 在 未 被 LC_ALL 或 更 具 体 的 环 境 变 量 , 如 LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC LC_TIME 所 覆 盖 时 生 效 ( 请 参 见 locale (7) 以 了 解 LC_* 环 境 变 量 的 具 体 细 节 ) 。

PATH

它 是 一 系 列 目 录 前 缀 , 可 被 sh (1) 和 许 多 其 他 程 序 所 使 用 以 搜 索 由 简 单 的 文 件 名 ( 即 不 含 有 斜 线 的 路 径 名 ) 所 指 定 的 可 执 行 文 件 。 各 个 前 缀 之 间 被 冒 号 ( : ) 所 分 隔 。 整 个 前 缀 列 表 会 被 从 前 到 后 进 行 搜 索 , 程 序 会 检 查 给 定 路 径 名 在 附 加 前 缀 、 斜 线 和 文 件 名 之 后 的 路 径 是 否 存 在 , 直 到 找 到 一 个 符 合 条 件 的 可 执 行 文 件 为 止 。

还 存 在 一 个 遗 留 的 特 性 : 如 果 前 缀 长 度 为 零 ( 即 由 两 个 相 邻 的 冒 号 组 成 , 或 者 有 起 始 或 终 止 位 置 的 冒 号 存 在 ) , 该 前 缀 会 被 解 释 为 指 定 当 前 工 作 目 录 。 然 而 , 当 前 已 不 推 荐 使 用 该 特 性 , 且 POSIX 认 为 一 个 符 合 标 准 的 应 用 程 序 应 当 使 用 显 式 的 路 径 名 ( 如 . ) 来 指 定 当 前 工 作 目 录 。

类 似 PATH , 还 存 在 CDPATH 会 被 某 些 shell 用 来 寻 找 更 改 目 录 指 令 的 目 标 目 录 , 以 及 被 man (1) 所 使 用 寻 找 手 册 页 的 MANPATH , 等 等 。

PWD

当 前 工 作 目 录 的 绝 对 路 径 。 它 的 组 成 部 分 必 须 被 规 范 化 ( 即 不 可 出 现 . .. 的 路 径 部 分 ) 。

SHELL

用 户 登 录 shell 的 绝 对 路 径 名 。 其 在 登 录 时 被 设 置 , 请 见 下 文 的 备 注 一 节 。

TERM

输 出 应 当 兼 容 的 终 端 类 型 。

PAGER

用 户 偏 好 的 显 示 文 本 文 件 的 实 用 工 具 。 可 被 设 置 为 任 何 sh -c 命 令 可 接 受 的 命 令 字 符 串 操 作 符 。 如 果 PAGER 的 值 为 空 或 未 被 设 置 , 则 启 动 分 页 器 的 应 用 程 序 会 默 认 选 择 一 个 程 序 , 如 less (1) 或 more (1)。

EDITOR / VISUAL

用 户 偏 好 使 用 的 编 辑 文 本 文 件 的 工 具 。 可 被 设 置 为 任 何 sh -c 命 令 可 接 受 的 命 令 字 符 串 操 作 符 。

请 注 意 , 许 多 程 序 和 软 件 库 例 程 的 行 为 都 会 受 到 特 定 环 境 变 量 存 在 与 否 及 其 取 值 的 影 响 。 下 面 给 出 一 些 例 子 :

LANG , LANGUAGE , NLSPATH , LOCPATH , LC_ALL , LC_MESSAGES 等 等 变 量 会 影 响 语 言 和 区 域 设 置 的 处 理 ; 请 参 见 catopen (3), gettext (3) 和 locale (7)。

TMPDIR 影 响 由 tempnam (3) 和 其 他 例 程 创 建 的 路 径 名 称 的 前 缀 , 以 及 由 sort (1) 和 其 他 程 序 所 使 用 的 临 时 目 录 名 。

LD_LIBRARY_PATH , LD_PRELOAD 和 其 他 LD_* 变 量 会 影 响 动 态 加 载 器 /链 接 器 的 行 为 。 请 参 见 ld.so (8)。

POSIXLY_CORRECT 使 得 特 定 的 程 序 和 软 件 库 例 程 遵 循 POSIX 所 指 定 的 行 为 。

malloc (3) 的 行 为 受 到 MALLOC_* 变 量 的 影 响 。

HOSTALIASES 变 量 给 出 包 含 gethostbyname (3) 将 要 使 用 的 主 机 别 名 的 文 件 的 名 称 。

TZ TZDIR 给 出 tzset (3) 所 使 用 的 时 区 信 息 , 并 涉 及 诸 如 ctime (3), localtime (3), mktime (3), strftime (3) 等 函 数 。 另 请 参 见 tzselect (8)。

TERMCAP 提 供 如 何 处 理 给 定 终 端 的 相 关 信 息 ( 或 者 给 出 包 含 这 些 信 息 的 文 件 的 文 件 名 )

COLUMNS LINES 会 告 知 应 用 程 序 窗 口 大 小 信 息 , 它 可 能 会 覆 盖 实 际 大 小 的 配 置 。

PRINTER LPDEST 可 能 指 定 要 使 用 的 打 印 机 。 请 见 lpr (1)。

备 注

历 史 上 以 及 标 准 上 , environ 必 须 被 用 户 程 序 所 声 明 。 然 而 , 一 个 现 存 的 不 标 准 的 方 便 程 序 员 工 作 的 方 法 是 将 environ 声 明 在 <unistd.h> 头 文 件 中 , 前 提 是 _GNU_SOURCE 功 能 测 试 宏 已 被 定 义 ( 参 见 feature_test_macros (7)) 。

prctl (2) 中 的 PR_SET_MM_ENV_START PR_SET_MM_ENV_END 操 作 可 被 用 来 控 制 进 程 环 境 的 位 置 。

HOME , LOGNAME , SHELL USER 变 量 会 在 用 户 经 由 会 话 管 理 界 面 被 变 更 时 被 设 置 。 者 通 常 是 经 由 类 似 login (1) 的 程 序 以 及 用 户 数 据 库 ( 例 如 passwd (5)) 所 完 成 的 。 ( 使 用 su (1) 切 换 到 root 用 户 可 能 导 致 混 合 的 环 境 变 量 , 其 中 LOGNAME USER 被 保 留 为 旧 有 用 户 的 值 ; 参 见 su (1) 手 册 页 。 )

缺 陷

很 显 然 , 这 个 机 制 有 安 全 风 险 。 许 多 系 统 命 令 可 被 用 户 指 定 的 不 同 寻 常 的 IFS LD_LIBRARY_PATH 的 值 所 欺 骗 。

还 存 在 命 名 空 间 污 染 的 风 险 。 如 make autoconf 等 程 序 允 许 环 境 中 具 有 和 实 用 工 具 相 同 命 名 ( 但 全 大 写 ) 的 变 量 覆 盖 默 认 所 使 用 的 工 具 路 径 。 因 此 , 用 户 可 以 使 用 CC 来 选 择 想 要 使 用 的 C 编 译 器 ( 类 似 地 , 还 有 MAKE , AR , AS , FC , LD , LEX , RM , YACC 等 等 ) 。 然 而 , 在 某 些 传 统 的 使 用 场 景 中 这 些 环 境 变 量 还 会 被 赋 值 为 程 序 选 项 而 非 路 径 名 , 例 如 MORE LESS 。 这 些 用 法 被 认 为 是 错 误 的 , 应 当 在 新 程 序 中 避 免 。

参 见

bash (1), csh (1), env (1), login (1), printenv (1), sh (1), su (1), tcsh (1), execve (2), clearenv (3), exec (3), getenv (3), putenv (3), setenv (3), unsetenv (3), locale (7), ld.so (8), pam_env (8)

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。
中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh