Linux讲解 基础IO 重定向

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hanani_Jia/article/details/82717664

重定向就是不使用系统的标准输入端口,标准输出端口和标准错误输出端口,而进行重新的指定,所以重定向分为输入、输出和错误重定向,通常情况下重定向到一个文件。

重定向的符号有:
>      输出重定向到一个文件或设备 覆盖原来的文件
>!      输出重定向到一个文件或设备 强制覆盖原来的文件
>>      输出重定向到一个文件或设备 追加原来的文件
<      输入重定向到一个程序 

这里需要注意一下>>和>的区别。这里和我们打开文件的接口是有一些类似的,既可以覆盖,也可以直接追加。这里我们测试一下。

我们平时使用ls指令的时候都会在屏幕上显示内容,这说明ls默认输出的位置是我们的显示器也就是标准输出。这时候我们对他进行一个重定向

可以看到我们再进行ls指令的时候屏幕是没有内容的,但是当我们打开myfile文件的时候可以发现,我们之前输出的内容全都在myfile文件里边了。

这时候我们再去运行我们的ls命令

发现上次运行的情况已经没有了,只有我们的这次运行了ls命令,但是如果说这时候我们改变我们重定向的命令

这时候再去看我们的myfile文件

这时候我们新的命令内容就插入在文件的后边了,不会清除原文件的内容。

对于我们的标准错误输出的重定向

标准错误重定向符号:
2>    将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 
2>>    将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1   将一个标准错误输出重定向到标准输出 注释:1就是代表 标准输出
>&     将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 
|&    将一个标准错误 管道 输送 到另一个命令作为输入

这里的意思就是我们运行ps命令,把正确的信息输入到我们的myfile里边把错误的信息输出到myerror,

这就能显示我们的ps信息在myfile里边,但是myerror里边是没有信息的,因为这个指令是正确的,假如我们现在输入一个错误的指令。

这时候再去看我们的myerror文件

错误的信息已经被写入到我们的myerror文件里边了。

这时候我们采用这个命令之后去看我们的myfile

发现我们的文件中包含了,正确和错误的信息,上边语句的意思就是我们的正确信息和错误信息全都输入到我们的文件里边。  这里要注意对于正确和错误的都输出到同一个文件中书写方式只有这一种格式。

 并且我们也可以让我们的输出信息“消失”,我们有时候会想让我们的输出内容,或者说出现的错误信息不再显示。我们就可以使用

这里的dev/null是一个黑洞文件,输出到里边的信息是不会保存的,是不存在的。

command 0< filename 1> filename2   这里我们甚至可以把filename文件中的信息作为command的输入,然后把标准输出重定向到了filename2中。并且我们这里也可以重定向其他东西,我们这里主要是距离了0,1,2这三个系统提供的,我们同样可以将其他的文件描述符用来使用。

command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中

简单的来说重定向就是把我们本来要输出到某个地方的或者输入到某个地方的东西换到了其他地方,换成了其他文件描述符。

最初了解到这个东西的时候我认为是一个很鸡肋的东西,感觉并没有什么用处,但是简单整理过之后我认为文件重定向还是有很大的用处的。

但是在我看来,还是重定向输出比较实用一些。比如

  1. 当我们屏幕输出的内容我们想保存下来的时候。

  2. 我们在后台运行的程序,并且不希望他对屏幕造成干扰的时候

  3. 一些系统命令就像我们上边所写的 ps,ls等命令的结果希望保存下来的时候

  4. 一些程序我们可能已经知道他的错误信息了,但是我们想运行,或者说看其他地方的问题,我们就可以让错误信息输出到null里边。

  5. 当我们的错误信息和正确信息需要分开存储的时候。

  我们现在刚接触到的东西比如gdb比如makefile在我们看来没有用,用起来很麻烦,很鸡 肋,但是当我们接触到大的一些工程或者说一些复杂的项目的时候,这些工具就能很大程度的方便我们的编程。

 

猜你喜欢

转载自blog.csdn.net/Hanani_Jia/article/details/82717664