Linux 输入输出重定向

news2024/11/15 5:09:08

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 文件的内容复制到标准输入,然后将其内容输出到标准输出设备(控制台)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntelliJ IDEA的下载安装配置步骤详解

引言 IntelliJ IDEA 是一款功能强大的集成开发环境&#xff0c;它具有许多优势&#xff0c;适用于各种开发过程。本文将介绍 IDEA 的主要优势&#xff0c;并提供详细的安装配置步骤。 介绍 IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;之所以被广泛使用&#xff0c;…

SpringBoot集成i18n(多语言)

配置文件 spring: messages: basename: il8n/messages # 配置国际化资源文件路径 fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项 国际化配置 import org.springframework.context.annotation.Bean; import org.spr…

基于Eclipse+Mysql+Tomcat开发的 教学评价管理系统

基于EclipseMysqlTomcat开发的 教学评价管理系统 项目介绍&#x1f481;&#x1f3fb; 随着教育信息化的发展&#xff0c;教学评价管理系统已经成为了学校、教育机构等场所必不可少的一部分。本项目是基于EclipseMysqlTomcat开发的一套教学评价管理系统&#xff0c;旨在帮助教育…

成为AI产品经理——回归模型评估(MSE、RMSE、MAE、R方)

分类问题的评估是看实际类别和预测类别是否一致&#xff0c;它的评估指标主要有混淆矩阵、AUC、KS。回归问题的评估是看实际值和预测值是否一致&#xff0c;它的评估指标包括MAE、MSE、RMSE、R方。 如果我们预测第二天某支股票的价格&#xff0c;给一个模型 y1.5x&#xff0c;…

计算机网络之IP篇

目录 一、IP 的基本认识 二、DNS 三、ARP 四、DHCP 五、NAT 六、ICMP 七、IGMP 七、ping 的工作原理 ping-----查询报文的使用 traceroute —— 差错报文类型的使用 八、断网了还能 ping 通 127.0.0.1 吗&#xff1f; 8.1、什么是 127.0.0.1 &#xff1f; 8.2、为…

利用 FormData 实现文件上传、监控网路速度和上传进度(前端原生,后端 koa)

利用 FormData 实现文件上传 基础功能&#xff1a;上传文件 演示如下&#xff1a; 概括流程&#xff1a; 前端&#xff1a;把文件数据获取并 append 到 FormData 对象中后端&#xff1a;通过 ctx.request.files 对象拿到二进制数据&#xff0c;获得 node 暂存的文件路径 前端…

12.2旋转,SPLAY树的各种操作(SPLAY与AVL是两种BST)

Splay树和AVL树是两种不同的自平衡二叉搜索树实现。 1. 平衡条件&#xff1a;AVL树通过维护每个节点的平衡因子&#xff08;左子树高度减去右子树高度&#xff09;来保持平衡&#xff0c;要求每个节点的平衡因子的绝对值不超过1。Splay树则通过经过每次操作后将最近访问的节点…

Mybatis 操作续集(连着上文一起看)

"查"操作(企业开发中尽量不使用*,需要哪些字段就写哪些字段,都需要就全写上) Mybatis 会自动地根据数据库的字段名和Java对象的属性名进行映射,如果名称一样就进行赋值 但是那些名称不一样的,我们想要拿到,该怎么拿呢? 一开始数据库字段名和Java对象属性名如下图…

mfc 设置excel 单元格的列宽

CString strTL, strBR;strTL.Format(L"%s%d", GetExcelColName(cd.nCol), cd.nRow);strBR strTL;CRange rangeMerge range.get_Range(_variant_t(strTL), _variant_t(strBR));rangeMerge.put_ColumnWidth(_variant_t((long)(20))); 宽度设置函数为 &#xff1a; pu…

软件测试要学习的基础知识——黑盒测试

