基本概念
什么是数据流?
- 定义:以规定顺序被读取一次的数据序列。最初在1998年由Henzinger在文献87中提出这个概念。
- 类别分为三种:标准输入(stdin),标准输出(stdout)和标准错误输出(stderr)。
- 标准输出: 指的是命令执行所回传的正确信息。
- 标准错误输出:指的是命令执行失败后,所回传的错误信息。
- 默认都是将信息打印在屏幕上的。
如下表所示:
文件描述符 | 设备文件 | 说明 |
---|---|---|
0 | /dev/stdin | 标准输入 |
1 | /dev/stdout | 标准输出 |
2 | /dev/stderr | 标准错误 |
什么是重定向?什么是重定向描述符?
- 重定向:重新定个方向转到正确位置。在之前linux入门系列文章中已经多次出现过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中。这其实就是重定向。
- 重定向描述符: & 是一个描述符,若1或2前不加&,会被当成一个普通文件。
- 常用的方法详见下表:
表达式 | 含义 |
---|---|
1>&2 | 把标准输出重定向到标准错误 |
2>&1 | 把标准错误输出重定向到标准输出 |
&>filename | 把标准输出和标准错误输出都重定向到文件filename 中 |
什么是数据流重定向?
改变数据流的标准流向,使之流向指定的文件或设备。
本文重点
介绍如何在Linux中利用shell把执行命令所回传的正确信息(标准输出信息)流向一个文件,而将所回传的错误信息(标准错误输出)流向别一个文件,并把这两个文件的信息保存下来,而在屏幕上不出现任何该命令执行所回传的信息。
实例操作
"实践出真知",还是让我们一起通过如下几个实验来深入理解上面的概念吧。
1) 标准输出重定向
重定向标准输出到文件,这是一个很实用的操作。详见如下实例:
$ echo 'hello shiyanlou' > test.txt
$ echo 'www.shiyanlou.com' >> test.txt
$ cat test.txt
其中 ,“>”和“>>”分别是将标准输出导向一个文件或追加到一个文件中。
“>” :相当于清空源文件内容,重新写入新的内容。
“>>” :相当于保留源文件内容,在最后一行追加内容。
如果源文件不存在,两者都会新建源文件。
2)Cat输出重定向
利用cat的连续输出(heredoc方式)重定向标准输出到一个文件
$ cat
(按Ctrl+C退出)
cat重定向到test.c文档,在heredoc里输入内容,然后使用end结束输入。其中“<< end ”指的是结束输入内容。
操作实现如下:
3)标准错误重定向
将标准错误重定向同样是一个很实用的操作。可以将标准输出和标准错误分别重定向不同的两个文件,亦可以重定向到同一个文件。根据实际项目的需要,可自行判断。此处仅给出相关实例,供大家参考使用。
- 重定向到两个文件
$ pwd
/home/shiyanlou/
$ cd mybin
$ back.sh 1>>/home/shiyanlou/Code/back.log 2>>/home/shiyanlou/Code/error.log
将正常日志输出到back.log ;将错误日志输出到error.log。
- 重定向到一个文件
$ pwd
/home/shiyanlou/
$ cd mybin
$ back.sh >>/home/shiyanlou/back.log 2>>&1
将正常日志和错误日志都输出到back.log 。
4)巧用 /dev/null
- /dev/null 或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。
# 清空一个日志文件 back.log
$ cat /dev/null > back.log
5)标准输入重定向
- 这里用wall来广播一下之前编辑的autorun.log文件,
# wall 0< autorun.log
意思就是将autorun.log中的文件内容广播出去,如下图广播效果。
作业
给大家来一个彩色的火焰,祝愿大家红红火火!
友情提示
我正在实验楼撸代码,你也快来!800+编程实战教程,无需搭环境,直接练习!用我的链接注册,你我都能获得3个实验豆!http://www.shiyanlou.com/register?inviter=NTY0MzE5MTkxNzAx
感谢您花费时间阅读这篇文章!!通过上述讲解是不是让您对linux的数据流重定向的情况有了进一步的了解了呢?是的话请给个赞吧!