linux数据流重定向

通常情况下,我们由键盘输入数据,计算机通过屏幕显示输出,然而有时我们并不想通过键盘输入和屏幕输出,为了解决这个问题,就引入数据流重定向的概念。

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

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

3 标准错误输出:代码为2,使用2>或2>>(注解:为与标准输出>和>>区分,所以需要加入2)

这里以ls举例,相信大家对ls命令非常熟悉,用来显示目录的内容,现在假定当前目录为用户主文件夹,在终端输入以下指令(输入:),会在屏幕显示(输出)

输入:ls
输出:bin opt 模板 图片 下载 桌面 公共的 视频  文档  音乐

现在我们想让输出的内容输出到test.txt中,而不是屏幕上,则需要标准输出>或>>

ls > ./test.txt

可以显示test.txt的数据

cat test.txt

我们会发现ls的输出已经输出到test.txt中。

这次我们使用>>来重复一次命令

ls >> ./test.txt

再次显示test.txt的内容

cat test.txt

我们会发现两次执行的结果都在test.txt中。

如果我们再使用>的指令执行一遍,我们会发现之前的执行结果全部被覆盖,这就是>> 和 >的区别

> 表示覆盖

>>表示追加

这次,我们使用2>把执行的结果输出到test.txt中,输入

ls 2>test.txt

再次显示test.txt的内容,我们会发现,此次文件中什么内容都没有,这是因为,2>表示把错误的信息输出到文件中,我们的指令没有错误,所以导致了test.txt中的内容为空。

假设我们的目录中没有test1.txt,我们知道以下代码会产生错误。

ls test1.txt

如果我们此时通过2>来输出,那么文件中应该会信息,输入

ls test1.txt 2>test.txt

此时我们再显示test.txt的内容,我们会发现test.txt会显示

ls: 无法访问test1.txt: 没有那个文件或目录

由此我们知道了标准输出和标准错误输出的区别:

标准输出是输出正确的信息

标准错误输出是用来输出错误的信息

如果我们想把正确和错误信息输出到同一个文件中,需要采用以下命令

指令 >   文件 2&>1   或 
指令 &>  文件

标准输入就是把由键盘的输入变为文件的输入

<表示文件来源、

<<表示结束输入

有时我们还想在一个命令行中执行多个命令,则需要用分号(;)把命令隔开,如

ls test.txt; ls bin;

则屏幕分别输出ls test.txt和ls bin的输出结果

有时我们需要前一个命令执行成功才可执行下一个命令,如

1创建一个文件夹

2 在文件夹中创建一个文件

如果文件夹创建不成功,那么我们不会继续执行创建文件的指令,此时就需要&&

指令1 && 指令2

这个指令表示指令1执行成功,才会执行指令2

有时我们也会需要指令1执行不成功去执行指令2 的情况,此时需要||

指令1 || 指令2

表示指令1执行不成功,则执行指令2

  

 

原文地址:https://www.cnblogs.com/qixianyu/p/6574535.html