What is /dev/null and How to Use It

简介: What is /dev/null and How to Use It

What is /dev/null and How to Use It

What is /dev/null and How to Use It (linuxhint.com)

前置知识

了解/dev/null需要先了解stdin、stdout等Linux输入输出流的概念:

How to Use the Stdin, Stderr, and Stdout Streams in Bash (linuxhint.com)

这里简单概括一下,默认情况下我们执行一个shell程序都会获得两种输出流,标准输出(标准)错误输出,分别叫做 stdout 以及 stderr

例如以下命令将打印出双引号内的字符串。在这里输出结果存储在标准输出中:


xander@xander:~$ echo "hello world"
hello world

下一个命令将向我们显示先前运行的命令的退出状态。


xander@xander:~$ echo $?
0

如果上一条指令存在错误输出,则结果是一个非0的值(不一定是127)


xander@xander:~$ echo $?
127

如果是正确内容,命令的返回结果会是0:


xander@xander:~$ lll
Command 'lll' not found, did you mean:
  command 'lld' from deb lld (1:14.0-55~exp2)
  command 'dll' from deb brickos (0.9.0.dfsg-12.2)
  command 'lli' from deb llvm-runtime (1:14.0-55~exp2)
  command 'llt' from deb storebackup (3.2.1-2)
  command 'llc' from deb llvm (1:14.0-55~exp2)
Try: sudo apt install <deb name>
xander@xander:~$ echo $?
127
xander@xander:~$ echo "hello world"
xander@xander:~$ echo $?
0

文件描述符

在Linux当中存在文件描述符,所有 sdtout(=1) 和 stderr(=2) 都对应了特殊的文件描述符,前面的实验中我们没有指定文档描述符。如果未指定描述符,bash 将默认使用 stdout。也就是常说的标准输出。

标准输出


echo “Hello World” > log.txt

输出结果如下


xander@xander:~$ echo “Hello World” > log.txt
xander@xander:~$ cat log.txt 
“Hello World”

错误输出


asdasdasds 2> error.txt

输出结果如下


xander@xander:~$ asdasdasds 2> error.txt
xander@xander:~$ cat error.txt 
asdasdasds: command not found

重定向输出流到/dev/null

现在我们准备学习如何使用 /dev/null。首先让我们看看如何过滤正常输出和错误。在以下命令中,grep 将尝试在“/sys”目录中搜索字符串(在本例中为 hello)。

image.png

/sys/通常只有具备root权限的角色才能访问,使用一般用户会出现无权限访问的页面,现在可以通过重定向输出流到 /dev/null,会发现所有grep错误流信息全部被丢弃。


xander@xander:~$ grep -r hello /sys/ 2> /dev/null
xander@xander:~$

ping google.com

有时候我们只想看错误的输出结果,可以把标准输出丢弃到/dev/null


ping google.com 1> /dev/null


xander@xander:~$ ping google.com
PING google.com (142.251.42.238) 56(84) bytes of data.
--- google.com ping statistics ---
210 packets transmitted, 0 received, 100% packet loss, time 214004ms

重定向所有流到/dev/null

在某些情况下,输出可能根本没有用,使用重定向,我们可以将所有输出转储到空白中。


grep -r hello /sys/ > /dev/null 2>&1

上面命令所做的事情大致如下:

  • 标准输出丢弃到/dev/null
  • 标准错误输出重定向到标准输出
  • 最终标准输出和错误输出一起被丢弃到/dev/null

当然如果觉得这种2>&1写法抽象和难以理解,也可以用下面的命令代替,这也是更为通用的写法:


grep -r hello /sys/ &> /dev/null

执行这一串命令之后我们难免会有疑问,输出都丢弃了,如何判断命令是否执行成功? 这里就要使用之前介绍的一个技巧,那就是ehco $?


echo $?
2

在执行命令之后执行ehco $?,如果结果是0表示命令执行是正确的,如果类似值为 2则是该命令生成了错误结果。我们总是可以通过$? 验证命令是否执行正确。

其他案例

dd和/dev/null

使用 dd,我们可以测试磁盘的顺序读取速度。当然这不是一个非常准确的测量方式,但是对于快速测试它非常有用。


dd if=<big_file> of=/dev/null status=progress bs=1M iflag=direct

替换为某个比较大的文件的绝对路径

image.png

测试下载速度

相对应的也可以用来测试下载速度。


wget -O /dev/null <big_file_link>

image.png

总结

总是/dev/null是一个非常有用的空间,在很多开源组件的启动脚本中很容易见到这些命令的使用场景。


相关文章
|
6月前
|
Unix Linux Shell
linux中nohup和/dev/null,21
linux中nohup和/dev/null,21
122 0
|
6月前
|
Linux Windows
Linux中/dev/null和/dev/zero的作用
Linux中/dev/null和/dev/zero的作用
104 2
|
Linux
Linux:nohup、&、 2>&1、/dev/null
Linux:nohup、&、 2>&1、/dev/null
1041 0
|
3月前
|
API 计算机视觉
Using ‘value‘ pointer is unsafe and deprecated. Use NULL as value pointer. To fetch trackbar value s
本文讨论了OpenCV中使用`createTrackbar`时遇到的"Using ‘value’ pointer is unsafe and deprecated"警告,并提供了通过设置空指针或使用回调函数来解决这个问题的方法。
Using ‘value‘ pointer is unsafe and deprecated. Use NULL as value pointer. To fetch trackbar value s
|
4月前
|
Unix Linux Shell
nohup 与 >/dev/null 与 2>&1 作用与区别
nohup 与 >/dev/null 与 2>&1 作用与区别
181 0
|
Linux
百度搜索:蓝易云【Linux系统的 /dev/null 是什么?有什么隐藏的作用?】
综上所述,`/dev/null`在Linux系统中起到丢弃输入并模拟黑洞的作用。通过将输出重定向到 `/dev/null`,可以隐藏输出、屏蔽错误信息或作为空输出的占位符。它是一种非常有用的工具,特别是在自动化脚本和命令行操作中。
109 2
|
6月前
|
安全 Unix Linux
探秘Linux特殊设备文件:(/dev/null,/dev/zero,/dev/random,/dev/urandom等)
探秘Linux特殊设备文件:(/dev/null,/dev/zero,/dev/random,/dev/urandom等)
556 1
|
Shell Linux
Shell /dev/null 文件的含义
Shell /dev/null 文件的含义
81 0
|
存储 Linux
Linux 中的 /dev/null 是什么?有什么隐藏的作用?
Linux 中的 /dev/null 是什么?有什么隐藏的作用?
516 0