Linux下数据流重导向

 

定义:指根据命令的输出不打印在屏幕上而是直接输入到其他设备比如文件或打印机或垃圾箱

格式:命令 command [option] 参数 > | >> | 1> | 2> | 2>> 文件或打印装置

1. 标准输入(stdin) :代码为 0 ,使用 <<<
2.
标准输出(stdout):代码为 1 ,使用 >>>
3.
标准错误输出(stderr):代码为 2 ,使用 2>2>>

详细分析:

 

>表示重导向输出到哪里,比如 ls /tmp/man.config > /tmp/test.txt ls结果本来应该在屏幕上输出,但是使用了> 信息知道输出到test.txt文件里了,如果test.txt文件不存在则会自动建立,当这个档案存在的时候,那么系统就会先将这个档案内容清空,然后再将数据写入!

 

>> > 意思基本相同,但是,如果使用>>如果test.txt已经存在,则输出的内容讲累加至test.txt已存在内容之后,不会将旧的数据删除

那个 > 会等于 1> ,因为standard output 代码是 1 ,可以省略! 再者, 1> 之间并没有空格喔!是紧接在一起的!

2> 指只输出错误信息,如果执行的命令既有错误信息又有正确的输出 则可以用2> 重导至其它文件

find -name /home/test > /tmp/test.txt 2> /tmp/error.txt 正确信息输出至/tmp/test.txt 错误信息输出至error.txt

同时写入同一个档案需要使用 2>&1

例:[root@linux ~]$ find /home -name testing > list 2>&1

 将原本需要由键盘输入的数据,经由档案来读入。

例:

[root@linux ~]# cat > catfile

testing

cat file test
<==
这里按下 [ctrl]+d 结束输入来离开!

此时就会有 catfile 这个档案产生,而且该档案的内容就是刚刚输入的内容喔。 那么,我是否可以使用其它档案来取代键盘输入呢?可以啊!这样做!

[root@linux ~]# cat > catfile < somefile

我可以先编辑 somefile ,然后再以上述的指令来将数据输出到 catfile 去呢! 

<< 表示 cat 直接将输入的讯息输出到 catfile 中, 且当输入 eof 时,该次输入就结束

[root@linux ~]# cat > catfile <<eof

> This is a test testing

> OK now stop

> eof <==输入这个,立刻就结束了!

利用 << 右侧的控制字符,我们可以终止一次输入, 而不必输入 [crtl]+d 来结束哩!

 

数据流导向的作用

a.当屏幕输出的信息很重要,而且我们需要将他存下来的时候

b.背景执行中的程序,不希望他干扰屏幕正常的输出结果时;

c.一些系统的例行命令(例如写在 /etc/crontab 中的档案)的执行结果,希望他可以存下来时;

d.一些执行命令,我们已经知道他可能的错误讯息,所以想以『2> /dev/null 』将他丢掉时;

e.错误讯息与正确讯息需要分别输出时。

 

posted @ 2013-11-22 12:13  qmsu  阅读(149)  评论(0编辑  收藏  举报