linux /dev/null 的用法详解

发布时间:2022-07-05 19:11:46 作者:yexindonglai@163.com 阅读(5619)

前言

啥是/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文件

  1. echo 'woaini' > 1.txt

然后查看内容,此时1.txt文件内容为woaini

  1. [root@master ~]# cat 1.txt
  2. woaini

接下来我们追加一点字符进去

  1. echo ' gails' >> 1.txt

再查看内容,发现有2行了, ' gails'的内容追加到第二行

  1. [root@master ~]# cat 1.txt
  2. woaini
  3. gails

最后,重新写入内容yexindong

  1. echo 'yexindong' > 1.txt

再查看下1.txt的内容,发现已经被替换了,之前的内容也没有了

  1. [root@master ~]# cat 1.txt
  2. yexindong

除此之外,可以将任何其他的命令的结果写入到文件中

  1. cat nginx.conf > 1.txt
  2. ps -ef > 1.txt

三、终极教程

在 linux系统中,有个命令 nohup ,这个命令作用是在系统后台不挂断地运行命令,退出终端不会影响程序的运行。但是在默认情况下(非重定向时),会将日志内容输出到当前目录下一个名叫 nohup.out 的文件里面,那如果我不想要这些日志的内容怎么办,这时候就可以用到 dev/null,命令如下:

  1. # 丢掉所有输出
  2. nohup java -jar app.jar > /dev/null 2>&1 &

关键字linux