音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

详解Linux系统中虚拟设备文件的各种实用用法
日期:2020-07-07 09:33:43   来源:脚本之家

大家好,我是良许。

大家知道,在 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 虚拟设备文件用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    WIN服务器linux服务器FTP服务器DNS服务器其他