I/O重定向

简介:

    每个进程都至少有3个信息:“标准输入”stdin、“标准输出”stdout、和“标准出错”stderr。标准输入通常来自键盘,标准输出和标准错误输出通常被发往屏幕(并不会保存在磁盘文件中)。有些时候,需要从文件读取输入,或者将输出结果和报错信息写入文件(写入文件后不会在屏幕显示)。这些都可以通过I/O重定向来实现。

重定向操作符

重定向操作符 功能
< 重定向输入
> 重定向输出
>> 追加输出
2> 重定向标准错误输出
1>&2 将输出重定向到标准错误输出的去处
2>&1 将标准输出和标准错误重定向到同一个文件

程序:指令+数据

读入数据:Input

输出数据:Output

打开的文件都有一个fd:file descriptor(文件描述符)

标准输入:keyborad,0

标准输出:monitor,1

标准错误输出:mointor,2

IO重定向:改变标准位置

输出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS

>:覆盖重定向,目标文件中的原有内容会被清除;

>>:添加重定向,新内容会追加至目标文件尾部;

#set -C:禁止覆盖输出重定向至已存在的文件,可以追加>>,

强制覆盖:> | 注:加入管道符,强制覆盖

#set +C:关闭上述特性

2>:覆盖重定向错误输出数据流;

2>>:追加重定向错误输出数据流;

标准输出和错误输出各自定向至不同位置:

COMMAND > /path/to/file.out 2> /path/to/error.out

[root@node1 ~]# tail -5 /etc/rc.d/rc.local >/tmp/sys.out 2>/tmp/sys.err

注:命令执行后sys.out和sys.err文件都会产生,有一个为空。

合并标准输出和错误输出为同一个数据流进行重定向:

&>:覆盖重定向          echo "$PATH" &> /tmp/path.out

&>>:追加重定向         echo "$PATH" &>> /tmp/path.out

COMMAND > /path/to/file.out 2> &1

这种方法也可以实现正确和错误都定向到同一文件,2> &1 :2表示错误,&1表示/path/to/file.out。这种方式更为灵活

上面内容源自马哥运维学习的笔记


示例

    输入重定向 < 使用tr命令,把/etc/issue中的内容,把所有换成大写

[root@c6 ~]# cat /etc/issue

CentOS release 6.5 (Final)

Kernel \r on an \m


[root@c6 ~]# tr 'a-z' 'A-Z' < /etc/issue

CENTOS RELEASE 6.5 (FINAL)

KERNEL \R ON AN \M


    ls命令将它的输出重定向到文件lsfile,不把输出结果发往屏幕

[root@c6 ~]# ls > lsfile

[root@c6 ~]# cat lsfile 

anaconda-ks.cfg

install.log

install.log.syslog

lsfile

shell.sh

shell.txt

zbox

    date命令的输出结果重定向追加到lsfile中

[root@c6 ~]# date >> lsfile

[root@c6 ~]# cat lsfile 

anaconda-ks.cfg

install.log

install.log.syslog

lsfile

shell.sh

shell.txt

zbox

Thu Nov 24 11:42:55 CST 2016

    将错误输出,重定向到errfile中

[root@c6 ~]# lq 2> errfile

[root@c6 ~]# cat errfile 

-bash: lq: command not found

    把标准输出重定向到output.txt下。错误信息则被发往/dev/null,/dev/null相当于黑洞,把任何东西放里面,都没了

[root@c7 app]# ld > output.txt 2> /dev/null

    如果我们希望把所有输出的内容都放在同一个独立文件中,使用2>&1

[root@c7 app]# ls -l /bin/users > ls-output.txt 2>&1

 说明:使用这个方法,将执行两个重定向操作。首先重定向标准输出到ls-output.txt文件中,然后使用标记符2>&1的文件描述符2(标准错误)重定向到文件描述符1(标识输出)中。

   find命令查找echo命令将它的信息发往标准错误输出。该命令的标准输出也一同被发往标准错误输出中

[root@c7 app]# echo "Hello world" 1>&2

Hello world


学习自:

UNIX.shell范例精解(第4版)

马哥Linux



      本文转自cix123  51CTO博客,原文链接:http://blog.51cto.com/zhaodongwei/1876095,如需转载请自行联系原作者



相关文章
|
3月前
重定向命令
重定向命令
20 0
|
10月前
重定向和请求转发的区别
重定向和请求转发的区别
63 0
|
12月前
|
存储 C++ iOS开发
C++中的I/O重定向
在 C 中,我们可以使用函数freopen()将现有的 FILE 指针重定向到另一个流。freopen() 的原型为
59 0
|
应用服务中间件
重定向(重要)!!
重定向(重要)!!
142 1
重定向(重要)!!
|
前端开发
请求转发与请求重定向
请求转发与请求重定向
191 0
请求转发与请求重定向
|
搜索推荐
重定向响应
什么是重定向响应
|
前端开发 Java
重定向与请求转发
介绍JavaWeb中的实现页面跳转的同卵双胞胎兄弟—重定向与请求转发以及代码实现流程
重定向与请求转发
|
Python
一日一技:怎么>重定向不过去了?
一日一技:怎么>重定向不过去了?
199 0
一日一技:怎么>重定向不过去了?
|
算法 网络协议 前端开发
重发和重定向有什么区别与重定向应用
重发和重定向有什么区别与重定向应用
174 0
重发和重定向有什么区别与重定向应用
关于重定向与请求转发中的路径问题
关于重定向与请求转发中的路径问题