003.文件描述符、重定向
1、文件描述符
文件描述符是与输入和输出流相关联的整数。最广为人知的文件描述符是stdin、stdout和stderr。我们可以将某个文件描述符的内容重定向到另一个文件描述符中。
在编写脚本的时候会频繁用到标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。脚本可以使用大于号将输出重定向到文件中。命令产生的文本可能是正常输出,也可能是错误信息。默认情况下,正常输出(stdout)和错误信息(stderr)都会显示在屏幕上。我们可以分别为其指定特定的文件描述符来区分两者。
文件描述符是与某个打开的文件或数据流相关联的整数。文件描述符0、1以及2是系统预留的。
- 0—— stdin (标准输入)。
- 1—— stdout(标准输出)。
- 2—— stderr(标准错误)。
# 使用大于号将文本保存到文件中:echo "This is a sample text 1" > temp.txt# 使用双大于号将文本追加到文件中:echo "This is sample text 2" >> temp.txt
a. 退出状态
当一个命令发生错误并退回时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回为0的退出状态。退出状态可以从特殊变量$?中获得(在命令结束之后立刻运行echo $?,就可以打印出退出状态)。
下面的命令会将stderr文本打印到屏幕上,而不是文件中(因为stdout并没有输出,所以out.txt的内容为空):
$ ls + > out.txt # 在屏幕上输出 ls: cannot access +: No such file or director
在下面的命令中,我们使用2>(数字2以及大于号)将stderr重定向到out.txt:
ls + 2> out.txt #没有问题
可以将stderr和stdout分别重定向到不同的文件中:
cmd 2>stderr.txt 1>stdout.txt# stdout.txt 文件中没有内容,stderr.txt文件中的内容如下:#bash: cmd: command not found...#Similar command is: 'mcd'
下面这种更好的方法能够将stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中:
cmd &> output.txt
如果你不想看到或保存错误信息,那么可以将stderr的输出重定向到/dev/null,保证一切都会被清除得干干净净。
假设我们有3个文件,分别是a1、a2、a3。但是普通用户对文件a1没有“读-写-执行”权限。如果需要打印文件名以a起始的所有文件的内容,可以使用cat命令。来设置一些测试文件:
echo A1 > a1
echo A2 > a2
echo A3 > a3
chmod 000 a1 #清除所有权限# 切换普通用户 使用通配符(a*)显示这些文件内容的话,系统会显示出错信息,因为文件a1没有可读权限
cat a*
其中,cat: a1: Permission denied属于stderr信息。我们可以将其重定向到一个文件中,同时将stdout信息发送到终端:
cat a* 2> err.txt # stderr被重定向到err.txtcat err.txt # 输出 cat: a1: Permission denied
我们在处理一些命令输出的同时还想将其保存下来,以备后用。stdout作为单数据流(singlestream),可以被重定向到文件或是通过管道传入其他程序,但是无法两者兼得。
有一种方法既可以将数据重定向到文件,还可以提供一份重定向数据的副本作为管道中后续命令的stdin。
tee命令从stdin中读取,然后将输入数据重定向到stdout以及一个或多个文件中:command | tee FILE1 FILE2 | otherCommand
在下面的代码中,tee命令接收到来自stdin的数据:
- 它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin。
- 命令cat -n为从stdin中接收到的每一行数据前加上行号并将其写入stdout:
cat a* | tee out.txt | cat -n
cat out.txt # 输出 A2,A3
注意:cat: a1: Permission denied 并没有在文件内容中出现,因为这些信息被发送到了stderr,而tee只能从stdin中读取。
默认情况下,tee命令会将文件覆盖,但它提供了一个-a选项,可用于追加内容。
cat a* | tee -a out.txt | cat –n
要发送输入内容的两份副本给stdout,使用-作为命令的文件名参数即可:
echo who is this | tee -
也可以将/dev/stdin作为输出文件名来代替stdin。类似地,使用/dev/stderr代表标准错误,/dev/stdout代表标准输出。这些特殊的设备文件分别对应stdin、stderr和stdout。
b. 自定义文件描述符
文件描述符是一种用于访问文件的抽象指示器(abstract indicator)。存取文件离不开被称为“文件描述符”的特殊数字。0、1和2分别是stdin、stdout和stderr预留的描述符编号。exec命令创建全新的文件描述符。
如果你熟悉其他编程语言中的文件操作,那么应该对文件打开模式也不陌生。常用的打开模式有3种:
-
- 只读模式。 <操作符可以将文件读入stdin。
- 截断写入模式。>操作符用于截断模式的文件写入(数据在目标文件内容被截断之后写入)。
- 追加写入模式。>>操作符用于追加模式的文件写入(数据被追加到文件的现有内容之后)。
例1:创建一个用于读取文件的文件描述符
echo this is a test line > input.txt # 准备一个文件
exec 3<input.txt # 定义文件描述符3:将文件内容读入到标准输入中
cat<&3 # 使用文件描述符3,输出this is a test line
- 如果要再次读取,我们就不能继续使用文件描述符3了,而是需要用exec重新创建一个新的文件描述符(可以是4)来从另一个文件中读取或是重新读取上一个文件。
例2:创建一个用于写入(截断模式)的文件描述符:
exec 4>output.txt # 定义文件描述符4:将内容截断写入至output.txt
echo newline >&4 # 将内容写入文件
cat output.txt # 输出 newline
例3:创建一个用于写入(追加模式)的文件描述符:
exec 5>>input.txt # 定义文件描述符5:将内容追加至input.txt
echo appended line >&5 # 将内容追加入文件
cat input.tx # 查看输出内容
2、重定向操作符
重定向操作符(>和>>)可以将输出发送到文件中,而不是终端:
- >:先清空文件,然后再写入内容
- >>:将内容追加到现有文件的尾部。
默认情况下,重定向操作针对的是标准输出。如果想使用特定的文件描述符,你必须将描述符编号置于操作符之前。>等同于1>;对于>>来说,情况也类似(即>>等同于1>>)。
处理错误时,来自stderr的输出被倾倒入文件/dev/null中。./dev/null是一个特殊的设备文件,它会丢弃接收到的任何数据。null设备通常也被称为黑洞,因为凡是进入其中的数据都将一去不返。
将文件重定向到命令:?
借助小于号(<),我们可以像使用stdin那样从文件中读取数据:命令 < 文件
重定向脚本内部的文本块:?
可以将脚本中的文本重定向到文件。要想将一条警告信息添加到自动生成的文件顶部,可以使用下面的代码:
#!/bin/bash
cat<<EOF>log.txt
This is a generated file. Donot edit. Changes will be overwritten.
EOF
出现在cat <<EOF>log.txt与下一个EOF行之间的所有文本行都会被当作stdin数据。log.txt文件的内容显示如下:
相关文章:

