浅谈几种IO重定向变形用法

浅谈几种IO重定向变形用法

首先,我们来认识一下linux系统中的几种标准输入和输出

什么是标准输入和输出呢?

Linux给程序提供了三种I/O设备,即:

标准输入(STDIN)  0            默认接受来自键盘的输入

标准输出(STDOUT) 1      默认输出到终端窗口

标准错误(STDERR) 2       默认输出到终端窗口

 

同时linux中使用“>”和“>>”将标准输出和标准错误重新定向到文件中:

“>”后跟重定向文件,文件内容会被覆盖

>       把标准输出重定向到文件

2>    把标准错误重定向到文件

&>    把标准输出和错误都定向到文件

1>&2        把标准输出定向到标准错误(简单来讲,对的变成错的)

2>&1        把标准错误定向到标准标准输出(错的变成对的)

 

“>>”后跟重定向文件,是在原有内容基础上,追加内容

>>    追加标准输出重定向到文件

2>>  追加标准错误重定向到文件

&>> 追加标准输出和错误都定向到文件

 

那么下面我们来讨论下几种重定向的变形用法:

首先我们先建file1-6的6个空文件

创建空文件

这里我们看到:

ll /data/f1 显示标准输出(f1文件详细信息);

ll /erorr显示标准错误(提示无此目录);

接下来我们来进行几个小实验:

正确与错误

实验1.ll /data/f1 /erorr > /data/file1 2>&1

file1

结果:屏幕无显示,标准输出和标准错误输入到file1文件中

实验2.ll /data/f1 /erorr 2>&1 > /data/file2

file2

结果:屏幕显示标准错误,标准输出输入到file2文件中

实验3.ll /data/f1 /erorr 2> /data/file3 1>&2

file3

结果:屏幕无显示,标准输出和标准错误输入到file3文件中

实验4.ll /data/f1 /erorr 1>&2 > /data/file4

file4

结果:屏幕显示标准错误,标准输出输入到file4文件中

实验5.ll /data/f1 /erorr > /data/file5

file5

结果:屏幕显示标准错误,标准输出输入到file5文件中

实验6.ll /data/f1 /erorr > /data/file6 1>&2

file6

结果:屏幕显示标准输出和标准错误,file6文件为空

观察6个小实验我们发现:

实验1,3得出的结果完全相同,屏幕无显示,标准输出和标准错误输入到file文件中。得出此结果也有两种

执行顺序的可能性:

可能性1实验1可看做,标准输出先重定向到file文件中,标准错误然后重定向为标准输出再次重定向

file文件中;实验3可看做,标准错误先重定向到file文件中,标准输出然后重定向为标准错误再次重定

向到file文件中,所以file文件中既有标准输入又有标准输出。

可能性2实验1可看做,标准输出和错误都经过2>&1的重定向后,全变为标准输出,再输入进file1件中;

实验3可看做,标准输出和错误都经过1>&2的重定向后,全变为标准错误,再输入file3文件中。

于是我们有了实验6ll /data/f1 /erorr > /data/file6 1>&2,得出结果屏幕显示标准输出和标准错误,file6

文件为空,由此可认为实验6执行了可能性2的执行过程。

 

结论1:当有1>&2或2>&1处于重定向组合命令结尾时,输出结果全部先执行1>&2或2>&1,再执行前面的重定向。

实验2,4,5得出的结果完全相同,即屏幕显示标准错误,标准输出输入到file5文件中

三条命令分别为:

ll /data/f1 /erorr 2>&1 > /data/file2

ll /data/f1 /erorr 1>&2 > /data/file4

ll /data/f1 /erorr > /data/file5

我们是否可以这样认为:

结论2:当2>&1或1>&2处在重定向组合命令中间位置时,2>&1或1>&2是不起作用的,可以忽略掉(此结论待定)

 

现在再来看这个问题

下列哪个标准输出结果与其他选项不同:(   )

A.cmd >log 2>&1

B.cmd 2>&1 >log

C.cmd &> log

D,cmd 2>log 1>&2

小伙伴们,现在用以上结论去做这道题,是不是很easy了呢

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95033

(4)
wangxczwangxcz
上一篇 2018-04-05 19:37
下一篇 2018-04-05 23:37

相关推荐

  • 虚拟化

    CPU虚拟化: 1、模拟:emulation; 2、虚拟:virtualization; a、完全虚拟化(full-virtualization):BT:二进制翻译(软件)、HVM:硬件辅助的虚拟化(硬件) b、半虚拟化(para-virtualization):   Memory虚拟化: 进程:线性地址空间 内核:物理地址空间 MMU   vir…

    2018-07-11
  • 用户管理练习

    用户管理练习: 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d’ ‘ -f1 | sort -u liulian root 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# last | h…

    2018-05-28
  • LInux系统故障模拟实验:破坏了/boot/下的initramfs-3.10.0-693.el7.x86_64.img和vmlinuz-3.10.0-693.el7.x86_64文件

    /boot/initramfs-VERSION.img 和/boot/vmlinuz-VERSION两个文件是linux系统内核启动最核心的两个文件,如果破坏,系统将难以启动,本文将描述挽救方法,实验环境Centos7.4 ;实验环境 将boot下文件全部删除(不包括目录)重启机器。

    2018-05-07
  • LINUX的哲学思想

    1.一切皆文件 把几乎所有资源统统抽象为文件形式,不仅普通的文件,目录、字符设备、块设备、 套接字等还包括硬件设备,甚者通信接口等。在Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。访问任何设备都可以用统一的一个接口。方便统一管理 由众多功能单一的程序组成。一个程序只做一件事,并且要做好,保证linux程序的高效运行。需要…

    Linux笔记 2018-06-27
  • YUM配置安装使用

    一、YUM简介     1. YUM: Yellowdog Update Modifier 完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在     2.工作模式:C/S 架构       Server端(yum仓库):依赖关系库、原文件、校验码文件       Client端:yum客户端程序、配置文件(连接Server路径信息)     3.…

    Linux笔记 2018-04-22
  • Linux系统日志管理

    Linux系统中的日志记录了系统每天发生的各种各样的事情,你可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志对于安全来说,非常重要。

    2018-06-25