Zbrel 发表于 2017-8-6 22:23:47

认识bash shell4--Bash Shell使用环境之数据流重导向

本帖最后由 Zbrel 于 2017-8-7 17:49 编辑

数据流重导向
数据流重导向就是将某个指令执行后应该要出现在屏幕上的数据,给传输到其他的地方,例如档案或者是装置(如打印机之类的)。这个功能在Linux的文本模式底下很重要,尤其是想要将某些数据储存下来时就更有用了。
执行一个指令的时候,这个指令可能会由档案读入资料,经过处理后,再将数据输出到屏幕。 standard output 与 standard error output 分别代表『标准输出』与『标准错误输出』, 它们都是默认输出到屏幕上的。
①  standard output 与 standard error output
简单的说,标准输出指的是『指令执行所回传的正确的讯息』,而标准错误输出可理解为『指令执行失败后,所回传的错误讯息』 。
数据流重导向可以将 standard output(简称 stdout) 与 standard error output (简称 stderr) 分别传送到其他的档案或装置去,而分别传送所用的特殊字符则如下所示:
a. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
b. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
c. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
练习:观察系统根目录(/)下各目录的文件名、权限与属性,并记录下来
ll /        此时屏幕会显示出文件名信息
ll / > ~/rootfile        此时屏幕无任何信息
ll ~/rootfile        有个新的档案被建立

该档案的建立方式是:该档案若不存在,系统会自动的将它建立起来,但是当这个档案存在的时候,那么系统就会先将这个档案内容清空,然后再将数据写入!也就是若以 > 输出至一个已存在的档案中,那个档案就会被覆盖掉啰!如果想要将数据累加而不是取代,可以利用两个大于号(>>)。
standard error output的错误数据通过2>及2>>进行覆盖与累加,就是说:
       1> :以覆盖的方法将『正确的数据』输出到指定的档案或装置上;
 1>>:以累加的方法将『正确的数据』输出到指定的档案或装置上;
 2> :以覆盖的方法将『错误的数据』输出到指定的档案或装置上;
 2>>:以累加的方法将『错误的数据』输出到指定的档案或装置上;
注意1>>和2>>就、中间没有空格。
例如:将stdout与stderr分存到不同的档案去:find /home -name .bashrc >list_right 2>list_error
将错误的数据丢弃,屏幕上显示正确的数据:find /home -name .bashrc 2>/dev/null, 黑洞装置/dev/null 可以吃掉任何导向这个装置的信息。
将正确与错误数据通通写入到同一个档案:find /home -name .bashrc >list 2>&1 或
find /home -name .bashrc &>list

② standard input:< 与 <<
简单来说,就是将原本需要由键盘输入的数据,改由档案内容来取代。
例如:利用cat指令建立一个档案:cat > catfile 编辑好内容后按下ctrl+d离开,再cat catfile一下,会看到刚才所编辑的内容。
<<代表的是结束的输入字符,而不必输入ctrl+d来结束。

为什么要使用命令输出重导向:
a. 屏幕输出的信息很重要,而且我们需要将它存下来的时候;
b. 背景执行中的程序,不希望它干扰屏幕正常的输出结果时;
c. 一些系统的例行命令 (例如写在 /etc/crontab 中的档案) 的执行结果,希望它可以存下来时;
d.一些执行命令的可能已知错误讯息时,想以『2> /dev/null 』将它丢掉时;
e.错误讯息与正确讯息需要分别输出时。
页: [1]
查看完整版本: 认识bash shell4--Bash Shell使用环境之数据流重导向