Linux中标准输入和输出的对象是可以被改变的,改变输入和输出对象的过程,被称为输入重定向和输出重定向。

    在Linux系统中,当你执行某个命令时,默认是从键盘接受输入数据,并将命令的结果输出到屏幕。因此,键盘是标准的输入对象,屏幕是标准的输出对象。

    Linux中这些输入和输出的对象是可以被改变的,改变输入和输出对象的过程,被称为输入重定向和输出重定向。

    下面我们就来看下如何进行输入和输出的重定向操作。

输出重定向

    在Linux命令行中,我们可以使用'>'符号来执行输出重定向操作。

    例如:

ls -al > listings

    上面通过'>'符号,将'ls -al'命令的输出结果重定向到了名为"listings"的文件中,而不是输出到屏幕。

    这里需要注意的是,输出重定向到某个文件时,假设该文件原来就有内容的话,会将该文件的原有内容都覆盖掉,因此,重定向的文件名一定要填正确。

    如果你不想让文件的内容被覆盖掉的话,而是想向文件中追加内容的话,那么,可以使用">>"的重定向符号,例如下面这个例子:

    上面通过'>>'重定向符号,将"Thanks for reading"字符串追加到了sample文件的末尾。

    此外,你还可以将输出信息重定向到某个设备,例如:

$ cat music.mp3 > /dev/audio

    上面的cat命令会读取music.mp3文件的内容,并将该文件的内容输出到/dev/audio音频设备,如果你的系统中音频配置正确的话,那么这个命令就相当于在播放music.mp3里的音频信息。

输入重定向

    在命令行中,可以使用'<'符号来执行输入重定向操作。

    例如,在Linux命令行中,我们可以使用mail程序来发送邮件。在发送邮件时,如果你想将某个文件附加到电子邮件中的话,可以使用输入重定向符来完成,以下是相关的命令格式:

Mail -s "Subject" to-address < Filename

    上面的Filename是要附加的文件的文件名,例如,下面这个例子:

    上面命令会将文件附加在电子邮件中,并将其发送给收件人。

    以上介绍的重定向操作都是比较简单的例子,要实现更高级的重定向操作,就必须利用文件描述符,下面我们先来了解下什么是文件描述符。

文件描述符

    在Linux系统中,常规文件、目录和各种设备都是以文件的形式存在的。每个文件都有一个被称为文件描述符的关联数字。

    屏幕也关联了一个文件描述符,当你的程序的输出内容发送到了屏幕相关的文件描述符时,内容就会显示在屏幕上,当发送到了打印机关联的文件描述符上时,输出内容就会被打印出来。

    每当你在终端上,执行一个程序时,默认都会打开三个文件描述符,分别对应三个输入或输出对象:

    当程序执行出错时,默认会将错误输出到标准错误描述符对应的设备上,标准错误对应的设备默认就是屏幕。从上图中可以看到,标准输入的文件描述符是0,标准输出的文件描述符是1,标准错误的文件描述符是2。

    我们可以通过标准错误的文件描述符,将程序的出错信息重定向到某个文件中,而不是屏幕上。

错误重定向

    错误重定向是Linux系统中比较常见的操作。

    如果你在执行某个程序时,想将程序的正常输出结果和错误输出结果都重定向到某个文件中时,就需要用到错误重定向操作,例如:

$ myprogram 2>errorfile

    上面我们在执行myprogram程序时,通过标准错误描述符"2",将错误信息输出到了errorfile文件中。这样,如果myprogram程序报错的话,就不会显示到屏幕上了,而是会输出到errorfile文件中。

    当我们使用find命令查找文件时,经常会因为权限问题,在扫描某个无权访问的目录时,报没有访问权限的错误,这些错误默认是直接显示到屏幕上的。

    但是这些错误信息会干扰屏幕上的正常的输出信息,此时,如果通过错误重定向操作,就可以将错误输出到单独的文件中,而不会干扰屏幕上的正常输出信息了。

    例如下面这个例子:

find . -name 'my*' 2>error.log

    上面我们通过find命令,在"."当前目录中搜索以"my"开头的文件,并将错误重定向到error.log文件中,以下是执行的结果:

    如果你想将错误信息和正常信息都输出到同一个文件,那么可以参考下面这个例子:

ls Documents ABC > dirlist 2>&1

    上面命令中,2>&1表示将标准错误(文件描述符:2)重定向到标准输出(文件描述符:1)上。这里标准输出又被重定向到了"dirlist"文件,因此,该命令就是将所有错误信息和正常信息都输出到dirlist文件中。

    以下是命令的执行情况:

 

上下篇

下一篇: Linux中的管道,grep和sort命令

上一篇: Linux系统中的文件权限

相关文章

主引导目录(MBR)结构及作用详解

Linux系统中的rsyslogd配置文件格式及其内容详解

Linux中的ssh,ping,ftp,telnet远程登录及通信相关的命令

Linux系统中的/boot/grub/grub.conf(GRUB配置文件)内容详解

Linux系统中使用quotaon命令:开启磁盘配额限制

Linux系统中的环境变量