关于devnull及⽤途(Linux⿊洞)
我们通常把Linux下的/dev/null看作"⿊洞"。它⾮常等价于⼀个只写⽂件。所有写⼊它的内容都会永远丢失。⽽尝试从它那⼉读取内容则什么也读不到. 然⽽, /dev /null对命令⾏和脚本都⾮常的有⽤。
/dev/null 属于字符特殊⽂件,它属于空设备,是⼀个特殊的设备⽂件,它会丢弃⼀切写⼊其中的数据,写⼊它的内容都会永远丢失,⽽且没有任何可以读取的内容。所以我们⼀般会把/dev/null当成⼀个垃圾站,不要的东西丢进去。⽐如来清除⽂件中的内容。
linux重定向
⼀般标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。 这个数字代表的是标准输出。
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$badname2>/dev/null
这样错误信息[标准错误]就被丢到太平洋去了.
禁⽌标准输出和标准错误的输出
cat$filename2>/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 指出.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。