linux重定向

linux 重定向 的符号有 > >> < <<
> >> 是输出重定向
< << 是输入重定向
0 用来表于标准输入
1 用来表示标准输出
2 用来表示标准错误

输出重定向

要弄明白什么是输出重定向 要先搞明白什么是输出
输出其实就是命令的结果
命令有两种结果 一种是正常执行的结果 一种是发生错误的结果
echo hello 命令正常执行产生的结果就是hello,然后会把hello这个字符串打印出来
这个正常执行的结果就叫做标准输出 标准输出默认会输出到控制台

[root@centos76 data]# echo hello
hello

ech hello 命令会发生错误 提示-bash: ech: 未找到命令 这个提示内容就是标准错误输出
标准错误输出默认也会输出到控制台

[root@centos76 data]# ech hello
-bash: ech: 未找到命令

那我们想改变输出位置可以吗 这时候就要用到输出重定向了
为了区分 标准输出和标准错误输出 我们用1来表示标准输出 用2来表示标准错误输出

[root@centos76 data]# echo hello 1> hello.txt 

这时候你会发现控制台没有打印hello 而是生成了一个 hello.txt文件

[root@centos76 data]# cat hello.txt
hello

也就是说 echo hello 1> hello.txt 中的 1>改变了输出的位置 所以叫做输出重定向
1> 表示这是一个标准输出重定向 正常执行会重定向 如果发生错误则不管
注意 1> 可以简写成 >

[root@centos76 data]# ech hello 2> err.txt
[root@centos76 data]# cat err.txt
-bash: ech: 未找到命令

同样的 ech hello 2> err.txt 会把错误信息重定向到 err.txt 而不是输出到控制台

注意: 使用 1>或者> 2>把输出重定向到文件 你会发现每次重定向都会先清空文件
那么能不能不清空文件 而是在文件末尾追加信息呢
其实很简单 只需要 把1>或者> 替换成 1>>或者>>2>替换成2>> 即可

小结

符号 作用 特点
1>或者> 标准输出重定向 清空文件后输出
1>>或者>> 标准输出重定向 在文件末尾追加
2> 标准错误重定向 清空文件后输出
2>> 标准错误重定向 在文件末尾追加

小技巧 > a.txt 可以直接清空文件

输入重定向

输入就是数据的来源 linux中的标准输入就是键盘输入 和上面输出一样 标准输入也用数字指代 这里用数字0指代
举个输入的例子
cat命令的作用是 把文件或者标准输入的内容复制到标准输出
在命令行输入cat按下回车 就会等待标准输入 也就是键盘输入 此时你在键盘上按下一些字符并回车 cat会把你输入的内容复制到标准输出 也就是控制台上 所以你会发现 你按下什么 它就显示什么 最后按ctrl+d退出

[root@centos76 data]# cat
xxx
xxx
yyy
yyy
zzz
zzz
[root@centos76 data]#

同样的我们可以改变输入的来源 也就是说进行标准输入重定向

[root@centos76 data]# cat  0< hello.txt
hell0

当然这里直接 cat hello.txt 也可以 这是因为 cat命令可以把标准输入的内容复制到标准输出 也可以把文件内容直接复制到标准输出
上面的命令是先把标准输入重定向到文件 再把标准输入复制到标准输出 好好思考一下

和cat命令不同 有些命令只能接受标准输入 不接受文件
比如tr命令 是从标准输入中替换字符并将结果写到标准输出
在命令行 输入 tr a 1 敲回车
此时会等待键盘输入 键盘输入abcd后敲回车 会显示1bcd
因为tr命令把标准输入中的abcd 按规则替换后把结果写到了标准输出

[root@centos76 data]# tr a 1 
abcd
1bcd

换成文件试试呢

[root@centos76 data]# tr h 1 hello.txt 
tr: 额外的操作数 "hello.txt"

报错了 此时想把文件当输入 就必须用到输入重定向了

[root@centos76 data]# tr h 1 0

注意0<可以简写成 <

最后一个 << 的作用是什么呢

还来分析cat
直接cat敲回车 可以从标准输入中获取数据 但是一次只能接受一行
cat 0< hello.txt 可以接受多行 但是只能从文件中获取数据
那如果我想直接从键盘获取多行数据呢
两个EOF直接的内容就是 数据来源 0<< 就是把标准输入重定向到这部分数据了

[root@centos76 data]# cat 0<< EOF
> aa
> bb
> cc
> EOF
aa
bb
cc

小结

符号 作用
0<或者< 标准输入重定向到文件
0<<或者<< 标准输出重定向到多行文本

你可能感兴趣的:(linux重定向)