美文网首页
Linux||数据流重定向

Linux||数据流重定向

作者: 小汪Waud | 来源:发表于2021-11-19 21:52 被阅读0次

以下内容首发自公众号“小汪Waud”。

在Linux环境下,我们输入一段命令并运行以后,屏幕里会显示两种结果:运行成功结果即标准输出、运行失败结果即标准错误输出。

标准输出(STDOUT): Standard output,指的是命令执行所返回的正确信息。

标准错误输出(STDERR): Standard error output,指的是命令执行所返回的错误信息。

如果不对STDOUT和STDERR做处理,他们都会显示在屏幕上,通过数据流重定向就可以将其储存到其他的文件中,而将其储存在文件中的特殊字符有:

  • 标准输入stin:代码为0,使用<或<<

  • 标准输出stout:代码为1,使用>或>>

  • 标准错误输出stderr:代码为2,使用2>或2>>

标准输出 > 和 >>

">"表示将标准输出信息重定向到文件中。

">>"表示在文件现有基础上写入数据。

需要注意的是,通过">"去重定向符合以下逻辑:

  1. 如果文件不存在,系统会自动建立文件

  2. 如果文件存在,系统会覆盖里面的内容

通过ll -h可以得到以下列表,标准输出直接显示在屏幕里

ll -h

但如果我们将标准输出重定向到test.txt文件中,屏幕上将不会显示任何东西

ll -h > test.txt

我们在此基础上,打印“What are you doing”并重定向到test.txt文件中

echo "What are you doing" > test.txt

此时的test.txt文件已经被覆盖掉了,而如果这个时候我们想在文件中再写入“I’m fine”呢

echo "I'm fine" >> test.txt

前面提到标准输出代码为1,理论上来说将标准输出重定向应该使用"1>"和"1>>",而我们在使用">"和">>"时,其实是默认代码为1。类似的,如果将标准错误输出重定向需要使用"2>"和"2>>"。

ls wor 2> test.txt

&> 和2>&1

如果一段命令同时输出多个标准输出和标准错误输出该怎么办呢?

例如通过以下命令,我们可以得到多个标准输出和标准错误输出

find /home -name .bashrc

此时使用find /home -name .bashrc > stdout 2> stderr 将会把标准输出信息重定向到stdout中,而标准错误输出信息重定向到stderr中。

image.png

如果想要标准输出信息和标准错误输出信息写入同一个文件该怎么处理呢?

是find /home -name .bashrc > out.txt 2> out.txt 吗?

错,这样的操作会由于两股数据同时交叉写入out.txt而导致数据次序混乱

正确的做法是 find /home -name .bashrc > out.txt 2>&1 或 find /home -name .bashrc &>out.txt

当然,部分情况下我们明知道一些命令会产生标准错误输出,并且我们想直接忽略(不显示),可以直接将标准错误输出重定向到黑洞/dev/null中。

如find /home -name .bashrc 2> /dev/null 将只在屏幕上显示标准输出,而标准错误输出被重定向到黑洞中。

标准输入 < 和 <<

平时我们在创建文件的时候有很多种方法,如使用cat

[CPST2018301210701@localhost ~]$ cat > test.txt
This is the first row
this is the second row
在这里按CTRL D终止输入</pre>

如果我们现在有一个名为sample的文件,我们想把sample文件的内容直接输入给test.txt文件,该怎么办呢?

cat > test.txt < sample

得到的结果非常像是通过cp命令复制过来的。

我们再来看一下"<<",在第一个例子中我们最后通过CTRL D来终止了输入,"<<"也是起相同的作用,即输入"<<"右侧的字符可以终止一次输入。

cat > test.txt << "Finished"

看到了吧?我在输入Finished后终止了输入,同时test.txt文件中没有Finished。

参考资料

  1. https://blog.csdn.net/bocai8058/article/details/82932397

  2. 鸟哥的Linux私房菜

相关文章

  • Linux||数据流重定向

    以下内容首发自公众号“小汪Waud”。 在Linux环境下,我们输入一段命令并运行以后,屏幕里会显示两种结果:运行...

  • LINUX----数据流重定向

    数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据,给它传输到其他的地方。 1.数据输出: ...

  • Linux常用指令

    1. 常用命令——数据流、管道数据流:输入流输出流标准的错误输出流重定向:改变数据的流向(一般重定向到文件中) 重...

  • linux入门之数据流重定向

    基本概念 什么是数据流? 定义:以规定顺序被读取一次的数据序列。最初在1998年由Henzinger在文献87中提...

  • Linux 学习笔记(十三):Linux 数据流重定向

    简单的重定向 1、文件描述符 2、将 cat 的连续输出(heredoc方式)重定向到一个文件 注意:不要将管道和...

  • Linux / Unix示例中的输入输出重定向

    Linux / Unix示例中的输入输出重定向 什么是重定向? 重定向是Linux中的一项功能,因此在执行命令时,...

  • 数据流重定向

    数据流重定向 简单的重定向 标准错误重定向 标准输出和标准错误输出虽然都指向终端屏幕,但它们实际并不一样. 将标准...

  • 我终于知道为啥"find /home -name .b

    在《鸟哥的Linux私房菜》第三版的329-330,鸟哥介绍了数据流的重定向,里面提到一点,如何你想把正确与错误数...

  • 2019-05-21

    Linux常用命令 重定向(redirection)------本文介绍的东西,输出重定向概念、输出重定向的符号、...

  • linux重定向

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

网友评论

      本文标题:Linux||数据流重定向

      本文链接:https://www.haomeiwen.com/subject/thbetrtx.html