文档章节

linux复习笔记 之 数据流重定向

闪电
 闪电
发布于 2015/05/09 23:47
字数 1346
阅读 24
收藏 0
转载请出自出处: http://eksliang.iteye.com/blog/2104444

1、什么事数据流重定向?

这得要由命令的执行结果谈起。一般来说,如果你要执行一个命令,通常他会是这样的,如下所示



      我们执行一个命令的时候,这个命令可能会由文件读入数据,经过处理之后,再将命令返回的结果输出到屏幕上,上图中,standard output 与standard input以及standard error 分别代表”标准输出“、”标准输入“、”标准异常输出“

      简单说,标准输出指的是命令执行所回传的正确信息,而标准错误输出可以理解为命令执行失败后,所回传的错误信息。

     说了这么多,那什么事数据流重定向呢?

     不管是正确的或者错误的数据都是默认输出到屏幕上的,那能不能通过某种机制将这这些信息输到别处呢?当然可以了,那就是数据流重定向的功能,数据流重定向可以将标准的输出,与标准的异常输出分别传到其他的文件或设备中去

     传送时用的特殊字符如下:

  1)标准输入(stdin):代码为0 ,使用0<或者0<<,当然前面的0可以省略,一般用就是<或者<<这样用。

  2)标准输出(stdout):代码为1,使用1>或者1>>,当然前面的0可以省略,一般用就是>或者>>这样用。

  3)   标准错误输出(stderr):代码为2,使用2>或者2>>

先写个实例感受一下,如下所示:

实例一:将命令返回的结果重定向到test.txt中
[root@bogon ~]# ls -la > test.txt
[root@bogon ~]# tail test.txt
drwx------.  2 root root  4096 Jul 21 01:52 .pulse
-rw-------.  1 root root   256 Jul 21 01:51 .pulse-cookie
-rw-------.  1 root root   218 Jul 21 01:54 .recently-used.xbel
drwx------.  2 root root  4096 Jul 22 23:27 .ssh
-rw-r--r--.  1 root root   129 Dec  3  2004 .tcshrc
drwxr-xr-x.  2 root root  4096 Jul 21 01:51 Templates
-rw-r--r--.  1 root root     0 Aug 15 02:43 test.txt
drwxr-xr-x.  2 root root  4096 Jul 21 01:51 Videos
-rw-------.  1 root root  9318 Aug 15 02:27 .viminfo
-rw-------.  1 root root     0 Jul 21 01:54 .Xauthority

 可以看到执行ls -la > test.txt屏幕上面没有任何的输出内容,但是text.txt这个文件被创建了。

 这就是数据流重定向,将命令返回的结果重定向到了text.txt这个文件。

 > 与 >>的区别:>、当后面接的文件没有时,他会创建,同时前面一个命令的返回结果重定向到text.txt中,同时如果text.txt这个文件中有内容,会被覆盖,如果不想被覆盖用>>这就是他们的区别!

标准的错误输出(2>或者2>>)也是一样的用法,当执行的命令发生错误时,才会将返回结果重定向到文件或者设备中

实例2:将命令执行的正确信息和错误信息分别重定向到不同的文件
[root@bogon ~]# find /home -name .bashrc > log_success 2> log_eror

  

 2、/dev/null垃圾桶或者黑洞设备

   如果我知道错误信息会发生,这个时候我想让错误信息忽略掉不显示也不存储?这个时候就得用/dev/null这个个垃圾桶了,

实例如下:
将错误的数据丢弃,屏幕上显示正确的数据
[root@bogon ~]# find /etc -name passwd 2> /dev/null

   如果要将正确的数据与错误的数据同时写入同一个文件,这个时候linux是有讲究的,不能乱来,应该如下这么写:

实例:将正确的数据和错误的数据同时写入同一个文件
#这种写法程序是不会报错,但是会导致写入的顺序错乱(不要这样)
[root@bogon ~]# find /etc -name passwd > log 2> log
#如下两种方法都是linux推荐的写法
[root@bogon ~]# find /etc -name passwd > log 2>&1 (我习惯用这个)
[root@bogon ~]# find /etc -name passwd &> log

   第一种写法不行的原因,并不是程序跑起来会报错,而是由于同时两条数据同时写入一个文件时,没有做特殊处理(&这个符号),此时数据可能会交叉写入该文件内,造成次序错乱。

 

 

标准输入(standard input):<与<<

这个东西我之所以单独拿出来说,是因为这个跟上面的输出区别很大

