📅  最后修改于: 2020-10-31 14:45:56             🧑  作者: Mango
在本章中,我们将详细讨论Unix环境。 Unix的一个重要概念是环境,它由环境变量定义。有些是由系统设置的,其他是由您设置的,而其他是由Shell设置的,或者由加载另一个程序的任何程序设置的。
一个变量是我们分配一个值的。分配的值可以是数字,文本,文件名,设备或任何其他类型的数据。
例如,首先我们设置一个变量TEST,然后使用echo命令访问它的值-
$TEST="Unix Programming"
$echo $TEST
它产生以下结果。
Unix Programming
请注意,设置环境变量时不使用$符号,但是在访问它们时,我们使用$符号作为前缀。这些变量将保留它们的值,直到我们脱离外壳。
当您登录到系统时,shell会经历一个称为初始化的阶段来设置环境。这通常是一个两步过程,涉及外壳读取以下文件-
流程如下-
Shell检查以查看文件/ etc / profile是否存在。
如果存在,则外壳程序将读取它。否则,将跳过此文件。没有错误信息显示。
外壳程序会检查您的主目录中是否存在文件.profile 。您的主目录是您登录后开始的目录。
如果存在,则外壳程序将读取它;否则,它将读取它。否则,shell将跳过它。没有错误信息显示。
读完这两个文件后,shell会显示提示-
$
这是提示,您可以在其中输入命令以执行命令。
注–此处详细介绍的shell初始化过程适用于所有Bourne类型的shell,但是bash和ksh使用了一些其他文件。
文件/ etc / profile由Unix计算机的系统管理员维护,并且包含系统上所有用户所需的shell初始化信息。
文件.profile在您的控制之下。您可以根据需要向此文件添加尽可能多的Shell定制信息。您需要配置的最少信息集包括-
您可以在主目录中查看可用的.profile 。使用vi编辑器将其打开,并检查为您的环境设置的所有变量。
通常,您使用的终端类型由登录程序或getty程序自动配置。有时,自动配置过程会错误地猜测您的终端。
如果您的终端设置不正确,则命令的输出可能看起来很奇怪,或者您可能无法与Shell正确交互。
为了确保不是这种情况,大多数用户通过以下方式将其终端设置为最低公分母-
$TERM=vt100
$
在命令提示符下键入任何命令时,外壳程序必须先找到该命令,然后才能执行该命令。
PATH变量指定外壳程序应在其中查找命令的位置。通常,Path变量设置如下-
$PATH=/bin:/usr/bin
$
这里,每个中的各个条目的分离由字符(:)是目录。如果您请求外壳执行命令,但在PATH变量给定的任何目录中都找不到它,则会显示类似以下内容的消息-
$hello
hello: not found
$
下一节将讨论PS1和PS2等变量。
Shell作为命令提示符显示的字符存储在变量PS1中。您可以将此变量更改为所需的任何值。更改后,外壳将立即使用它。
例如,如果您发出命令-
$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的值参数。尝试将自己限制在最关键的位置,以使提示不会使您不知所措。
Sr.No. | Escape Sequence & Description |
---|---|
1 |
\t Current time, expressed as HH:MM:SS |
2 |
\d Current date, expressed as Weekday Month Date |
3 |
\n Newline |
4 |
\s Current shell environment |
5 |
\W Working directory |
6 |
\w Full path of the working directory |
7 |
\u Current user’s username |
8 |
\h Hostname of the current machine |
9 |
\# Command number of the current command. Increases when a new command is entered |
10 |
\$ If the effective UID is 0 (that is, if you are logged in as root), end the prompt with the # character; otherwise, use the $ sign |
您可以在每次登录时自行进行更改,也可以通过将更改添加到您的.profile文件中来自动进行更改。
当您发出不完整的命令时,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
$
以下是重要环境变量的部分列表。如下所述设置和访问这些变量-
Sr.No. | Variable & Description |
---|---|
1 |
DISPLAY Contains the identifier for the display that X11 programs should use by default. |
2 |
HOME Indicates the home directory of the current user: the default argument for the cd built-in command. |
3 |
IFS Indicates the Internal Field Separator that is used by the parser for word splitting after expansion. |
4 |
LANG LANG expands to the default system locale; LC_ALL can be used to override this. For example, if its value is pt_BR, then the language is set to (Brazilian) Portuguese and the locale to Brazil. |
5 |
LD_LIBRARY_PATH A Unix system with a dynamic linker, contains a colonseparated list of directories that the dynamic linker should search for shared objects when building a process image after exec, before searching in any other directories. |
6 |
PATH Indicates the search path for commands. It is a colon-separated list of directories in which the shell looks for commands. |
7 |
PWD Indicates the current working directory as set by the cd command. |
8 |
RANDOM Generates a random integer between 0 and 32,767 each time it is referenced. |
9 |
SHLVL Increments by one each time an instance of bash is started. This variable is useful for determining whether the built-in exit command ends the current session. |
10 |
TERM Refers to the display type. |
11 |
TZ Refers to Time zone. It can take values like GMT, AST, etc. |
12 |
UID Expands to the numeric user ID of the current user, initialized at the shell startup. |
以下是显示很少的环境变量的示例示例-
$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$