美文网首页
>/dev/null 2>&1 的作用

>/dev/null 2>&1 的作用

作者: 风寒夜末 | 来源:发表于2018-08-22 00:46 被阅读0次

>/dev/null 2>&1 的作用

shell中可能经常能看到:>/dev/null 2>&1

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

/dev/null 代表空设备文件

> 代表重定向到哪里,例如:echo "123" > /home/123.txt

1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr标准错误

& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么本文标题的语句:

1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。

2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

A. 1> /dev/null 表示将命令的标准输出重定向到 /dev/null2>/dev/null 表示将命令的错误输出重定向到 /dev/null1 - denotes stdout ( standard output )2 - denotes stderr  ( standard error )/dev/null就相当与windows里的回收站,只是进去了不能再出来了。>/dev/null 就是将标准输出和标准出错的信息屏蔽不显示

B.>/dev/null 2>&1   also can write  as  1>/dev/null 2>&1     - stdout redirect to /dev/null (no stdout) ,and redirect stderr to stdout  (stderr gone as well) . end up it turns both stderr and stdout off

C.a little practice may help to undstand above .  #ls /usr  /nothing #ls /usr  /nothing  2>/dev/null #ls /usr  /nothing  >/dev/null 2>&1

我们经常会在UNIX系统下的一些脚本中看到类似”2>&1″这样的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具体含义是什么呢?

UNIX有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。”2>&1″的意思就是将stderr重定向至stdout,并一起在屏幕上显示出来。如果不加数字,那么默认的重定向动作是针对stdout(1)的,比如”ls -l > result”就等价于”ls -l 1 > result”。这样便于我们更普遍性的理解重定向过程。

下面举例说明:

#cat std.sh

#!/bin/sh

echo “stdout”

echo “stderr” >&2

#/bin/sh std.sh 2>&1 > /dev/null

stderr

#/bin/sh std.sh > /dev/null 2>&1

第一条命令的输出结果是stderr,因为stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍将在屏幕中显示出来;第二条命令无输出,因为当stdout重定向至/dev/null后,stderr又重定向到了stdout,这样stderr也被输出到了/dev/null。

今天在做例行工作的时候,发现机器上的sendmail进程奇多无比,并且机器IO好像也很慢。后来发现在/var/spool/clientmqueue目录下ls几乎要死人 – 最少有10万个文件

ps|grep sendmail看这些sendmail进程里面都有/var/spool/clientmqueue

cd过去随便打开了个文件看了下,发现是我crontab里面执行的程序的exception,估计是我的crontab每次执行,linux都试图发邮件给crontab的用户但是又没有配sendmail,所以东西就都被扔到/var/spool/clientmqueue下面了。然后我才明白为啥以前别人写的crontab要加上> /dev/null 2>&1,原来这样就不会每次执行crontab都把结果或者excetion发邮件了。

把这10万个文件删掉后,一切恢复正常

问题现象:

linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件。

原因分析:系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

解决办法: 1、 将crontab里面的命令后面加上> /dev/null 2>&1

2、知识点:

2>:重定向错误。

2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到/dev/null,即抛弃,同时,把产生的错误也抛弃。

3、具体代码:

(1)、# crontab -u cvsroot -l

01 01 * * * /opt/bak/backup

01 02 * * * /opt/bak/backup2

(2)、# vi /opt/bak/backup

#!/bin/sh

cd /

getfacl -R repository > /opt/bak/backup.acl

(3)、# vi /opt/bak/backup2

#!/bin/sh

week=`date +%w`

tar zcvfp /opt/bak/cvs$week/cvs.tar.gz /repository >/dev/null 2>&1

4、清除/var/spool/clientmqueue/目录下的文件:

# cd /var/spool/clientmqueue

# rm -rf *

如果文件太多,占用空间太大,用上面命令删除慢的话,就执行下面的命令:

# cd /var/spool/clientmqueue

# ls | xargs rm -f

相关文章

  • >/dev/null 2>&1 的作用

    >/dev/null 2>&1 的作用 shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以...

  • “1 > /dev/null 2 > &1

    法1: 1 > /dev/null 2 > /dev/null 法2: 1 > /dev/null 2 > &1 ...

  • Linux下 /dev/null 2>&1 解释

    command >/dev/null 2>&1 & == command 1>/dev/null 2>&1 & ...

  • shell中>/dev/null 2>&1的意义

    1. >/dev/null 这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表lin...

  • Linux Shell指令笔记

    Linux Shell 1>/dev/null 2>&1 /dev/null :代表空设备文件 :代表重定向到哪里...

  • /dev/null 2>&1

    解析: /dev/null:代表空设备文件> :代表重定向到哪里,例如:echo "123" ...

  • >/dev/null 2>&1

    https://www.cnblogs.com/520playboy/p/6275022.html 类型 文件描...

  • >/dev/null 2>&1 &

    nohup 不生成 nohup.out的方法 关键在于最后的 >/dev/null 2>&1 部分 /dev/nu...

  • >/dev/null 2>&1

    在shell里面,通常>表示流重定向,默认的表示输出重定向。比如: 我们经常看到这样的小脚本$command >/...

  • Cannot open your terminal '/dev/

    script/dev/null 之后就可以打开 screen 了 script /dev/null 的作用实际上是...

网友评论

      本文标题:>/dev/null 2>&1 的作用

      本文链接:https://www.haomeiwen.com/subject/ygasiftx.html