黑盒测试概述 黑盒测试也叫功能测试&#xff0c;通过测试来检测每个功能是否都能正常使用。在测试中&#xff0c;把程序看作是一个不能打开的黑盒子&#xff0c;在完全不考虑程序内部结构和内部特性的情况下&#xff0c;对程序接口进行测试&#xff0c;只检查程序功能是否按照…

Milvus 再上新!支持 Upsert、Kafka Connector、集成 Airbyte,助力高效数据流处理

Milvus 已支持 Upsert、 Kafka Connector、Airbyte&#xff01; 在上周的文章中《登陆 Azure、发布新版本……Zilliz 昨夜今晨发生了什么&#xff1f;》&#xff0c;我们已经透露过 Milvus&#xff08;Zilliz Cloud&#xff09;为提高数据流处理效率&#xff0c; 先后支持了 Up…

为告警设备设置服务端属性,在tb中标记存在告警的设备

有位读者想要实现标记系统中存在告警的设备,于是我给他做了三个方案。各有优缺点。 第一个方案时,告警是在规则链里手动创建的,通过告警数,+1,-1来标记设备告警属性。 第二种是当设备通过设备配置创建,清空告警。这种情况只适用于一次遥测创建,清空一个告警。不支持单次…

【Vue】使用 Vue CLI 脚手架创建 Vue 项目(使用GUI创建)

前言 在开始使用Vue进行开发之前&#xff0c;我们需要先创建一个Vue项目。Vue CLI&#xff08;Command Line Interface&#xff09;是一个官方提供的脚手架工具&#xff0c;可以帮助我们快速创建Vue项目。Vue CLI也提供了一个可视化的GUI界面来创建和管理Vue项目。 步骤 打开终…

【离散差分】LeetCode2953:统计完全子字符串

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本题其它解法 【滑动窗口】LeetCode2953:统计完全子字符串 涉及知识点 分块循环 离散差分 题目 给你一个字符串 word 和一个整数 k 。 如果 word 的一个子字符串 s 满足以下条件&#xff0c;我们称它是 完全…

爬虫程序为什么一次写不好?需要一直修改BUG?

从我学习编程以来&#xff0c;尤其是在学习数据抓取采集这方面工作&#xff0c;经常遇到改不完的代码&#xff0c;我毕竟从事了8年的编程工作&#xff0c;算不上大佬&#xff0c;但是也不至于那么差。那么哪些因素导致爬虫代码一直需要修改出现BUG&#xff1f;下面来谈谈我的感…

网络协议与 IP 编址

网络协议与 IP 编址 之前大概了解过了网络的一些基础概念&#xff0c;见文章&#xff1a; 网络基础概念。 之前简单了解OSI模型分层&#xff1a; TCP/IP模型OSI模型TCP/IP对等模型应用层应用层表示层应用层会话层主机到主机层传输层传输层因特网层网络层网络层网络接入层数据链…

ERPNext SQL 注入漏洞复现

0x01 产品简介 ERPNext 是一套开源的企业资源计划系统。 0x02 漏洞概述 ERPNext 系统frappe.model.db_query.get_list 文件 filters 参数存在 SQL 注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权…

【深度学习】回归模型相关重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中&#xff0c;我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 一、线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&…

[STM32-1.点灯大师上线】

学习了江协科技的前4课&#xff0c;除了打开套件的第一秒是开心的&#xff0c;后面的时间都是在骂娘。因为51的基础已经几乎忘干净&#xff0c;c语言已经还给谭浩强&#xff0c;模电数电还有点底子&#xff0c;硬着头皮上吧。 本篇主要是讲述学习点灯的过程和疑惑解释。 1.工…

【杂】解决关于mean(0)理解错误引发的程序bug

一、环境和解释器要一起配置好 invalid syntax 发生你在终端激活了一个环境&#xff0c;但 VSCode 依然使用之前的解释器的情况。 解释器设置影响了 VSCode 中运行 Python 脚本、调试、代码补全等功能的行为。VSCode 会根据你选择的解释器来执行这些操作。 二、关于mean&#x…