电脑技术学习

不要让Unix中的环境变量坐冷板凳

dn001

  环境变量在Unix操作系统中的地位不用笔者多说,大家都知道。但是在Unix操作系统中,有几个环境变量经常被人所忽视。笔者有时候跟一些经验比较丰富的系统工程师交流时,他们也不知道有这个环境变量。笔者今天就给大家介绍一下这些被忽视的环境变量,以及其应用。帮助大家扫扫认识的盲区。

  一、防止文件被意外覆盖。

  在Unix操作系统中,有一个很特殊的符号,叫做重定向符。通过这个符号,可以把一些屏幕的显示的结果或者其他内容重定向到一个文件中。显然这个重定向符号很受系统工程师的欢迎。如利用这个符号可以轻易的把当前目录下所有的文件名字保存到一个文件中。但是,这个符号也有一个缺陷。如某个文件已经存在,现在系统工程师再利用重定向符号创建同名的文件时,原来的文件就会在没有任何提示的情况下被覆盖掉。显然如果在操作时一不小心,就会带来不可挽回的损失。有时候,为了避免这种情况,我们系统工程师在使用重定向符号创建文件的时候,还不得不先查看一下当前目录下是否存在这个文件。

  为此,有时候我们希望在使用重定向符号创建文件时,默认情况下是不覆盖文件的。如果当目标文件已经存在的话,则系统会提示错误信息。除非用户在重定向符号命令中,利用参数指定让系统覆盖原有的文件。这个需求能够实现吗?答案当然是肯定的。这就需要用到一个被大家所忽略的环境变量noclobber参数。

  如我们需要实现上面这个需求的话,则可以进行如下设置。Set –o noclobber。这个命令的意思就是对文件采取了一种保护措施。当重定向需要建立的目标文件已经存在时,系统会提示错误信息(文件已经存在),并拒绝建立这个文件。如此的话,目标文件就不会被意外覆盖掉。不过有时会系统工程师可能知道目标文件的存在。如查看进程时,前后两次执行相同的命令。此时系统工程师就希望重定向符号覆盖原有的文件。此时,系统工程师也不需要去取消这个保护措施。而只需要在重定向符号后面加入一个|参数。如ls *.jpg >| image.txt即可。这个命令的含义是显示当前目录下所有的JPG文件,并把其文件名字保存到image.txt文件中。如果目标文件已经存在的话,就覆盖它。

标签: