|
1 | 1 | .\" Copyright (c) 1993 Michael Haardt (michael@moria.de), |
2 | | -.\" Fri Apr 2 11:32:09 MET DST 1993 |
| 2 | +.\" Fri Apr 2 11:32:09 MET DST 1993 |
3 | 3 | .\" and Andries Brouwer (aeb@cwi.nl), Fri Feb 14 21:47:50 1997. |
4 | 4 | .\" |
5 | | -.\" This is free documentation; you can redistribute it and/or |
6 | | -.\" modify it under the terms of the GNU General Public License as |
7 | | -.\" published by the Free Software Foundation; either version 2 of |
8 | | -.\" the License, or (at your option) any later version. |
| 5 | +.\" SPDX-License-Identifier: GPL-2.0-or-later |
9 | 6 | .\" |
10 | | -.\" The GNU General Public License's references to "object code" |
11 | | -.\" and "executables" are to be interpreted as the output of any |
12 | | -.\" document formatting or typesetting system, including |
13 | | -.\" intermediate and printed output. |
14 | | -.\" |
15 | | -.\" This manual is distributed in the hope that it will be useful, |
16 | | -.\" but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | | -.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 | | -.\" GNU General Public License for more details. |
19 | | -.\" |
20 | | -.\" You should have received a copy of the GNU General Public |
21 | | -.\" License along with this manual; if not, write to the Free |
22 | | -.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, |
23 | | -.\" USA. |
24 | | -.\" Chinese Version Copyright mhss, www.linuxforum.net, 2000 |
25 | | -.\" |
26 | 7 | .\" Modified Sun Jul 25 10:45:30 1993 by Rik Faith (faith@cs.unc.edu) |
27 | 8 | .\" Modified Sun Jul 21 21:25:26 1996 by Andries Brouwer (aeb@cwi.nl) |
28 | 9 | .\" Modified Mon Oct 21 17:47:19 1996 by Eric S. Raymond (esr@thyrsus.com) |
29 | | -.\" Modified Wed Aug 27 20:28:58 1997 by Nicol醩 Lichtmaier |
| 10 | +.\" Modified Wed Aug 27 20:28:58 1997 by Nicolás Lichtmaier (nick@debian.org) |
30 | 11 | .\" Modified Mon Sep 21 00:00:26 1998 by Andries Brouwer (aeb@cwi.nl) |
31 | | -.TH ENVIRON 7 1998-09-21 "Linux Programmer's Manual" |
32 | | -.SH NAME |
33 | | -environ \- 用户环境(变量) |
34 | | -.SH SYNOPSIS 总览 |
35 | | -.ad l |
36 | | -.nf |
37 | | -extern char **environ; |
38 | | -.br |
| 12 | +.\" Modified Wed Jan 24 06:37:24 2001 by Eric S. Raymond (esr@thyrsus.com) |
| 13 | +.\" Modified Thu Dec 13 23:53:27 2001 by Martin Schulze <joey@infodrom.org> |
| 14 | +.\" |
| 15 | +.\"******************************************************************* |
| 16 | +.\" |
| 17 | +.\" This file was generated with po4a. Translate the source file. |
| 18 | +.\" |
| 19 | +.\"******************************************************************* |
| 20 | +.TH environ 7 2024\-06\-15 "Linux 手册页 6.9.1" |
| 21 | +.SH 名称 |
| 22 | +environ \- 用户环境 |
| 23 | +.SH 概述 |
| 24 | +.nf |
| 25 | +\fBextern char **\fP\fIenviron\fP\fB;\fP |
39 | 26 | .fi |
40 | | -.ad b |
41 | | -.SH DESCRIPTION 描述 |
42 | | -变量 environ 指向的是一个叫 'environment'(环境)的字符串数组 |
43 | | -(这个变量必须在用户程序中声明,但是在使用 libc4 或 libc5 以 |
44 | | -及使用 glibc 并且定义了 _GNU_SOURCE 的情况下 ,它是在头文件 |
45 | | -unistd.h 中声明的)。对于一个进程,这个字符串的数组是通过开 |
46 | | -始进程的 exec(3) 调用来得到,习惯上,这些字符串的格式是'name=value' |
47 | | -(名称=值)。常用的例子是: |
48 | | -.TP |
49 | | -.B USER |
50 | | -登录用户的名字(被一些从 BSD 派生来程序所使用)。 |
51 | | -.TP |
52 | | -.B LOGNAME |
53 | | -登录用户的名字(被一些从 System-V 派生来程序所使用)。 |
54 | | -.TP |
55 | | -.B HOME |
56 | | -用户的登录目录,被login(1)按口令文件 passwd(5) 设置。 |
57 | | -.TP |
58 | | -.B LANG |
59 | | -当不被 LC_ALL 或更特殊的环境变量所忽略的时候,是用 |
60 | | -于地域分类的地域名。 |
61 | | -.TP |
62 | | -.B PATH |
63 | | -预先设定的目录前缀的序列,sh(1) 和许多程序可借此查找路径 |
64 | | -名不完全的文件。前缀由':'分隔。(类似的,有一些 shell |
65 | | -用 CDPATH 查找位于不同目录的命令,以及用 MANPATH 找 |
66 | | -手册页等等。) |
67 | | -.TP |
68 | | -.B PWD |
69 | | -当前的工作路径。被一些 shell 设置。 |
70 | | -.TP |
71 | | -.B SHELL |
72 | | -用户的登录 shell 的文件名。 |
73 | | -.TP |
74 | | -.B TERM |
75 | | -用于准备输出的终端类型。 |
76 | | -.TP |
77 | | -.B PAGER |
78 | | -用户指定的显示文本文件的工具。 |
79 | | -.TP |
80 | | -.B EDITOR/VISUAL |
81 | | -用户指定的编辑文本文件的工具。 |
82 | | -.PP |
83 | | -更多的名字可以通过和在 sh(1) 中的 export 命令和 'name=value',或 csh(1) 中 |
84 | | -的 setenv 命令设置。参数也可以在 |
85 | | -执行 exec(2) 的时候被放置在环境中。一个 C 程序可以使用函数 |
86 | | -.BR getenv(3) 、 |
87 | | -.BR putenv(3) 、 |
88 | | -.BR setenv(3) |
89 | | -和 |
90 | | -.BR unsetenv(3) |
91 | | -来操纵自身的环境。 |
92 | | - |
93 | | -注意许多程序和库例程的行为受特定的环境变量的存在和值的影响。 |
94 | | -随便的搜集一下就有: |
95 | | -.LP |
96 | | -环境变量 LANG、LANGUAGE、NLSPATH、LOCPATH、LC_ALL、 |
97 | | -LC_MESSAGES 等影响地域的处理。 |
98 | | -.LP |
99 | | -TMPDIR 影响 tmpnam(3) 生成名字的路径名前缀和其他一些例程, |
100 | | -sort(1) 和其他程序用的临时文件目录等等。 |
101 | | -.LP |
102 | | -LD_LIBRARY_PATH、LD_PRELOAD 和其他 LD_* 变量影响动态 |
103 | | -(装载器/连接器)的行为。 |
104 | | -.LP |
105 | | -POSIXLY_CORRECT 使特定的程序和库例程遵循 POSIX 规定。 |
106 | | -.LP |
107 | | -MALLOC_* 变量影响 malloc(3) 的行为。 |
108 | | -.LP |
109 | | -HOSTALIASES 变量给出包含 gethostbyname(3) 用的别名的文件的 |
110 | | -文件名。 |
111 | | -.LP |
112 | | -TZ 和 TZDIR 给出时区信息。 |
113 | | -.LP |
114 | | -TERMCAP 给出给定终端的窗口大小(或给出包含这种信息的文件的 |
115 | | -文件名)。 |
116 | | -.LP |
117 | | -等等,还有很多。 |
118 | | - |
119 | | -这里有一个明显的安全风险。不止一个系统命令曾经被一个使用了一 |
120 | | -个不寻常的 |
121 | | -.BR IFS " 或 " LD_LIBRARY_PATH |
122 | | -变量值的用户诱入骗局中。 |
123 | | - |
124 | | - |
125 | | -.SH SEE ALSO 又见 |
126 | | -.BR login(1), |
127 | | -.BR sh(1), |
128 | | -.BR bash(1), |
129 | | -.BR csh(1), |
130 | | -.BR tcsh(1), |
131 | | -.BR execve(2), |
132 | | -.BR exec(3), |
133 | | -.BR getenv(3), |
134 | | -.BR putenv(3), |
135 | | -.BR setenv(3), |
136 | | -.BR unsetenv(3). |
137 | | - |
138 | | -.SH "[中文版维护人]" |
139 | | -.B mhss <jijingzhisheng@up369.com> |
140 | | -.SH "[中文版最新更新]" |
141 | | -.B 2000/11/26 |
142 | | -.SH "《中国linux论坛man手册页翻译计划》:" |
143 | | -.BI http://cmpp.linuxforum.net |
| 27 | +.SH 描述 |
| 28 | +变量 \fIenviron\fP 指向一个存储指针的数组,这些指针指向被称为“环境(environment)”的字符串。数组中最后一个指针的值为 |
| 29 | +NULL。该字符串数组在新程序启动时被 \fBexecve\fP(2) 调用提供给进程。当子进程被 \fBfork\fP(2) |
| 30 | +创建时,它继承其父进程环境的一份\fI副本\fP。 |
| 31 | +.P |
| 32 | +习惯上约定在 \fIenviron\fP |
| 33 | +中的字符串有类似“\fI名称\fP\fB=\fP\fI值\fP”的形式。其中的名称是大小写敏感的,且不能包含字符“\fB=\fP”。其中的值可以为任何字符串可以表示的文本。名称和值不能包含内嵌的空字节字符(\[aq]\[rs]0\[aq]),以此避免其被误认为字符串终止位置。 |
| 34 | +.P |
| 35 | +环境变量可由 \fBsh\fP(1) 中的 \fIexport\fP 命令在 shell 的环境中被设定,或者在使用 \fBcsh\fP(1) 时使用 \fIsetenv\fP |
| 36 | +命令。 |
| 37 | +.P |
| 38 | +对 shell 来说,其初始的环境相关变量可经由多种方式被填充,如在使用了 \fBpam\fP(8) 的系统上,\fBpam_env\fP(8) |
| 39 | +会对所有用户在登录时启用 \fI/etc/environment\fP 中的定义。除此之外,许多 shell 初始化脚本,如系统层级的 |
| 40 | +\fI/etc/profile\fP 脚本和各个用户的初始化脚本,可能包含一些会向 shell 的环境中添加变量的命令;请参考您使用的 shell |
| 41 | +的手册页了解详细信息。 |
| 42 | +.P |
| 43 | +Bourne 风格的 shell 支持下面的语法 |
| 44 | +.P |
| 45 | +.in +4n |
| 46 | +.EX |
| 47 | +名称=值 命令 |
| 48 | +.EE |
| 49 | +.in |
| 50 | +.P |
| 51 | +它可被用来仅在执行 \fI命令\fP 时创建对应的环境变量定义。在 \fI命令\fP 之前,可以存在多个变量定义,其间使用空格进行分隔。 |
| 52 | +.P |
| 53 | +参数还可以在调用 \fBexec\fP(3)时被放置于环境之中。C 程序可以使用诸如 \fBgetenv\fP(3), \fBputenv\fP(3), |
| 54 | +\fBsetenv\fP(3) 和 \fBunsetenv\fP(3) 的函数操纵其环境。 |
| 55 | +.P |
| 56 | +本文的下述部分列出了系统上常见的环境变量。这个列表并不完整,且仅包含普通用户在日常使用中常见的变量。特定程序或软件库函数所使用的环境变量通常会在其对应的手册页中的“环境”一节中进行描述。 |
| 57 | +.TP |
| 58 | +\fBUSER\fP |
| 59 | +已登录用户的名称(被某些 BSD 衍生的程序所使用)。其在登录时被设置,请见下文的备注一节。 |
| 60 | +.TP |
| 61 | +\fBLOGNAME\fP |
| 62 | +已登录用户的名称(被某些 System\-V 衍生的程序所使用)。其在登录时被设置,请见下文的备注一节。 |
| 63 | +.TP |
| 64 | +\fBHOME\fP |
| 65 | +用户登录时的目录。其在登录时被设置,请见下文的备注一节。 |
| 66 | +.TP |
| 67 | +\fBLANG\fP |
| 68 | +用于语言和区域设置类别的名称,它在未被 \fBLC_ALL\fP 或更具体的环境变量,如 \fBLC_COLLATE\fP, \fBLC_CTYPE\fP, |
| 69 | +\fBLC_MESSAGES\fP, \fBLC_MONETARY\fP, \fBLC_NUMERIC\fP 和 \fBLC_TIME\fP 所覆盖时生效(请参见 |
| 70 | +\fBlocale\fP(7) 以了解 \fBLC_*\fP 环境变量的具体细节)。 |
| 71 | +.TP |
| 72 | +\fBPATH\fP |
| 73 | +它是一系列目录前缀,可被 \fBsh\fP(1) |
| 74 | +和许多其他程序所使用以搜索由简单的文件名(即不含有斜线的路径名)所指定的可执行文件。各个前缀之间被冒号(\fB:\fP)所分隔。整个前缀列表会被从前到后进行搜索,程序会检查给定路径名在附加前缀、斜线和文件名之后的路径是否存在,直到找到一个符合条件的可执行文件为止。 |
| 75 | +.IP |
| 76 | +还存在一个遗留的特性:如果前缀长度为零(即由两个相邻的冒号组成,或者有起始或终止位置的冒号存在),该前缀会被解释为指定当前工作目录。然而,当前已不推荐使用该特性,且 |
| 77 | +POSIX 认为一个符合标准的应用程序应当使用显式的路径名(如 \fI.\fP)来指定当前工作目录。 |
| 78 | +.IP |
| 79 | +类似 \fBPATH\fP,还存在 \fBCDPATH\fP 会被某些 shell 用来寻找更改目录指令的目标目录,以及被 \fBman\fP(1) 所使用寻找手册页的 |
| 80 | +\fBMANPATH\fP,等等。 |
| 81 | +.TP |
| 82 | +\fBPWD\fP |
| 83 | +当前工作目录的绝对路径。它的组成部分必须被规范化(即不可出现 \fI.\&\fP 或 \fI..\&\fP 的路径部分)。 |
| 84 | +.TP |
| 85 | +\fBSHELL\fP |
| 86 | +用户登录 shell 的绝对路径名。其在登录时被设置,请见下文的备注一节。 |
| 87 | +.TP |
| 88 | +\fBTERM\fP |
| 89 | +输出应当兼容的终端类型。 |
| 90 | +.TP |
| 91 | +\fBPAGER\fP |
| 92 | +用户偏好的显示文本文件的实用工具。可被设置为任何 \fIsh\ \-c\fP 命令可接受的命令字符串操作符。如果 \fBPAGER\fP |
| 93 | +的值为空或未被设置,则启动分页器的应用程序会默认选择一个程序,如 \fBless\fP(1) 或 \fBmore\fP(1)。 |
| 94 | +.TP |
| 95 | +\fBEDITOR\fP/\fBVISUAL\fP |
| 96 | +.\" .TP |
| 97 | +.\" .B BROWSER |
| 98 | +.\" The user's preferred utility to browse URLs. Sequence of colon-separated |
| 99 | +.\" browser commands. See http://www.catb.org/\[ti]esr/BROWSER/ . |
| 100 | +用户偏好使用的编辑文本文件的工具。可被设置为任何 \fIsh\ \-c\fP 命令可接受的命令字符串操作符。 |
| 101 | +.P |
| 102 | +请注意,许多程序和软件库例程的行为都会受到特定环境变量存在与否及其取值的影响。下面给出一些例子: |
| 103 | +.IP \[bu] 3 |
| 104 | +\fBLANG\fP, \fBLANGUAGE\fP, \fBNLSPATH\fP, \fBLOCPATH\fP, \fBLC_ALL\fP, \fBLC_MESSAGES\fP |
| 105 | +等等变量会影响语言和区域设置的处理;请参见 \fBcatopen\fP(3), \fBgettext\fP(3) 和 \fBlocale\fP(7)。 |
| 106 | +.IP \[bu] |
| 107 | +\fBTMPDIR\fP 影响由 \fBtempnam\fP(3) 和其他例程创建的路径名称的前缀,以及由 \fBsort\fP(1) 和其他程序所使用的临时目录名。 |
| 108 | +.IP \[bu] |
| 109 | +\fBLD_LIBRARY_PATH\fP, \fBLD_PRELOAD\fP 和其他 \fBLD_*\fP 变量会影响动态加载器/链接器的行为。请参见 |
| 110 | +\fBld.so\fP(8)。 |
| 111 | +.IP \[bu] |
| 112 | +\fBPOSIXLY_CORRECT\fP 使得特定的程序和软件库例程遵循 POSIX 所指定的行为。 |
| 113 | +.IP \[bu] |
| 114 | +\fBmalloc\fP(3) 的行为受到 \fBMALLOC_*\fP 变量的影响。 |
| 115 | +.IP \[bu] |
| 116 | +\fBHOSTALIASES\fP 变量给出包含 \fBgethostbyname\fP(3) 将要使用的主机别名的文件的名称。 |
| 117 | +.IP \[bu] |
| 118 | +\fBTZ\fP 和 \fBTZDIR\fP 给出 \fBtzset\fP(3) 所使用的时区信息,并涉及诸如 \fBctime\fP(3), \fBlocaltime\fP(3), |
| 119 | +\fBmktime\fP(3), \fBstrftime\fP(3) 等函数。另请参见 \fBtzselect\fP(8)。 |
| 120 | +.IP \[bu] |
| 121 | +\fBTERMCAP\fP 提供如何处理给定终端的相关信息(或者给出包含这些信息的文件的文件名) |
| 122 | +.IP \[bu] |
| 123 | +\fBCOLUMNS\fP 和 \fBLINES\fP 会告知应用程序窗口大小信息,它可能会覆盖实际大小的配置。 |
| 124 | +.IP \[bu] |
| 125 | +\fBPRINTER\fP 或 \fBLPDEST\fP 可能指定要使用的打印机。请见 \fBlpr\fP(1)。 |
| 126 | +.SH 备注 |
| 127 | +历史上以及标准上,\fIenviron\fP 必须被用户程序所声明。然而,一个现存的不标准的方便程序员工作的方法是将 \fIenviron\fP 声明在 |
| 128 | +\fI<unistd.h>\fP 头文件中,前提是 \fB_GNU_SOURCE\fP 功能测试宏已被定义(参见 |
| 129 | +\fBfeature_test_macros\fP(7))。 |
| 130 | +.P |
| 131 | +\fBprctl\fP(2) 中的 \fBPR_SET_MM_ENV_START\fP 和 \fBPR_SET_MM_ENV_END\fP |
| 132 | +操作可被用来控制进程环境的位置。 |
| 133 | +.P |
| 134 | +\fBHOME\fP, \fBLOGNAME\fP, \fBSHELL\fP 和 \fBUSER\fP 变量会在用户经由会话管理界面被变更时被设置。者通常是经由类似 |
| 135 | +\fBlogin\fP(1) 的程序以及用户数据库(例如 \fBpasswd\fP(5))所完成的。(使用 \fBsu\fP(1) 切换到 root |
| 136 | +用户可能导致混合的环境变量,其中 \fBLOGNAME\fP 和 \fBUSER\fP 被保留为旧有用户的值;参见 \fBsu\fP(1) 手册页。) |
| 137 | +.SH 缺陷 |
| 138 | +很显然,这个机制有安全风险。许多系统命令可被用户指定的不同寻常的 \fBIFS\fP 或 \fBLD_LIBRARY_PATH\fP 的值所欺骗。 |
| 139 | +.P |
| 140 | +还存在命名空间污染的风险。如 \fImake\fP 和 \fIautoconf\fP |
| 141 | +等程序允许环境中具有和实用工具相同命名(但全大写)的变量覆盖默认所使用的工具路径。因此,用户可以使用 \fBCC\fP 来选择想要使用的 C |
| 142 | +编译器(类似地,还有 \fBMAKE\fP, \fBAR\fP, \fBAS\fP, \fBFC\fP, \fBLD\fP, \fBLEX\fP, \fBRM\fP, \fBYACC\fP |
| 143 | +等等)。然而,在某些传统的使用场景中这些环境变量还会被赋值为程序选项而非路径名,例如 \fBMORE\fP 和 |
| 144 | +\fBLESS\fP。这些用法被认为是错误的,应当在新程序中避免。 |
| 145 | +.SH 参见 |
| 146 | +\fBbash\fP(1), \fBcsh\fP(1), \fBenv\fP(1), \fBlogin\fP(1), \fBprintenv\fP(1), \fBsh\fP(1), |
| 147 | +\fBsu\fP(1), \fBtcsh\fP(1), \fBexecve\fP(2), \fBclearenv\fP(3), \fBexec\fP(3), |
| 148 | +\fBgetenv\fP(3), \fBputenv\fP(3), \fBsetenv\fP(3), \fBunsetenv\fP(3), \fBlocale\fP(7), |
| 149 | +\fBld.so\fP(8), \fBpam_env\fP(8) |
0 commit comments