阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Unix 环境

      UNIX 环境

      UNIX 中一个重要的概念是环境,它是由环境变量所定义。一些环境变量是由系统设置,有一些是由用户设置的,还有一些是被 Shell,或任何会加载另一个程序的程序所设置。

      一个变量是由一个字符组成的串,并且我们会给它赋值。给变量赋的值可以是一个数字,文本,文件名,设备或任何其他类型的数据。

      例如,首先,我们设置一个名称为 TEST 的变量,然后我们使用 echo 命令查看它的值:

      $TEST="Unix Programming"
      $echo $TEST
      Unix Programming
      

      注意,设置环境变量不使用 $ 符号,但在访问他们的时候,我们使用 $ 符号作为前缀。这些变量保存它们的值,直到我们退出 shell。

      当你登录到系统,shell 经过初始化阶段,在该阶段会设置各种环境变量。这通常会涉及到两步的处理过程,shell 会读取以下文件:

      • /etc/profile
      • profile

      处理流程如下:

      1. shell 程序检查 /etc/profile 文件是否存在。
      2. 如果该文件存在,shell 程序会读取该文件。否则,就会跳过该文件。同时也不会显示任何错误信息。
      3. shell 程序检查 .profile 文件是否在你的根目录下面存在。您的根目录就是你在登录之后进入的目录。
      4. 如果该文件存在,shell 程序就会读取它。否则,shell 程序跳过它,不会显示任何错误信息。

      一旦这两个文件读取完成,shell 显示一个等待输入命令:

      $
      

      这是提示,在它后面你可以输入命令来执行。

      **注意:**Shell 初始化的详细过程通常利用的是 Bourne Shell,但是其他的一些文件处理是利用 bashksh shell 程序。

      .profile 文件

      /etc/profile 文件是由 UNIX 的系统管理员维护的,并且该文件中包含了 Shell 初始化的信息,这个信息可以被任何系统中的任何用户查看。

      如果你有对 .profile 文件操作的权限,那么你就可以在这个文件中添加你想要的尽可能多的定制 Shell 信息。

      • 你使用的终止符的类型
      • 命令存在的一系列文件的列表
      • 一些列的变量设置你的终端显示的效果

      你可以在你的根目录下面查看 .profile 文件。利用 vi 编辑器打开它,查看其中设置的所有环境变量。

      设置终结符的类型

      通常您所使用的终端的类型由 logingetty 程序自动配置。有时,自动配置过程会推测你的终端类型是不对的。

      如果您的终端设置错误,命令的输出可能看起来很奇怪,或者你可能无法与 Shell 正常交互。

      确保这不是这种情况,大多数用户的终端最少相同的特性如下:

      $TERM=vt 100
      $
      

      设置 PATH 变量

      当你在命令提示符下输入任何命令,Shell 只有确定了命令所在的目录才能执行命令。

      Shell 是在环境变量 PATH 中寻找命令所在的目录。通常,它设置如下:

      $PATH=/bin:/usr/bin
      $
      

      这里的每一个由冒号,:,分开的实体是目录。如果你请求 Shell 执行一个命令,但是它不能在 PATH 环境变量中找到任何命令所在的路径,这时会出现一个类似如下的消息:

      $hello
      hello: not found
      $
      

      还有类似于 PS1 和 PS2 这样的变量,将会在下一节说明。

      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 的参数,尽量让自己只关注最关键的部分,不要让下面的信息对你造成过多的压力。

      转义序列描述
      \t将当前的时间表示成 HH:MM:SS 的形式
      \d将当前的日期表示成 周 月 日
      \n新的一行。
      \s当前的环境变量。
      \W工作目录。
      \w工作目录的完整路径。
      \u当前用户的用户名。
      \h当前机器的主机名称。
      \#当前命令的编号。每输入一条命令编号加 1。
      \$如果有效的 UID 是 0(也就是说,如果你以 root 用户进行登录),命令提示符会变成 #,否则,提示符是 $。

      你可以通过修改 .profile 文件,在每次登录的时候进行上面的那些转换。这样每次登录就会自动的改变 PS1 的值。

      当你输入一个不完整的命令是,shell 将再次显示一个命令输入符,等待你再次完成命令并回车。

      默认二级提示 >(大于号),但可以改变通过设置 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
      $
      

      环境变量

      以下是部分重要的环境变量的列表。这些变量将按照上面提到的方式被设置和访问:

      变量描述
      DISPLAY包含显示设备的标识符,默认情况下它的值是 X11。
      HOME表明当前用户的根目录,默认的参数中会内置 cd 命令。
      IFS表明系统内部所使用字段分隔符,它通常用在解析器分割单词中。
      LANGLANG 扩展系统默认的语言:LC_ALL 可以用来覆盖这个变量。例如,如果它的值是 pt_BR,那么系统的语言就被设置成(Brazillian)Portuguese 和地区被设置成 Brazil。
      LD_LIBRARY_PATH许多 UNIX 系统动态链接器,包含以冒号分隔的目录列表,在执行后,动态连接器构建过程图像过程中,在搜索其他目录之前,先搜索共享对象。
      PATH命令的搜索路径。它是由冒号分隔开一系列目录,也就是 shell 寻找命令所在的目录。
      PWD当前的工作目录,由 cd 命令设置的。
      RANDOM每次被引用的时候就会生成一个 0 到 32,767 范围内的一个随机整数。
      SHLVL每次一个 bash 实例被启动这个值就会加 1。这个变量对于决定内置的退出命令是否终止当前会话是很有用的。
      TERM显示类型。
      TZ时间区域。它能被赋值为 GMT,AST 等。
      UID数值类型标识当前用户,它在 shell 启动的时候被初始化。

      如下是几个简单的例子显示几个环境变量:

      $ echo $HOME
      /root
      ]$ echo $DISPLAY
      $ echo $TERM
      xterm
      $ echo $PATH
      /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
      $
      
      目录
      目录