Unix / Linux - 环境
在本章中,我们将详细讨论 Unix 环境。 一个重要的 Unix 概念是 environment,它由环境变量定义。 有些是由系统设置的,有些是由你设置的,还有一些是由 shell 或任何加载另一个程序的程序设置的。
变量是我们为其赋值的字符串。 分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。
例如,首先我们设置一个变量 TEST,然后我们使用 echo 命令访问它的值 −
$TEST="Unix Programming" $echo $TEST
它产生以下结果。
Unix Programming
请注意,环境变量是在不使用 $ 符号的情况下设置的,但是在访问它们时我们使用 $ 符号作为前缀。 这些变量保留它们的值,直到我们从 shell 中出来。
当您登录到系统时,shell 会经历一个称为初始化 的阶段来设置环境。 这通常是一个包含 shell 读取以下文件的两步过程 −
- /etc/profile
- profile
过程如下 −
shell 检查文件 /etc/profile 是否存在。
如果它存在,shell 会读取它。 否则,将跳过此文件。 不显示任何错误消息。
Shell 检查文件 .profile 是否存在于您的主目录中。 您的主目录是您登录后开始的目录。
如果它存在,shell 会读取它; 否则,shell 会跳过它。 不显示任何错误消息。
一旦读取了这两个文件,shell 就会显示提示 −
$
这是您可以输入命令以执行命令的提示符。
注意 − 此处详述的 shell 初始化过程适用于所有 Bourne 类型的 shell,但 bash 和 ksh 使用了一些额外的文件。
.profile 文件
文件 /etc/profile 由您的 Unix 机器的系统管理员维护,包含系统上所有用户所需的 shell 初始化信息。
.profile 文件在您的控制之下。 您可以向此文件中添加任意多的 shell 自定义信息。 您需要配置的最少信息集包括 −
- 您使用的终端类型。
- 用于查找命令的目录列表。
- 影响终端外观的变量列表。
您可以在您的主目录中检查您的 .profile 是否可用。 使用 vi 编辑器打开它并检查为您的环境设置的所有变量。
设置终端类型
通常,您使用的终端类型由login 或getty 程序自动配置。 有时,自动配置过程会错误地配置您的终端。
如果您的终端设置不正确,命令的输出可能看起来很奇怪,或者您可能无法与 shell 正确交互。
为了确保不是这种情况,大多数用户通过以下方式将他们的终端设置为最低 −
$TERM=vt100 $
设置 PATH
当您在命令提示符下键入任何命令时,shell 必须先找到该命令才能执行。
PATH 变量指定 shell 应在其中查找命令的位置。 通常Path变量设置如下 −
$PATH=/bin:/usr/bin $
在这里,每个由冒号字符 (:) 分隔的条目都是目录。 如果您请求 shell 执行命令,但它无法在 PATH 变量中给定的任何目录中找到该命令,则会出现类似于以下内容的消息 −
$hello hello: not found $
下一节将讨论 PS1 和 PS2 等变量。
PS1 和 PS2 变量
shell 显示为命令提示符的字符存储在变量 PS1 中。 您可以将此变量更改为您想要的任何内容。 一旦您更改它,shell 就会从那时起使用它。
例如,如果您发出命令 −
$PS1='=>' => => =>
您的提示将是 become =>。 要设置 PS1 的值以便它显示工作目录,请发出命令 −
=>PS1="[\u@\h \w]\$" [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
此命令的结果是提示符显示用户的用户名、机器的名称(主机名)和工作目录。
有相当多的转义序列可以用作PS1的值参数; 尝试将自己限制在最关键的内容上,这样提示就不会让您不知所措。
序号 | 转义序列 & 描述 |
---|---|
1 |
\t 当前时间,表示为HH:MM:SS |
2 |
\d 当前日期,表示为 Weekday Month Date |
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 内置命令的默认参数。 |
3 |
IFS 表示Internal Field Separator,解析器在展开后用于分词。 |
4 |
LANG LANG 扩展为默认系统语言环境; LC_ALL 可用于覆盖它。 例如,如果其值为 pt_BR,则语言设置为(巴西)葡萄牙语,区域设置为巴西。 |
5 |
LD_LIBRARY_PATH 带有动态链接器的 Unix 系统包含一个以冒号分隔的目录列表,动态链接器在 exec 之后构建进程映像时应该搜索共享对象,然后再搜索任何其他目录。 |
6 |
PATH 指示命令的搜索路径。 它是一个以冒号分隔的目录列表,shell 在其中查找命令。 |
7 |
PWD 指示由 cd 命令设置的当前工作目录。 |
8 |
RANDOM 每次引用时生成一个介于 0 和 32,767 之间的随机整数。 |
9 |
SHLVL 每次启动 bash 实例时递增 1。 此变量可用于确定内置退出命令是否结束当前会话。 |
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 $