[通俗易懂:Linux标准输入/输出和重定向]Shell脚本之 > /dev/null 2>1命令详解

目录标题

      • 一、> /dev/null 2>&1 命令解析
      • 二、/dev/null 文件浅显理解
      • 三、标准输入、标准输出、标准错误输出
      • 四、输入重定向、输出重定向
      • 五、命令作用与应用场景

如果想看命令意义,可以直接跳到第五部分

一、> /dev/null 2>&1 命令解析

我们在别人的脚本里面常常可以看见这样的代码:

2>/dev/null

输出重定向
或者是这样:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

那么,它们到底是什么意思呢?


解析 > /dev/null 2>&1
要了解这句代码的意思,我们要把它拆分开来一一理解,再融会贯通,才能体会Linux的精密与奥妙。

看起来这是一行代码,实际上,这是两条命令组合而成:
命令组合
如果你知道 >的意思,那么你就会明白,这是两条输出重定向命令。

从符号来解析的话,它可以解析成三种不同元素:
命令解析

  1. >:即我们刚才提到的输出重定向符号
  2. /dev/null:一个特殊文件
  3. 2 、&1:1和2是标准输出和标准错误输出的数值表示,它们还有一个兄弟0:标准输入

接下来,我们一一解析这三个元素,探索命令背后的顶层含义。


二、/dev/null 文件浅显理解

/dev/null是Linux中的特殊文件之一,或称空设备,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF,又被称为位桶(bit bucket)或者黑洞(black hole)。
在这里插入图片描述
大部分人比较喜欢理解为Windows的垃圾桶,不过我更喜欢理解为是一根下水管道。划重点:无论我们向其输入任何数据,都会被它丢弃,且操作成功。

echo hello world > ./null

在这里插入图片描述
它还有两个离得很近的兄弟,zreorandom
/dev/zero : 在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。
在这里插入图片描述
简简单单的一行命令,瞬间产生3.5G数据,直呼内行。

cat ./zero >> ./test.txt

在这里插入图片描述/dev/random :一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。它允许程序访问来自设备驱动程序或其它来源的背景噪声。
在这里插入图片描述
总结:null是丢弃东西的,zero是产生空白字符的,random是生成随机数的,重点记住null就可以了,后面两个绝大部分场景用不上。


三、标准输入、标准输出、标准错误输出

我们执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr)。Linux终端用2表示标准错误,1表示标准输出,0表示标准输入。

标准输出文件和标准错误输出文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

总结:这一块不用过于抠字眼和理解内涵,我们只需要了解:执行一个shell命令会有输出:标准输出或者错误输出,对应的数值为1,2。如果我们看见1,就要明白指代标准输出信息,看见2明白指代输出错误信息。


四、输入重定向、输出重定向

除了输入重定向、输出重定向(重点),还有标准输入。
符号表示:

  • >重定向标准输出,> filename就是把标准输出存储到文件filename里面。
    在这里插入图片描述

  • - (短横线):表示标准输入,一般用于1个程序需要多个输入的时候。
    在这里插入图片描述

  • <标准输入,后面可以跟可以产生输出的命令,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。应用场景:使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时。
    在这里插入图片描述

注意:>重定向便准输出,这个命令只针对标准输出,也就是说,如果有错误的信息,还是会打印在屏幕上。

理解了重定向之后,再结合标准输出和标准错误输出,就比较好理解。我们可以结合二者做一个demo。

写一个简单的脚本,包含一条正确的命令和错误的命令,然后使用重定向功能定向到文件。
在这里插入图片描述

执行
在这里插入图片描述
可以看到第一条echo命令成功执行,并被重定向到echo.txt文件中,而cat命令因为当前目录没有这个文件,执行失败,而>符号只能重定向标准输出,因为cat是错误输出,所以未被输出重定向到文件夹,而是输出到屏幕。

总结:输出重定向是重点,我们可以把它理解为,把前一个命令的输出,作为后一个命令的输入。


五、命令作用与应用场景

命令作用:
分别理解了各自的命令意义,串联起来:
在这里插入图片描述
第一个重定向的意思是不输出信息,但输出错误信息,第二个重定向的意思是将标准错误输出重定向到标准输出,连起来的即为:不输出信息,不管是标准输出还是错误输出。

怎么求证呢?来个demo

写个一键启动Hadoop的小脚本

