NAME
environ - 用户环境(变量)
SYNOPSIS 总览
extern char **environ;
DESCRIPTION 描述
变量 environ 指向的是一个叫 'environment'(环境)的字符串数组 (这个变量必须在用户程序中声明,但是在使用 libc4 或 libc5 以及使用 glibc 并且定义了 _GNU_SOURCE 的情况下 ,它是在头文件 unistd.h 中声明的)。对于一个进程,这个字符串的数组是通过开始进程的 exec(3) 调用来得到,习惯上,这些字符串的格式是
- USER
- 登录用户的名字(被一些从 BSD 派生来程序所使用)。
- LOGNAME
- 登录用户的名字(被一些从 System-V 派生来程序所使用)。
- HOME
- 用户的登录目录,被login(1)按口令文件 passwd(5) 设置。
- LANG
- 当不被 LC_ALL 或更特殊的环境变量所忽略的时候,是用于地域分类的地域名。
- PATH
- 预先设定的目录前缀的序列,sh(1) 和许多程序可借此查找路径名不完全的文件。前缀由':'分隔。(类似的,有一些 shell 用 CDPATH 查找位于不同目录的命令,以及用 MANPATH 找手册页等等。)
- PWD
- 当前的工作路径。被一些 shell 设置。
- SHELL
- 用户的登录 shell 的文件名。
- TERM
- 用于准备输出的终端类型。
- PAGER
- 用户指定的显示文本文件的工具。
- EDITOR/VISUAL
- 用户指定的编辑文本文件的工具。
更多的名字可以通过和在 sh(1) 中的 export 命令和 'name=value',或 csh(1) 中的 setenv 命令设置。参数也可以在执行 exec(2) 的时候被放置在环境中。一个 C 程序可以使用函数 getenv(3)、 putenv(3)、 setenv(3) 和 unsetenv(3) 来操纵自身的环境。
注意许多程序和库例程的行为受特定的环境变量的存在和值的影响。随便的搜集一下就有:
环境变量 LANG、LANGUAGE、NLSPATH、LOCPATH、LC_ALL、 LC_MESSAGES 等影响地域的处理。
TMPDIR 影响 tmpnam(3) 生成名字的路径名前缀和其他一些例程, sort(1) 和其他程序用的临时文件目录等等。
LD_LIBRARY_PATH、LD_PRELOAD 和其他 LD_* 变量影响动态 (装载器/连接器)的行为。
POSIXLY_CORRECT 使特定的程序和库例程遵循 POSIX 规定。
MALLOC_* 变量影响 malloc(3) 的行为。
HOSTALIASES 变量给出包含 gethostbyname(3) 用的别名的文件的文件名。
TZ 和 TZDIR 给出时区信息。
TERMCAP 给出给定终端的窗口大小(或给出包含这种信息的文件的文件名)。
等等,还有很多。
这里有一个明显的安全风险。不止一个系统命令曾经被一个使用了一个不寻常的 IFS 或 LD_LIBRARY_PATH 变量值的用户诱入骗局中。
SEE ALSO 又见
login(1), sh(1), bash(1), csh(1), tcsh(1), execve(2), exec(3), getenv(3), putenv(3), setenv(3), unsetenv(3).
#p#
NAME
environ - user environment
SYNOPSIS
extern char **environ;
DESCRIPTION
The variable environ points to an array of strings called the `environment'. (This variable must be declared in the user program, but is declared in the header file unistd.h in case the header files came from libc4 or libc5, and in case they came from glibc and _GNU_SOURCE was defined.) This array of strings is made available to the process by the exec(3) call that started the process. By convention these strings have the form `name=value'. Common examples are:
- USER
- The name of the logged-in user (used by some BSD-derived programs).
- LOGNAME
- The name of the logged-in user (used by some System-V derived programs).
- HOME
- A user's login directory, set by login(1) from the password file passwd(5).
- LANG
- The name of a locale to use for locale categories when not overridden by LC_ALL or more specific environment variables like LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME, cf. locale(5).
- PATH
- The sequence of directory prefixes that sh(1) and many other programs apply in searching for a file known by an incomplete path name. The prefixes are separated by `:'. (Similarly one has CDPATH used by some shells to find the target of a change directory command, MANPATH used by man(1) to find manual pages, etc.)
- PWD
- The current working directory. Set by some shells.
- SHELL
- The file name of the user's login shell.
- TERM
- The terminal type for which output is to be prepared.
- PAGER
- The user's preferred utility to display text files.
- EDITOR/VISUAL
- The user's preferred utility to edit text files.
- BROWSER
- The user's preferred utility to browse URLs. Sequence of colon-separated browser commands. See http://www.catb.org/~esr/BROWSER/ .
Further names may be placed in the environment by the export command and `name=value' in sh(1), or by the setenv command if you use csh(1). Arguments may also be placed in the environment at the point of an exec(3). A C program can manipulate its environment using the functions getenv(3), putenv(3), setenv(3), and unsetenv(3).
Note that the behaviour of many programs and library routines is influenced by the presence or value of certain environment variables. A random collection:
The variables LANG, LANGUAGE, NLSPATH, LOCPATH, LC_ALL, LC_MESSAGES, etc. influence locale handling, cf. locale(5).
TMPDIR influences the path prefix of names created by tmpnam(3) and other routines, the temporary directory used by sort(1) and other programs, etc.
LD_LIBRARY_PATH, LD_PRELOAD and other LD_* variables influence the behaviour of the dynamic loader/linker.
POSIXLY_CORRECT makes certain programs and library routines follow the prescriptions of POSIX.
The behaviour of malloc(3) is influenced by MALLOC_* variables.
The variable HOSTALIASES gives the name of a file containing aliases to be used with gethostbyname(3).
TZ and TZDIR give time zone information used by tzset(3) and through that by functions like ctime(), localtime(), mktime(), strftime(). See also tzselect(1).
TERMCAP gives information on how to address a given terminal (or gives the name of a file containing such information).
COLUMNS and LINES tell applications about the window size, possibly overriding the actual size.
PRINTER or LPDEST may specify the desired printer to use. See lpr(1).
Etc.
BUGS
Clearly there is a security risk here. Many a system command has been tricked into mischief by a user who specified unusual values for IFS or LD_LIBRARY_PATH.
There is also the risk of name space pollution. Programs like make and autoconf allow overriding of default utility names from the environment with similarly named variables in all caps. Thus one uses CC to select the desired C compiler (and similarly MAKE, AR, AS, FC, LD, LEX, RM, YACC, etc.). However, in some traditional uses such an environment variable gives options for the program instead of a pathname. Thus, one has MORE, LESS, and GZIP. Such usage is considered mistaken, and to be avoided in new programs. The authors of gzip should consider renaming their option to GZIP_OPT.
SEE ALSO
login(1), sh(1), bash(1), csh(1), tcsh(1), execve(2), exec(3), getenv(3), putenv(3), setenv(3), clearenv(3), unsetenv(3), locale(5)