详解Linux系统中虚拟设备文件的各种实用用法
作者:良许Linux 发布时间:2023-11-03 16:59:34
大家好,我是良许。
大家知道,在 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
文件的几种实用用法,希望对你的工作有帮助。你还知道这个特殊设备文件的其它有趣的用途吗?留言告诉我呗!
来源:https://www.cnblogs.com/yychuyu/archive/2020/07/06/13258437.html


猜你喜欢
- Ubuntu Server 14.04升级Ubuntu Server 16.041、终端下执行命令$ sudo apt-get update
- 虚拟机使用PuTTY、SSH Secure Shell Client前的配置1 仅主机模式 2 检查子网IP为192.168.15
- 1. 安装docker;参考网址:Docker入门安装教程(小白篇) linux上安装Docker(非常简单的安装方法) 
- 网络赚钱方法无穷无尽,。相信大家都玩过一些游戏,游戏你是否都被人家骗过什么装备,金钱。网赚就如游戏,有人的地方就有骗术,好多新手刚刚新手入门
- wordpress博客是很多朋友喜欢的程序,不仅仅在于它本身的好用,而且它有丰富的主题和无数的使用者在为他们写上优秀的插件,通过各类的插件更
- 新浪科技讯 4月22日下午消息,来自工信部的最新互联网产业数据显示,我国网民总数已达4.04亿,社交网站用户群达1.91亿。电子商务、网络广
- 近年来,价格战的加剧,随着我国IDC市场的大变革正在悄然发生,IDC行业正处于“清淤”阶段。国内领先的增值电信服务商阳光互联日前表示,国内I
- 微软 Bing 的出现让新一轮搜索引擎大战一触即发。Bing 提供了许多实用的新功能,Google 则始终以高质量搜索结果坚守阵地,而 Ya
- 目前很多杀毒软件都带有反广告的功能,可以屏蔽页面上出现的 Flash 广告。就拿卡巴斯基为例,它使用路径规则来过滤 Flash 内容。具体设
- 个人化搜索给传统SEO(搜索引擎优化)带来的冲击是全方位的,虽然其影响将在今后的时间内逐渐显现出来,目前过早地对其下任何结论都显得草率,但无
- 方法一: 在httpd.conf中设置对目录开启。 AllowOverride All&nb
- 问题提出公司的开发测试服务器部署在阿里云, 阿里云给出的实例一般都是只有一个分区, 20G到40G的样子, 然后再买存储挂载到其他目录.而
- 雅虎准备在硅谷圣塔克拉拉市兴建办公园区。雅虎表示,新建园区的目的是将现有办公和研发场所合并,以适应未来成长的需要。新园区占地四十八英亩,由十
- 搜索引擎快照是指搜索引擎在抓取网站时,对网页的一种缓存处理,快照都用户是非常有利的,快照可以在网站本身页面不存在或错误时也能查看,不会影响用
- 如果臧家宜不是在故弄玄虚,扰乱视听,那郭台铭的风光日子可能即将到头。在台湾,鸿海的股价已经因自家掌门人 * 被查的消息而受挫,即便爆料者已经因
- 难怪最近老中病毒,而且每次中毒时都自动打开了RealPlayer播放器,我就很奇怪,当时每注意,直到又一次中毒。原来是RealPlayer的
- 据国外媒体报道,CNNMoney网站日前评出了2009年度美国50大最佳职业,系统工程师高居榜首。CNNMoney根据薪水和未来前景两大标准
- 前面说了启用Gzip 压缩减少带宽消耗以加速网站,今天说Windows2003服务器安装及设置教程——IIS优化第二篇:使用eAcceler
- Windows2003服务器安装及设置教程——注册表篇 防DDOS洪水攻击处理reg add "HKEY_CURRENT
- 一.背景:arm linux的内核版本是3.13.0二.准备工作添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项:接下来就重新编