Linux04 管道和重定向


Linux 管道和重定向

一、标准的 I/O 流

文件描述符 名称 描述 缺省
0 stdin 标准输入 键盘
1 stdout 标准输出 显示器
2 stderr 标准错误输出 显示器

二、重定向

1. 将输出重定向到文件:
n>
将输出从文件描述符 n 重定向到文件。您必须具有该文件的写权限。如果该文件不存在,将创建它。如果该文件已经存在,通常将覆盖所有现有内容,并且没有任何警告。
n>>
将输出从文件描述符 n 重定向到一个文件中。这里也要求您具有该文件的写权限。如果该文件不存在,将创建它。如果该文件已经存在,输出将附加到现有的内容后面。
在 n> 或 n>> 中的 n 引用文件描述符。如果省略它,将执行标准输出。

使用 &> 或 &>> 同时将标准输出和标准错误重定向到同一个文件中。另一种方法是,首先重定向文件描述符 n,然后使用 m>&n 或 m>>&n 将文件描述符 m 重定向到同一个文件。例如,
command 2>&1 >output.txt ## stderr does not go to output.txt
不同于
command >output.txt 2>&1
在第一种情况中,stderr 被重定向到 stdout 的当前位置,然后在将 stdout 重定向到 output.txt,但第二次重定向仅影响 stdout,不影响 stderr。在第二种情况中,stderr 被重定向到 stdout 的当前位置,即 output.txt。

如果您想要完全忽略标准输出或标准错误,可以将流重定向到空文件 /dev/null。

2. 输入重定向

<

3. here-document

它是另一种输入重定向形式。它将 << 和一个单词(比如END)结合构成一个结束标记,用来表示输入端。(缺省用Ctrl-d 表明输入端)

三、管道

在两个命令之间使用管道 | 操作符将的一个命令的 stdout指向第二个命令的 stdin。
许多命令使用连字符 (-) 取代文件名作为一个参数,用于表示输入来自 stdin 而不是文件。

四、使用输出作为参数

如果想将一个命令或文件的内容作为另一个命令的参数而不是输入。管道线不能用于实现该目的。三种常见的解决办法是:
1. xargs 命令
2. 带有 -exec 选项的 find 命令
3. 命令替换

五、分离输出

有时候,您可能希望在屏幕上看到输出,同时保留一个副本。您可以将 tee 和管道一起使用。
对标准输出而言,参数是一个或多个文件。-a 选项附加而非覆盖文件。在前面关于管道的讨论中可以看到,必须先将 stderr 重定向到 stdout ,然后再重定向到 tee,如果您需要同时保存两者的话。

ls h* | tee f1 f2

优质内容筛选与推荐>>
1、cgroup代码浅析(2)
2、提供一个跨浏览器的XML DOM对象解决方案,来自于《javascript高级程序设计》
3、制作Windows系统服务的工具AlwaysUp的安装及使用
4、解决web应用程序需要离线运行
5、HDU1004题解分析(字符串处理)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号