详细理解“>/dev/null 2>&1”
来源:互联网 发布:淘宝开通淘金币抵扣 编辑:程序博客网 时间:2024/05/29 07:27
Linux系统中无论是crontab里面,还是平时使用的命令,经常会碰到">/dev/null 2>&1"。比如说:在Crontab Job里面,如果不想发送邮件,那么有两种方法:
- 一是将MAILTO="", 设置为空
[root@host etc]# cat crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=""HOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly
- 二是将关闭某个命令的输出结果,将其重定向到/dev/null中。
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 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
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"
5 0
- 详细理解“>/dev/null 2>&1”
- 详细理解“>/dev/null 2>&1”
- 理解Shell:>/dev/null 2>&1
- >/dev/null 2>&1的理解
- 如何理解">/dev/null 2>&1"
- 1>/dev/null 与 2>/dev/null
- 2>/dev/null;1>/dev/null
- /dev/null 2>&1
- >/dev/null 2>&1
- /dev/null 2>&1 &
- >/dev/null 2>&1
- >/dev/null 2>&1
- >/dev/null 2>&1
- >/dev/null 2>&1
- /dev/null 2>&1
- /dev/null 2>&1
- /dev/null 2>&1
- >/dev/null 2>&1
- HttpClient 和 HtmlParser 实现简易爬虫
- iOS中UITextField return键隐藏键盘
- 最近做保险公司项目
- 关于Hibernate的createSQLQuery问题
- BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t
- 详细理解“>/dev/null 2>&1”
- 随笔(2014.7)
- 【优化】网站分析需要关注的四个要点
- 推荐!国外程序员整理的机器学习资源大全
- android源码中ccache使用及原理简介
- 基础知识--pcre
- mfc孙鑫第十六讲线程同步
- 关于如何轻松地卖出自己的教师资源在线
- 数据结构 线性表