博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详细理解“>/dev/null 2>&1”
阅读量:4294 次
发布时间:2019-05-27

本文共 1440 字,大约阅读时间需要 4 分钟。

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.linuxidc.com > /dev/null 2>&1
1 2 * * * /sbin/ping -c 5 www.linuxidc.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 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

比如说:

  • 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"

转载地址:http://bfbws.baihongyu.com/

你可能感兴趣的文章
史上最全量化资源整理
查看>>
vnpy2.0安装后报错ModuleNotFoundError: No module named 'vnpy.api.ctp.vnctpmd'
查看>>
VNPY2.0火币期货交易接口配置使用
查看>>
win10和ubuntu18双系统时间同步(20190604亲测可行)
查看>>
重启小狼毫输入法,rime输入法重启
查看>>
命令行或终端ImportError:No module named(pycharm运行没问题)
查看>>
量化策略回测01双均线
查看>>
量化策略回测ATRRSI
查看>>
量化干货:量化交易系统设计的六大细节
查看>>
量化策略回测tdma
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>