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