Linux系列之重定向操作
前言
I/O重定向允许我们将命令的输入和输出重定向到文件中,以及将多个命令连接到一起成为管道。本文就来介绍有关重定向的知识。
标准输入、输出、错误
输出包括两种类型:
- 程序的结果。被称为标准输出或者
stdout
。 - 状态以及错误信息。被称为标准错误或者
stderr
。
除此之外,一些程序从标准输入stdin
中获取输入。默认情况下,标准输入与键盘相连接。
默认情况下,stdout
和stderr
都被链接到屏幕上,而不是保存到文件中。重定向允许我们改变输出的去向和输入的来源。
重定向标准输出
为了重定向到其他文件而不是屏幕上,我们使用>
重定向操作符,后面跟随文件的名称。
举例来说,我们可以使用重定向操作符来告诉shell
,发送ls
命令的输出到ls-output.txt
文件中,而不是屏幕上。
ls -l /usr/bin > ls-output.txt
我们可以看到,ls
命令的输出没有发送到屏幕上,而是发送ls-output.txt
到文件中。
需要注意的是,使用>
重定向操作符会覆盖目标文件。如果要追加内容,我们可以使用>>
重定向操作符。
重定向标准错误
为了重定向stderr
,我们必须引用其文件描述符。shell
将stdout
、stdin
和stderr
分别作为文件描述符0、1和2的内部引用。我们可以用这个符号重定向stderr
。
ls -l /bin/usr 2> ls-error.txt
重定向到同一文件
重定向标准输出和标准错误到同一文件中,共有两种方式可以实现。首先让我们使用传统方法,它适用于老版本的shell
:
ls -l /bin/usr > ls-output.txt 2>&1
首先,我们将stdout
重定向到ls-output.txt
文件,然后用2>&1
的符号将文件描述符2 stderr
重定向到文件描述符1 stdout
中。
需要注意重定向的顺序,重定向stderr
必须总是在重定向stdout
之后发生。
最近版本的bash
提供了第二种方法,该方法让执行这种组合重定向更精简。
ls -l /bin/usr &> ls-output.txt
你仍然可以使用>>
进行追加操作。
处理不需要的输出
系统提供了一种方法,可以将输出重定向到一个叫做/dev/null
的特殊文件,该文件通常被称为比特桶(bit bucket)。它接受输入,但不做任何处理。
ls -l /bin/usr 2> /dev/null
重定向标准输入
还有<
重定向操作符,我们可以将stdin
的来源从键盘改为文件。
cat < sample.txt
管道
使用管道操作符|
,一个命令的stout
可以通过管道进入另一个命令的stdin
,less
就是一个例子:
ls -l /usr/bin | less
可以把几个命令放在一起,组成一个流水线。使用这种方式的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。
tee命令
tee
命令读取stdin
并将其复制到stdout
和一个或多个文件中。
ls /usr/bin | tee ls.txt | grep zip
相关文章
- 云图说|初识数据库和应用迁移UGO
- 华为云UGO:醒醒!你的异构数据库迁移难题有救了
- 华为云UGO正式公测:4大核心优势破解异构数据库迁移难题
- MongoDB 事务,复制和分片的关系
- 【经验之谈】Git使用之Windows环境下配置
- git clone开启云上AI开发
- 实践GoF的设计模式:代理模式
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
- 初学开发必看:何为Git,何为SVN
- 实践GoF的设计模式:访问者模式
- 【经验之谈】Git使用之TortoiseGit配置VS详解
- cmder git bash 使用
- 4步教你学会使用Linux-Audit工具
- 10种有用的Linux Bash_Completion 命令示例
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
- 实践GoF的设计模式:迭代器模式
- 【补充】Gitlab 部署 CI 持续集成
- Google Chrome 应用商店上传扩展程序
- 实践GoF的23种设计模式:观察者模式
- Ubuntu Docker 安装和配置 GitLab CI 持续集成