BASH-数据流重导向

数据流重导向:即将本应在标准输入输出(std input / output / error output)的数据传到别的地方去。

例如将调试信息存入文档中,而非直接输出到屏幕上。也可以用 tee 命令,即输出到标准输出,又写入指定文档:也叫双向导向。

传送字符如下所示:

1.标准输入(stdin):代码为0,使用 < 或 <<

2.标准输出(stdout):代码为1,使用 > 或 >>   ; 或者 1> 或 1>>,系统预设为1,所以只写>或>>系统默认为标准(正确)输出。

3.标准错误输出(stderr):代码为2,使用 2> 或 2>>

>:以覆盖的方式将(正确的数据)输出到指定的文档或装置上。文档原先的数据被本次数据覆盖

>>:以累加的方式将(正确的数据)输出到指定的文档或装置上。文档原先数据保留,本次数据接在原先数据之后。

举例:

1.标准输出重导向

[root@www ~]# ll / <==此时屏幕会显示出文件名信息

[root@www ~]# ll / > ~/rootfile <==屏幕幵无任何信息,信息输入到rootfile里面去了,

<==若该档案不存在就创建之,否则系统先将该档案中数据清空,再写入新数据,也即覆盖。

2.若将正确和错误的信息分别写入不同的文档

将 stdout 与 stderr 分别存入不同的档案去

[dmtsai@www ~]$ find /home -name .bashrc > list_right 2> list_error <==list_right 中存放正确输出的信息: (1)>;list_error中存放错误输出的信息: 2>

3.将指令的数据全部写入名为 list 的档案中

[dmtsai@www ~]$ find /home -name .bashrc > list 2> list <==错误
[dmtsai@www ~]$ find /home -name .bashrc > list 2>&1<==正确
[dmtsai@www ~]$ find /home -name .bashrc &> list<==正确

这其中设计到输出顺序问题。


4.standard input:< 与 << :将原本需要有键盘输入的数据,该有档案的内容来代替。

范例六:利用 cat 指令来建立一个档案的简单流程

[root@www ~]# cat > catfile
testing
cat file test
<==这里按下 [ctrl]+d 来离开
[root@www ~]# cat catfile
testing
cat file test
由于加入 > 在 cat 后,所以那个 catfile 会被主动的建立,而内容就是刚刚键盘上面输入的那两行数据
了。 唔!那我能利用纯文本文件取代键盘的输入,也就是说,用某个档案的内容来取代键盘的敲击
呢? 可以的!如下所示:
范例七:用 stdin 取代键盘的输入以建立新档案的简单流程
[root@www ~]# cat > catfile < ~/.bashrc
[root@www ~]# ll catfile ~/.bashrc
-rw-r--r-- 1 root root 194 Sep 26 13:36 /root/.bashrc


<< 与 < 的区别:

< : 的结束标识符是EOF,标准文档结束符。

<< : 可以自己指定输入结束的标志,如下所示:

[root@www ~]# cat > catfile << "eof"
> This is a test.
> OK now stop
> eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d


数据流重导向应用的场合:

 屏幕输出的信息很重要,而且我们需要将他存下来的时候;
 背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
 一些系统的例行命令 (例如写在 /etc/crontab 中的档案) 的执行结果,希望他可以存下来时;
 一些执行命令的可能已知错诨讯息时,想以『 2> /dev/null 』将他丢掉时;
 错误讯息不正确讯息需要分别输出时。






参考《鸟哥》


posted @ 2014-06-09 22:39  SEC.VIP_网络安全服务  阅读(153)  评论(0编辑  收藏  举报