Linux 输入输出重定向

Linux 系统默认的输入输出有3种类型,分别为标准输入、标准输出、错误输出,并且Linux 还为这几类设备分别分配了一个所谓的文件描述符,如下是他们之间的对应关系。

输入输出类型文件描述符系统中设备名通常对应的物理设备
标准输入设备0/dev/stdin键盘/手写笔等
标准输出设备1/dev/stdout或者tty显示器/终端
错误输出设备2/dev/stderr或者tty显示器/终端

先看一下下面的5条命令有趣的输出结果

在这里插入图片描述

我们在名为 /dev/pts/1 的终端进行了一些命令测试,发现有2条命令的输出信息打印在了另一个名为 /dev/pts/2 的终端上,为什么会这样呢?实际上,这是输出重定向的结果。这里用到了两个操作符 标准输出重定向符号(>)和错误输出重定向符号(2>

一、什么是输入输出重定向

输入输出重定向的意思是改变默认的输入输出设备,将其重新定向到新的输入输出设备,这个设备可以是显示器、终端以及文件。

二、输入输出重定向操作符

实现实现输入输出重定向的方法就是使用操作符,下面就是各种操作符及其功能的说明:

操作符功能可替换的操作符
命令 < 文件将文件作为命令的标准输入设备(标准输入重定向)
命令 << 分界符从标准输入(键盘输入)读取,直到输入分界符停止
命令 > 文件覆盖方式,将标准输出重定向到文件,也就是将正确的输出 覆盖 保存到文件中命令 1> 文件
命令 >> 文件追加方式,将标准输出重定向到文件,也就是将正确的输出 追加 保存到文件中命令 1>> 文件
命令 2> 文件覆盖方式,将错误输出重定向到文件,也就是将错误的输出 覆盖 保存到文件中
命令 2>> 文件追加方式,将错误输出重定向到文件,也就是错误的输出 追加 保存到文件中
命令 &> 文件标准和错误输出都覆盖重定向到文件,也就是将命令正确与错误输出都重定向并追加到文件中命令 >& 文件
命令 > 文件 2>&1
命令 &>> 文件标准和错误输出都追加重定向到文件,也就是将命令正确与错误输出都重定向并追加到文件中命令 >> 文件 2>&1

关于这些操作符的说明(帮助理解):

  • 可以理解 < 为输入重定向,而 >>> 为输出重定向(只不过 >覆盖输出的意思,>> 则有追加输出的意思)
  • 可以理解 1>1>> 为标准输出重定向(而 >>> 是他们的简写), 2>2>> 为错误输出重定向; &>&>> 为所有(正确的和错误的)输出重定向
  • 关于 2>&1 可以这么理解:2 表示错误输出文件描述符,1 表示标准输出描述符,而 2>&1 则表示将 文件描述符2 重定向到 文件描述符1,因此 > a.txt 2>&1 操作符等同于 >& a.txt&> a.txt;而 >> a.txt 2>&1 操作符则等同于 &>> a.txt
  • 注意并没有 >>& 这个重定向操作符

三、输入输出重定向实例

再学习一下上面的那张图中内容,从实例我们可以了解 2 个内容:

  • 1. 不指定输出重定向,则默认打印到当前显示器/终端(/dev/pts/1),而指定了重定向设备,则会将输出信息打印到指定的设备。
  • 2. 不同的操作符对应不同的重定向操作。如上图最后一条命令, > 操作符并没有将错误的输出重定向到 /dev/pts/2 中。

1. 标准输出重定向到文件:

$ echo 这是正确的输出 >a.txt   # 标准输出覆盖重定向到 a.txt 文件
$ cat a.txt                    # 查看 a.txt 文件,内容为上面命令的输出
这是正确的输出
$ echo 这是正确的输出 >a.txt   # 标准输出追加重定向到 a.txt 文件
$ cat a.txt                    # 查看 a.txt 文件,内容为上面2条命令的输出
这是正确的输出
这是正确的输出

2.错误输出重定向到文件

$ ech 命令错误 2>a.txt        # 命令错误,将错误输出覆盖重定向到 a.txt 文件
$ cat a.txt                   # 查看 a.txt 文件,内容为一条错误输出记录
bash: ech: 未找到命令

3.标准输出和错误输出都重定向到相同的文件

$ echo 这是正确的输出 > a.txt 2>&1  # 正确输出覆盖重定向到 a.txt 文件
$ ech 错误的命令 >> a.txt 2>&1      # 错误输出追加重定向到 a.txt 文件
$ cat a.txt                         # 检验输出,发现上面 2 条命令的输出都被重定向到了 a.txt 文件
这是正确的输出
bash: ech: 未找到命令

4.标准输入重定向到文件

$ cat <a.txt                        #将从键盘标准输入重定向到从文件标准输入
这是正确的输出
bash: ech: 未找到命令

虽然,cat a.txtcat <a.txt 这两条命令的输出结果一样,但他们的输入来源是不一样的。

  • cat <a.txt :直接以 a.txt 文件作为标准输入设备,并将其内容输出到标准输出设备(控制台)。
  • cat a.txt : 以键盘作为标准输入设备,并将 a.txt 文件的内容复制到标准输入,然后将其内容输出到标准输出设备(控制台)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/219194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

激光SLAM:Faster-Lio 算法编译与测试

激光SLAM&#xff1a;Faster-Lio 算法编译与测试 前言编译测试离线测试在线测试 前言 Faster-LIO是基于FastLIO2开发的。FastLIO2是开源LIO中比较优秀的一个&#xff0c;前端用了增量的kdtree&#xff08;ikd-tree&#xff09;&#xff0c;后端用了迭代ESKF&#xff08;IEKF&a…

行业分析:二极管行业发展现状及投资价值

二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件 。它具有单向导电性能&#xff0c; 即给二极管阳极加上正向电压时&#xff0c;二极管导通。 当给阳极和阴极加上反向电压时&#xff0c;二极管截止。 因此&#xff0c;二极管的导通和截止&#xff0c;则相当于开关的接通…

中文手写数字数据识别

实验环境 python3.7torch1.13.1cu117 torchaudio0.13.1cu117 torchvision0.14.1数据下载地址&#xff1a;Mnist中文手写数字数据集Python资源-CSDN文库 这些汉字包括&#xff1a; 零、一、二、三、四、五、六、七、八、九、十、百、千、万、亿 总共15个汉字&#xff0c;分别…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore10、分支基础应用1、本地文件提交到远程仓库 Git&#xff1a;一个开源的分布式版本控制系统&#xff0c;它可以在本地和…

MVSNeRF:多视图立体视觉的快速推广辐射场重建

MVSNeRF&#xff1a;多视图立体视觉的快速推广辐射场重建 摘要1 引言 摘要 在2021年&#xff0c;作者提出了MVSNeRF&#xff0c;一种新的神经渲染方法&#xff0c;在视图合成中可以有效地重建神经辐射场。与之前对神经辐射场的研究不同&#xff0c;我们考虑了对密集捕获的图像…

Oracle:左连接、右连接、全外连接、(+)号详解

目录 Oracle 左连接、右连接、全外连接、&#xff08;&#xff09;号详解 1、左外连接&#xff08;LEFT OUTER JOIN/ LEFT JOIN&#xff09; 2、右外连接&#xff08;RIGHT OUTER JOIN/RIGHT JOIN&#xff09; 3、全外连接&#xff08;FULL OUTER JOIN/FULL JOIN&#xff0…

招标新时代:如何利用全国招标投标信息API获取招标投标信息

引言 随着信息技术的迅猛发展&#xff0c;招标投标领域也逐渐步入了数字化、智能化的新时代。全国各地政府和企事业单位纷纷采用先进的招标系统&#xff0c;以提高招标效率、透明度和公平性。在这个背景下&#xff0c;利用全国招标投标信息API成为了获取实时招标投标信息的一种…

背景特效插件:Background Effects

全管线游戏背景动态粒子特效:插件里你可以找到不同用途的各种环境背景效果。这些背景适用于主菜单和现场游戏。这些背景特效可以在任何渲染管道中工作,因为他们使用标准的粒子着色器 适用于Unity2020.3.18f1及以上版本 Unity商店链接 CSDN下载 以下是一些效果图:

【Node.js】基础梳理 6 - MongoDB

写在最前&#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识&#xff0c;需要格外注重实战和官方技术文档&#xff0c;文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

采购业务中的主数据

目录 一、维护BP主数据业务伙伴BP的概念业务伙伴涉及的表业务伙伴维护操作一次性客商数据 二、维护物料主数据三、维护采购信息记录四、与FI相关集成点物料主数据的价格控制评估类与科目确定 一、维护BP主数据 业务伙伴BP的概念 在S/4HANA中&#xff0c;SAP引入了BP(Business…

电力智能辅助监控平台

电力智能辅助监控平台是一种集成了先进技术的电力系统监控解决方案。该平台利用人工智能、物联网、云计算和大数据等技术&#xff0c;依托电易云-智慧电力物联网&#xff0c;对电力系统的运行状态进行实时监控和分析&#xff0c;以实现更高效、更智能的电力管理。 以下是电力智…

Hadoop学习笔记(HDP)-Part.06 安装OracleJDK

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

java学习part36set

157-集合框架-Set不同实现类的对比及Set无序性、不可重复性的剖析_哔哩哔哩_bilibili 1.Set 加入集合的时候会先调用重写的hash方法计算hash值&#xff0c;不一样就加入。 如果hash一样且equals也是true就是重复 &#xff0c;调equals是为了保险&#xff0c;保证排除hash碰撞…

Ubuntu 安装 CUDA 和 cuDNN 详细步骤

我的Linux系统背景&#xff1a; 系统和驱动都已安装。 系统是centos 8。查看自己操作系统的版本信息&#xff1a;cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到显卡驱动和可支持的最高cuda版本&#xff0c;我的是12.2。驱动版本是535.129.03 首先&#…

中缀表达式转后缀表达式(详解)

**中缀表达式转后缀表达式的一般步骤如下&#xff1a; 1&#xff1a;创建一个空的栈和一个空的输出列表。 2&#xff1a;从左到右扫描中缀表达式的每个字符。 3&#xff1a;如果当前字符是操作数&#xff0c;则直接将其加入到输出列表中。 4&#xff1a;如果当前字符是运算符&a…

如何理解EDI报文,EDI报文标准以及版本号?

首先需要梳理EDI报文、EDI报文标准以及版本号这三个名词代表的不同含义。 EDI报文标准&#xff0c;即EDI文件在生成和解析时需要遵循的规则&#xff0c;通常情况下&#xff0c;在与交易伙伴实施EDI项目的过程中&#xff0c;交易双方需要按照同一套EDI报文标准处理文件&#xf…

Redis命令详解

文章目录 Key&#xff08;键&#xff09; DEL EXISTS EXPIRE EXPIREAT PEXPIRE PEXPIREAT PERSIST KEYS TTL PTTL RENAME RENAMENX TYPE SCAN HSCAN SSCAN ZSCAN DUMP String&#xff08;字符串&#xff09; SET GET INCR DECR MSET MGET APPEND SETNX STRLEN INCRBY DECRBY IN…

常见的几种计算机编码格式

前言&#xff1a; 计算机编码是指将字符、数字和符号等信息转换为计算机可识别的二进制数的过程&#xff0c;正因如此&#xff0c;计算机才能识别中英文等各类字符。计算机中有多种编码格式用于表示和存储文本、字符和数据&#xff0c;实际走到最后都是二进制&#xff0c;本质一…

【云原生-K8s】检查yaml文件安全配置kubesec部署及使用

基础介绍基础描述特点 部署在线下载百度网盘下载安装 使用官网样例yamlHTTP远程调用安全建议 总结 基础介绍 基础描述 Kubesec 是一个开源项目&#xff0c;旨在为 Kubernetes 提供安全特性。它提供了一组工具和插件&#xff0c;用于保护和管理在 Kubernetes 集群中的工作负载和…

Matplotlib plt.scatter()相关——(待完善)

1.python plt.scatter() 2.Python中的plt.scatter函数如何自定义颜色空间&#xff08;附详细代码&#xff09; 3.PYthon——plt.scatter各参数详解 4.plt.scatter()参数详解 5.plt.scatter各参数详解 6.plt.scatter( ) 函数的使用方法 7.matplot画图之plt.scatter()函数 8.Pyth…