前言
啥是/dev
?
在 Linux 上,从驱动程序到设备的所有内容都可以作为文件进行访问。/dev/
是包含所有物理和虚拟设备的目录,例如:
/dev/sda
可能是您的主硬盘驱动器/dev/sdb
可能是您现在正在使用的笔记本驱动器的文件
这就是您在 Linux 中访问设备的方式。除了这些物理设备(如硬盘驱动器)之外,Linux还具有虚拟设备。虚拟设备是类似于物理设备的设备,但实际上仅以软件形式存在。应用程序可以从这些设备获取数据,但这些数据(而不是来自物理设备)来自操作系统本身。
啥是/dev/null
?
上面已经说到,虚拟设备是充当物理设备的设备,但实际上仅以软件形式存在。应用程序可以从这些设备获取或者写入数据,而/dev/null
,它是一种特殊的虚拟设备,用于写入而不是读取。写入/dev/null
的任何内容都会从操作系统中消失。正是由于这个原因,/dev/null
被称为 bitbucket。例如,在这里,将"Hello World"
输出重定向到/dev/null
中。如您所见,没有输出。输出“Hello World”
不存储在系统上的任何文件中。它只是消失了。也可以认为是被扔掉的意思;
为啥要有/dev/null
这个东东?
通常我们在启动一个服务或者一个软件时,这个软件都会产生大量的日志,有系统日志,启动日志,服务器日志等等,这些日志对于用户来说其实没啥用,还会占用大量的磁盘或内存空间,所以/dev/null
的最大作用就是可以将这些输出的日志内容都丢弃;
一、/dev/null 用法
1、>/dev/null 2>&1
默认情况是1,也就是等同于1>/dev/null 2>&1
。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”,不输出任何信息到终端,不显示任何信息。
2、2>/dev/null
意思就是把错误输出到“黑洞”,其实就是将打印的信息直接丢掉,不输出错误信息到终端
3、2>&1 >/dev/null
意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕,只显示错误信息
文件描述符解释
Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
0
——标准输入(stdin)1
——标准输出(stdout)2
——标准错误(stderr)
二、重定向
重定向的符号有两个:
>
: 先清空文件,然后再写入内容>>
:将内容追加到现有文件的尾部
举例:
先将内容输入到1.txt
文件
echo 'woaini' > 1.txt
然后查看内容,此时1.txt
文件内容为woaini
[root@master ~]# cat 1.txt
woaini
接下来我们追加一点字符进去
echo ' gails' >> 1.txt
再查看内容,发现有2行了, ' gails'
的内容追加到第二行
[root@master ~]# cat 1.txt
woaini
gails
最后,重新写入内容yexindong
echo 'yexindong' > 1.txt
再查看下1.txt的内容,发现已经被替换了,之前的内容也没有了
[root@master ~]# cat 1.txt
yexindong
除此之外,可以将任何其他的命令的结果写入到文件中
cat nginx.conf > 1.txt
ps -ef > 1.txt
三、终极教程
在 linux系统中,有个命令 nohup
,这个命令作用是在系统后台不挂断地运行命令,退出终端不会影响程序的运行。但是在默认情况下(非重定向时),会将日志内容输出到当前目录下一个名叫 nohup.out 的文件里面,那如果我不想要这些日志的内容怎么办,这时候就可以用到 dev/null
,命令如下:
# 丢掉所有输出
nohup java -jar app.jar > /dev/null 2>&1 &