Linux:输入输出流、重定向、管道命令

news2024/11/29 2:43:49

相关文章

Linux:chgrp、chown、chmod权限属性更改指令

Linux: 磁盘状态观察命令lsblk、blkid

Linux:df、du容量查询指令


1、标准流文件

        数据流重定定向由字面上的意思来看,就是将数据定向到其他地方去,事实也是如此,数据流重定向就是将本来出现在屏幕(终端)上的数据,传输到其他地方(如文件或设备)。这在Linux命令行模式下面很重要,尤其是如果我们想要将某些数据存储下来时,就更有用了。

        如果你执行一个命令,这个命令可能会由文件读入数据,经过处理后,再将数据输出到屏幕上。标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的默认设备是终端,我们可以验证这一点,我们可以在/dev目录下找到这三个标准流文件,他们其实就是三个文件描述符。

        可以看到,它们只是到self进程中的fd(文件描述符)的符号链接,接着我们去/proc中找到这三个文件,结果发现它们也是链接文件,链接到设备pts/0,其实这就是我在GNOME中打开的虚拟终端设备pseudo-terminal slave(即这个终端窗口),因为它是GUI环境虚拟产生的,因此得名。这与之前所说的标准输出、标准输入和标准错误默认是终端是吻合的。

        但这是我们也许可以发现问题当我们打开第二个虚拟终端,再查看/proc/self/fd目录时,问题出现了同样的/proc/self/fd/0文件,居然在不同的终端链接到了不同的虚拟终端(/dev/pts/1),想必已经有人猜到了,其实/proc/self/目录本身就链接到了其他目录,用ls验证一下,确实如此。 

        那么这个4567又是什么进程呢?它就在/proc目录下,我们尝试找到它。但居然发现它压根不存在,说明这个进程早已结束,看起来这里的self的链接对象似乎是在不断切换的,这才导致了之前里面fd目录下的描述符一会儿对应虚拟终端0,一会儿对应虚拟终端1。其实,self的链接对象是尝试当前正在访问self的进程,所以其实ls -l self时输出的4567对应的是ls这个进程,在ls命令执行完毕后,此进程当然不存在了,所以才找不到。bash父进程在创建ls子进程时,让其继承了自己的文件描述符,包括0,1,2这三个标准流的文件描述符,所以在用ls查看0,1,2这三个文件的链接对象时,显示的是虚拟终端,因为这是bash的默认标准输入输出设备。

        现在,/dev/stdin、/dev/stdout和/dev/stderr链接到/proc/self/fd中的文件描述符,意图就很明显了,让所有进程(命令)使用自己的标准流来输入输出文件(虽然这看起来是废话),所有进程(命令)在创建时,都会继承到父进程的文件描述符(其中包括标准输入输出),因为默认这三个文件描述符对应的是终端屏幕,所以命令一般会输出到屏幕。(注意,如果是cat file)这类命令,并没有改变标准输入的指向,而是创建了新的文件描述符。

        如果想要改变进程(命令)的标准输入输出,则需要使用重定向指令。

2、重定向的过程

        使用<可将标准输入重定向到文件,使用方式为command < file;使用>可将标准输出重定向到文件,使用方式为command > file;使用2>可将标准错误重定向到文件,使用方式为command 2> file。

        我们来看一下重定向的过程,使用sleep命令比较方便,因为它的执行时间较长。在命令后加&使命令后台执行,这样我们就可以继续使用命令行,我们使用命令的pid查询并看到了他的三个文件描述符继承了bash父进程,统统指向了虚拟终端,这和预期相符。

        接着我们在sleep命令后使用>指令,将标准输出流重定向到一个文件(是否已存在不重要,如果否,bash则会创建这个文件,如果存在了,bash则会把这个文件清空)。

         可以看到,文件描述符1这时的链接对象不是虚拟终端了,而是我们指定的文件,这就是重定向的原理,系统并没有新建文件描述符来指向我们重定向的文件,而是将原本标准输出的文件描述符重新指向了,所以原本会输出到虚拟终端的信息,都被输出到指定的文件中去了。 

        如果不想清空原本的文件内容,则可以使用<<、>>和2>>指令,这表示将在原内容上追加。

