---
name: "environ"
section: "5"
platform: "linux"
package: "manpages"
version: "1.70-1"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/environ/7"
---

# environ(5)

user environment

Part of [environ(7)](/environ/7.md).

## 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)](/exec/3.md) 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)](/login/1.md) from the password file [**passwd**(5)](/passwd/5.md).

- **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)](/locale/5.md).

- **PATH**

  The sequence of directory prefixes that [**sh**(1)](/sh/1.md) 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)](/man/1.md) 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)](/sh/1.md), or by the **setenv** command if you use [**csh**(1)](/csh/1.md). Arguments may also be placed in the environment at the point of an [**exec**(3)](/exec/3.md). A C program can manipulate its environment using the functions [**getenv**(3)](/getenv/3.md), [**putenv**(3)](/putenv/3.md), [**setenv**(3)](/setenv/3.md), and [**unsetenv**(3)](/unsetenv/3.md).

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)](/locale/5.md).

**TMPDIR** influences the path prefix of names created by **[tmpnam(3)](/tmpnam/3.md)** and other routines, the temporary directory used by [**sort**(1)](/sort/1.md) 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)](/malloc/3.md) is influenced by MALLOC\_\* variables.

The variable **HOSTALIASES** gives the name of a file containing aliases to be used with [**gethostbyname**(3)](/gethostbyname/3.md).

**TZ** and **TZDIR** give time zone information used by [**tzset**(3)](/tzset/3.md) and through that by functions like *ctime*(), *localtime*(), *mktime*(), *strftime*(). See also [**tzselect**(1)](/tzselect/1.md).

**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)](/lpr/1.md).

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

[**bash**(1)](/bash/1.md), [**csh**(1)](/csh/1.md), [**login**(1)](/login/1.md), [**sh**(1)](/sh/1.md), [**tcsh**(1)](/tcsh/1.md), [**execve**(2)](/execve/2.md), [**clearenv**(3)](/clearenv/3.md), [**exec**(3)](/exec/3.md), [**getenv**(3)](/getenv/3.md), [**putenv**(3)](/putenv/3.md), [**setenv**(3)](/setenv/3.md), [**unsetenv**(3)](/unsetenv/3.md), [**locale**(5)](/locale/5.md)
