一:概念:
数据流重导向就是将某个指令执行后应该要出现在屏幕上的数据, 给他传输到其它的地方,例如档案或者是装置 (例如打印机之类的!)!
指令执行过程中的数据传输情况
而传送的指令则是如下所示:
1. 标准输入(stdin) :代码为 0 ,使用 < 或 << ;
2. 标准输出(stdout):代码为 1 ,使用 > 或 >> ;
3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
eg:
[root@linux ~]# ls -l / > ~/rootfile
# 本来 ls -l / 会将根目录的数据列出到屏幕上;
# 现在我使用了 > ~/rootfile 后,则本来应该在屏幕上出现的数据
# 就会被『重新导向』到 ~/rootfile 档案内了!就可以将该数据储存!
如果我们在输入:
[root@linux ~]#ls -l /home > ~/rootfile
则那个rootfile的档案内容会变成『仅有 ls -l /home 的数据』
也就是说:
1. 该档案 (本例中是 ~/rootfile) 若不存在,系统会自动的将他建立起来,但是,
2. 当这个档案存在的时候,那么系统就会先将这个档案内容清空,然后再将数据写入!
3. 也就是若以 > 输出到一个既存盘案中,呵呵,那个档案就会被覆盖掉啰!
如果我想要将数据累加,不想要将旧的数据删除,那该如何是好?
如果,就变成[root@linux ~]#ls -l / >> ~/rootfile 如此一来ls -l / >> ~/rootfile,当 ~/rootfile 不存在时,系统会主动建立这个档案,若该档案已存在, 则数据会在 该 档案的最下方累加进去!
二:Linux 执行的结果中,可以约略的分成『正确输出』与『错误输出』两种数据。分别称为 Stdout 与 Stderror
eg1:[dmtsai@linux ~]$ find /home -name testing > list_right 2> list_error 会把正确的信息输出到list_right ,错误的会输出dolist_error
如果我们想吧错误信息扔掉
eg2:[dmtsai@linux ~]$ find /home -name testing > list_right 2> /dev/null 因为:/dev/null 有点像是一个『黑洞』的垃圾桶功能!
如果我们想要吧错误输出和正确的输出写在同一个档案
eg3:[dmtsai@linux ~]$ find /home -name testing > list 2>&1
三: < 是『将原本需要由键盘输入的数据,经由档案来读入』的意思。
eg:我们可以使用 cat 在键盘上面输入一些数据,然后写入一个档案内,例如:
[root@linux ~]# cat > catfile
testing
cat file test
<==这里按下 [ctrl]+d 结束输入来离开!
eg:那么,我是否可以使用其它档案来取代键盘输入呢?可以啊!这样做!
[root@linux ~]# cat > catfile < somefile 这里会吧somefile的内容写到catfile中。
eg:<< 他代表的是『结束的输入字符』的意思!举例来讲:『我要用 cat 直接将输入的讯息输出到 catfile 中, 且当输入 eof 时,该次输入就结束』,那我可以这样做:
[root@linux ~]# cat > catfile <<eof
> This is a test testing
> OK now stop
> eof <==输入这个玩意儿,嘿!立刻就结束了!