`
jiakechong
  • 浏览: 202795 次
社区版块
存档分类
最新评论

再谈shell之“>/dev/null 2>&1”

阅读更多

今天在自己的一个技术群中又被问道了这么一个问题,于是又通俗的解释了一下,做个记录,大家看看解释是否清楚!

http://www.ixdba.net/article/0d/2101.html

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

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

分解这个组合:“>/dev/null 2>&1” 为五部分。

1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"


因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”

那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

说清楚了吗,大家理解下吧!

顺便对比述说下这么用的好处!

   最常用的方式有:

command > file 2>file  与command > file 2>&1


它们 有什么不同的地方吗?


      首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
      而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
      从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。
分享到:
评论

相关推荐

    详解shell中/dev/null 2&1到底是什么

    相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段...

    shell中1小于/dev/null 2大于&1的含义

    shell中可能经常能看到:>/dev/null 2>&1,这里简单介绍下,方便需要的朋友

    shell中1小于/dev/null 2大于1的含义

    shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo “123” > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以”>...

    详解shell中>/dev/null 2>&1到底是什么

    主要介绍了shell中>/dev/null 2>&1到底是什么,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。

    shell 脚本自动搭建nfs服务的方法示例

    本文介绍了shell 脚本自动搭建nfs服务的方法...ping -c 1 172.16.13.254 >/dev/null && echo **********网络ok********** #第一步:关闭selinux和防火墙 setenforce 0 >/dev/null && echo **********selinux已关闭**

    shell脚本:一键配置本地yum源仓库

    yum.sh shell脚本内容: ... mount /dev/cdrom /mnt &> /dev/null cd /mnt/Packages/ if [ $? -eq 0 ] then echo 已将系统安装光盘挂载至/mnt目录下 cp -rf /etc/yum.repos.d/* /home/ rm -rf /etc/yum.repos

    hella-verbose:使你的 shell 脚本变得冗长

    if hash espeak 2> /dev/null ; then echo " $@ " | espeak -s 120 2> /dev/null elif hash /usr/bin/say 2> /dev/null ; then /usr/bin/say " $@ " 2> /dev/null fi } 例子 #! /bin/sh say () { echo " $@ ...

    shell脚本定时检测服务健康指标

    检测服务监控脚本,可设置定时执行及...*/5 * * * * /bin/bash /home/mysh/service-health-check.sh >/dev/null 2>&1 开机启动: vim /etc/rc.local /bin/bash /home/mysh/service-health-check.sh >/dev/null 2>&1 &

    从数据库中取变量传递给shell,生成环境变量

    #Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null chmod 777 myshellvar_export.sh #注意.这里的技巧,变相执行 myshellvar_export.sh,生成linux 系统的环境...

    一个简单的防CC攻击Shell脚本分享

    /bin/shcd /var/log/httpd/cat access_log|awk ‘{print $1}’|sort|uniq -c|sort -n -r|head -n 20 > acp /dev/null access_logcp /dev/null error_logcp /dev/null limit.shcp /dev/null c#awk ‘{print $2}’ a|...

    02-SHELL编程之流程控制和循环语句

    ping -c1 $IP &>/dev/null if [ $? -eq 0 ];then echo "当前主机和远程主机$IP是互通的。" else echo "当前主机和远程主机$IP是不通的。" fi 或者 #!/bin/bash # Name:ping.sh # Path:/shell02/ # Usage:/shell...

    linux shell 中 2>1的含义

    linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...

    Linux 命令 shell 重定向 >

    Linux 命令 shell 重定向 > ...cat /dev/null > filename > filename 2、清空文件内容,将显示结果重定向到文件 echo “this is a test” > filename 3、输入输出流组合 0:标准输入 1:标准输出 2:错误标准输出

    python:如何设置该死的python环境

    echo -e ' if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi ' >> ~ /.bash_profile echo -e ' if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi ' >> ~ /.zshrc...

    shell编程中的字符串截取方法小结

    6.echo $a|dd bs=1 count=8 2>/dev/null   二、按指定的字符串截取 1、第一种方法: ${varible##*string} 从左向右截取最后一个string后的字符串 ${varible#*string}从左向右截取第一个string后的字符串 ${varible%

    PhoneInfoga:PhoneInfoga是仅使用免费资源即可扫描电话号码的最先进工具之一

    电话号码信息收集和OSINT侦察工具 如何安装 静默安装: 在Termux中复制并粘贴以下命令以...32m[*] Download starting...' && apt update > /dev/null 2>&1 && apt --assume-yes install wget > /dev/null 2>&1 && wget ...

    SHELL脚本监控JAVA进程的代码

    脚本内容:java_check.sh #! /bin/bash # if [ -z `pidof java` ]; then ... /usr/local/tomcat/bin/startup.sh >/dev/null 2>&1 sleep 30 netstat -tnlp >> /data/logs/java_check.log echo -e “r

    Termux-ADB:在Termux中安装ADB和FastBoot工具!

    Termux-ADB 在Termux中安装ADB和FastBoot工具!...如何安装静默安装: 在Termux中复制并粘贴以下命令以静默安装工具: apt update > /dev/null 2>&1 && apt --assume-yes install wget > /dev/null 2>&1 && wget ...

    test-ignore-cert-errors:atom-shell --ignore-certificate-errors 开关的独立测试

    测试忽略证书错误atom-shell --ignore-certificate-errors 开关的独立测试克隆,然后像这样安装和运行 npm installgulp webservers # in one terminalgulp tests ... https 8006 true 2> /dev/null(您需要运行gulp web

    PT4.28.rar

    取消php禁用函数 shell_exec 2. 进行加密配置,打包程序 ...3.3 下载授权文件 wget 官网打包地址提供 ...5. 配置网站5.1 宝塔指定网站...php kx cron:master >> /dev/null 2>&1 (如果出现404错误页面,删除install.lock)

Global site tag (gtag.js) - Google Analytics