Unix / Linux - 环境

  • 简述

    这一章,我们将详细讨论Unix环境。一个重要的 Unix 概念是environment,由环境变量定义。有些是由系统设置的,有些是由您设置的,还有一些是由 shell 或加载其他程序的任何程序设置的。
    变量是我们为其赋值的字符串。分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。
    例如,首先我们设置一个变量 TEST,然后我们使用 echo 命令 -
    
    $TEST="Unix Programming"
    $echo $TEST
    
    它产生以下结果。
    
    Unix Programming
    
    请注意,环境变量的设置没有使用 $符号,但在访问它们时,我们使用 $ 符号作为前缀。这些变量保留它们的值,直到我们退出 shell。
    当您登录系统时,shell 会经历一个称为 initialization来设置环境。这通常是一个两步过程,涉及 shell 读取以下文件 -
    • /etc/配置文件
    • 轮廓
    过程如下 -
    • shell 检查文件是否 /etc/profile 存在。
    • 如果存在,shell 会读取它。否则,将跳过此文件。不显示错误消息。
    • shell 检查文件是否 .profile存在于您的主目录中。您的主目录是您登录后开始的目录。
    • 如果存在,shell 会读取它;否则,shell 会跳过它。不显示错误消息。
    一旦读取了这两个文件,shell 就会显示一个提示 -
    
    $
    
    这是您可以输入命令以执行它们的提示。
    Note - 这里详述的shell初始化过程适用于所有 Bourne 键入 shell,但使用一些额外的文件 bashksh.
  • .profile 文件

    文件 /etc/profile 由您的 Unix 机器的系统管理员维护,包含系统上所有用户所需的 shell 初始化信息。
    文件 .profile在你的控制之下。您可以向该文件添加任意数量的 shell 自定义信息。您需要配置的最少信息集包括 -
    • 您使用的终端类型。
    • 用于定位命令的目录列表。
    • 影响终端外观的变量列表。
    你可以检查你的 .profile在您的主目录中可用。使用 vi 编辑器打开它并检查为您的环境设置的所有变量。
  • 设置终端类型

    通常,您使用的终端类型由以下任一者自动配置 login 或者 getty程式。有时,自动配置过程会错误地猜测您的终端。
    如果您的终端设置不正确,命令的输出可能看起来很奇怪,或者您可能无法与 shell 正确交互。
    为了确保不是这种情况,大多数用户通过以下方式将他们的终端设置为最小公分母 -
    
    $TERM=vt100
    $
    
  • 设置路径

    当您在命令提示符下键入任何命令时,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/jc2182/unix]$
    [root@ip-72-167-112-17 /var/www/jc2182/unix]$
    
    此命令的结果是提示符显示用户的用户名、机器的名称(主机名)和工作目录。
    有不少 escape sequences可以用作 PS1 的值参数;尽量把自己限制在最关键的地方,这样提示就不会用信息淹没你。
    序号 转义序列和描述
    1
    \t
    当前时间,表示为 HH:MM:SS
    2
    \d
    当前日期,表示为工作日月份日期
    3
    \n
    新队
    4
    \s
    当前外壳环境
    5
    \W
    工作目录
    6
    \w
    工作目录的完整路径
    7
    \u
    当前用户的用户名
    8
    \h
    当前机器的主机名
    9
    \#
    当前命令的命令号。输入新命令时增加
    10
    \$
    如果有效 UID 为 0(即,如果您以 root 身份登录),则以 # 字符结束提示;否则,使用 $ 符号
    您可以在每次登录时自己进行更改,也可以通过将其添加到您的 PS1 中自动进行更改 .profile 文件。
    当你发出一个不完整的命令时,shell 会显示一个辅助提示,等待你完成命令并点击 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
    $
    
  • 环境变量

    以下是重要环境变量的部分列表。这些变量的设置和访问如下所述 -
    序号 变量和描述
    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 系统包含一个以冒号分隔的目录列表,动态链接器在 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
    $