我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解Linux系统中虚拟设备文件的各种实用用法

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解Linux系统中虚拟设备文件的各种实用用法

大家好,我是良许。

大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此。我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢?

专业地讲,/dev/null 是一个虚拟设备文件。而对程序而言,这些虚拟设备文件则会被当成真实的文件对待。程序可以向这种数据源请求数据,所得到的数据将由操作系统提供。但是,这些数据并不是从磁盘上读取到的,而是由操作系统动态生成的。虚拟设备文件的一个典型例子就是 /dev/zero

然而,当你想向 /dev/null 写入数据时,无论你向 /dev/null 中写入什么数据,最终都会被丢弃,就像被丢入黑洞一样。

既然如此,那么 /dev/null 到底有什么用?要理解这个问题,你首先必须要对 Linux 系统或者 Unix 以及类 Unix 系统的标准输出以及标准错误输出有基本的了解。

标准输出文件与标准错误输出文件

一个命令行程序可以生成两种类型的输出:标准输出与标准错误输出。标准输出会被记录到标准输出文件 stdout ,而标准错误输出会被记录到标准错误输出文件 stderr 。

默认情况下,标准输出文件与标准错误输出文件都与你的终端窗口相关联(或者控制台)。这就意味着任何被输送到标准输出文件或标准错误输出文件的信息都会被显示在你的屏幕上。

但是,通过 Shell 中的重定向,你就可以改变这个行为。比如,你可以将标准输出重定向到一个文件中。这样,标准输出信息就不会显示在屏幕上,它将会被保存到那个文件中以便你以后查阅,或者你也可以将标准输出信息重定向到另一个物理设备上,比如一个数字 LED 或者 LCD 显示器。

一些常用的重定向方式有如下:

  • 使用 2> 你可以重定向标准错误输出信息。例如:2>/dev/null 或者 2>/home/user/error.log
  • 使用 1> 你可以重定向标准输出信息。
  • 使用 &> 你可以同时重定向标准错误输出信息与标准输出信息。

利用/dev/null来清除不必要的输出

由于存在两种类型的输出:标准输出与标准错误输出,所以 /dev/null 的第一个用途就是过滤掉其中一种类型的输出。通过下面实际的例子可以更容易地理解以上这个用途。

假如你想通过找 /sys 文件夹下文件名带 power 字符串的文件以此来找到关于电源设置的文件,你可以这么写命令:

$ grep -r power /sys/

由于 /sys 文件夹下存在很多非 root 用户无法访问的文件,这样就会造成很多 Permission denied 错误,并被输出到屏幕上。

这些错误信息会使得屏幕变得杂乱不堪,一些重要的信息都会被冲刷不见了。而由于 Permission denied 错误信息是属于标准错误输出的一部分,所以你可以将它们重定向到 /dev/null

$ grep -r power /sys/ 2>/dev/null

这样,显示出来的信息就干净清爽很多了。

有时候,我们可能不想看标准输出的内容,相反,想要看标准错误的内容,那么我们就可以将标准输出重定向到 /dev/null

$ ping baidu.com 1>/dev/null

上面的截图显示,若没有重定向输出,当数据包可以到达目标主机时,ping 指令会显示它的正常输出。而第一个命令,当网络是连通的时候屏幕什么也没显示,但是一旦它与目标机器断开连接,屏幕就只显示了错误信息。
当然了,你也可以将标准输出与标准错误输出重定向到两个不同的文件。

$ ping baidu.com 1>/dev/null 2>error.log

在这个例子中,标准输出信息就不会被显示,而错误信息将会被保存到名为 error.log 的文件中。

重定向所有输出到/dev/null

有时候,我们可能都不想看任何输出,那么有两种方法可以做到这点。

$ grep -r power /sys/ >/dev/null 2>&1

字符串 >/dev/null 代表 将标准输出重定向到 /dev/null 中 ,然后第二部分,2>&1,代表将标准错误重定向到标准输出文件中。这里你必须将标准输出文件写成 &1 ,而不是简单地写成 1 。写成 2>1 这样只会将标准输出重定向到一个名为 1 的文件中。

