文章482
标签257
分类63

Linux中的/dev/null

Linux中存在一个特殊的设备文件/dev/null,又被称为Bit Bucket;

本文讲述了/dev/null的作用和使用场景;


Linux中的/dev/null

为什么/dev/null被称为Bit Bucket

早期的计算机使用打孔卡来存储数据和代码;当这些打孔卡被使用过后,就被收集在了一个桶中;

久而久之,Bit Bucket就代表了那些存放无用二进制数据的“代言人”。

/dev/null的其他名称是:black hole, null route, punch bucket, null device,或者null


/dev/null文件介绍

/dev/null文件是在boot启动时才生成的伪设备文件(pseudo-device file);它没有大小(0个字节),在磁盘上占用0个块,并且所有用户对该文件具有读/写权限;并且该文件和上次系统重新启动具有相同的日期和时间;它是一个特殊的文件,称为字符设备文件(character device file),使得/dev/null文件可以像一个无缓冲的设备(空设备)一样工作,并且可以接受数据流;

当你访问设备文件时,需要与驱动程序进行通信;对于/dev/null而言,它充当一个具有特定目的驱动程序的伪设备:丢弃写入的所有内容,并且在读取时仅返回EOF字符;


/dev/null使用场景

抑制输出流显示

Linux中可以使用>进行数据流重定向;

我们可以将程序的标准输出流直接输入至/dev/null设备,从而避免了在终端显示;

例如:

$ stat /etc/passwd 2> /dev/null

会将错误流全部丢弃;


使用/dev/null写入EOF

/dev/null的另一个常见用法是提供一个blank或null input,即EOF字符。

对于许多程序需要EOF字符才能继续。例如,mailx允许从命令行发送电子邮件。在发送时,可以一直输入,直到接收到EOF字符为止(通过按CTRL + D发送该字符);

如果想要发送空白电子邮件,则不得不进入交互模式并按CTRL + D表示没有任何输入;

但是如果以脚本或其他方式使用,则无法实现;

作为一种解决方法,我们可以将/dev/null输出重定向到mailx命令中,以执行发送空白邮件的操作:

$ mailx -s "Just Another Email" user@github.com < /dev/null
 Null message body; hope that's ok

使用/dev/null清空文件

/dev/null文件的另一个常用用法是清空文件的内容;

如果使用>重定向操作符将/dev/null重定向到文件中,它将直接删除该文件的全部内容!

例如:

$ cat scp.log
 Changing to backup directory…
 Sending SCP request to download fw-backup-2019_11_10…
 fw-backup-2019_11_10-03_03_27-2.0.32.zip      100%  536MB   2.8MB/s   03:14    
$ 
$ cat /dev/null > scp.log
$ 
$ ls -l scp.log
-rw-r--r--. 1 savona savona 0 Nov 11 21:32 scp.log
$ cat scp.log 
$ 

或者,也可以使用cp命令复制/dev/null中的内容至文件中;

如下所示:

$ cat scp.log 
 Changing to backup directory…
 Sending SCP request to download fw-backup-2019_11_10…
 fw-backup-2019_11_10-03_03_27-2.0.32.zip      100%  536MB   2.8MB/s   03:14
$ 
$ cp /dev/null scp.log 
$ 
$ cat scp.log 
$ ls -l scp.log 
-rw-r--r--. 1 savona savona 0 Nov 11 21:34 scp.log
$ 

附录

文章翻译自:



本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/2021/04/17/Linux中的-dev-null/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可