重定向即指:将数据传送输出到别的地方,如设备、文件等等。那就涉及到将什么数据传送到什么地方的问题。
在linux中命令执行的起源和结果说起,看下图:
Standard input和Standard error都会输出到屏幕上,这样会将屏幕搞的非常混乱,且又是输出内容过多也不易于阅读。甚至有时候的输出内容非常重要需要保存,这是该怎么办??
答案是:数据重定向,将输出内容导入到别的地方。
linux中数据重定向的特殊符号:
- 标准输入:代码为0,使用<或者<<
- 标准输出:代码为1,使用1>或者1>>,也可以使用默认表示>或者>>
- 标准错误输出:代码为2,使用2>或者2>>
>和>>的区别在于,输出内容重导向目的地的方式不一样:
>:以覆盖目的地原有数据的方式重导向
>>:以追加的方式重导向
ls /etc > list
如以上的将列出etc目录下的文件将其写入list文件。
- 如果list文件不存在则创建
- 清除list文件内容
- 将ls的标准输出写入list中
如果不清空list,则以追加的方式写入,使用>>
1.只需要正确的数据
使用/dev/null垃圾桶
#将find的结果中错误的输出丢弃,只显示正确的结果。避免错误数据的干扰
find /home -name .bashrc 2> /dev/null
2.既需要正确的输出又需求错误的输出数据
find /home -name .bashrc > list 2>&1
find /home -name .bashrc &> list
以上将标准输出和标准错误都写入list
3.标准输入<和<<的使用
既然使用<,肯定需要输入的来源。 < file的方式,可以将file的内容作为标准输入。
cat > back <~/.bashrc
以上同时利用 > 和 <(输入和输出重导向)备份.bashrc文件。
cat > list
以上命令将会将屏幕输入(标准输入)作为输出重导向文件list,然后使用ctrl+d退出。但是可以如下写法:
cat > list << "eof"
这样只要屏幕上输入"eof"即可退出。<<代表结束输入。