linux入门之数据流重定向

基本概念

什么是数据流?

  • 定义:以规定顺序被读取一次的数据序列。最初在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 ”指的是结束输入内容。

操作实现如下:


cat重定向

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中的文件内容广播出去,如下图广播效果。


wall输入重定向

作业

给大家来一个彩色的火焰,祝愿大家红红火火!


红红火火

友情提示

我正在实验楼撸代码,你也快来!800+编程实战教程,无需搭环境,直接练习!用我的链接注册,你我都能获得3个实验豆!http://www.shiyanlou.com/register?inviter=NTY0MzE5MTkxNzAx


感谢您花费时间阅读这篇文章!!通过上述讲解是不是让您对linux的数据流重定向的情况有了进一步的了解了呢?是的话请给个赞吧!

你可能感兴趣的:(linux入门之数据流重定向)