3、管道命令

        可以使用管道命令|将两个命令的标准输入输出连接在一起,这很神奇,也是Linux中一个功能十分强大的特性,使用它可以让多个命令一个接一个地协作处理,我们来看一个例子。

        使用ll | less命令,即可把ll本应输出到屏幕的信息,转交给less处理,即转移到less的标准输入中,就好像是将ll的标准输出和less的标准输入连接到了一起。这样你就可以利用less的功能前后翻动ll输出的信息了,如下图所示。

         为了验证这一点,我们继续使用sleep命令进行测试,ps命令用于查询进程的pid。可以看到,sleep命令(pid5262)的标准输出连接到了pipe:[63913],而cat命令的标准输入也连接到了pipe:[63913],从而实现了两个命令的连接。

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

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

相关文章

ModaHub魔搭社区:非结构化数据范式转变和示例

目录 范式转变——非结构化数据 非结构化数据示例 范式转变——非结构化数据 既然我们对结构化数据和半结构化数据有了清晰的理解,现在让我们开始谈谈非结构化数据。与结构化数据和半结构化数据不同,非结构化数据可以采取任何形式,可以有任意大小或尺寸,并需要大量的运行…

ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud与 HuggingFace 集成搭建问答系统

目录 准备工作 主要参数 创建 Collection 插入数据 测试问答 本文将演示如何使用 Zilliz Cloud 和 HuggingFace 搭建问答系统。其中,Zilliz Cloud 负责提供向量数据库,HuggingFace 负责提供获取指定文字向量表示的接口。 准备工作 本示例中的脚本需要安装 pymilvus,…

寡头竞争和混合策略均衡

纯寡头的产量竞争 两家企业生产相同的产品,产量是决策变量,市场上只有一种价格。市场需求/Demand:P = 100 - (Q1+Q2) Q 是企业生产的产量 假设生产成本为0 这个案例可能存在的结果 (1)合谋 (2)古诺-纳什均衡 每个企业将它竞争对手的产量水平视为固定的,然后决定自己…

【C++学习笔记】C++如何规范C语言中的类型转换

C的类型转换 1 C语言中类型转换的缺陷2 为什么C要规范C的类型转换3 C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast 1 C语言中类型转换的缺陷 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&a…

【kubernetes系列】Kubernetes之RBAC

概述 k8s的权限控制在实际工作中不那么经常使用&#xff0c;但是却是很重要的&#xff0c;我们需要深入理解才能很好的解决某些问题。在我们现目前的了解中&#xff0c;常用的授权插件有以下几种&#xff1a; Node&#xff08;节点认证&#xff09; ABAC(基于属性的访问控制) …

【UE4 C++】03-新建UE C++工程,新建C++类

UE版本&#xff1a;4.26 步骤 新建一个空白模板工程&#xff0c;选择C项目&#xff0c;选择项目名和项目存储位置&#xff0c;然后点击创建项目。 新建C类 选择父类为Character 命名&#xff0c;选择公有&#xff0c;然后点击创建类 等待编译完成 此时在Visual Studio中可以看…

源启:云原生计算架构的行业实现

7月5日&#xff0c;由工业和信息化部网络安全产业发展中心、中国软件行业协会等单位指导&#xff0c;中国电子主办的“麒麟傲天聚创未来2023操作系统产业大会”在京举行。中电金信研究院副院长陈书华在大会上发表主旨演讲。 陈书华认为数字经济已成为社会发展的重要引擎&#…

【论文解读】基于分层判断的 x264 快速模式选择算法

简介 题目&#xff1a; 基于分层判断的 x264 快速模式选择算法 原文&#xff1a; https://www.nstl.gov.cn/paper_detail.html?id77880ade9a55b3cc527192010242d90e 级别&#xff1a; EI 年份&#xff1a; 2010 年 机构&#xff1a; 上海交通大学 结论&#xff1a; 相比较 HE…

汽车+ChatGPT 车内生活体验再升级

这两年&#xff0c;人工智能工具ChatGPT爆火&#xff0c;在全球掀起了大模型之战。如今&#xff0c;最前沿的自然语言处理大模型应用到了人类的出行工具上&#xff0c;梅赛德斯-奔驰和微软官宣正在合作测试车载ChatGPT人工智能&#xff0c;并将面向约90万车主开启测试&#xff…

对象存储、数据库、NAS、标注数据集,均支持元信息配置|ModelWhale 版本更新

