Unix/Linux 环境变量怎么设置和查看?

文章导读
Previous Quiz Next 在本章中,我们将详细讨论 Unix 环境。一个重要的 Unix 概念是 environment,它由 environment variables 定义。有些是由系统设置的,有些是由您设置的,还有些是由 shell 或加载其他程序的任何程
📋 目录
  1. The .profile File
  2. Setting the Terminal Type
  3. Setting the PATH
  4. PS1 和 PS2 变量
  5. 环境变量
A A

Unix / Linux - 环境



Previous
Quiz
Next

在本章中,我们将详细讨论 Unix 环境。一个重要的 Unix 概念是 environment,它由 environment variables 定义。有些是由系统设置的,有些是由您设置的,还有些是由 shell 或加载其他程序的任何程序设置的。

变量是一个字符字符串,我们为其赋值。赋的值可以是数字、文本、文件名、设备或其他任何类型的数据。

例如,首先我们设置一个变量 TEST,然后使用 echo 命令访问其值 −

$TEST="Unix Programming"
$echo $TEST

它会产生以下结果。

Unix Programming

注意,设置 environment variables 时不使用 $ 符号,但访问它们时使用 $ 符号作为前缀。这些变量的值会保留,直到我们退出 shell。

当您登录系统时,shell 会经历一个称为 initialization 的阶段来设置环境。这通常是一个两步过程,涉及 shell 读取以下文件 −

  • /etc/profile
  • profile

过程如下 −

  • shell 检查文件 /etc/profile 是否存在。

  • 如果存在,shell 读取它。否则,跳过此文件。不显示错误消息。

  • shell 检查您的 home directory 中是否存在文件 .profile。您的 home directory 是登录后您开始所在的目录。

  • 如果存在,shell 读取它;否则,shell 跳过它。不显示错误消息。

一旦这两个文件都被读取,shell 就会显示提示符 −

$

这是您可以输入命令以执行命令的提示符。

注意 − 这里详细说明的 shell 初始化过程适用于所有 Bourne 类型 shell,但 bashksh 会使用一些额外的文件。

The .profile File

文件 /etc/profile 由您的 Unix 机器的系统管理员维护,包含系统中所有用户所需的 shell 初始化信息。

文件 .profile 由您控制。您可以向此文件中添加任意数量的 shell 自定义信息。您需要配置的最小信息集包括 −

  • 您使用的终端类型。
  • 用于查找命令的目录列表。
  • 影响终端外观和感觉的变量列表。

您可以检查 home directory 中可用的 .profile。使用 vi editor 打开它,并检查为您的环境设置的所有变量。

Setting the Terminal Type

通常,您使用的终端类型由 logingetty 程序自动配置。有时,自动配置过程会错误猜测您的终端。

如果您的终端设置不正确,命令的输出可能看起来很奇怪,或者您可能无法正确与 shell 交互。

为了确保这种情况不会发生,大多数用户以下列方式将终端设置为最低公分母 −

$TERM=vt100
$

Setting the PATH

当您在命令提示符下输入任何命令时,shell 必须先找到该命令才能执行它。

PATH 变量指定 shell 应查找命令的位置。通常 PATH 变量设置如下 −

$PATH=/bin:/usr/bin
$

这里,由冒号字符 (:) 分隔的每个单独条目都是目录。如果您要求 shell 执行一个命令,而它在 PATH 变量中给定的任何目录中都找不到该命令,则会出现类似以下的消息 −

$hello
hello: not found
$

还有像 PS1 和 PS2 这样的变量,它们将在下一节讨论。

PS1 和 PS2 变量

shell 显示的命令提示符字符存储在变量 PS1 中。你可以将其更改为任何你想要的内容。一旦更改,shell 从那时起就会使用它。

例如,如果你执行以下命令 −

$PS1='=>'
=>
=>
=>

你的提示符将变为 =>。要设置 PS1 的值以显示工作目录,请执行以下命令 −

=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www//unix]$
[root@ip-72-167-112-17 /var/www//unix]$

此命令的结果是提示符显示用户的用户名、机器名称(hostname)和工作目录。

有许多转义序列可以用作 PS1 的值参数;请尽量限制使用最重要的那些,以免提示符信息过多而让你眼花缭乱。

序号 转义序列 & 描述
1

\t

当前时间,格式为 HH:MM:SS

2

\d

当前日期,格式为 星期 月 日

3

\n

换行

4

\s

当前 shell 环境

5

\W

工作目录

6

\w

工作目录的完整路径

7

\u

当前用户的用户名

8

\h

当前机器的主机名

9

\#

当前命令的命令编号。每次输入新命令时递增

10

\$

如果有效 UID 为 0(即以 root 身份登录),则以 # 字符结束提示符;否则,使用 $ 符号

你可以每次登录时手动进行更改,或者通过将更改添加到你的 .profile 文件中,让 PS1 自动进行更改。

当你输入不完整的命令时,shell 将显示次要提示符并等待你完成命令并再次按 Enter

默认的次要提示符是 >(大于号),但可以通过重新定义 PS2 shell 变量来更改 −

以下示例使用默认的次要提示符 −

$ echo "this is a
> test"
this is a
test
$

下面的示例使用自定义提示符重新定义了 PS2 −

$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$

环境变量

以下是重要的环境变量的部分列表。这些变量按以下方式设置和访问 −

序号 变量 & 描述
1

DISPLAY

包含 X11 程序默认使用的显示器的标识符。

2

HOME

指示当前用户的主目录:cd built-in 命令的默认参数。

3

IFS

指示解析器在扩展后用于单词拆分的内部字段分隔符

4

LANG

LANG 扩展为默认系统 locale;可以使用 LC_ALL 来覆盖它。例如,如果其值为 pt_BR,则语言设置为(巴西)葡萄牙语,locale 设置为巴西。

5

LD_LIBRARY_PATH

具有动态链接器的 Unix 系统,包含一个冒号分隔的目录列表,动态链接器在 exec 后构建进程镜像时搜索共享对象,在搜索其他目录之前。

6

PATH

指示命令的搜索路径。它是 shell 查找命令的冒号分隔目录列表。

7

PWD

指示由 cd 命令设置的当前工作目录。

8

RANDOM

每次引用时生成 0 到 32,767 之间的随机整数。

9

SHLVL

每次启动 bash 实例时递增 1。此变量用于确定内置 exit 命令是否结束当前会话。

10

TERM

指显示器类型。

11

TZ

指时区。可以取 GMT、AST 等值。

12

UID

扩展为当前用户的数字用户 ID,在 shell 启动时初始化。

以下是显示几个环境变量的示例 −

$ echo $HOME
/root
]$ echo $DISPLAY

$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$