大纲:
一、数据重定向定义
二、数据重定向分类
三、数据重定向作用
四、示例
一、数据重定向:命令的运行的结果默认输出在监视器上,重定向就是把这个结果输出到其它地方或其它文件。
二、数据重定向分类:
1.标准输出: (standard output,简称stdout,代码为 1 ,使用 > 或 >>):命令执行成功输出的正确提示信息。
2.标准错误输出 (standarp error output,简称stderr,代码为 2 ,使用 2> 或 2>> ):命令执行失败输出的错误提示信息。
3.标准输入(standard input,简称stdin,代码为 0 ,使用 < 或 << ):键盘键入值。
三、作用:
1.保存屏幕输出信息。
2.后台运行的程序,不希望它显示(例如:任务计划中监控程序每个时间段采集数据命令,可以直接重定向为/dev/null)。
3.正确信息与错误信息分别输出。
四、示例:
1.标准输出: (standard output,简称stdout,代码为 1 ,使用 > 或 >>):命令执行成功输出的正确提示信息。
例1:查看/etc/inittab内容并重定向输出至/tmp/inittab.test.
[root@localhost ~]# cat /etc/inittab > /tmp/inittab.test |
通过ls命令查看,发现/tmp目录下创建了inittab.test文件,且内容与/etc/inittab完全一致;由此可知,重定向输出指定的文件如果不存在,则创建此文件。
[root@localhost ~]# ll /tmp/ | grep init -rw-r--r--. 1 root root 884 Jun 19 23:52 inittab.test |
例2:查看/etc/issue文件内容并把结果重定向至已存在的/tmp/inittab.test,你再次查看inittab.test,会发现文件内容已改变;由此可知:重定向输出指定的位置如果已存在,则覆盖。
[root@localhost ~]# cat /etc/issue > /tmp/inittab.test [root@localhost ~]# cat /tmp/inittab.test CentOS release 6.5 (Final) Kernel \r on an \m |
例3:内容追加;查看/etc/inittab并把结果重定向追加至/tmp/inittab.test中,另外如果目标位置文件不存在,则创建。
[root@localhost ~]# cat /etc/issue > /tmp/inittab.test [root@localhost ~]# cat /tmp/inittab.test CentOS release 6.5 (Final) Kernel \r on an \m . . . # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault: |
2.标准错误输出 (standarp error output,简称stderr,代码为 2 ,使用 2> 或 2>> ):命令执行失败输出的错误提示信息。
例4:据例3可知,/tmp/inittab.test文件里面是有内容的,如下图,我们再次把/etc/inittab重定向输出/tmp/inittab.test,当我们不小心把命令敲错了,把cat敲成了catt;cat一下,你会发现inittab.test里面没有任何内容了;由此可知,如果输出指定的文件已存在,
即使命令执行错误,也会清空目标文件内容。
[root@localhost ~]# catt /etc/inittab > /tmp/inittab.test -bash: catt: command not found [root@localhost ~]# cat /tmp/inittab.test [root@localhost ~]#
[root@localhost tmp]# sh hardcheck.sh &> out_file stdout、stderr合并输出至out_file |
例5:合并重定向;如下两例,&表示合并的意思。
[root@localhost tmp]# sh hardcheck.sh > out_file 2> &1 stdout输出至out_file,std_err输出至stdout
[root@localhost tmp]# sh hardcheck.sh > /tmp/out_right 2>/tmp/out_err [root@localhost tmp]# cat /tmp/out_right model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz MemTotal: 1012352 kB [root@localhost tmp]# cat out_err hardcheck.sh: line 7: cd: /abd: No such file or directory [root@localhost tmp]# |
例6:分别重定向:执行脚本,标准输出重定向至/tmp/out_right;标准错误输出重定向至/tmp/out_err;执行完成后,你会发现stdout、stderr已分别保存至/tmp/out_right、/tmp/out_err文件。
黑洞/dev/null,黑洞,故名思义,可以吞噬其范围内的任何东西;如果我们把输出指向/dev/null,自然而然,输出会被吞噬。
例7:把std指向out_right,stderr指向/dev/null;就会发现stderr会部被丢弃了。
[root@localhost tmp]# sh hardcheck.sh > out_right 2> /dev/null [root@localhost tmp]# cat out_right model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz MemTotal: 1012352 kB [root@localhost tmp]# |
3.标准输入(standard input,简称stdin,代码为 0 ,使用 < 或 << ):键盘键入值。
例8:把键盘输入值保存到/tmp/in_file。
[root@localhost ~]# cat > /tmp/in_file ==>in_file存在则覆盖,不存在则新建 this is test file. ==>键盘输入值保存值in_file hello.world! ==>输出完成后,可以通过快捷键Ctrl+d中止输入信号。 [root@localhost ~]# cat /tmp/in_file ==>查看保存后信息 this is test file. hello.world! |
例9:<<表示结束输入字符,在stdin时,输入紧跟<<的字符表示结束输入的意思。
[root@localhost ~]# cat > in_file <<end ==><<后代表结束输入字符 > hao are you! > Welcome! > end ==>输入end回车离开 [root@localhost ~]# cat in_file ==>查看in_file,只有输入的前两行 hao are you! Welcome! |
原创文章,作者:老鼠上了猫,如若转载,请注明出处:http://www.178linux.com/5593
评论列表(3条)
修改了部分样式看起来更美观,添加了标签可以增加seo搜索命中
@stanley:很赞,效果完全不一样了,非常感谢!
@stanley:审核之后不能得新编辑了吗,我想把例5、例6调整下?