您的位置:首页 > 其它

输入/输出重定向与管道

2015-02-08 00:05 211 查看
[code]    Linux下使用标准输入stdin(0,默认是键盘)和标准输出stdout(1,默认是终端屏幕)来表示每个命令的输入和输出,还使用一个标准错误输出stderr(2,默认是终端屏幕)用于输出错误信息。这三个标准输入/输出系统默认与控制终端设备联系在一起。因此在标准情况下,每个命令通常从它的控制终端中获取输入,将输出打印到控制终端的屏幕上。

    但是也可以重新定义程序的stdin、stdout、stderr,将它们重定向,可以用特定符号改变数据来源或去向。最基本的用法是将它们重新定向到一个文件,从一个文件获取输入,输出到另一个文件中。

    1.  输入重定向

            输入是指把命令或可执行程序的标准输入重定向到指定的文件。也就是说,输入可以不来自键盘,而来自一个指定的文件。

            输入重定向的符号是“<”
    2.  输出重定向

            多数命令在正确执行后,执行结果会显示在标准输出(终端屏幕上)。用户可以使用“>”改变数据输出的目标,一般是另存到一个文件中供以后分析。

            输出重定向能把一个命令的输出重定向到一个文件里,而不是显示在屏幕上。

            输出重定义可以把一个命令的输出当做另一个命令的输入。

            注意:若“>”后边指定的文件已存在,则该文件被删除,然后重新创建,即原内容被覆盖。

            如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符“>>”,格式为:命令>>文件名。

            若一个命令执行时发生错误,会在屏幕上显示错误信息。虽然与标准输出一样都会将结果显示在屏幕上,但它们占用的I/O通道不同。错误输出也可以重定向,使用符号“2>”(或追加符号“2>>”)表示对错误输出设备的重定向。

            若想将正确的输出结果与错误输出结果一次性单独送到不同的地方,则可使用下面的双重输出重定向。例如:


[code]                #ls –l 2>error.txt >result.txt
                #LS –a 2>error.txt >result.txt


[code]            如果不管是正确输出还是错误输出结果都送到同一个指定的地方,则可使用&>或&>>来完成。例如:


[code]                #ls –l &>result.txt
                #LS –l&>>error.txt


[code]            可以通过cat>file来创建文件,并未文件输入内容,输入结束后按下快捷键“Ctrl+D”结束输入。

            使用“<<”让系统将键盘的全部输入,先送入虚拟的“当前文档”,然后一次性输入。可以选择任意符号作为终结标识符。

    3.  管道

            管道就是,将一个程序或命令的输出作为另一个程序或命令的输入。

            有两种方法,一种是通过一个暂存文件将两个命令或程序结合在一起;另一种是Linux提供的管道功能。

            常说的管道一般是指无名管道(例如“|”),无名管道只能用于具有“亲缘”关系进程之间的通信。

            管道可以把一系列命令连接起来。这意味着第1个命令的输出会通过管道传给第2个命令,并且作为第2个命令的输入,第2个命令的输出又会作为第3个命令的输入,以此类推。而管道行的最后一个命令的输出才会显示在屏幕上,如果命令行里使用了输出重定向,将会放进一个文件里。例如:


[code]            cat test.txt|grep “ha”|wc –l


[code]            这个管道将cat命令的输出作为grep命令的输入,grep命令的输出则是所有包含单词ha的行,这个输出又被送给wc命令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: