Unix 简明教程
Unix / Linux - Environment
在本章中,我们将详细讨论 Unix 环境。一个重要的 Unix 概念是 environment ,它由环境变量定义。有些是由系统设置的,有些是你设置的,还有些是由 shell 或加载另一个程序的任何程序设置的。
变量是一个我们向其分配值的字符串。分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。
例如,我们首先设置变量 TEST,然后使用 echo 命令访问其值 −
$TEST="Unix Programming"
$echo $TEST
产生以下结果。
Unix Programming
请注意,设置环境变量时不用 $ 标号,但访问它们时用的前缀是 $ 标号。这些变量保留其值,直到我们退出 shell。
登录系统时,shell 会经过称为 initialization 的阶段来设置环境。这通常是一个分两步的过程,涉及 shell 读取以下文件−
-
/etc/profile
-
profile
此过程如下−
-
shell 检查文件 /etc/profile 是否存在。
-
如果存在,shell 将读取它。否则,将跳过此文件。不会显示错误消息。
-
shell 检查文件 .profile 是否存在于您的主目录中。主目录是您登录后所在的目录。
-
如果文件存在,shell 会读取它;否则,shell 将跳过它。不会显示错误消息。
这两个文件都已读取完毕后,shell 会显示一个提示−
$
这是一个提示,您可以在此处输入命令,以让他们执行。
Note −此处详细说明的 shell 初始化过程适用于所有 Bourne 类型的 shell,但 bash 和 ksh 使用了一些另外的文件。
The .profile File
文件 /etc/profile 由 Unix 电脑的系统管理员维护,其中包含系统上的所有用户所需的 shell 初始化信息。
文件 .profile 受您控制。您可以向此文件添加任意多的 shell 自定义信息。您需要配置的最少信息包括−
-
您使用的终端类型。
-
可搜索命令的目录列表。
-
一些变量会影响终端的外观和触感。
你可以在家目录中查看 .profile 。使用 vi 编辑器将其打开,并查看为你的环境设置的所有变量。
Setting the Terminal Type
通常,你正在使用的终端类型会由 login 或 getty 程序自动配置。有时,自动配置过程会错误猜测你的终端。
如果你的终端设置错误,则命令的输出可能看起来很奇怪,或者你可能无法与 shell 正确交互。
为了确保这种情况不会发生,大多数用户以以下方式将他们的终端设置为最低公分母 −
$TERM=vt100
$
Setting the PATH
当你 فى موجه الأوامر تكتب أى أمر، يتعين على الشل العثور على الأمر قبل تنفيذه.
يوضح متغير PATH المواقع التى يجب أن يبحث فيها الشل عن الأوامر. وعادة ما يتم تعيين متغير المسار كما يلى −
$PATH=/bin:/usr/bin
$
هنا، كل مدخلة فردية مفصولة بواسطة حرف النقطتين (:) هى دلائل. إذا طلبت من الشل تنفيذ أمر ولم يتمكن من العثور عليه فى أى من الدلائل المحددة فى متغير المسار، ستظهر رسالة مشابهة لما يلى −
$hello
hello: not found
$
هناك متغيرات مثل PS1 و PS2 يتم مناقشتها فى القسم التالى.
PS1 and PS2 Variables
يتم تخزين الأحرف التى يعرضها الشل على أنه موجه للأوامر فى متغير 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]$
ويتمخض عن هذا الأمر إظهار موجه المستخدم لاسم المستخدم واسم الجهاز (اسم المضيف) ودليل العمل.
يوجد عدد غير قليل من escape sequences التى يمكن استخدامها كحجج قيمة لـ PS1؛ حاول أن تقصر نفسك على الأكثر أهمية حتى لا يغمرك الموجه بالمعلومات.
Sr.No. |
Escape Sequence & Description |
1 |
\t الوقت الحالي، معبرًا عنه بصيغة الساعات:الدقائق:الثوانى |
2 |
\d التاريخ الحالي، معبرًا عنه بصيغة يوم الأسبوع والشهر والتاريخ |
3 |
\n Newline |
4 |
\s Current shell environment |
5 |
\W Working directory |
6 |
\w المسار الكامل لدليل العمل |
7 |
\u Current user’s username |
8 |
\h اسم المضيف الخاص بالجهاز الحالي |
9 |
\# 当前命令的命令序号。输入新命令时会增加 |
10 |
\$ 如果有效 UID 为 0(即,如果以 root 身份登录),则以 # 字符结束提示符;否则,使用 $ 符号 |
每次登录时,您都可以自己进行更改,或者可以在 .profile 文件中添加更改使其在 PS1 中自动进行。
发出不完整的命令时,外壳将显示一个次要提示符,并等待您完成命令并再次按下 Enter 。
默认的次要提示符是 > (大于号),但可以通过重新定义 PS2 外壳变量进行更改 −
以下是使用默认次要提示符的示例 −
$ echo "this is a
> test"
this is a
test
$
下面给出的示例使用自定义提示符重新定义了 PS2 −
$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$
Environment Variables
以下是重要环境变量的部分列表。这些变量按如下所述设置和访问 −
Sr.No. |
Variable & Description |
1 |
DISPLAY 包含 X11 程序默认应使用的显示符标识符。 |
2 |
HOME 指示当前用户的家目录:cd built-in 命令的默认参数。 |
3 |
IFS 指示在展开后解析程序用于分割单词的 Internal Field Separator 。 |
4 |
LANG LANG 扩展到默认的系统语言环境;可以利用 LC_ALL 覆盖此项。例如,如果其值为 pt_BR ,则语言将设置为(巴西)葡萄牙语,语言环境设置为巴西。 |
5 |
LD_LIBRARY_PATH 具有动态链接器的 Unix 系统,其中包含一个冒号分隔的目录列表,动态链接器在执行后构建进程映像之前在其中搜索共享对象,然后在其他任何目录中搜索。 |
6 |
PATH 指示命令的搜索路径。这是外壳寻找命令的一系列冒号分隔目录。 |
7 |
PWD 指示由 cd 命令设置的当前工作目录。 |
8 |
RANDOM 每次引用时,都会生成一个 0 到 32,767 之间的随机整数。 |
9 |
SHLVL 每次启动 bash 实例时递增一次。此变量可用于确定内置 exit 命令是否结束当前会话。 |
10 |
TERM 指代显示类型。 |
11 |
TZ 指代时区。它可以采用诸如 GMT、AST 等值。 |
12 |
UID 展开为在 shell 启动时初始化的当前用户的数字用户 ID。 |
以下是显示几个环境变量的示例 -
$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$