demo2
运行:demo2run
可以看到除了两个echo,还有很多运行的标准输出

重定向操作,可以加在脚本执行的后面,也可以选择执行脚本的时候手动加重定向,此次选择第一种操作。
改写demo
再次运行
demo2run

作用:

  • 用于定时任务的消息邮件清理:定时任务执行时,会发送一封邮件给执行的用户,如果是比较基础的定时任务,日积月累下来,会影响系统的开销,占用存储。
  • 清理不必要的提示:Shell脚本执行的时候,如果输出大量的标准输出,影响用户交互体验。

可能大部分人看完,会有两个疑问:

第一:为什么 2 > &1 有个&符号
答:如果不加&表示重定向到“1”这个文件,&1表示标准输出

第二:为什么是先重定向到null文件,而不是先 2> & 1?会影响到错误输出的重定向吗?
答:优先级问题。错误输出重定向优先于命令重定向,故重定向到null文件时,是标准输出和标准错误输出一起null

demo:
demo3
执行
在这里插入图片描述


天道酬勤,自强不息

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

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

相关文章

【Python深度学习系列】网格搜索选择神经网络超参数:隐含层神经元数量(案例+源码)

这是我的第259篇原创文章。 一、引言 在深度学习中&#xff0c;超参数是指在训练模型时需要手动设置的参数&#xff0c;它们通常不能通过训练数据自动学习得到。超参数的选择对于模型的性能至关重要&#xff0c;因此在进行深度学习实验时&#xff0c;超参数调优通常是一个重要的…

探索 SAM 在遥感方面的能力

分割任意模型 (SAM) 现在可在不同类型的数据(例如近距离图像和航空图像)中自由克隆和使用。在我看来,SAM 模型在近距离图像上效果更好,因为这些图像对目标特征和物体有独特的视角,使模型更容易准确地区分和分割它们。 现在,我们将探讨 SAM 模型在不同遥感数据上的能力,包…

软考128-上午题-【软件工程】-白盒测试

一、白盒测试&#xff08;结构测试&#xff09; 白盒测试也称为结构测试&#xff0c;根据程序的内部结构和逻辑来设计测试用例&#xff0c;对程序的路径和过程进行测试&#xff0c;检查是否满足设计的需要。 白盒测试常用的技术是&#xff1a;逻辑覆盖、循环覆盖和基本路径测…

Web前端 JavaScript笔记4

1、元素内容 属性名称说明元素名.innerText输出一个字符串&#xff0c;设置或返回元素中的内容&#xff0c;不识别html标签元素名.innerHTML输出一个字符串&#xff0c;设置或返回元素中的内容&#xff0c;识别html标签元素名.textContent设置或返回指定节点的文本内容&#x…

LeetCode 678——有效的括号字符串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 需要两个栈&#xff0c;一个用来保存左括号所在的位置索引&#xff0c;一个用来保存星号所在的位置索引。 从左往右遍历字符串&#xff0c;如果是左括号或者星号&#xff0c;则将位置索引分别入栈&#xff0c;如…

linux shell脚本编写(2)

Shell: 命令转换器&#xff0c;高级语言转换成二进制语言。是Linux的一个外壳&#xff0c;它包在Lniux内核的外面&#xff0c;用户和内核之间的交互提供了一个接口。 内置命令&#xff1a;在shell内部不需要shell编辑 外置命令&#xff1a;高级语言要用shell转换成二进制语言 …

机器学习 | 使用Scikit-Learn实现分层抽样

在本文中&#xff0c;我们将学习如何使用Scikit-Learn实现分层抽样。 什么是分层抽样&#xff1f; 分层抽样是一种抽样方法&#xff0c;首先将总体的单位按某种特征分为若干次级总体&#xff08;层&#xff09;&#xff0c;然后再从每一层内进行单纯随机抽样&#xff0c;组成…

Kubernetes的Ingress Controller

前言 Kubernetes暴露服务的方式有一下几种&#xff1a;LoadBlancer Service、ExternalName、NodePort Service、Ingress&#xff0c;使用四层负载均衡调度器Service时&#xff0c;当客户端访问kubernetes集群内部的应用时&#xff0c;数据包的走向如下面流程所示&#xff1a;C…

计算机三级数据库技术备考笔记(十四)

