感谢支持
我们一直在努力

Unix中挖掘环境变量背后的价值

  环境变量可以作用于用户的整个工作环境。同时相关的应用程序也需要利用这些环境变量来获取进程运行的环境变量。不如邮件监测程序,默认情况下会没隔一段时间去查看一下是否有新的邮件。要实现这个功能的话这个邮件监测程序必须要知道邮件存储的位置与监测的频率。这两样东西就是通过Unix系统的环境变量来实现的。不过在实际工作中,不少Unix系统工程师忽视了环境变量的作用。或者说,没有把环境变量背后的价值挖掘出来。笔者这篇文章或许能够给广大Unix系统爱好者一点启示。


  一、提示符的作用。


  在谈提示符的价值之前,笔者先给大家看一下dos下提示符的显示格式。如下图所示,是微软XP操作系统下DOS版本的截图。


从这个截图中大家可以看出,DOS下的提示符是比较直观的。先是盘符,然后是当前的绝对路径,然后以>符号结尾。但是在Unix系统中却不是如此。在Unix系统下,其路径不是决定路径,而只是显示当前目录的名称。这就给平时的维护造成了一定的困难。那么在Unix系统下能否按DOS下的提示符格式来显示呢?即显示当前的绝对路径。要实现这个功能,就需要从Unix的提示符说起了。


  提示符信息也是Unix操作系统中的环境变量。在shell环境中有两个提示符,分别为PS1与PS2。其中PS1为主提示字符串,即大家平常所看到的那个提示符(可能是一个美元符号$或者一个#字号)。通常情况下,如果当前用户是特权用户,则其主提示符可能为#;如果当前用户为普通用户,则其主提示符就为$符号。另外在shell进程中,还可以运行多条命令。此时系统会显示>提示符,这个提示符就是次级提示符,保存在PS2环境变量中。那么如何通过这个提示符来实现如上的需求呢?且听笔者慢慢道来。


  1、首先需要显示的就是不管是主提示符还是次级提示符,都以>结束。此时系统工程师可以通过改变主提示符的值来实现。如可以通过$PS1=”>”命令来实现。这个命令的作用就是改变这个环境变量的值。另外有些人可能还喜欢在前面加入c:盘符,此时就可以把主提示符PS1的值设置为”c:>”。不过需要注意的是,Unix的文件系统跟微软的文件系统不一样。在Unix操作系统中,其只有一个跟目录,即一个树状结构;而在Windows操作系统中,每个分区都有一个根目录,都有一个独立的树状结构。故在Unix操作系统中没有C、D、E盘的区分。


  2、其次是要实现在提示符中显示绝对路径。此时需要PWD环境变量的帮助。在Linux系统中,pwd命令可以用来显示当前的绝对路径。不过在Unix操作系统中的BASH中(shell的一种),专门提供了一个PWD环境变量。这个环境变量主要用来存储当前光标所在的绝对路径。PWD是一个动态的环境变量。当用户每次切换目录时,这个环境变量都将被重新赋值。如果要在提示符中显示当前的绝对路径,那么只需要把这个变量赋于给主提示符PS1即可。由于PWD变量动态改变的特性,此时主提示符也会随着PWD环境变量(绝对路径)的改变而改变。具体的赋值命令为:$PS1=’ $PWD’。这里笔者要强调一个小细节。当把一个环境变量赋值给另外一个环境变量时,则需要加入$符号。否则的话,Unix操作系统会把这个变量当作一个普通的字符串来对待。笔者在给学员进行培训时,这是他们经常犯的错误。这注意是因为他们可能受到以前经验的影响。因为在一些开发环境中编程的时候,在把某个变量的值赋值给其他变量时,不需要在变量前加入$等类似的特殊符号。但是这里需要注意,在Unix操作系统中如果把某个环境变量的值赋值给另外一个环境变量,必须要用$符号来标示,否则的话系统会把这个环境变量名字当作普通的字符来处理。


  提示符除了可以模拟实现DOS提示符显示格式之外,还有其他一些重要的作用。如大部分系统工程师在管理Unix服务器的时候,不会直接通过Unix终端控制台来进行。而是利用ssh等远程连接协议进行远程登陆,进行远程维护。如果企业中Unix服务器比较多的话,系统工程师就可能会比较麻烦。因为在默认情况下,利用ssh协议远程登陆到Unix操作系统,在终端上不会显示Unix主机的名字。为此如果系统工程师在同一时刻连接了多台Unix服务器的话,则其就不能够一目了然的知道到底是哪台Unix服务器。在这种情况下,系统工程师就希望在提示符中能够显示Unix主机的名字。在bash环境中,有一个转义字符可以实现类似的需求。\h这个转义字符就是用来显示当前主机的名字。为此如果系统工程师需要提示符中显示主机的名字,则可以通过如下的命令来实现,$PS1=”\h”。如此设置后,在Unix操作系统提示符中就会显示当前主机的名字。这方面在Linux系统上就做的比较好,其默认情况下就会显示主机的名字。

    二、邮件提醒相关的环境变量。


  在Unix操作系统中,也有跟微软操作系统中类是的邮件提醒功能。当邮件到达操作系统时,邮件接收系统会自动的同时用户。要完成这个任务的话,邮件接收系统必须要知道两件事情,一是用户的邮箱位置,二是检查新邮件的时间间隔。也就是说,邮件接收系统必须知道每隔多久到哪个地方去查看是否有新邮件。为此了实现这个目录,在Unix操作系统中是通过两个环境变量来实现的。一是环境变量MAIL,它主要用来显示用户的邮箱位置。默认情况下用户的邮箱位于/var/mail目录下。如果系统工程师要更改这个邮箱的位置,那么这个MAIL环境变量也要随之更改。否则的话邮件接收系统就会找不到用户邮箱位置,就不能够在收到邮件的时候自动提醒用户了。二是环境变量MAIL CHECK,这个变量决定了shell检查新邮件的时间间隔(默认情况下为一分钟)。每隔这个时间后,shell就会去检查这个目录看看其内容是否发生了变化。若发生了变化就会通知用户告知用户有新接收的邮件。系统工程师可以根据实际需要来改变这个值,如可以把其修改为2分钟。注意这个变量是以秒为单位。2分钟就需要设置120。虽然说缩短这个时间间隔会增加系统的一定负担,但是这个影响基本上可以忽略不计。也就是说,这个两个环境变量的作用不在于此。而在于其他的一些功能上。


  如有时候员工可能因为出差等原因,没有携带Unix主机。为此他们希望当有新邮件时能够转发到他们的私人邮箱。此时就需要用到以上两个环境变量。即当shell检测到MAIL目录内有新邮件时就马上转发。此时就需要用到以上两个变量的内容。其次利用这个两个变量还可以实现邮件的备份。首先利用cp命令把MAIL环境变量中定义的目录复制到其他地方,如网络服务器服务器上的某个共享目录中。然后再利用cron等命令让系统周期性的运行这个cp命令。可见,通过MIAL环境变量、cp与crom命令就可以轻松实现对本地邮件的备份,让用户不用担心本地邮件的丢失。如此的话就可以鼓励员工把邮件从邮箱服务器从下载下来保存在本地,从而可以降低邮箱服务器的空间压力。


  以上笔者只是列举了两个类型的环境变量在实际工作中对于用户的价值。其实在日常工作中,这些环境变量的价值往往被人所忽视。有时候几个环境变量的搭配使用会起到意想不到的效果。而且在应用程序中使用环境变量也能够起到不错的成效。以后若有机会,笔者还会陆续介绍环境变量与其他功能结合使用的案例,帮助大家来挖掘隐藏在环境变量背后的被忽略的价值。

赞(0) 打赏
转载请注明出处:服务器评测 » Unix中挖掘环境变量背后的价值
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