Linux
文章目录
数据流重定向
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他的地方
Linux命令执行数据流动
![Linux数据流重定向数据传输过程](https://cdn.jsdelivr.net/gh/babybeekeeper/pic_Hosting@master/20211228/Linux数据流重定向数据传输过程.4cs642d61z40.webp)
命令执行时,该命令可能会由文件读入数据,经过处理之后根据处理信息的正确与否来决定处理信息是标准输出还是标准错误输出
- 标准输出:指的是命令执行所回传的正确的信息
- 标准错误输出:指的是命令执行失败后所回传的错误的信息
标准输出和标准错误输出都是默认输出在屏幕上,可以通过数据重定向将标准输出和标准错误输出分别传输到其他的文件或设备上,分别传送所用的特殊字符可以分为标准输、标准输出、标准错误输出
- 标准输入(stdin):代码为0,使用<或<<
- 标准输出(stdout):代码为1,使用>或>>
- 标准错误输出(stderr):代码为2,使用2>或2>>
重定向案列
![Linux数据流重定向例子](https://cdn.jsdelivr.net/gh/babybeekeeper/pic_Hosting@master/20211228/Linux数据流重定向例子.3yhrnyjvss4.webp)
重定向分析
- 过程为该文件若不存在时,系统则会自动创建该文件
- 当这个文件存在时,系统则会将该文件内的文件内容清空,然后在将命令执行的结果接入到该文件
- 若重定向一个已经存在的文件,则该文件的内容则会被覆盖掉
符号>与>>的区别
- >是将命令执行的执行结果写文件,若该文件已存在数据,则会清空原有数据,写入命令执行后得到的数据
- >>也是将命令执行后的结构写入文件,若该文件已存在数据,则会原数据之上追加新数据
由此结合标准输出代码和标准错误输出代码可得知
- 1>:以覆盖的方式将"正确的数据"输出到指定的文件或设备上
- 1>>:以累加的方式将"正确的数据"输出到指定的文件或设备上
- 2>:以覆盖的方式将"错误的数据"输出到指定的文件或设备上
- 2>>:以累加的方式将"正确的数据"输出到指定的文件或设备上
命令输出重定向的原因
- 需要特定时候将屏幕的输出的信息保存下来
- 不希望后台执行的程序干扰到屏幕的正常输出结果
- 希望可以保存系统的计划任务命令时
- 将执行命令的错误信息丢掉
- 命令执行时的处理信息包括正确信息和错误信息需要分开处理时
多个命令的执行
Linux支持可以一次性执行多条命令,但是也可以多条命令可以根据彼此的相关性分为命令不相关的多命令执行,和命令相关性的执行;区别在于执行多个命令之间是否有相关关系
命令不相关的多命令执行
不考虑命令相关的连续命令执行时命令中间用分号(;)来隔开
cmd;cmd
命令相关的多命令执行
即多条命令中间存在依赖性和相关性,而这个依赖性和相关性主要判断依据就是在于前一个命令执行的结果是否正确
$?命令返回值
表示为多命令执行时,前一个命令执行的结果为正确,在Linux下面会返回一个$?=0的值
&&、||
命令执行情况 | 说明 |
---|---|
cmd1 && cmd2 | 1、若cmd1执行完并且正确执行( ? = 0 ) , 则 开 始 执 行 c m d 2 < b r > 2 、 若 c m d 1 执 行 完 并 且 执 行 失 败 ( ?=0),则开始执行cmd2<br> 2、若cmd1执行完并且执行失败( ?=0),则开始执行cmd2<br>2、若cmd1执行完并且执行失败(?≠0),则cmd2不执行 |
cmd1 || cmd2 | 1、若cmd1执行完毕并且正确执行( ? = 0 ) , 则 c m d 2 不 执 行 < b r > 2 、 若 c m d 2 执 行 完 毕 并 且 执 行 失 败 ( ?=0),则cmd2不执行<br> 2、若cmd2执行完毕并且执行失败( ?=0),则cmd2不执行<br>2、若cmd2执行完毕并且执行失败(?≠0),则开始执行cmd2 |
Linux数据流重定向多命令执行案列
当&&与||同时存在时根据Linux命令从左往右执行
Linux数据流重定向多命令执行分析
首先从结果可知haha.txt文件创建成功,ls为命令cmd1,mkdir为命令cmd2,touch为命令cmd3
- 第一次执行该多命令时,当/tmp/abc不存在时,ls /tmp/abc的命令返回值KaTeX parse error: Expected 'EOF', got '&' at position 49: …又因为cmd2与cmd3中间为&̲&,则cmd2成功执行时命令返…?=0时,cmd3才会执行,即haha.txt文件创建成功
- 第二次执行该多命令时,/tmp/abc目录已经存在,因为cmd1与cmd2中间为||,即cmd1命令返回值$?=0时,cmd2不执行,即往右执行找到cmd3,通过&&,cmd1执行成功时才执行cmd3,所以haha.txt创建
总结
数据流重定向通过>、2>、<之类的符号将输出的信息转到其他文件或设备上,连续的命令则需要&&、||符号来处理
赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤,peace&love