/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