转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50514018

1 /dev/null文件

1.1 维基百科关于/dev/null说明

In some operating systems, the null device is a device file that discards all data written to it but reports that the write operation succeeded.

The null device is typically used for disposing of unwanted output streams of a process, or as a convenient empty file for input streams. This is usually done by redirection.

The /dev/null device is a special file, not a directory, so one cannot move a whole file or directory into it with the Unix mv command. The rm command is the proper way to delete files in Unix.

以上引自维基百科https://en.wikipedia.org/w/index.php?title=Null_device&redirect=no

简单翻译:

在许多操作系统中, /dev/null是一个空设备,是一个抛弃向该文件中写的所有数据并反馈写操作成功的设备文件。

/dev/null通常用来处理进程中那些不想要的输出流,或者作为一个方便的空文件给输入流。这个通过用来做重定向。

/dev/null设备是一个特殊的文件,而不是一个路径。因此不能通过mv命令来移动一个文件或路径进入这个设备文件,rm命令是Unix系统中删除文件适当的方法。

以上为本人拙劣的翻译,凑合看

1.2 /dev/null用法

既然定义中说了/dev/null是一个接收垃圾的文件(比喻),那完美要如何使用呢?

将之前还需要普及下Linux重定向和shell相关知识。

比如,我经常会执行这个命令:

nohup ./program >/dev/null 2>&1 &

上面命令中的>符号就是重定向符号。那么那个数字1和2是个啥玩意?

1.2.1 聊聊数字

在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0、1和2。所以这里2>&1 的意思就是将标准错误也输出到标准输出当中。

  1. 数字0表示标准输入-stdin
  2. 数字1表示标准输出-stdout
  3. 数字2表示标准错误-stderr

1.2.2 聊聊符号&

nohup ./program >/dev/null 2>&1 &

命令中有前后两个&,后面一个好理解,表示后台运行;前面一个可能理解困难一点,通过下面事例说明:

// stdout和stderr都直接送往文件a,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。
nohup ./program >a 2>a &// stdout直接送往文件a,stderr是继承了FD1的管道之后,再被送往文件a,a文件只被打开一遍,就是FD1将其打开,效率更高
nohup ./program >a 2>&1 &

所以第一个&符号表示标准错误共用了标准输出的管道,提高IO效率。

1.2.3 回到黑洞/dev/null

nohup ./program >/dev/null 2>&1 &

上述命令就是表示标准输出和错误都不要,丢进黑洞,让他消失的无影无踪。

1.3 /dev/null测试

1.3.1 原始测试

有一个shell脚本如下,其中t会提示命令不存在,date输出当前日期:
test.sh

t
date

执行./test.sh的结果

[dddd@e100069205247.zmf /alidata/www/wwwroot/apps/test]
$./test.sh
./test.sh: line 1: t: command not found
2016年 01月 13日 星期三 23:23:40 CST

错误提示输到标准输出。

1.3.2 标准输出到1.log

[dddd@e100069205247.zmf /alidata/www/wwwroot/apps/test]
$./test.sh >1.log
./test.sh: line 1: t: command not found

这时终端只输出了错误提示,标准输出重新定向到了1.log。

[dddd@e100069205247.zmf /alidata/www/wwwroot/apps/test]
$ls
1.log  test.sh[dddd@e100069205247.zmf /alidata/www/wwwroot/apps/test]
$cat 1.log
2016年 01月 13日 星期三 23:33:52 CST

1.3.3 标准输出和错误都输入到1.log

[dddd@e100069205247.zmf /alidata/www/wwwroot/apps/test]
$./test.sh >1.log 2>&1

这时终端啥都没有,标准输出和错误都重新定向到了1.log。

[dddd@e100069205247.zmf /alidata/www/wwwroot/apps/test]
$cat 1.log
./test.sh: line 1: t: command not found
2016年 01月 13日 星期三 23:42:18 CST

2 /dev/zero文件

介绍参考文章《Linux中的特殊文件-/dev/zero》

3 后记

到这里相信大家已经对重定向有了一个新的了解,以后碰到这方面的问题,应该可以不用再去百度了。欢迎大家拍砖。

