目录
IO重定向
在该章节开始之前,先要了解我们的命令模式下的输入和输出分为哪几种:
·输入:标准输入stdin
标准输入stdin:默认来自己键盘;也可来自于文件;也可来自于管道。
·输出:标准输出stdout
标准错误输出stderr
了解了输入和输出后我们再来看输入重定向、输出重定向的语法
输入重定向
输入重定向一般很少用,通常都是来自于键盘
但是有一个符号可以是输入来自于文件,<小于号可以实现该用法,这里先了解,后续和read连用的时候再说
主要学习一下来自管道的输入 “|”
要注意下,不是所有的输入都可以来自于管道
· 管道一般用来处理字符串或者文本
·错误的输出不可以经过管道
·经过管道处理的文本,不在输出到当前终端,没有经过管道的内容依旧在终端显示
·如果重定向后的内容,不会经过管道
例:可以将管道前面的输出当做后面的输入,然后在进行grep命令
还有一种管道叫三通管道,tee命令,为什么叫三通管道?因为正常的管道只能看到结果,不能看到处理过程,而tee命令可以再管道与管道之间在添加一个通道,举个简单例子:
输出重定向
> :大于号属于输出重定向的一种,格式command > filename;注:command要有输出,不然没有意义,例:
ll查看目录下的详细信息,该结果已经重定向到1.txt文件当中,但要注意的是,>重定向如果接的目标文件已存在,则代表覆盖的意思,慎用!!!
>> :两个大于号连用也是输出重定向的一种,格式command >> filename,例:
可以看到,已经将ls输出的结果重定向到了1.txt里面去
注:这里要看一下,>和>>的区别,相同点是对未存在的文件进行创建后重定向到文件里,不同点是,对于已存在文件,>代表覆盖,>>代表追加
对于一个命令而言,命令结果的输出有正确的输出,同样也有错误的输出,上述都是对正确的输出进行重定向,那如何对错误的输出进行重定向,不显示在终端上呢?
格式:command 2> filename
可以看到这个l,是一个不存在的命令,是有错误输出的,那可以使用2> 进行错误输出重定向将之不显示,同样这里也可以使用>>追加到文件当中;
同样还有一种用法是 command 1> filename,这里面的1代表的标准输出重定向(正确的输出),其实和上面刚刚说的>\>>是一个意思,只不过默认会省略这个1;
在正常的项目当中,常用的重定向类似于下面的方法:
[root@rhce ~]# ll > /dev/null
[root@rhce ~]# ll &> /dev/null &这里代表所有,指将所有的输出都重定向到/dev/null
[root@rhce ~]# ll 1> /dev/null
[root@rhce ~]# l 2> /dev/null
为什么使用这个文件呢?
不难看出它是一个字符文件 ,此类文件不可以存储数据,当重定向到此类文件时,会有同丢入垃圾箱一样的效果,永远不会满
另外,如果想把错误的输出转变成和正确输出一样,重定向到目标文件当中
我们还可以这样实现:2>&1 ----------标识将错误的输出转成正确的输出
可以看到,加上2>&1可以将错误的输出重定向,终端不显示