Linux-centos6.5-(第十三篇)Shell 重定向

 

目录

 

 

Shell 重定向

硬件设备和文件描述符

Linux Shell 输出重定向

输入重定向


shell脚本部分参照:Linux Shell脚本学习指南http://c.biancheng.net/shell/

进行学习,过程中对脚本进行编写运行,部分脚本粘贴出执行结果。

Shell 重定向

重定向分为两种,一种输入重定向,一种是输出重定向;从字面上理解,输入输出重定向就是「改变输入与输出的方向」。

硬件设备和文件描述符

标准输入设备指的是键盘,标准输出设备指的是显示器。

Linux 中一切皆文件,包括标准输入设备(键盘)和标准输出设备(显示器)在内的所有计算机硬件都是文件。

为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。
 

表1:与输入输出有关的文件描述符

文件描述符

文件名

类型

硬件

0

stdin

标准输入文件

键盘

1

stdout

标准输出文件

显示器

2

stderr

标准错误输出文件

显示器

Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接。
stdin、stdout、stderr 默认都是打开的,在重定向的过程中,0、1、2 这三个文件描述符可以直接使用。

Linux Shell 输出重定向

输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。Bash 支持的输出重定向符号如下表所示。

 

表2:Bash 支持的输出重定向符号

类 型

符 号

作 用

标准输出重定向

command >file

以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。

command >>file

以追加的方式,把 command 的正确输出结果输出到 file 文件中。

标准错误输出重定向

command 2>file

以覆盖的方式,把 command 的错误信息输出到 file 文件中。

command 2>>file

以追加的方式,把 command 的错误信息输出到 file 文件中。

正确输出和错误信息同时保存

command >file 2>&1

以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。

command >>file 2>&1

以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。

command >file1 2>file2

以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。

command >>file1  2>>file2

以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。

command >file 2>file

【不推荐】这两种写法会导致 file 被打开两次,引起资源竞争,所以 stdout 和 stderr 会互相覆盖,我们将在《结合Linux文件描述符谈重定向,彻底理解重定向的本质》一节中深入剖析。

command >>file 2>>file


在输出重定向中,>代表的是覆盖,>>代表的是追加。

输出重定向案例

ll > aa.txt

输入重定向

输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。
 

表3:Bash 支持的输出重定向符号

符号

说明

command <file

将 file 文件中的内容作为 command 的输入。

command <<END

从标准输入(键盘)中读取数据,直到遇见分界符 END 才停止(分界符可以是任意的字符串,用户自己定义)。

command <file1 >file2

将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。


和输出重定向类似,输入重定向的完整写法是fd<file,其中 fd 表示文件描述符,如果不写,默认为 0,也就是标准输入文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值