介绍
/dev/null 是一个特殊的设备文件,该文件接收的所有数据都会被丢弃(不显示、不打印、不记录),类似于黑洞。
场景
场景1,执行命令有输出信息(正确和错误),且直接通过输出内容判断执行命令的结果是成功还是失败。
场景2,对于命令的输出信息,不希望打印在终端。
原理
将所执行命令的输出信息重定向到指定位置(文件)。若需记录则指定文件,若不需要记录则使用空设备文件【/dev/null】。
重定向
> :将左边数据写入到右边文件,每次写入都会清空右边文件。
>> :将左边数据写入到右边文件,每次写入都在文件中追加内容,不会清空原来内容。
1 > &2 :将命令输出的正常信息写入到第2输出通道。
2> &1 : 将命令输出的错误信息写入到第1输出通道 。
案例:正确和错误信息都写入到all.log文件中,终端屏幕不再显示打印
文件描述符
文件描述符是与文件输入、输出关联的整数值。常见的三种描述符为,0表示标准输入(stidin),从键盘获取的输入(stdout);1表示标准输出(stderr),输出到终端屏幕;2表示标准错误,输出到终端屏幕。
示例:
1、标准输出:指命令执行后正常的打印,也可理解为执行命令成功后的打印输出
2、标准错误:指命令执行后错误的打印,也可理解为执行命令失败的打印输出
案例用法
案例1,将执行命令的标准错误输出(错误输出)进行丢弃不再显示,简言之,命令输出中报错信息不显示输出,正常信息会显示
#command 表示执行的命令
command 2> /dev/null
案例2, 将执行命令的标准输出(正确输出)进行丢弃不再显示,简言之,命令输出中报错信息会显示,正常信息不会显示
#command 表示执行的命令
command > /dev/null
案例3,将执行命令的输出无论是否报错都丢弃,输出的所有信息都不显示
#command 表示执行的命令
command &> /dev/null
案例4、将执行命令的输出信息中,错误信息和正常信息分别写入到不同的文件
find /home/test_u1/ 1>filelist.log 2>erro.log
命令结果标准输出判断
案例:
nc -zvw3 172.16.89.22 999 &> /dev/null
#获取丢弃后的返回值,标准状态结果:0,执行成功,1,失败
result=$?
#直接执行命令,会有错误输出打印
[test_u1@localhost ~]$ nc -zvw3 172.16.89.22 999
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection timed out.
#将命令的输出都丢弃后,获取结果
[test_u1@localhost ~]$ nc -zvw3 172.16.89.22 999 &> /dev/null
#获取丢弃后的返回值,标准状态结果:0,执行成功,1,失败
[test_u1@localhost ~]$ echo $?
1
上述 $? 获取到的值就可以作为命令执行的结果,判断是否执行成功。
1表示失败;0表示成功。