关于/dev/null及用途(Linux黑洞)

我们通常把Linux下的/dev/null看作"黑洞"。它非常等价于一个只写文件。所有写入它的内容都会永远丢失。而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用。

/dev/null 属于字符特殊文件,它属于空设备,是一个特殊的设备文件,它会丢弃一切写入其中的数据,写入它的内容都会永远丢失,而且没有任何可以读取的内容。所以我们一般会把/dev/null当成一个垃圾站,不要的东西丢进去。比如来清除文件中的内容。

一般标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。 这个数字代表的是标准输出。

0:表示标准输入流(stdin),

1:表示标准输出(stdout)。

2:表示标准错误输出(stderr)

2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

/dev/null 2>&1 这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.所以可以看出常用来避免shell命令或者程序等运行中有内容输出。

具体几个使用场景列举如下:

  • 清除日志文件内容
cat /dev/null > /var/log/messages
#  : > /var/log/messages   有同样的效果, 但不会产生新的进程.(因为:是内建的)
cat /dev/null > /var/log/wtmp
  • 禁止标准输出
cat $filename >/dev/null
文件内容丢失,而不会输出到标准输出.
  • 禁止标准错误
rm $badname 2>/dev/null
这样错误信息[标准错误]就被丢到太平洋去了.
  • 禁止标准输出和标准错误的输出
cat $filename 2>/dev/null >/dev/null
# 如果"$filename"不存在,将不会有任何错误信息提示.
# 如果"$filename"存在, 文件的内容不会打印到标准输出.
# 因此Therefore, 上面的代码根本不会输出任何信息.
# 当只想测试命令的退出码而不想有任何输出时非常有用。
#-----------测试命令的退出 begin ----------------------#
# ls dddd 2>/dev/null 8 
# echo $?    //输出命令退出代码:0为命令正常执行,1-255为有出错。  
#-----------测试命令的退出 end-----------#  
# cat $filename &>/dev/null 
#   也可以, 由 Baris Cicek 指出.

猜你喜欢

转载自blog.csdn.net/weixin_44388689/article/details/120705959