Linux学习笔记——数据流重定向

Posted Johnny*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习笔记——数据流重定向相关的知识,希望对你有一定的参考价值。

Linux默认提供了三种特殊设备,标准输入(stdin)、标准输出(stdout)、标准输出错误(stderr)

文件描述符设备文件说明
0/dev/stdin标准输入
1/dev/stdout标准输出
2/dev/stderr标准错误

简单的重定向

在这里插入图片描述

将cat的连续输出重定向到test.c文件中
EOF是"end of file",表示文本结束符。
使用 filename << EOF 可以实现多行输入到指定文件

注意上述重定向都是临时的,打印test.c的内容
在这里插入图片描述

在这里插入图片描述
【命令解释】

echo 'hi' |cat  # 将echo命令通过管道传来的数据作为cat命令的输入
echo 'hello shiyanlou' > redirect  # 将echo命令默认的标准输出重定向到redirect文件来

注意:
管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接,

标准错误重定向

在这里插入图片描述
【命令解释】

使用cat命令同时读取两个文件 前者存在,后者不存在
可以看到除了正确输出签个文件外,还输出了错误信息

在这里插入图片描述
【命令解释】

尝试将输出重定向到一个文件somefile
可以发现依然提示错误信息,这是因为标准错误虽然指向终端屏幕,但实际上并不一样

在这里插入图片描述
【命令解释】

将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面。
注意在输出重定向文件描述符前加上&,否则shell会当做重定向到一个文件名为1的文件中

在这里插入图片描述
【命令解释】

使用tee实现将输出重定向到文件外,也打印在终端

永久重定向

上述重定向都是临时的,只对当前指令有效,使用exec命令可以实现“永久”重定向。

在这里插入图片描述【命令解释】

zsh # 切换shell
exec 1> somefile # 输出永久重定向到somefile文件
exit # 退出当前shell

创建输出文件描述符

在shell中有9个文件描述符,除了常见的0-2之外,还有3-8
在这里插入图片描述
【命令解释】

cd /dev/fd/;ls -Al  #展示当前进程打开的所有文件描述符
exec 文件描述符> 文件名  # 创建新的文件描述符

在这里插入图片描述

以上是关于Linux学习笔记——数据流重定向的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习笔记之管道重定向与正则表达式

Linux学习笔记 第六章标准IO和管道

linux学习笔记2.0

linux shell脚本编程笔记: 重定向

iOS学习笔记40-日志重定向

jQuery - 学习笔记 - 全局添加ajax重定向