首页 > 其他分享 >/dev/null文件的作用以及使用方法

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

时间:2022-09-19 12:22:30浏览次数:77  
标签:文件 grep dev file output 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中,丢弃。
特定情况下,我们可能还希望将output与error全部丢弃,如:

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

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

总结

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

标签:文件,grep,dev,file,output,null
From: https://www.cnblogs.com/Ztyu279/p/16707316.html

相关文章

  • 怎么把word文件插入到公众号文章中
    怎么把word文件插入到公众号文章中呢?相信,这是很多公众号运营师经常会遇到的情境。因为,在日常的公众号运营中,他们经常需要在文章中添加一些附件,比如:登记表、申请表、报名表......
  • springboot内置tomcat配置本地文件夹的映射路径
    例如要访问的本地路径是D盘下的PersonalHomePage目录的某个图片1importorg.springframework.context.annotation.Configuration;2importorg.springframework.web.......
  • 如何单文件独立剪裁部署
    提出问题如何单文件独立剪裁部署解决问题dotnetpublish-cRelease-rwin-x64-p:PublishSingleFile=true-p:PublishTrimmed=true--self-containedtrue参考单文......
  • 第四章 Redis-6.0版本配置文件详解
    一、Units单位#如果要配置跟内存大小相关的参数是可以这样配置,只支持bytes,不支持bit,这些单位都是大小写不敏感的:#1k=>1000bytes#1kb=>1024bytes#1m=>10......
  • 使用脚本修改hosts文件(bat+python)
    使用脚本修改hosts文件(bat+python)一、使用bat脚本方式  使用bat修改hosts文件,首先判断默认路径是否存在,如不存在,手工输入目标文件地址(一般用不着):SEThosts=C:\Windows......
  • centos 查看程序文件数量_centos 7.x 文件数量限制优化
    https://blog.csdn.net/weixin_42342010/article/details/111951283?utm_medium=distribute.wap_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_......
  • 前端开发必备的文件处理库
    今天来分享几个前端文件处理相关的实用工具库!  1.PDF(1)PDF.jsPDF.js是使用HTML5构建的可移植文档格式(PDF)查看器。它由社区驱动并受Mozilla支持,目标是创建......
  • python自动更新pom文件
    前言项目越来越多,版本管理越来越麻烦,在项目上我使用mavenversion来进行版本管理。主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一......
  • 40. 网络加载框架Retrofit完成文件上传和下载
    40.网络加载框架Retrofit完成文件上传和下载40.1文件上传服务接口packagecom.dingjiaxiong.myretrofit;importokhttp3.MultipartBody;importokhttp3.ResponseBody;......
  • Windows文件夹导出文件目录
    通过命令行导出文件夹内所有文件目录第一步:通过cmd进入目录。第二步:tree/f>>123.xls/txt第三步:就已经导出目录了。树结构。......