Linux学习—复习数据流重定向
1 数据流重定向概念
执行一个命令的时候,这个命令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。
standard output与standard error output分别代表“标准输出”与“标准错误输出”。
标准输出指的是命令执行所回传的正确的信息,而标准错误输出可理解为命令执行失败后,所回传的错误信息。
1)标准输出:读取/etc/crontab后,将该文件内容显示到屏幕上;
标准错误输出:因为无法找到/etc/vbirdsay,因此在屏幕上显示错误信息;
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的,我们需要使用数据流重定向的功能。数据流重定向可以将standard output(简称stdout)与standard error output(简称stderr)分别传送到其他的文件或设备去,分别传送所使用的特殊字符则如下所示:
1)标准输入(stdin):代码为0,使用<或<<;
2)标准输出(stdout):代码为1,使用>或>>;
3)标准错误输出(stderr):代码为2,使用2>或2>>。
1.1 将/目录的内容重定向到~/testfile
1)输入:ll /
2)输入: ll / > ~/testfile
已经创建了文件 testfile
注意:testfile这个文件若不存在,系统会自动创建;当这个文件村由内容时,系统会清除数据,再将数据写入;>输出到已存在的文件会覆盖原来的文件。
3)输入:cat ~/testfile
1.2 输出数据到文件,可以使用以下方法:
1)1>:以覆盖的方法将正确 的数据输出到指定的文件或设备上;
2)1>>:以累加的方法将正确的数据输出到指定的文件或设备上;
3)2>:以覆盖的方法将错误的数据输出到指定的文件或设备上;
4)2>>:以累加的方法将错误的数据输出到指定的文件或设备上;
切换到普通用户,查看/home/.bashrc 有权限问题,会报错
1.3 将错误的信息输出到指定为文件
将错误信息输出到errorfile,正确信息输出到rightfile
1.4 /dev/null 垃圾桶黑洞设备与特殊写法
/dev/null可以吃掉任何导向这个设备的信息,屏幕上不会显示错误信息
1.5 将正确与错误的数据都写入一个文件
第一个时错误的:由于两条数据同时写入一个文件,又没有特殊的语法,此时两条数据可能会交叉写入该文件,会导致次序的错乱。所以最终list文件还是会产生。
后面两时正确的,写入同一个文件的特殊语法如上,可以使用 “2>&1” 也可以使用 “&>”。
1.6 standard input : <与<<
<就是将原本需要由键盘输入的数据改由文件内容代替。
用stdin代替键盘输入以创建新文件的简单流程
创建catfile文件内容与~/.bashrc文件内容一致
<<:代表结束的以什么字符进行结束的意思,见以下示例是以“eof”结束输入
使用命令输出重定向的原因:
1)屏幕输出的信息很重要,我们需要存下这些输出信息;
2)后台执行中的程序,不希望干扰屏幕正常的输出结果;
3)一些系统的例行命令的执行结果,希望存下来,比如写在/etc/crotab;
4)一些执行命令的错误可能已知的错误信息,想以“2>/dev/null”将它丢掉;
5)错误信息与正确信息需要分别输出
2 命令执行的判断依据:;,&&,ll
想要一次输入多重名,看看下面把!
2.1 cmd
在某些时候,我们希望可以一次执行多个命令,例如在关机的时候先执行两次sync同步写入磁盘后才shutdown计算机
sync;sync;shutdown -h now
在命令与命令之间利用分号来隔开
2.2 $?(命令回传码)与&&或||
若前面一个命令执行的结果为正确,在Linux下面会回传一个$?=0的值,我们就需要使用"&&"及“||”的帮忙
cmd1&&cmd2:
cmd1正确执行完毕后,就开始执行cmd2;
cmd错误执行完毕后,cmd2不执行;
cmd1||cmd2:
cmd1正确执行完毕后,cmd2不执行;
cmd1错误执行完毕后,开始执行cmd2;