Linux命令之 2>&1 和 /dev/null

1. 前言

        有时候我们常看到类似这样的脚本调用:

      ./test.sh  > log.txt 2>&1


        这里的2>&1是什么意思?该如何理解?
        先说结论:

        上面的调用表明将./test.sh的输出重定向到log.txt文件中,同时将标准错误也重定向到log.txt文件中。

        以这样的方式调用脚本,可以很好的将错误信息保存,帮助我们定位问题。

2. 2>&1 原理

        每个程序在运行后,都会至少打开三个文件描述符,分别是:

        0:标准输入;

        1:标准输出;

        2:标准错误。

        2>&1 表明将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出),为什么1前面需要&?当没有&时,1会被认为是一个普通的文件,有&表示重定向的目标不是一个文件,而是一个文件描述符。在前面我们知道,test.sh >log.txt又将文件描述符1的内容重定向到了文件log.txt,那么最终标准错误也会重定向到log.txt


3. /dev/null 


        在 Linux 系统中,/dev/null 是一个特殊的文件,用于将数据彻底丢弃。它是一个特殊的文件设备,可以通过标准输入和标准输出访问。读取 /dev/null 将会立即返回 EOF(文件结束符),而向它写入任何数据将会直接被忽略掉,从而丢弃数据。

因为 /dev/null 丢弃所有数据,所以它通常用于一些需要忽略输出或者输入的场合。例如,如果你正在运行一个命令,但是你不想看到输出,你可以将输出重定向到 /dev/null。类似的,如果你需要一个空的输入流来执行一个命令,你可以将输入重定向到 /dev/null。
        1)重定向输出
               ls  > /dev/null 
               在这个例子中,输出被重定向到 /dev/null,因此不会在屏幕上打印任何输出。
 
        2)禁止输出和标准错误输出
               如果你希望同时禁止输出和错误输出,你可以将标准输出和标准错误输出都重定向到 /dev/null。例如,以下命令将不会输出任何内容,即使命令本身存在错误:
            ls /not/a/real/path > /dev/null 2>&1

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值