第十四章 数据仓库与数据挖掘 决策支持系统的发展 决策支持系统及其演化 操作型数据(Operalional Data)是指由企业的基本业务系统所产生的数据,操作型数据及相应数据处理所处的环境,即用于支持企业基本业务应用的环境,一般被称为联机事务处理(0nLine Transaction Processing,0…

COMSOL多孔介质流仿真

使用Comsol进行多孔介质流仿真_哔哩哔哩_bilibili 目录 多孔介质 饱和多孔介质中的流动 达西定律 Brinkman方程&#xff1a;用于过渡区 裂隙流 变饱和多孔介质流 理查兹方程 多孔介质多相流 多物理场耦合 多孔介质中的传热 多孔弹性接口 多孔介质稀物质传递 多孔介质…

c# 无处不在的二分搜索

我们知道二分查找算法。二分查找是最容易正确的算法。我提出了一些我在二分搜索中收集的有趣问题。有一些关于二分搜索的请求。我请求您遵守准则&#xff1a;“我真诚地尝试解决问题并确保不存在极端情况”。阅读完每个问题后&#xff0c;最小化浏览器并尝试解决它。 …

NSL-KDD数据集详细介绍及下载

链接&#xff1a;https://pan.baidu.com/s/1hX4xpVPo70vwLIo0gdsM8A?pwdq88b 提取码&#xff1a;q88b 一般认为数据质量决定了机器学习性能的上限,而机器学习模型和算法的优化最多 只能逼近这个上限。因此在数据采集阶段需要对采集任务进行规划。在数据采集之前, 主要是从数据…

第十二讲 查询计划 优化

到目前为止&#xff0c;我们一直在说&#xff0c;我们得到一个 SQL 查询&#xff0c;我们希望可以解析它&#xff0c;将其转化为某种逻辑计划&#xff0c;然后生成我们可以用于执行的物理计划。而这正是查询优化器【Optimizer】的功能&#xff0c;对于给定的 SQL &#xff0c;优…

.net框架和c#程序设计第三次测试

目录 一、测试要求 二、实现效果 三、实现代码 一、测试要求 二、实现效果 数据库中的内容&#xff1a; 使用数据库中的账号登录&#xff1a; 若不是数据库中的内容&#xff1a; 三、实现代码 login.aspx文件&#xff1a; <% Page Language"C#" AutoEventW…

DB schema表中使用全局变量及在DB组件中查询

DB schema表中使用全局变量及在DB组件中查询 规则如下&#xff1a; 使用如下&#xff1a; 如果在unicloud-db组件上不加判断条件&#xff0c;就会报错&#xff0c;并进入到登录页。 那么就会进入到登录页&#xff0c;加上了判断条件&#xff0c;有数据了就不会了。 因为在sc…

TQ15EG开发板教程:在MPSOC上运行ADRV9371(vivado2018.3)

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在本文最后。首先在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases…

【Maven工具】

maven Maven是一个主要用于Java项目的构建自动化工具。它有助于管理构建过程&#xff0c;包括编译源代码、运行测试、将编译后的代码打包成JAR文件以及管理依赖项。Maven使用项目对象模型&#xff08;POM&#xff09;文件来描述项目配置和依赖关系。 Maven通过提供标准的项目…

分布式系统中的唯一ID生成方法

通常在分布式系统中&#xff0c;有生成唯一ID的需求&#xff0c;唯一ID有多种实现方式。我们选择其中几种&#xff0c;简单阐述一下实现原理、适用场景、优缺点等信息。 目录 数据库多主复制UUID工单服务器雪花算法总结 数据库多主复制 数据库通常有自增属性&#xff0c;在单机…

解决vue启动项目报错:npm ERR! Missing script: “serve“【详细清晰版】

目录 问题描述问题分析和解决情况一解决方法情况二&#xff08;常见于vue3&#xff09;解决方法情况三解决方法 问题描述 在启动vue项目时通常在控制台输入npm run serve 但是此时出现如下报错&#xff1a; npm ERR! Missing script: "serve" npm ERR! npm ERR! T…

80% 的人都不会的 15 个 Linux 实用技巧

熟悉 Linux 系统的同学都知道&#xff0c;它高效主要体现在命令行。通过命令行&#xff0c;可以将很多简单的命令&#xff0c;通过自由的组合&#xff0c;得到非常强大的功能。 命令行也就意味着可以自动化&#xff0c;自动化会使你的工作更高效&#xff0c;释放很多手工操作&…