什么是数据流重导向
什么是数据流重导向啊?这得要由命令的运行结果谈起!一般来说,如果你要运行一个命令,通常他会是这样的:
standardoutput 与standard error output
简单的说:
标准输出指的是『命令运行所回传的正确的信息』
而标准错误输出可理解为『 命令运行失败后,所回传的错误信息』
1. 标准输入 (stdin) :代码为 0 ,使用< 或 << ;
2. 标准输出 (stdout):代码为 1 ,使用> 或 >> ;
3. 标准错误输出(stderr):代码为 2 ,使用2> 或 2>> ;
1>:以覆盖的方法将『正确的数据』输出到指定的文件或装置上;
1>>:以累加的方法将『正确的数据』输出到指定的文件或装置上;
2>:以覆盖的方法将『错误的数据』输出到指定的文件或装置上;
2>>:以累加的方法将『错误的数据』输出到指定的文件或装置上;
/dev/null垃圾桶黑洞装置与特殊写法
standard input : < 与 <<
将原本需要由键盘输入的数据,改由文件内容来取代
利用 cat 命令来创建一个文件的简单流程 [root@www ~]# cat > catfile testing cat file test <==这里按下 [ctrl]+d 来离开
[root@www ~]# cat catfile testing cat file test |
[root@www ~]# cat > catfile << "eof" > This is a test. > OK now stop > eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d
[root@www ~]# cat catfile This is a test. OK now stop <==只有这两行,不会存在关键词那一行! |
1. 屏幕输出的信息很重要,而且我们需要将他存下来的时候;
2. 背景运行中的程序,不希望他干扰屏幕正常的输出结果时;
3. 一些系统的例行命令 (例如写在 /etc/crontab 中的文件) 的运行结果,希望他可以存下来时;
4. 一些运行命令的可能已知错误信息时,想以『2> /dev/null 』将他丢掉时;
5. 错误信息与正确信息需要分别输出时。
命令运行的判断依据: ; ,&&, ||
cmd; cmd (不考虑命令相关性的连续命令下达)
[root@www ~]# sync; sync; shutdown -h now |
$?(命令回传值) 与 && 或 ||
两个 & 之间是没有空格的!那个 | 则是 [Shift]+[\] 的按键结果。
命令下达情况 | 说明 |
cmd1 && cmd2 | 1. 若 cmd1 运行完毕且正确运行($?=0),则开始运行 cmd2。 |
cmd1 || cmd2 | 1. 若 cmd1 运行完毕且正确运行($?=0),则 cmd2 不运行。 |
范例三:我不清楚 /tmp/abc 是否存在,但就是要创建 /tmp/abc/hehe 文件 [root@www ~]# ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe |
整个流程图示如下:
由于命令是一个接着一个去运行的,因此,如果真要使用判断,那么这个 && 与 || 的顺序就不能搞错
command1 && command2 ||command3一般来说, command2 与command3 会放置肯定可以运行成功的命令