/dev/null文件的作用以及使用方法

关于/dev/null,以及如何使用它

今天在看MIT的一个课程时,老师给的程序实例中有一个地方没弄明白:

#!/bin/bash

echo "Starting program at $(date)" # Date will be substituted

echo "Running program $0 with $# arguments with pid $$"

for file in "$@"; do
    grep foobar "$file" > /dev/null 2> /dev/null
    # When pattern is not found, grep has exit status 1
    # We redirect STDOUT and STDERR to a null register since we do not care about them
    if [[ $? -ne 0 ]]; then
        echo "File $file does not have any foobar, adding one"
        echo "# foobar" >> "$file"
    fi
done

其中的 grep foobar "$file" > /dev/null 2> /dev/null我着实不能理解,然后进行了相关调查,在What is /dev/null and How to Use It这里找到了答案。这篇笔记仅作为我个人记录,防止以后忘记。

Liunx操作系统能自己生成一些虚拟文件以供运行中的程序读取数据,/dev/null就是这样一个文件,但它的特殊之处在于它不是用来读的而是用来写的。无论往这个文件里写什么,最终都会被清理。

我们知道Liunx系统中的数据可以视为stdin,stdout,stderr流。默认情况下,cmd有两个返回值,分别是命令的output和运行状态erroe。output会进入stdout流,error会进入stderr流。一旦程序运行成功,error=0;否则都是运行出现异常

什么是文件描述符(the file descriptor)

在 UNIX 生态系统中,这些是分配给文件的整数值。stdout(文件描述符 = 1)和 stderr(文件描述符 = 2)都有一个特定的文件描述符。使用文件描述符,我们可以把stdout和stderr重定向到其它文件

我们知道 >重定向符,往往我的使用方法是

echo "Hello World" > log.txt

其实这是因为默认情况下,会重定向的是stdout。
如果我们想知道命令运行的状态,可以像下面这样使用

CMD 2> error.txt

那为什么要使用/dev/null呢?

有一些命令在使用的时候,如果报错,会有大量的报错信息,比如 grep
作者给了一个很好的例子
$ grep -r hello /sys/

/dev/null文件的作用以及使用方法
但是使用重定向之后,这些报错全部都会写进/dev/null中,丢弃。
特定情况下,我们可能还希望将output与error全部丢弃,如:
$ grep -r hello /sys/ > /dev/null 2>&1

这个命令可以分为2步,先把所有output输到/dev/null。然后把这个命令的error输出,并和1(output)合并
这样一来程序不会有任何输出,达到了简洁的目的

总结

/dev/null相当于一个垃圾桶,只不过是以一种写入文件的方式把垃圾丢掉而已。
最后感谢这篇文章的原始作者给我的帮助

Original: https://www.cnblogs.com/Ztyu279/p/16707316.html
Author: Ztyu279
Title: /dev/null文件的作用以及使用方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577611/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • CSRankings: Computer Science Rankings

    CSRankings is a metrics-based ranking of top computer science institutions around the worl…

    Linux 2023年6月13日
    0108
  • 如何使用CMake构建c++项目

    1. c++项目构建与CMake简介 在Windows系统上我们通常使用 Visual Studio(VS)来生成我们的c++项目。我们只需在VS相应的层次目录中添加相应的文件即可…

    Linux 2023年5月27日
    0204
  • 总结:弹性伸缩的五个条件与六个教训

    前言弹性伸缩是云计算时代给我们带来的一项核心技术红利,但是 IT 的世界中,没有一个系统功能可以不假思索的应用到所有的场景中。这篇文章,我们将应用企业级分布式应用服务-EDAS 的…

    Linux 2023年6月8日
    092
  • K8S部署之VMWare网络拓扑踩坑

    知乎上最近发现一篇好文 图解K8S(01):基于Ubuntu 20.04部署1.23版K8S集群,想着之前 K8S 部署一直不成功,那么就照着这篇文章中说的试一试。结果在实验时遇到…

    Linux 2023年6月13日
    084
  • docker容器编排原来这么丝滑~

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Doc…

    Linux 2023年6月14日
    088
  • Docker 安装 MySQL、Redis

    1 Docker 中安装 Redis 1.1 创建目录 在硬盘上创建 redis 的数据目录: mkdir -p /Users/yygnb/dockerMe/redis/data …

    Linux 2023年6月7日
    096
  • djnago-filter用法

    django-filter用法 集成drf 不指定字段的过滤参数,那么该字段就默认为exact,精准匹配自定义filter文件内 from django_filters impor…

    Linux 2023年6月14日
    0112
  • 没那么简单的单例模式

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 什么是单例 单例的应用场景 单…

    Linux 2023年6月6日
    097
  • python实现Mysql数据库批量新增数据

    一、批量插入数据的场景 二、插入数据的工具选择 三、选择Python进行批量插入 Python实现批量插入Mysql数据库数据 一、批量插入数据的场景 在进行数据压力时需要进行大数…

    Linux 2023年6月14日
    075
  • 通过shell命令在MAC安装证书

    Macmini打包要需要更新苹果证书,又不想连接显示器,鼠标点点,如果可以通过shell命令,直接远程安装证书就好了。 #双击证书文件 open #输入密码 security un…

    Linux 2023年5月28日
    0121
  • 一文入门Qt Quick

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://mp.weixin.qq.com/s/dvamU6q5lZQb5hztfD2zNg 初识…

    Linux 2023年6月6日
    0111
  • Java基础系列–05_面向对象

    1、概述:(1)面向过程:将问题一步一步的解决的过程(详细步骤),在C语言中所有的代码都是基于过程化的代码。(2)面向对象:面向对象是基于面向过程的编程思想,所有的事情都交由创建出…

    Linux 2023年6月7日
    0101
  • LINUX 终端显示错乱问题

    问题描述 Linux Terminal进入vi/vim界面退出后会覆盖前面的显示,如下图: 解决办法 找一台显示正常和的机器(和故障机器架构一致),去家目录查看.bashrc文件,…

    Linux 2023年5月27日
    077
  • 列表初始化

    C++11将列表初始化(大括号初始化)作为一种通用的初始化方式.可用于所有类型. 数组以前就可以用列表初始化,但 C++11 中的列表初始化新增了一些功能: 初始化数组时,可省略等…

    Linux 2023年6月13日
    067
  • CH343芯片应用—硬件设计

    CH343属于沁恒第三代USB转串口芯片系列的单串口型号,基于经典版CH340芯片完成技术革新,实现USB转高速异步串口,支持最高6Mbps串口波特率。 电源设计 CH343芯片有…

    Linux 2023年6月7日
    0156
  • Celery + Redis 的探究

    不在乎过程的,可以直接看最后的结论。 测试代码: 先将 redis 部署于本机的 6379 默认端口 不要设置密码,使用 celery 版本 3.1.23 [1]先直接发起一个 t…

    Linux 2023年5月28日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球