linux中常见的>/dev/null 2>&1的作用

本文详细介绍了Linux系统中的特殊文件/dev/null的功能及其应用场景,包括如何将其用于清除文件内容和处理标准输出与错误输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  /dev/null属于字符特殊文件,它属于空设备,是一个特殊的设备文件,它会丢弃一切写入其中的数据,写入它的内容都会永远丢失,而且没有任何可以读取的内容。

我们用file命令查看下,说明类型是字符特殊文件。

[root@localhost ~]# file /dev/null
/dev/null: character special
尝试读取

[root@localhost ~]# cat /dev/null
什么也读取不到,就像一个黑洞一样。

所以我们一般会把/dev/null当成一个垃圾站,不要的东西丢进去。比如来清除文件中的内容。

示例:

[root@localhost oa]# ls >> a.txt [root@localhost oa]# cat a.txt a.txt passwd time.sh [root@localhost oa]# cat /dev/null > a.txt [root@localhost oa]# cat a.txt

也可以把一个文件内容读到/dev/null里面。不过当文件不存在的时候回报错。我们可以在前面加上数字2。

[root@localhost oa]# cat test.txt   >/dev/null
cat: test.txt: 没有那个文件或目录
[root@localhost oa]# cat test.txt   2>/dev/null
 

一般标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。 这个数字代表的是标准输出。

    0:表示标准输入流(stdin),

    1:表示标准输出(stdout)。

    2:表示标准错误输出(stderr)

   上面就是将标准错误( 2 )输出重定向到/dev/null,所以屏幕上不会再显示错误提示了。
————————————————

我们常常在看shell脚本时,看到>/dev/null 2>&1,所以就去查找了一下这个到底是什么意思

  • 命令的结果可以通过%>的形式来定义输出

  • /dev/null相当于垃圾桶
    null是一个名叫null小桶的东西,将输出重定向到它的好处是不会因为输出的内容过多而导致文件大小不断的增加。其实,你就认为null就是什么都没有,也就是,将命令的输出扔弃掉了。

  • 1表示标准输出,2表示标准错误输出
    2>&1表示将标准错误输出重定向到标准输出,这样,程序或者命令的正常输出和错误输出就可以在标准输出输出。

一般来讲标准输出和标准错误输出都是屏幕,那为什么还要这么用呢?原因是标准输出的重定向。你的例子是重定向到了null,如果重定向到文件,例如:

dir > out.txt 
  • 1

表示标准输出重定向到out.txt文件。此时如果dir命令出错,那么错误信息不会输出到out.txt文件,错误信息仍然会输出到屏幕——标准错误输出。为了使正确的信息和错误的信息都重定向到out.txt文件,那么需要将错误信息的标准错误输出重定向到标准输出。即命令如下:

dir > out.txt 2>&1
  • 1

重定向到null是一个道理。

dir > null 2>&1

--------------------------

在shell 脚本中经常会看到 >/dev/null 与>/dev/null 2>&1这样例子
#!/bin/bash
cd `dirname $0`
cd ..
DEPLOY_DIR=`pwd`
SERVER_NAME=sharding-jdbc-transaction-async-job
 
#LOG LOCATION
LOGS_DIR=$DEPLOY_DIR/logs
if [ ! -d $LOGS_DIR ]; then
    mkdir $LOGS_DIR
fi
PID=`ps -ef | grep java | grep "$DEPLOY_DIR" |awk '{print $2}'`
if [ -n "$PID" ]; then
    echo "ERROR: The $SERVER_NAME already started!"
    echo "PID: $PID"
    exit 1
fi
 
CONF_DIR=$DEPLOY_DIR/conf/*
LIB_DIR=$DEPLOY_DIR/lib/*
CONTAINER_MAIN=com.dangdang.ddframe.rdb.transaction.soft.bed.BestEffortsDeliveryJobMain
nohup java -classpath $CONF_DIR:$LIB_DIR:. $CONTAINER_MAIN >/dev/null 2>&1 &
CONSOLE_TXT="Started the $SERVER_NAME"
echo $CONSOLE_TXT
/dev/null
       /dev/null   null是一个名叫 null小桶的东西,如果命令的输出不想要即想丢弃输出的内容,既不想在标准输出与不想重定向到某个文件,就可将命令的输出重定向到/dev/null。这样做的好处是不会因为输出的内容过多而导致文件大小不断的增加。


command >/dev/null 与 command >/dev/null 2>&1


        command >/dev/null的作用是将是command命令的标准输出丢弃,而标准错误输出还是在屏幕上。  一般来讲标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。这时可以用command >/dev/null 2>&1 这样标准输出与标准错误输出都会被丢弃。1表示标准输出,2表示标准错误输出,2>&1表示将标准错误输出重定向到标准输出。
        >表示输出重定向,如果 command > /usr/log 那其会覆盖log中原来的记录。可以使用>>输出重定向来向文件尾部增加输出记录。

例如:

cat 1.txt >/dev/null 2>&1

————————————————

转自:https://blog.csdn.net/zhangjunli/article/details/88931414

https://bbs.csdn.net/topics/330248623

https://blog.csdn.net/jackyechina/article/details/52815415?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值