输入/输出重定向与管道

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

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

    1.  输入重定向

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

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

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

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

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

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

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

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

            若想将正确的输出结果与错误输出结果一次性单独送到不同的地方,则可使用下面的双重输出重定向。例如:
                #ls –l 2>error.txt >result.txt
                #LS –a 2>error.txt >result.txt
            如果不管是正确输出还是错误输出结果都送到同一个指定的地方,则可使用&>或&>>来完成。例如:
                #ls –l &>result.txt
                #LS –l&>>error.txt
            可以通过cat>file来创建文件,并未文件输入内容,输入结束后按下快捷键“Ctrl+D”结束输入。

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

    3.  管道

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

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

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

            管道可以把一系列命令连接起来。这意味着第1个命令的输出会通过管道传给第2个命令,并且作为第2个命令的输入,第2个命令的输出又会作为第3个命令的输入,以此类推。而管道行的最后一个命令的输出才会显示在屏幕上,如果命令行里使用了输出重定向,将会放进一个文件里。例如:
            cat test.txt|grep “ha”|wc –l
            这个管道将cat命令的输出作为grep命令的输入,grep命令的输出则是所有包含单词ha的行,这个输出又被送给wc命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值