[通俗易懂: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
执行
在这里插入图片描述


天道酬勤,自强不息

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

葡萄酒带领酒类新风尚,云仓酒庄培训开启专业品鉴新篇章

随着人们生活品质的提升和多元文化的交融&#xff0c;酒类消费在中国正经历着前所未见的变革。葡萄酒以其与众不同的魅力&#xff0c;正逐渐带领着酒类新风尚&#xff0c;成为越来越多消费者餐桌上的新宠。与此同时&#xff0c;白酒、烈酒及精酿啤酒等酒类也以其各自的特色和风…

ELK企业级日志分析系统以及多种部署

目录 ELK简介 ELK简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ●ElasticSearch&#xff1a;是基于Lucene&#xff08;一个全文检索引…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

C++ | Leetcode C++题解之第23题合并K个升序链表

题目: 题解&#xff1a; class Solution {// 21. 合并两个有序链表ListNode *mergeTwoLists(ListNode *list1, ListNode *list2) {auto dummy new ListNode(); // 用哨兵节点简化代码逻辑auto cur dummy; // cur 指向新链表的末尾while (list1 && list2) {if (list1…

python的算术运算符

python常用算术运算符代码如下&#xff1a; #算术运算符操作 x 10 y 20 z 30 #加法运算 a x y print("a的值为&#xff1a;", a) #减法运算 a x - y print("a的值为&#xff1a;", a) #乘法运算 a x*y print("a的值为&#xff1a;", a) …

设计模式面试题

概述 设计模式分类 创建型模式 用于描述“怎样创建对象”&#xff0c;主要特点是“将对象的创建与使用分离”。使用者不需要官族对象创建的细节。结构型模式 用于描述如何将类或对象按照某种布局组成更大的结构。行为型模式 用于描述类或对象之间怎样相互协作共同完成单个对象…

vue3 动态class和style

1、需求&#xff1a;一个删除的弹窗&#xff0c;点击会提示“是否需要删除XXXXX&#xff08;name&#xff09;”&#xff0c;但是name不固定&#xff0c;所以删除弹窗的width不能写死。&#xff08;如果不设置width&#xff0c;本项目的弹窗会自适应变得特别长&#xff09;

JavaScript之Proxy详解

文章的更新路线&#xff1a;JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题&#xff08;HTML基础知识和CSS基础知识已经更新完毕&#xff09; 正文 Proxy是JavaScript中的一个强大而灵活…

【我的代码生成器】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。

【计算机考研】跨考408直接看王道,不看教材可行吗?

一般备考都不会看教材的&#xff01;如果时间特别充足可以看一下教材 王道的四件套无疑是大多数同学的首选。相比其他课程来说&#xff0c;也是属于市面上最好的408课程了。 从今年的难度来看选择题部分和计网&#xff0c;比起往年来看是有很多偏题&#xff0c;大题除了计网的…

zabbix 使用 dataease 做数据大屏

1、环境介绍 操作系统&#xff1a;龙蜥os 7.9 软件&#xff1a;dataease v1.18.18 zabbix&#xff1a; 6.0 2、软件下载 https://community.fit2cloud.com/#/products/dataease/downloads 3、将软件包上传到服务器并解压缩 tar -xvf dataease-v1.18.18-offline.tar.gz4、修改…

【Java框架】Mybatis教程(一)——环境搭建及基本CRUD操作

目录 持久化与ORMORM&#xff08;Object Relational Mapping&#xff09;ORM解决方案包含下面四个部分 MyBatis简介特点MyBatis框架优缺点优点缺点 搭建MyBatis开发环境步骤1. 创建Maven工程&#xff0c;导入MyBatis依赖的组件2. 编写MyBatis核心配置文件(mybatis-config.xml)示…

ubuntu22安装snipaste

Ubuntu 22.04 一、Snipaste 介绍和下载 Snipaste 官网下载链接: Snipaste Downloads 二、安装并使用 Snipaste # 1、进入Snipaste-2.8.9-Beta-x86_64.AppImage 目录&#xff08;根据自己下载目录&#xff09; cd /home/jack/Downloads/softwares/AppImage# 2、Snipaste-2.8.9-…

Docker镜像,什么是Docker镜像,Docker基本常用命令

docker镜像 1.1什么是镜像&#xff0c;镜像基础 1.1.1 镜像的简介 镜像是一种轻量级&#xff0c;可执行的独立软件包&#xff0c;也可以说是一个精简的操作系统。镜像中包含应用软件及应用软件的运行环境&#xff0c;具体来说镜像包含运行某个软件所需的所有内容&#xff0c;…

html--烟花3

html <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Canvas烟花粒子</title> <meta name"keywords" content"canvas烟花"/> <meta name"description" content"can…

代码学习记录42---动态规划

随想录日记part42 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.14 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;最长递增子序列 &#xff1b;最长连续递增序列 &#xff1b;最长重复子数组 ;最长公…

mac基础操作、快捷、软件快捷方式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 mac基础操作、快捷、软件快捷方式 前言mac快捷操作快捷查找切换页面页面缩略访达和命令端切换创建文件夹创建文件删除文件/文件夹获取文件的路径移动文件或文件夹复制文件命令端常用命令 前言 主要是方…

B端:请说出你的设计依据,咋办?来吧,尼尔森法则告诉他。

在B端界面设计中&#xff0c;客户经常会问这样设计的依据是什么&#xff0c;许多设计师回答不上来&#xff0c;或者是答非所问&#xff0c;流于表面&#xff0c;这是时候就需要请出来尼尔森用户体验设计的十大法则&#xff0c;那么问题来了&#xff0c;如何让这10大法则和界面相…

Python学习笔记23 - 目录操作

os模块操作目录相关函数 os.path模块操作目录相关函数 案例1 —— 列出指定目录下的所有.py文件 案例2 —— walk()

论文笔记:NEFTune: Noisy Embeddings Improve Instruction Finetuning

iclr 2024 reviewer 评分 5666 1 论文思路 论文的原理很简单&#xff1a;在finetune过程的词向量中引入一些均匀分布的噪声即可明显地提升模型的表现 2 方法评估