003.文件描述符、重定向
1、文件描述符 文件描述符是与输入和输出流相关联的整数。最广为人知的文件描述符是stdin、stdout和stderr。我们可以将某个文件描述符的内容重定向到另一个文件描述符中。 在编写脚本的时候会频繁用到标准输入(stdin)、标准输出(stdout&am…...

图论| 827. 最大人工岛 127. 单词接龙
827. 最大人工岛 题目:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。返回执行此操作后,grid 中最大的岛屿面积是多少? 岛屿 由一组上、下、左、右四个方向相连的 1 形成。 题目链接:[827. 最大人工岛](ht…...

2023年中国恒温蜡疗仪发展趋势分析:应用前景存有很大发展与探索空间[图]
恒温电蜡疗仪可将蜡熔化,利用蜡自身特点,能阻止热的传导、散热慢、气体和水分不易消失,保温性能优越。利用蜡能紧密贴于体表的可塑性,可加入其他药物协同进行治疗,也可将中药与蜡疗有机地结合在一起,产生柔…...

认识“协议”
文章目录: 什么是协议结构化的数据传输序列化和反序列化网络版本计算器 什么是协议 在计算机网络中,协议是指在网络中进行通信和数据交换时,双方遵循的规则和约定集合。它定义了数据的传输格式、顺序、错误处理、认证和安全性等方面的规范。 …...

GO语言的由来与发展历程
Go语言,也称为Golang,是由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,并于2009年正式对外发布的开源编程语言。 三名初始人的目标是设计一种适应网络和多核时代的C语言,Go语言从C继承了…...

MPN – 制造零件号
S/4 1610 中的 MPN – 基于 NAST 的输出管理 我试图查找有关 MPN 设置的信息,但找不到详细的配置步骤。在浏览了一些信息和 help.sap 链接后,我能够在 S/4 1610 系统中配置 MPN 设置,这与使用旧输出类型(Nast 和输出类型 NEU&…...
Redis企业级问题及解决方案
1.1 缓存预热 场景:“宕机” 服务器启动后迅速宕机 问题排查: 1.请求数量较高,大量的请求过来之后都需要去从缓存中获取数据,但是缓存中又没有,此时从数据库中查找数据然后将数据再存入缓存,造成了短期…...

【2021集创赛】基于arm Cortex-M3处理器与深度学习加速器的实时人脸口罩检测 SoC
团队介绍 参赛单位:深圳大学 队伍名称:光之巨人队 指导老师:钟世达、袁涛 参赛队员:冯昊港、潘家豪、慕镐泽 图1 团队风采 1. 项目简介 新冠疫情席卷全球,有效佩戴口罩可以极大程度地减小病毒感染的风险。本项目开发…...
B码的相关知识点笔记
B码(B-Code)通常是指中国北斗卫星导航系统的坐标编码方式。北斗卫星导航系统使用的坐标系是WGS-84,而B码是针对WGS-84坐标系进行编码的一种方式。 B码的格式通常为18位或24位,其中包含以下信息: 前两位为国家码&…...

java“贪吃蛇”小游戏
基于java实现贪吃蛇小游戏,主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 我是在javaSwing项目下创建了一个包 名字叫做:Snakes包 包下有一个启动类和一个设置代码的主界面两个类 代码主界面: 代码主界面主要讲解的是 …...

【面试经典150 | 位运算】数字范围按位与
文章目录 Tag题目来源题目解读解题思路方法一:公共前缀方法二:n & (n-1) 写在最后 Tag 【位运算】 题目来源 201. 数字范围按位与 题目解读 计算给定区间内所有整数的按位与的结果。 解题思路 本题朴素的方法是直接将区间内的所有整数按位与&…...

推介会如何做好媒体宣传
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 推介会是一种专为企业、社会组织和团体、政府等提供的展示自身特点、产品和政策的活动形式,旨在促进交流活动,形成合作,从而带来共同利益。推介会的本…...

【ROS导航Navigation】五 | 导航相关的消息 | 地图 | 里程计 | 坐标变换 | 定位 | 目标点和路径规划 | 激光雷达 | 相机
致谢:ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 一、地图 nav_msgs/MapMetaData 地图元数据,包括地图的宽度、高度、分辨率等。 nav_msgs/OccupancyGrid 地图栅格数据&#…...

什么是脏读、不可重复读、幻读讲解
数据库隔离级别是数据库管理系统中一个重要的概念,它定义了事务之间的可见性和影响。在多用户并发访问数据库时,隔离级别能够确保事务之间的相互独立性,避免数据不一致的问题。本文将深入探讨三种常见的并发问题:脏读、不可重复读…...

2018年五一杯数学建模C题江苏省本科教育质量综合评价解题全过程文档及程序
2019年五一杯数学建模 C题 江苏省本科教育质量综合评价 原题再现 随着中国的改革开放,国家的综合实力不断增强,中国高等教育发展整体已进入世界中上水平。作为一个教育大省,江苏省的本科教育发展在全国名列前茅,而江苏省13个地级…...

第四代智能井盖传感器:万宾科技助力城市安全
在繁华喧嚣的城市里人来人往,井盖作为基础设施的一个组成部分在路面上分布范围广。然而这些看似普通的井盖却存在着位移、水浸的风险,可能给我们的生活带来诸多不便,更会威胁到我们的人身安全。如何有效监测和管理井盖的状态,成为…...

[Jenkins] Docker 安装Jenkins及迁移流程
系统要求 最低推荐配置: 256MB可用内存1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB) 为小团队推荐的硬件配置: 1GB可用内存50 GB 可用磁盘空间 软件配置: Java 8—无论是Java运行时环境(JRE)还是Java开发工具包(JDKÿ…...

第七篇 基于JSP 技术的网上购书系统——新品上架、推荐产品、在线留言、搜索功能实现(网上商城、仿淘宝、当当、亚马逊)
目录 1.新品上架 1.1功能说明 1.2界面设计 1.3处理流程 1.4数据来源和算法 1.4.1数据来源 1.4.2查询条件 1.4.3表间关系 1.4.4相关sql实例 2.推荐产品 2.1功能说明 2.2界面设计 2.3处理流程 2.4数据来源和算法 2.4.1数据来源 2.4.2查询条件 2.4.3表间关…...

IntelliJ IDE 插件开发 |(一)快速入门
前言 IntelliJ IDEA 作为 Java 开发的首选 IDE,其强大、方便之处不必多说。不过,由于个人或者团队的个性化需求,我们或多或少会想对其功能进行拓展,这时就需要开发插件(在 IntelliJ 平台下的所有 IDE 均可运行&#x…...

【Ubuntu】Windows远程Ubuntu系统
步骤 开启ssh服务并开放22端口关闭防火墙ufw或iptables ;或者将远程端口添加到入站与出站规则安装xrdp并将xrdp用户添加到ssl-cert用户组mstsc 远程,输入账号密码 1、开启ssh服务 1.1. 查看ssh是否已经开启 sudo ps -e | grep ssh如果最后返回是sshd…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...