什么事标准输入(stanin):我总结的,非常的经典的一句话:用文件内容来代替键盘的输入

采用例子驱动进行笔记!

实例:利用cat创建一个文件的简单流程
[root@bogon ~]# cat > file.txt
aaa
bbb
ccc #这里按下[ctrl+d]来离开
[root@bogon ~]# cat file.txt
aaa
bbb
ccc

 由于加入>在cat后,所以那个file.txt会主动创建,二内容就是刚在键盘上面输入的那三行数据。

实例:用文件的内容来代替键盘的输入
[root@bogon ~]# cat > file1.txt < ./file.txt 
[root@bogon ~]# cat file1.txt 
aaa
bbb
ccc

 <这个符号就是上面这么用,那么<<这个符号怎么用呢?

<<这个符号的含义是代表输入结束的意思,看实例如下:

[root@bogon ~]# cat > file << 'end'
> www
> bbb
> ddd
> end #在这里输入end,立刻马上结束,这个在脚本中非常有用,不用手动ctrl+d这么按
[root@bogon ~]# cat file
www
bbb
ddd

 

 

 

 

 

 

 

本文转载自:http://eksliang.iteye.com/blog/2104444

闪电
粉丝 74
博文 392
码字总数 6789
作品 0
海淀
技术主管
私信 提问
【Linux】Linux操作系统期末复习笔记

Linux操作系统基础 Xu An 2018-7-4 第一讲 Linux简介 1、Linux是一个开源的操作系统,发布于GPL协议,全称为GNU/Linux 2、Linux和Unix是相近的 3、FreeBSD是从BSD发展过来的,MacOS是基于Fre...

XuAn97916
2018/07/04
0
0
Linux通配符与特殊符号知识大全汇总

内容来源《跟老男孩学习Linux运维:核心基础实战》,预计于2018年7月出版,敬请期待,QQ群385168604交流。 Linux菜鸟及新手的福音,相当于是鸟哥私房菜(太老旧了)的2018最新企业级实战升级版...

老男孩oldboy
2018/05/10
0
0
I/O重定向和管道——《Unix/Linux编程实践教程》读书笔记(第10章)

1、I/O重定向的概念与原因 及 标准输入、输出的标准错误的定义 所以的Unix I/O重定向都基于标准数据流的原理。三个数据了分别如下: 1)标准输入——需要处理的数据流 2)标准输出——结果数...

木子叶
2014/08/06
0
0
linux 重定向

Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。 Li...

长平狐
2012/09/19
341
0
(七)Linux学习笔记-Linux常用命令-Shell常用技巧

(七)Linux学习笔记-Linux常用命令-Shell常用技巧 Shell常用技巧 以下为Red Hat系列Linux的命令集,我使用的Centos7.5版本。 Shell常用技巧 Tab :命令补齐 ↑或者↓ :查看执行过的命令 < ...

Super_RD
2018/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎么升级phpstudy中的php版本

http://www.php.cn/jishu/php/413274.html php官网 下载php版本 https://windows.php.net/

15834278076
29分钟前
2
0
文件已删除但句柄没有释放导致磁盘空间用完

有时候会发现linux文件系统分区已经快满了,但又找不到到底是什么文件占用了磁盘空间,就有可能是已删除的文件的句柄没有释放,还占着空间 检查命令: lsof | grep deleted 如果发现很多del...

果树啊
33分钟前
4
0
mysql5.7 [Err] 1118 - Row size too large (> 8126).

mysql [Err] 1118 - Row size too large (> 8126). 问题 mysql5.7 在执行创建表或者增加字段时,发现row size长度过长,导致出现以下错误。 [Err] 1118 - Row size too large (> 8126). C......

GritTan
35分钟前
1
0
[mybatis]一级缓存与二级缓存配置(mybatis3.4.0)

二级缓存 添加<cache />即可 日志: 2019-05-20 16:28:16.525 [http-nio-8830-exec-2] DEBUG com.asiainfo.mysql.MysqlMapper -Cache Hit Ratio [com.asiainfo.mysql.MysqlMapper]: 0.......

Danni3
45分钟前
1
0
Kafka两级调度实现分布式协调任务分配Golang版

背景 基于Kafka消息队列的两级协调调度架构 Kafka内部为了协调内部的consumer和kafka connector的工作实现了一个复制协议, 主要工作分为两个步骤: 通过worker(consumer或connect)获取自身的...

8小时
52分钟前
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部