Linux中的黑洞(black hole)-/dev/null相关推荐

  1. linux清空日志到黑洞,Linux中的黑洞(black hole)-/dev/null

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50514018 1 /dev/null文件 1.1 维基百科关于/dev/null说明 ...

  2. 探秘Linux特殊设备文件:(/dev/null,/dev/zero,/dev/random,/dev/urandom等)

    目录标题 第一章:设备文件简介(Introduction to Device Files) 1.1 设备文件概述(Overview of Device Files) 1.2 设备文件类型(Types ...

  3. linux主设备号作用是什么,linux 主设备号为1 以及/dev/null的介绍

    介绍个特殊的字符设备,主设备号为1的设备 1 char Memory devices 1 = /dev/mem Physical memory access 2 = /dev/kmem Kernel ...

  4. linux gt txt内容为空,2gt;/dev/null和gt;/dev/null 2gt;amp;1和2gt;amp;1gt;/dev/null的区别...

    一.区别: 2>/dev/null 意思就是把错误输出到"黑洞" >/dev/null 2>&1 默认情况是1,也就是等同于1>/dev/null ...

  5. Linux 输入输出重定向 2>/dev/null和>/dev/null 2>1和2>1>/dev/nul

    From:https://www.cnblogs.com/520playboy/p/6275022.html 2>/dev/null  和  >/dev/null 2>&1  ...

  6. /dev/null 21 详解

    原文出处:http://blog.csdn.net/kaiwii/article/details/7308729 把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所 ...

  7. /dev/null 、/dev/zero、/dev/random、/dev/urandom

    Linux中的虚拟设备/dev/null./dev/zero./dev/random和/dev/urandom /dev/null 利用/dev/null来清除不必要的输出 把/dev/null看作& ...

  8. nohup sh xxx.sh /dev/null

    nohup sh xxx.sh &>/dev/null & 或者其它类似写法 nohup ./xxx [args] &>/dev/null & 这个命令的作 ...

  9. 深入解析Linux中的fork函数

    1.定义 #include <unistd.h> #include<sys/types.h> pid_t fork( void ); pid_t 是一个宏定义,其实质是int, ...

最新文章

  1. 脑机接口技术重大突破!首次帮助瘫痪男子恢复运动和触觉
  2. 20172305 2017-2018-2 《程序设计与数据结构》实验三报告
  3. Android.mk文件编写
  4. PCM - partner channel management 的数据库表介绍
  5. 接力,智能指针也麻烦
  6. Articles for objccn.io. objc.io的完整、准确、优雅的中文翻译版本 http://objccn.io/
  7. xml getelementsbytagname php,用PHP编写和读取XML的几种方式
  8. 双域隔离技术何以助力物联网安全? | 人物志
  9. Java求1到任意一个数的阶乘和
  10. python输出文本和值_Python有没有函数打印当前对象的所有属性和值?_others_酷徒编程知识库...
  11. Linux内存管理 (3)内核内存的布局图
  12. 关于毕业论文格式修改若干问题
  13. mysql 触发器 instead of_AFTER触发器与INSTEAD OF触发器
  14. 解决C:\Users\Admin\AppData\Roaming\npm\nodemon.ps1
  15. 15.2,opencv绘制人脸识别框
  16. 离线语音交互技术路线之语音合成(TTS)篇
  17. Easy Deep Learning——卷积层
  18. HTML把cmyk转换为RGB,CMYK在线转换成pantone色卡号,cmyk转换对应潘通色号
  19. 百度地图2.0离线版的制作
  20. 投资学实务 期货日志及实践总结

热门文章

  1. Matlab基于AIS和雷达的多传感器航迹融合
  2. 一行python代码画粑粑_新学python和pandas,写了一堆屎码,我自己都要吐了
  3. 广西壮族自治区14个地级市行政区划 (2023)
  4. Android高工面试:用Glide加载Gif导致的卡顿,说一下你的优化思路
  5. c语言给定n个矩形,矩形的并
  6. 微信小程序text样式
  7. 星樾寝具系统问题描述与需求分析分享
  8. DMotion - 基于DOTS的动画框架和状态机
  9. 宝宝出生,为中国的13亿再添一丁
  10. 油漆烘烤消泡剂死缠烂打的泡沫终于放手了