上一章Unix和Linux教程请查看:Unix文件权限与访问模式和权限操作
在本章中我们将详细讨论Unix环境。环境是Unix的一个重要概念,它由环境变量定义,一些由系统设置另一些自定义设置,还有一些由shell或任何加载其他程序的程序设置。
1、Unix/Linux环境及环境变量概念
变量是我们赋值的字符串,赋值可以是数字、文本、文件名、设备或任何其他类型的数据。例如首先设置一个变量测试,然后使用echo命令访问它的值:
$TEST="shell Programming"
$echo $TEST
请注意环境变量的设置没有使用$符号,我们只是在访问它们时使用$符号作为前缀。这些变量会一直保留它们的值,直到我们退出shell。
当你登录到Unix系统时,shell将经历一个称为初始化的阶段来设置环境。这通常需要两个步骤,其中包括shell读取以下文件:
(1)/etc/profile
(2)profile配置文件
过程如下:
- shell检查文件/etc/profile是否存在。
- 如果它存在则shell将读取它,否则将跳过此文件,过程不会显示错误消息。
- shell检查文件.profile是否存在于主目录中,主目录是在你登录之后开始的目录。
- 如果它存在则shell将读取它,否则shell就会跳过它,过程不会显示错误消息。
- 一旦读取了这两个文件shell就会显示一个提示符$
在这个提示符中我们可以输入命令以执行它们。注意这里详细介绍的shell初始化过程适用于所有Bourne类型的shell,但是bash和ksh使用了一些额外的文件。
2、.profile文件
文件/etc/profile由Unix机器的系统管理员维护,包含系统上所有用户所需的shell初始化信息。
文件.profile在你的当前用户控制之下,你可以向该文件添加任意多的shell自定义信息,我们需要配置的最小信息集包括:
- 使用的终端类型。
- 用于定位命令的目录列表。
- 影响终端外观和体验的变量列表。
我们可以检查主目录中可用的.profile并使用vi/vim编辑器打开它,并检查为你的环境设置的所有变量。
3、设置终端类型
我们一般使用的终端类型是由login或getty程序自动配置的,不过有时自动配置过程会错误地猜测你的终端。如果你的终端设置不正确,命令的输出可能看起来很奇怪,或者你可能无法正确地与shell交互。
为了确保不是这样的错误情况,大多数用户将他们的终端设置为最低标准,方法如下:
$TERM=vt100
$
4、设置路径
当你在命令提示符上键入任何命令时,shell必须先定位该命令然后才能执行它。PATH变量指定shell应该查找命令的位置,Path变量的一般设置如下:
$PATH=/bin:/usr/bin
$
这里用冒号(:)分隔的每个条目都是目录,如果你请求shell执行一个命令,但是它在PATH变量中给出的任何目录中都找不到它,那么将提示你该命令为not found。
5、PS1和PS2变量
shell作为命令提示符显示的字符存储在变量PS1中,你可以任意改变这个变量。如果你改变了它就会被shell使用。例如如果我们执行如下命令:
$PS1='=>'
=>
=>
=>
我们的提示符将变成了=>,要设置PS1的值以便显示工作目录可以执行以下命令:
=>PS1="[\u@\h \w]\$"
[root@ip-x-x-x /var/www/srcmini/unix]$
[root@ip-x-x-x /var/www/srcmini/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身份登录),那么用#字符结束提示,否则使用$符号 |
我们可以在每次登录时自己进行更改,也可以在PS1中将更改自动添加到.profile文件中。若你发出一个不完整的命令,shell将显示一个辅助提示并等待你完成命令并再次回车。
默认的辅助提示符是>(大于号),但是可以通过重新定义PS2 shell变量来更改它下面是使用默认辅助提示符的例子:
$ echo "es una
> test"
es una
test
$
下面给出的示例使用定制的提示重新定义了PS2:
$ PS2="secondary prompt->"
$ echo "es una
secondary prompt->test"
es una
test
$
6、环境变量
以下是重要环境变量的部分列表,如下所述设置并访问这些变量:
编号 | 变量 & 描述 |
1 | DISPLAY 包含X11程序默认应该使用的显示标识符。 |
2 | HOME 指示当前用户的主目录:cd内置命令的默认参数。 |
3 | IFS 指示解析器在展开后用于分词的内部字段分隔符。 |
4 | LANG LANG扩展到默认的系统语言环境,LC_ALL可以用来覆盖它。 |
5 | LD_LIBRARY_PATH 在一个带有动态链接器的Unix系统中,包含一个列分隔的目录列表,动态链接器在执行exec之后构建进程映像时,在搜索任何其他目录之前,应该搜索这个列表中的共享对象。 |
6 | PATH 指示命令的搜索路径。它是一个冒号分隔的目录列表,shell在其中查找命令。 |
7 | PWD 指示由cd命令设置的当前工作目录。 |
8 | RANDOM 每次引用一个0到32,767之间的随机整数。 |
9 | SHLVL 每次启动bash实例时递增一个。此变量对于确定内置的exit命令是否结束当前会话非常有用。 |
10 | TERM 表示显示类型。 |
11 | TZ 指时区。它可以采用诸如GMT、AST等值。 |
12 | UID 展开为当前用户的数字用户ID,在shell启动时初始化。 |
评论前必须登录!
注册