点击返回 自学Linux命令行与Shell脚本之路

11.4-重定向输入输出

Linux 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示。一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器。

重定向命令列表如下:

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入

1. 输出重定向

重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:

command1 > file1

上面这个命令执行command1然后将输出的内容存入file1。

注意:任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。

执行who >users 并没有显示,而是将who命令结果重定向到users文件,若文件不存在会新建一个文件。

覆盖,,已经存在的内容将被新内容替代。

使用>>操作符,将新内容添加在文件末尾。

2. 输入重定向

输入重定向是将文件的内容重定向到命令。

2.1  输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

  command1 < file1

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。

注意:输出重定向是大于号(>),输入重定向是小于号(<)。

注意:上面结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。

2.2  Here Document(内联输入重定向) 一种特殊的输入重定向

Here Document 目前没有统一的翻译,这里暂译为”嵌入文档“。Here Document 是 Shell 中的一种特殊的重定向方式,它的基本的形式如下:

 command << delimiter
document
delimiter

它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

注意:

结尾的delimiter 一定要顶格写,前面和后面都不能有任何字符(包括空格和 tab 缩进)。
开始的delimiter前后的空格会被忽略掉。

wc命令时分别输出文件的行数,单词数和字节数。

3. 重定向深入讲解(点击这里获得更多

一般情况下,每个 Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

如果希望 stderr 重定向到 file,可以这样写:$command 2 > file

如果希望 stderr 追加到 file 文件末尾,可以这样写:$command 2 >> file    2 表示标准错误文件(stderr)。

如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:  $command > file 2>&1或$command >> file 2>&1

如果希望对 stdin 和 stdout 都重定向,可以这样写:   $command < file1 >file2      command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

不论输出标准输入或标准输出还是标准错误文件都可以输入到file中。你可以这样写:   $command &>>file

4. /dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

 command > /dev/null

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

如果希望屏蔽 stdout 和 stderr,可以这样写:

  command > /dev/null >&

注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

5.   重定向&操作符

重定向操作符 & 可以将输出或输入从一个指定句柄复制到另一个指定的句柄。例如,要将 dir 输出发送到 File.txt 并将错误输出发送到 File.txt,请键入:

 dir>c:/file.txt >&

复制句柄时,可以复制该句柄原状态的所有特性。
例如,如果一个句柄具有只读访问的属性,则该句柄的所有副本都具有只读访问属性。不能将一个具有只读访问属性的句柄复制到另一个具有只写访问属性的句柄。

5.1 使用 & 操作符重定向输入和副本

  • 要将重定向输入操作符 (<) 与复制操作符 (&) 结合使用,指定的文件必须已经存在。
  • 如果输入文件存在,Cmd.exe 将以只读方式打开该文件,然后将文件包含的字符作为输入发送到此命令(如同从键盘输入一样)。
  • 如果指定了句柄,Cmd.exe 将指定的句柄复制到系统现有的句柄中。

例:
要以句柄 0 输入读取(即 STDIN)的方式打开 File.txt,请键入: <file.txt

要打开 File.txt,并在内容排序后将输出发送到命令提示符窗口(即 STDOUT),请键入:sort<file.txt

要查找 File.txt,然后将句柄 1(即 STDOUT)和句柄 2(即 STDERR)重定向到 Search.txt,请键入:indfile file.txt>search.txt 2<&1

要以句柄 0 输入读取(即 STDIN)的方式复制用户定义的句柄 3,请键入:  <&3

5.2  使用 & 操作符重定向输出和复制

如果将输出重定向到文件且指定了现有的文件名,Cmd.exe 将以只写方式打开文件并覆盖该文件内容。如果指定了句柄,Cmd.exe 将文件复制到现有句柄中。

要将用户定义的句柄 3 复制到句柄 1,请键入:>&3

要将包括句柄 2(即 STDERR)的所有输出从 ipconfig 命令重定向到句柄 1(即 STDOUT),然后将输出重定向到 Output.log,请键入:ipconfig.exe>>output.log 2>&1

5.3 使用 >> 重定向操作符附加输出

要从命令中将输出添加到文件末尾而不丢失文件中已存在的任何信息,请使用两个连续的大于号(即 >>)。

使用下列命令可以将 dir 命令生成的目录列表附加到 Dirlist.txt 文件:dir>>dirlist.txt

要将 netstat 命令的输出附加到 Tcpinfo.txt 的末尾,请键入:netstat>>tcpinfo.txt

6.   管道操作符 |

  • 管道操作符 (|) 可以提取一个命令的输出(默认情况下是 STDOUT),然后将其定向到另一个命令的输入(默认情况下是 STDIN)中。
  • 管道操作符 (|) 可以再一条命令中使用任意多条|
  • 管道操作符 (|) 最流行的用法之一将命令产生的大量输出通过管道传送给more命令

例 :使用如下命令可以对目录进行分类:

dir | sort

将同时启动两个命令,但随后 sort 命令会暂停,直到它接收到 dir 命令的输出为止。
sort 命令使用 dir 命令的输出作为输入,然后将输出发送到句柄 1(即 STDOUT)。

自学Linux Shell11.4-重定向输入输出的更多相关文章

  1. 自学Linux Shell14.1-理解输入输出

    点击返回 自学Linux命令行与Shell脚本之路 14.1-理解输入输出(点击这里获得更多) 两种显示脚本输出的方法: 在显示器屏幕上显示输出 将输出重定向到文件中 1. 标准文件描述符 linux ...

  2. 自学Linux Shell11.1-shell概述

    点击返回 自学Linux命令行与Shell脚本之路 11.1-shell概述 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计 ...

  3. 自学Linux Shell11.2-echo命令

    点击返回 自学Linux命令行与Shell脚本之路 11.2-echo命令 echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用. 语 法:echo [-n][字符串]或 echo [- ...

  4. 自学Linux Shell11.3-使用变量

    点击返回 自学Linux命令行与Shell脚本之路 11.3-使用变量 Shell脚本的执行通常可以采用以下几种方式: 1):bash script-name或sh script-name(推荐使用) ...

  5. 自学Linux Shell11.5-执行数字运算

    点击返回 自学Linux命令行与Shell脚本之路 11.5-执行数字运算 1. Shell基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符 ...

  6. 自学Linux Shell11.6-退出shell

    点击返回 自学Linux命令行与Shell脚本之路 11.6-退出shell shell运行的每一个命令都是使用 退出状态码 告诉shell它已经运行完毕.退出状态码是一个0~255的整数值,在命令结 ...

  7. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  8. [转]linux shell数据重定向(输入重定向与输出重定向)详细分析

      在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...

  9. Linux I/O 重定向详解及应用实例

    Linux I/O 重定向详解及应用实例 简解 > 输出 < 输入 >> 追加 & [> | < | >>]之前:输入输出; ls /dev & ...

随机推荐

  1. 【LGR-048 五周年庆贺】洛谷6月月赛

    Luogu的五周年庆典比赛,还是比较满意的. 题目清新不毒瘤,数据优质不卡常,解法自然,为出题人点赞. 前三题的难度都很低,T5个人感觉还好.但是最后那个splay+hash是什么神仙东西. 最后好像 ...

  2. 《Head First 设计模式》例子的C++实现(5 单例模式)

    最近在学习设计模式,用的是 <Head First 设计模式>这本书.感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式.唯一有点不方便的地方是这本书的例子全都是用的 Java ...

  3. springboot 读取 yml 配置的几种方式

    前言:在springboot 项目中一般默认的配置文件是application.properties,但是实际项目中我们一般会使用application.yml 文件,下面就介绍一下在springbo ...

  4. .Net架构篇:思考如何设计一款实用的分布式监控系统?

    前言 无论从最早期的unix操作系统,还是曾经大行其道的单体式应用,还是现在日益流行的微服务架构,始终都离不开监控的身影.如windows的任务管理器,linux的top命令,都可以看作是监控的面板. ...

  5. spring boot 实现密码连续输入错误5次,限制十分钟内不能进行登录

    我们要实现的就是,密码连续输入错误5次,就限制用户十分钟不能进行登录. 大致的流程图 数据库设计如下 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ...

  6. OpenDaylight(Oxygen)安装feature出现错误的解决方案

    在使用OpenDaylight控制器时,初次进入karaf命令行下都需要先进行feature的安装 在使用Nitrogen版本(0.7.x)时,组件的安装可以类似 feature:install od ...

  7. php5.6安装Zend Opcache扩展

    假设php5.6安装路径为/data2/php[root@nextcloud src]# pwd/usr/local/src[root@nextcloud src]# wget http://pecl ...

  8. restfull环境搭建-helloword

    原文地址:http://blog.csdn.net/u013158799/article/details/39758341 1. REST和RESTful Web Services的简要说明 REST ...

  9. “数学口袋精灵”第二个Sprint计划(第九天)

    第九天进度 任务分配: 冯美欣:欢迎界面背景音乐发现bug(一开始进入游戏可以播放音乐,进入游戏界面,再返回欢迎界面时,音乐播放不出来),仍在解决中: 吴舒婷:改进ui与音效 1.进度条.金黄色: 2 ...

  10. 接口(interface)与多态

    1. 接口(interface)是抽象方法与常量值的集合: 2. 从本质上来讲,接口是一种特殊的抽象类,这种抽象类中只包含常量与方法的定义,而没有变量和方法的实现: 3. 接口中声明的属性默认为:pu ...