这里要着重注意的一点是,顺序也是很重要的。如果你将重定向的参数调换位置成以下这样:

$ grep -r power /sys/ 2>&1 >/dev/null

它就不是按你预期的那样执行了。那是因为一旦 2>&1 先被解释器解释了,标准错误输出就会被重定向到默认的标准输出文件 stdout 并且显示在屏幕上。而接下来,当标准输出被重定向到 /dev/null 时,标准输出信息就会被清除。最终的结果就是你将会看到错误信息显示在屏幕上。如果你忘记了正确的顺序,还有一个更简单:

$ grep -r power /sys/ &>/dev/null

在这个例子中,&>/dev/null 就等效于 重定向标准输出与标准错误输出到 /dev/null

其他将输出重定向到/dev/null实用例子

假如你想知道你的磁盘读取序列数据的速度到底有多快,你可以使用 dd 命令来做测试。但是 dd 指令要么就是输出到标准输出文件,要么就是指定输出到一个文件中。为了排除写入数据对结果的影响,我们使用参数 of=/dev/null ,这样就可以使 dd 输出写入到这个虚拟文件中,而不是真正的磁盘里。这里你甚至都不需要用 Shell 的重定向就可以做到这点。

对于下面这条命令,参数 if= 指定用于输入的文件名;参数 of= 指定用于输出的文件名,即指定将输出写入到哪里。

以下这样的测试并不是十分精确,但也足够说明问题了。

$ dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct

以上是一个实用场景。下面再介绍一个场景。

在某些情况下,你可能会想知道你从某一个服务器上下载东西的速度有多快。但是你又不想向磁盘写入不必要的东西,那么这个时候,你就可以把内容写入到 /dev/null 里。

$ wget -O /dev/null http://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso

结论

本文介绍几种 /dev/null 文件的几种实用用法,希望对你的工作有帮助。你还知道这个特殊设备文件的其它有趣的用途吗?留言告诉我呗!

到此这篇关于Linux系统中虚拟设备文件的各种实用用法的文章就介绍到这了,更多相关linux 虚拟设备文件用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解Linux系统中虚拟设备文件的各种实用用法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解Linux系统中虚拟设备文件的各种实用用法

大家好,我是良许。 大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此。我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢? 专业地讲,/dev/null 是一个虚拟设备文件。而对程序而言,这些虚拟设
2022-06-03

XP系统无法停止通用卷设备的多种实用解决方法

第一种方法: 一个国外的十分小巧实用的软件,只有191KB,叫unlocker,十分好用! 这个软件能解锁USB连接设备!就能实现100%安全删除USB连接了! 第二种方法: 我们只需要把系统的预览功能关掉,这种问题就不会再出现了,操作办法
2023-06-02

虚拟机中使用linux系启用文件共享之后的文件存在的位置方法

一、使用共享文件夹传输数据 在自己建立的win7系统中的共享文件夹中存放一些文件,然后在linux系统中访问,其中Linux中的访问路径为:/mnt/hgfs/自己建立的文件夹名称 比如我在win7上建立的共享文件夹名称为shareFold
2022-06-04

详解Linux 中获取硬盘分区或文件系统的 UUID 的七种方法

作为一个 linux 系统管理员,你应该知道如何去查看分区的 UUID 或文件系统的 UUID。因为现在大多数的 Linux 系统都使用 UUID 挂载分区。你可以在 /etc/fstab 文件中可以验证。 有许多可用的实用程序可以查看 U
2022-06-04

xp系统视频文件无法删的三种实用解决方法

在xp系统中,有一个很实用的视频功能那就是视频文件预览功能,但就是因为这个功能的存在导致了我们删除视频文件的时候常常出现无法删除的提示,瞬android间让我们瞪大了双眼,该怎么办呢?让我们一起来探索下吧。 压缩软件删除法 在这里我们可以借
2023-06-02

在Linux系统中使用Vim读写远程文件的命令详解

设定vim的工作方式(临时):set (模式信息):set nu — 显示行号:set nonu — 取消行号:set mouse=a — 设定鼠标可用:set cursorline — 设定显示行线:help — 查看帮助 今天我们讨论一
2022-06-03

编程热搜

目录