重定向输出 >
>> 追加
目 录
1、 >正确定向等同于1>
2、 2> 错误定向
3. &> 把错误导成正确的{洗钱}
4. 正确的变成错误的
5. > 覆盖
6. 举一反三
> 重定向输出
最初见到这个符号是在学习终端的时候,那么各个终端之间是如何交流的呢?那么就用到了这个符号>
在这里采取的是远程控制的方法,所以以虚拟终端为例
对于两个终端 dev/pts/0 /dev/pts/1
设备dev/pts/0给设备/dev/pts/1发出Hello!
在设备/dev/pts/0上发出命令 echo Hello! > /dev/pts/1
那么便在设备/dev/pts/1上收到消息Hello!(类似于qq消息中的私聊)
还有另一种广播的方式
wall Hi
每个终端都会收到打招呼 Hi(类似于qq消息中的群发)。很有意思吧,可以试一下。
1、 > 正确定向等同于 1>
我们一般键盘输入信息,输出的结果都是默认在终端上输出
查看I/O 设备
cd /dev/fd/
ls –l
0 标准输入 (默认输入来自键盘)
1 标准输出 (默认输出都是终端)
2 标准错误 (默认输出都是终端)
那么当我们不想输出在终端上,想导出一个文件,方便以后查看,便需要输出重定向了。> 的作用就是把原本要输出在终端上的信息重定向导出到指定的地方。
我们知道/etc/passwd 存放着我们用户登录的信息,而/app/passwd 这个是不存在的,我们就以这两个为例子,终端还是dev/pts/0 /dev/pts/1
单独查看会显示一下结果
ls /app/passwd /etc/passwd
ls /app/passwd /etc/passwd > /dev/pts/1
结论: 可以看出在/dev/pts/0 上只显示出错误的结果,因为/dev/pts/0把正确结果重定向输出到/dev/pts/1 > 只导出了正确的结果
2、 > 错误定向
还是相同的例子
ls /app/passwd /etc/passwd 2> dev/pts/1
结论:可以看出可以看出在/dev/pts/0上只显示出正确的结果,/dev/pts/0把错误结果重定向输出到/dev/pts/1 2> 只导出了错误的结果
那么有把正确和错误的都输出去吗,当然可以
3、 &> 把错误导成正确的{洗钱}
(1) ls /app/passwd /etc/passwd > dev/pts/1 2>&1(老一代)
结论:可以看出在/dev/pts/0上不显示,/dev/pts/0把全部重定向输出到/dev/pts/1,2>&1 一般在老版本的CentOS上用,接下来的是在新的版本上才有的。
(2) ls /app/passwd /etc/passwd &> /dev/pts/1
4、当然还可以把正确的变成错误的
ls /app/passwd/etc/passwd > dev/pts/1 1>&2
把正确的变成错误的都显示出来
5、 > 覆盖
(1) 例: > a.txt =touch a.txt 创建新文件a.txt
(2) 当已有文件存在时会怎样呢??
现在就以a.txt为例,首先我们在a.txt中写入内容Hello
echo Hello >a.txt
然后我们再将Hi apple!以同样的方式再写一遍
echo Hi apple!>a.txt
(3)那么我们现实中必定会有不想覆盖的文件,而我们想要继续在原文件后面追加,那么便需要>>了。
在后面追加Hello water
echo Hello water >>a.txt
(4)如果在工作中,我们想要在文件中追加内容时>>,却不小心只写入> 就执行了,那么我们的文件被覆盖了,因此就有了,禁止覆盖的命令,set –C
让我们试一下吧,首先输入set–C 然后再输入覆盖命令
如果我们想一次强制覆盖 >|
当然我们也可以解除这种禁止 set +C ,很好理解禁止 –C ,解除+C
6、当然可以举一反三
>> 追加正确的内容
2>> 追加错误的内容
&>> 全部追加
() 合并 (echo abc ;echo 123)> b.txt 可以一次显示两条信息
结合以前所学的符号,命令,都会有新的发现。大家可以共同探讨。