unix重定向功能.doc_第1页
unix重定向功能.doc_第2页
unix重定向功能.doc_第3页
unix重定向功能.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Unix重定向功能能够给我们带来什么 在使用Unix系统的过程中,可能大家会遇到如下这些问题:1、在Unix系统下需要编译一个比较大的程序,估计要20分钟。在编译过程中可能会出现一些警告或者错误信息。系统工程师不可能这二十分钟都盯着屏幕看。为此系统工程师希望shell能够把这这些编译过程中出现的警告或者错误信息能够保存在一个文件中,以供系统工程师或者程序开发人员后续查询所用。2、在开发程序的时,有时候是根据代码的行数来收费的,在Unix系统中开发应用程序也是如此。为此系统工程师也希望能够有工具能够方便的来统计某个程序文件的行数。3、有时候系统管理员可能希望能够把几个文本文件合并起来。虽然通过复制、粘贴可以实现类似的功能。但是当需要被合并的文件比较多的时候,通过赋值粘贴来实现合并的目的,并不是很好的处理方法。等等。以上这些问题虽然在Unix系统中没有专门的命令来解决。但是通过重定向功能,再结合其他的一些处理技巧,这些问题就迎刃而解了。一、利用重定向功能实现文件的合并。在Unix系统中,当要把多个文件合并为一个文件时,重定向功能就会显得特别有用。如现在系统管理员希望帮Unix系统中的A1.TXT、A2.TXT 文件合并(甚至多个文件)就可以通过重定向功能来实现。在谈具体的原理之前,笔者先把这个命令写出来。Cat A1.TXT、A2.TXT new.txt这个命令的具体执行过程如下:首先当shell发现命令行中有特殊字符时,就会把流从它的默认设备上断开。现在这个命令中有符号时,系统就会创建一个新的文件new.txt为写入做准备。不过这里要注意一个问题,如果此时Unix系统中已经存在了这个文件,则shell会覆盖这个文件,而不会给系统管理员任何的提示。所以在利用输出重定向功能的时候,一定要谨慎。特别是最好不要以root身份来运行这个命令。因为特权用户对于系统中的所有文件与目录都有完全控制的权限。为此其运行这个命令的话,万一这个文件已经存在,则会毫不犹豫的覆盖这个文件,即使这个文件的所有者不是特权用户。其次shell会断开默认设备。Cat命令的默认设备通常情况下就是屏幕终端。但是shell在解释命令的时候看到了命令中有特殊符号,故会断开其默认设备,而会连接到new.txt这个文件中。即把这个文件当作其默认的显示设备。注意这里是断开默认设备,连接一个新设备;而不是创建一个备份设备。也就是说,此时执行这个命令的时候,因为已经断开了与屏幕终端的连接,故这两个文件的内容不会在屏幕上显示,而直接保存到了new.txt文件中。第三cat命令打开依次打开文件并读取数据。这里系统管理员需要弄清楚一个问题,是shell打开了这两个文件呢还是命令cat打开了这两个文件?搞清楚这个问题的答案对于后续的学习很有帮助。笔者在后续的文章中会谈到这个问题。在这里系统管理员只需要记住,执行这个命令的时候是cat命令打开了这些文件,而不是shell。然后Cat命令会把读取的数据写入到已经重定向到new.txt文件的标准输出。注意在这个命令的执行过程中,Cat命令并不知道它实际上是把内容写入到了一个新的文件中。也就是说,任何使用标准输出的命令都不知道它输出的目标对象。他们总认为他们是在向默认设备中输出。不过利用上面这个命令来合并文件的时候,还有一个小小的缺陷。即上面的输出流合并的过程中并没有显示合并的文件名。而系统管理员可能希望在new.txt文件的开头能够显示合并的文件名字,以提高文件的阅读性。要实现这个功能也很简单。假如现在在当前目录下有以A开头的、.txt结尾的文件五个,系统管理员希望能够把他们合并起来,并在新文件的开头显示这五个文件的名字,此时就可以通过如下的命令来实现。(ls x A*.txt;echo;cat A*.txt) new.txt这个命令中ls表示列出所有需要合并文件的名字,通过重定向符号会把这个结果写入到合并后的文件中。而这个命令中的echo命令是为了在表头列于C语言代码之间插入一空行。也就是说,执行这个命令后程序文件名将显示在表头列里,这样代码列表清单的最前面就好像建立了一个目录一样。笔者最后再强调一次,在使用标准输出重定向功能的时候,当一个命令的输出被重定向到一个文件时,这个输出文件由shell在命令执行前创建。如果输出文件不存在,则shell 会在命令执行前自动创建它;如果输出文件已经存在,则shell会覆盖这个已经存的文件。为此在使用这个功能的时候,最好能够通过ls等命令查看这个文件是否存在,以免因为误操作而给用户带来不必要的损失。二、把错误信息写入到文本文件中。现在系统工程师在shell 中执行一个脚本文件。由于这个脚本文件比较复杂,可能需要花费半个小时的时间。系统工程师可能还有其他事情要做,故会暂时离开。为此系统工程师希望能够把程序运行中的错误信息写入到一个文本文件中。此时该如何处理呢?run.sh 2error.txt这个命令跟上面提到的标准输出重定向功能类似,都是利用了重定向符号。不过在这个命令中,重定向符号前面多了一个数字2,是什么意思呢?其实这个数字2在Unix系统中有一个特殊的含义,叫做文件描述符。在shell中有三个特殊的文件,他们跟Unix系统的终端有关。这三个特殊文件实际上吧命令的输出与输入的结果当作字符流来处理。一个流就似乎一个字节序列。当系统管理员登陆到系统时,shell就会自动创建这三个流文件,每个流文件对应一个默认的设备(即所谓的终端)。这三个特殊的文件分别为标准输入(这个流文件代表输入,通常情况下来自键盘,不包括鼠标的输入)、标准输出(这个流文件通常代表着屏幕,它输出到屏幕上)、标准错误(这个流文件代表错误信息,来自于相关命令或者shell的错误信息)。任何一个使用流的命令都可以使用这些流文件。而这三个文件在Unix系统中还都对应一个称为文件描述符的数字代码(就是上面提到的数字2)。在打开一个文件时需要用到文件的路径,而对这些流文件进行读写操作时则需要用到文件描述符。在Unix操作系统内核中为系统中每一个进程创建一张文件描述符表。默认情况下这个文件描述符表中的前三行就跟这三个流文件相关,即0表示标准输入、1表示标准输出、2表示标准错误信息。重定向符号前面往往会因含这些文件描述符。如上面的Cat A1.TXT、A2.TXT new.txt标准输出命令,其实跟Cat A1.TXT、A2.TXT 1 new.txt是等价的。但是在用到标准错误这个流文件时,这需要注意,系统工程师需要显示的说明这些描述符号。如在运行某个程序时,需要用到一个参数文件。而这个文件不存在或者已经损坏的情况下,则默认情况下会有错误信息显示在屏幕上。这个在Unix操作系统中就叫做标准错误流,它的默认输出目标是屏幕终端。但是如果要把这个标准错误流重定向到一个系统工程师指定的文件中,则需要在重定向符号前面显示的加入文件描述符2,即run.sh 2error.txt。也许这么说还不够直接,笔者可以把这个命令写成run.sh info.txt 2error.txt。这个命令表示什么意思呢?也许在run.sh这个程序运行的过程中,可能没有什么错误。此时在屏幕上就会显示这个程序正常运行的结果。这个就是标准输出流。这个信息会纪录在info.txt文件中。如果这个程序在运行中由于某些原因出现了运行错误,则这些标准错误信息会被记录到error.txt文件中。也就是说,在重定向符号面前加入2字,主要是为了区分标准输出流与标准错误流。为此需要把标准错误流重定向到一个文件中的时候,必须

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论