七月中旬&#xff0c;暑气渐浓&#xff0c;ModelWhale 新一轮的版本更新&#xff0c;期待为每个领域的你带来更好的使用体验。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; • 新增 对象存储、数据库、NAS、标注数据的元信息展示&#xff08;专业版…

flutter开发实战-Theme主题切换

flutter开发实战-Theme主题切换 之前做的应用中有用到Theme主题切换&#xff0c;一直没有整理&#xff0c;这里整理一下。 使用的是Android studio 一、效果图 二、创建ThemeModel // 提供五套可选主题色 const _themes <MaterialColor>[Colors.blue,Colors.cyan,Co…

缓存 - Caffeine 不完全指北

文章目录 官网概述设计CodePOMPopulationEviction PolicyRefreshStatistics 官网 https://github.com/ben-manes/caffeine wiki: https://github.com/ben-manes/caffeine/wiki 概述 Caffeine是一个用于Java应用程序的高性能缓存框架。它提供了一个强大且易于使用的缓存库&a…

如何判定是否一份适合工作呢

核心指标&#xff1a;喜欢 春节仿佛还在昨天&#xff0c;转眼间2023年已经过半。分享和总结一下自己过去的这6个月吧&#xff01;你可以从以下几个方面展开谈谈。 23年上半年已经过去啦。结合工作多年经历简单写一写。 主要写自己&#xff1a; 工作非常努力&#xff0c;但是…

Java 一文掌握全部阻塞队列的使用

1、简介 本文主要对Java常用阻塞队列进行介绍和提供相关使用案例 2、 阻塞队列作用 阻塞队列提供了一种线程安全、高效的数据传递和同步机制 &#xff0c; 主要用于缓冲数据、限流、削峰填谷&#xff0c;生产者-消费者模型&#xff0c;线程间的协作等等。 3、 各阻塞队列区…

人工智能学术顶会——NeurIPS 2022 议题(网络安全方向)清单、摘要与总结

按语&#xff1a;随着大模型的崛起&#xff0c;将AI再次推向一个高峰&#xff0c;受到的关注也越来越大。在网络安全领域&#xff0c;除4大安全顶会外&#xff0c;一些涉及AI的安全话题&#xff0c;包括对AI的攻防研究&#xff0c;以及应用AI做安全的研究方向&#xff0c;也会发…

在vite创建的vue3项目中使用Cesium加载纽约建筑模型、设置样式,划分城市区域并着色

在vite创建的vue3项目中使用Cesium加载纽约建筑模型、设置样式&#xff0c;划分城市区域并着色 使用vite创建vue3项目 npm create vitelatestcd到创建的项目文件夹中 npm install安装Cesium npm i cesium vite-plugin-cesium vite -D配置 vite.config.js文件&#xff1a;添加Ce…

系统架构设计师 8:系统质量属性与架构评估

软件系统属性包括功能属性和质量属性&#xff0c;软件架构重点关注的是质量属性。为了精确、定量地表达系统的质量属性&#xff0c;通常会采用质量属性场景的方式进行描述。 在确定软件系统架构&#xff0c;精确描述质量属性场景后&#xff0c;就需要对系统架构进行评估。软件…

前端|CSS(二)

参考视频&#xff1a;黑马程序员前端CSS3基础教程&#xff0c;前端必备基础 目录 &#x1f4da;CSS 布局的三种机制 &#x1f407;普通流 &#x1f407;浮动 ⭐️浮动介绍 ⭐️浮动(float)的应用 ⭐️浮动(float)的扩展 ⭐️清除浮动 &#x1f407;定位 ⭐️定位 ⭐️…

shell? 变量!

目录 ​编辑 &#x1f428;什么是shell &#x1f428;编译型语言和解释型语言 &#x1f428;解释型语言 &#x1f428;变量 &#x1f428;1.局部变量&#xff1a; &#x1f428;2.环境变量通常又称“全局变量” &#x1f428;3.设置环境变量&#xff1a; &#x1f4…

NZ系列工具:NZ11:VBA光标跟随策略

【分享成果&#xff0c;随喜正能量】生活就像是一杯苦茶&#xff0c;而情感是茉莉花&#xff0c;调兑在一起&#xff0c;才会馥郁芬芳。人活在世上&#xff0c;有诸多苦楚萦心&#xff0c;若不懂得自我调解&#xff0c;终究会被纷呈的世相掩埋。所以&#xff0c;更多的时候&…