- Unix/Linux 初学者指南
- Unix/Linux - 首页
- Unix/Linux - 什么是Linux?
- Unix/Linux - 入门
- Unix/Linux - 文件管理
- Unix/Linux - 目录
- Unix/Linux - 文件权限
- Unix/Linux - 环境
- Unix/Linux - 基本工具
- Unix/Linux - 管道与过滤器
- Unix/Linux - 进程
- Unix/Linux - 通信
- Unix/Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix/Linux - Shell 脚本
- Unix/Linux - 什么是Shell?
- Unix/Linux - 使用变量
- Unix/Linux - 特殊变量
- Unix/Linux - 使用数组
- Unix/Linux - 基本运算符
- Unix/Linux - 决策
- Unix/Linux - Shell 循环
- Unix/Linux - 循环控制
- Unix/Linux - Shell 替换
- Unix/Linux - 引号机制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- Unix/Linux - 信号和陷阱
Unix/Linux - 环境
在本章中,我们将详细讨论 Unix 环境。一个重要的 Unix 概念是**环境**,它由环境变量定义。一些由系统设置,另一些由您设置,还有一些由 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='=>' => => =>
您的提示符将变为=>。要设置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 当前日期,表示为星期几 月份 日期 |
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 指示当前用户的 home 目录:cd内置命令的默认参数。 |
3 |
IFS 指示扩展后由解析器用于单词拆分的内部字段分隔符。 |
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。此变量对于确定内置 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 $