当前位置: 首页 > news >正文

具体的了解“gt;/dev/null 2gt;amp;1”

Linux系统中不管是crontab里面。还是平时使用的命令。常常会碰到">/dev/null 2>&1"。 比方说:在Crontab Job里面,假设不想发送邮件,那么有两种方法:
  • 一是将MAILTO="", 设置为空
[root@host etc]# cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/


# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
  • 二是将关闭某个命令的输出结果,将其重定向到/dev/null中。
1 1 * * * /sbin/ping -c 5 www.sohu.com > /dev/null 2>&1
1 2 * * * /sbin/ping -c 5 www.sohu.com > /dev/null 
则第一个crontab,即使ping失败,都不会有邮件发出。
而第二个crontab,假设ping失败。会在/var/spool/mail文件夹或/var/spool/clientmqueue文件夹下生成大量的错误输出提示邮件。


那么怎样理解">/dev/null 2>&1",能够拆开来理解:
 >        :重定向,比如 echo "Hello" > /root/1.txt
1>  stdout:表示标准输出,默认是1
2>  stderr:表示标准错误
 &        :表示等同于,2>&1,表示标准错误重定向。等同于标准输出
/dev/null :表示空设置文件,类似于Win系统中的垃圾箱

因此,“>/dev/null 2>&1”也能够写成“1>/dev/null 2>&1”
那么本文标题的语句运行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,就是不显示不论什么信息。


2>&1 :接着,标准错误输出重定向到标准输出。由于之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。


比方说: 
ping a.b.c                  # 错误信息 ping:unknown host a.b.c
ping a.b.c > /dev/null      # 错误信息同上,由于仅仅是将标准输出摒弃
ping a.b.c > /dev/null 2>&1 # 而假设这么写的话,屏幕不会显示错误信息。这事实上丢弃标准输出及错误输出
  • command > file 2>file
  • command > file 2>&1
同样点:上面两个命令都但是实现将运行command后的。标准及错误输出重定向到file文件里。


不同点: I/O效率上的差异
command 1>file 2>file  这种写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同一时候去抢占file的管道。
 
command 1>file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file仅仅被打开了一次,也仅仅使用了一个管道FD1,它包含了stdout和stderr的内容。从I/O效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,最多的时候我们会command 1>file 2>&1 这种写法, 或 "command >file 2&1"

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4916234.html

相关文章:

  • 2.C#的输入、输出与运算符、数据类型
  • Flash CS5暗藏物理引擎
  • [国嵌攻略][042][代码搬移不可少]
  • 有关谷歌Chrome OS笔记本上的Flash Player
  • android基础知识(3)
  • java异常处理
  • Jangaroo:把ActionScript编译为JavaScript
  • 入侵网游服务器手记
  • win7 32bit下安装mysql server
  • 有时候就是看不进论文-jQuery动画特效篇MySQL
  • Java之父回应苹果停止更新Java
  • CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突
  • 当项目经理是一种修炼
  • git重写历史记录
  • Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
  • CSS盒模型深入
  • HTTP那些事
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • js学习笔记
  • Nacos系列:Nacos的Java SDK使用
  • python3 使用 asyncio 代替线程
  • React-flux杂记
  • React-redux的原理以及使用
  • 成为一名优秀的Developer的书单
  • 基于Android乐音识别(2)
  • 基于web的全景—— Pannellum小试
  • 离散点最小(凸)包围边界查找
  • 聊聊hikari连接池的leakDetectionThreshold
  • 漂亮刷新控件-iOS
  • 浅谈web中前端模板引擎的使用
  • 全栈开发——Linux
  • 微服务核心架构梳理
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #在 README.md 中生成项目目录结构
  • (06)金属布线——为半导体注入生命的连接
  • (2)(2.10) LTM telemetry
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (一)kafka实战——kafka源码编译启动
  • (转)原始图像数据和PDF中的图像数据
  • .NET Micro Framework 4.2 beta 源码探析
  • .Net Winform开发笔记(一)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET委托:一个关于C#的睡前故事
  • /var/spool/postfix/maildrop 下有大量文件
  • :not(:first-child)和:not(:last-child)的用法
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [AIGC] Java 和 Kotlin 的区别
  • [AIGC] 如何建立和优化你的工作流?
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息