重定向

Linux下定义了三种I/O设备:

标准输入(STDIN):用0表示,默认的标准输入设备是键盘;

标准输出(STDOUT):用1表示,默认的标准输出设备是当前终端;

标准错误(STDERR):用2表示,默认的标准错误输出设备是当前终端;

I/O重定向即改变默认的位置

1 标准输出重定向

(1)将标准输出重定向到其他终端

重定向

重定向

/dev/pts/1代表伪终端1,在伪终端1执行hostname命令(查看主机名),并将其重定向至伪终端2。

(2)将标准输出重定向到文件

重定向

cal命令用于查看日历,cal 2017 > /app/cal.log 将2017年的日历重定向到app目录下的cal.log文件。

总结: hostname与cal 2017 都是可正确执行的命令,若不重定向,会产生标准输出,即将两命令执行的结果输出到当前终端,所以a、b中实际上都省略了1,即写成hostname 1> /dev/pts2或cal 2017 1> /app/cal.log 也可以,因为1代表标准输出,>是重定向符号。

2 标准错误重定向

重定向

在根目录下不存在err文件或目录,所以ls  /err的结果是标准错误:

若不重定向,会将其结果输出至当前终端,如(1)所示;ls  /err 1>/app/err.log 中的1>表示将标准输出重定向至/app/err.log,但是ls /err执行的结果只有标准错误,没有标准输出,由于未对标准错误重定向,所以仍然将标准错误重定向至当前终端,如(2)所示;

ls  /err 2>/app/err.log中的2表示标准错误,该命令实现了将标准错误重定向至/app/log文件,所以没有在当前终端打印错误提示,而是将错误提示保存到/app/log文件中,如(3)所示。

3 既有标准输出, 又有标准错误,将二者重定向至同一文件

重定向

ls /boot的执行结果是正确的,若不重定向,会将其结果输出至当前终端,如(1)所示;

ls /err的执行结果是错误的,若不重定向,也会将其结果输出至当前终端,如(2)所示;

重定向

(1)ls /boot /err > /app/all.log 2>&1中的2>&1表示将标准错误转化为标准输出,然后>将转化后所得的标准输出重定向到/app下的all1.log文件,如(1)所示;

(ls /boot /err 2>&1) > /app/all1.log 与ls /boot /err > /app/all.log 2>&1等价,如(2)所示。

重定向

(2)ls /boot /err 2> /app/all3.log 1>&2 中的1>&2表示将标准输出转化为标准错误,然后2>将转化后所得的标准错误重定向到/app下的all3.log文件,如(1)所示;

(ls /boot /err 1>&2) 2> /app/all4.log与ls /boot /err 2> /app/all3.log 1>&2等价,如(2)所示。

重定向

(3) ls /boot /err &> /app/all5.log中的&>表示将标准输出和标准错误合并为同一个数据流后再进行重定向,如(1)所示;

  ls /boot /err >& /app/all5.log /app/all5.log与 ls /boot /err &> /app/all5.log等价,如(2)所示。

4 标准输入重定向

重定向

cat命令用于查看文本文件,既有标准输入又有标准输出。输入cat并回车后光标会移至下一行等待接收来自键盘的标准输入,并将其输出至标准输出设备即当前终端。图中黄色线条标识部分即cat的标准输出。

重定向

cat  /etc/issue命令用于查看/etc/issue文件的内容,其中定义了系统登录成功后的提示信息。用/etc/issue文件代替键盘做标准输入,即cat从/etc/issue接收标准输入,然后输出至标准输出即当前终端。

重定向

用/etc/issue文件代替键盘做标准输入,即cat从/etc/issue接收标准输入,然后将标准输出重定向到/app/issue文件,所以 cat < /etc/issue > /app/issue执行完后当前终端不显示任何内容,用 cat  /app/issue 可查看重定向到该文件下的内容。

原创文章,作者:以梦为马,如若转载,请注明出处:http://www.178linux.com/83461

(1)
以梦为马以梦为马
上一篇 2017-07-31 07:40
下一篇 2017-07-31 08:54

相关推荐

  • bash脚本初探

                              (注)$@和$*的区别,以及$0..$n [root@ _6_ ~]# cat weizhi.sh  #!/bin/bash e…

    Linux干货 2016-08-15
  • 基于ssl的mysql的主从复制

    实验环境: system:CentOS Linux release 7.2.1511 (Core) mariadb server:mariadb-server-5.5.44-2.el7.centos.x86_64 master server:10.1.51.20/16 slave serv…

    2016-11-22
  • X86平台系统启动流程 (Blog 9)

    POST –> BootSeqence(BIOS) –> Bootloader(MBR) –> Kernel(initrd) –> init(/etc/inittab)

    2017-11-27
  • 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

    1.概述 类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合。 集合不一定是均一的。图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu、Slider 和 Button。并且,集合的实现可以有多种方式:PHP 数字是一个集…

    Linux干货 2015-07-19
  • 网络班22期学习宣言

    马哥Linux运维学院 学习宣言 亲爱的小伙伴:        欢迎大家报名马哥Linux运维网络学习班,跟随马哥学习Linux技术,成就Linux大牛之梦。在这里,我们不仅可以学习到最优秀的技术课程,还可以跟着追梦的小伙伴们一起学习、一起进步。 为了督促大家一直积极认真努力的学习,请各位同学在评论区写出你的学习宣言。…

    Linux干货 2016-08-03
  • 从Linux小白到大牛——与狼共舞的日子7

    马哥教育网络班21期+第7周课程练习 1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]#&nbsp…

    Linux干货 2016-11-14