Linux Shell 1>/dev/null 2>&1 含义

Linux 输入输出重定向 Linux输入输出重定向摘要 Linux系统中进程通过标准流与外部交互:标准输入(stdin/0)、标准输出(stdout/1)和标准错误(stderr/2)。标准输出重定向可使用">"覆盖或">>"追加到文件,如find /etc -name 'passwd' >passwd.list。错误信息用"2>"重定向,如find /etc -name 'passwd' 2>passwd.err。特殊文件/dev/nu 阅读详情

shell中可能经常能看到:echo log > /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 语句含义:
1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

 

实例解析:

cmd >a 2>a 和 cmd >a 2>&1 为什么不同?
cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。
cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD1的管道之后,再被送往文件a 。a文件只被打开一遍,就是FD1将其打开。

 

两者的不同点在于:

cmd >a 2>a 相当于使用了FD1、FD2两个互相竞争使用文件 a 的管道;
cmd >a 2>&1 只使用了一个管道FD1,但已经包括了stdout和stderr。
从IO效率上来讲,cmd >a 2>&1的效率更高。


经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用

/tmp/test.sh > /tmp/test.log 2>&1
前半部分/tmp/test.sh > /tmp/test.log很容易理解,那么后面的2>&1是怎么回事呢?

要解释这个问题,还是得提到文件重定向。我们知道>和<是文件重定向符。那么1和2是什么?

在shell中,每个进程都和三个系统文件 相关联:标准输入stdin,标准输出stdout、标准错误stderr,三个系统文件的文件描述符分别为0,1、2。所以这里2>&1 的意思就是将标准错误也输出到标准输出当中。

 

下面通过一个例子来展示2>&1有什么作用:

$ cat test.sh
t
date
test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout

./test.sh > test1.log
./test.sh: line 1: t: command not found

$ cat test1.log
Wed Jul 10 21:12:02 CST 2013


可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

$ ./test.sh > test2.log 2>&1

$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007
这次,stderr和stdout的内容都被重定向到log文件中了。

 

实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了,那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使用2> file。

linux shell 中"2>&1"含义脚本是:
       nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &
 

对于&1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了,其中0 表示键盘输入 1表示屏幕输出 2表示错误输出,把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。
       command >out.file 2>&1 &
       command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行。
       
       试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.

       你可以用
             ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
             ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
             ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
             ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。
 

为何2>&1要写在后面?
       command > file 2>&1 
        首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。 
       command 2>&1 >file 
       2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

用strace可以看到: 
1. command > file 2>&1 
这个命令中实现重定向的关键系统调用序列是: 
open(file) == 3 
dup2(3,1) 
dup2(1,2)

2. command 2>&1 >file 
这个命令中实现重定向的关键系统调用序列是: 
dup2(1,2) 
open(file) == 3 
dup2(3,1)

可以考虑一下不同的dup2()调用序列会产生怎样的文件共享结构。请参考APUE 3.10, 3.12 

 

 

参考推荐:

1>/dev/null 2>&1的含义

/dev/null 2>&1 解释  

https://blog.youkuaiyun.com/ithomer/article/details/9288353

[通俗易懂:Linux标准输入/输出和重定向]Shell脚本之 > /dev/null 2>&1命令详解 目录标题一、&gt; /dev/null 2&gt;&amp;1 命令解析二、/dev/null 文件浅显理解三、标准输入、标准输出、标准错误输出四、输入重定向、输出重定向五、命令作用与应用场景 如果想看命令意义,可以直接跳到第五部分 一、&gt; /dev/null 2&gt;&amp;1 命令解析 我们在别人的脚本里面常常可以看见这样的代码: 2&gt;/dev/null 或者是这样: 0 */3 * * * /usr/local/apache2/apachectl restart &gt;/dev 阅读详情

相关推荐

如何在 Linux 中将输出重定向到文件和标准输出

在 Linux 系统中,输出重定向是一项非常有用的功能,可以帮助我们将命令的输出保存到文件中或者传递给其他命令进行进一步处理。通过标准输出重定向,我们可以将命令的输出重定向到文件中,而不是显示在终端上。有时候,在执行命令时,我们希望临时禁用输出重定向,以便命令的输出直接显示在终端上而不是重定向到文件中。在 Linux 中,有时候我们希望将命令的标准输出和标准错误都重定向到同一个文件中,以便更方便地查看命令的所有输出。而结合重定向操作,我们可以将管道的输出重定向到文件中,以便稍后查看和分析。

网络技术联盟站 4088

8.linux 重定向详解,标准输入输出,输入重定向,输出重定向

文章目录前言一.初识二、输入重定向总结 前言 上一节的笔记,讲解了文本内容如何查看。接下来会重点简介文本内容处理处理。 一.初识 1.标准输入输出设备 Linux 中标准的输入设备默认指的是键盘,标准的输出设备默认指的是显示器。 2. 文件描述符 数据流又可分为 标准输入流 、标准输出流和标准标准错误流。 这三种流向对应着相关的文件描述符, 默认描述符范围是:0-2。 [root@zaishu ~]# ls -l //这个就是标准输出,如果需要重定向 则指定其描述符为1 total 4620

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 1万+

Shell脚本中 nohup java -jar、2>&1、>、>>、EOF等符号到底是什么含义

在Linux Shell命令中,我们经常会遇到命令中类似这样的 >、2>&1 符号,那么这些符号是什么含义,有什么用处呢,下面一起来看下。4、而 >/x/xx.log 代表1标准输出到xx.log文件。1指向xx.log,2>&1,2指向1,即2也指向xx.log。1、>标准输出符号,>/x/xx.log 把运行日志输出到xx.log文件中。>>是1>>标准输出的简写。5、所以 2>&1 需要写到 >/x/xx.log 的后面。2、>会覆盖文件内容,>>是在文件内容末尾追加。(3)、>覆盖,>>追加。

hkl_Forever的博客 7385

Linux || 重定向

标准输入(standard input) 0 默认接受来自键盘的输入。标准输出(standard output) 1 默认输出到终端窗口(屏幕)。标准的错误输出(standard error output) 2 默认输出到终端窗口(屏幕)。任何命令只要有输出,就可以使用输出重定向。

qq_60271706的博客 1255

一个问题引出的>/dev/null 2>&1详解

目录一、问题描述二、解决方法三、&gt;/dev/null 2&gt;&amp;1 详解1.文件描述符2.shell 重定向(1)输入重定向(2)输出重定向(3)文件描述符的复制(4)重定向命令列表3. /dev/null4. 2&gt;&amp;15.重定向顺序(1)&gt;/dev/null 2&gt;&amp;1 和 2&gt;&amp;1 &gt;/dev/null(2)"&gt;file 2&gt;&amp;1" 和 "2&gt;&amp;1 &gt;file"6.nohup 一、问题描述 在

邓邓子的博客 5117

WorkBuddy任务对话上下文管理:Token、compact与上下文窗口实战指南

在大语言模型应用中,Token作为文本处理的最小单位,直接决定上下文窗口的消耗速度,而上下文窗口则限定了单次对话可承载的信息总量。当对话超出窗口限制时,compact压缩机制会触发有损摘要,导致关键约束丢失或工具调用结果被稀释。合理管理上下文不仅能提升多步骤任务的稳定性,还能显著降低Token成本与响应延迟。在文档处理、代码开发、多步自动化等场景中,通过主动压缩、状态外置、分段喂入等策略,可有效避免任务后期遗忘、版本混乱等问题。本文围绕WorkBuddy的上下文管理机制,从Token与compact的底层原

weixin_29055699的博客 389

Linux Shell >/dev/null 2>&1 含义

/dev/null :代表空设备文件,可以理解为一个垃圾桶 &gt; :代表重定向到哪里,例如:echo "123" &gt; /home/123.txt 1 :表示stdout标准输出,系统默认值是1,所以"&gt;/dev/null"等同于"1&gt;/dev/null" 2 :表示stderr标准错误 &amp; :表示等同于的意思,2&gt;&amp;1,表示2的输出重定向等同于1 1 &gt; /dev/null 2&gt;&amp;1 语句含义: 1 &gt; /dev/null : ...

angelazhao620的博客 869

LoRaWAN数据包分析工具

前言:LoRaWAN的射频数据包是加密的,而且有些字段是某个字节的某几位,看着不是那么直观,因此在某些情况下需要借助工具来分析数据包。 1、安装npm 这个工具是用JavaScript写的,其中用到了一些依赖库,而npm就可以一次性把这些依赖库下载下来,因此我们先要下载安装npm这个工具。 安装:sudo apt install npm 输入y,等待安装完成: 检查是否安装成功:npm -v 说明安装完成。 2、安装LoRa数据包分析工具lora-packet 安装:npm i.

freemote的博客 4629

从实列中学习linux shell13: shell 中 deploy.log 2>&1以及 docker rm $CONTAINER_NAME 2>/dev/null看 “2” “>”的含义

通过,`>` 符号用于**重定向输出**,而 `2>` 是专门用于重定向**错误输出**的操作符。来了解重定向

AI懒虫 721

告别手动画图!用Cadence SKILL写一个参数化电感PCell(附完整代码)

本文详细介绍了如何使用Cadence SKILL语言开发参数化电感PCell,实现电感版图的自动化生成。通过动态调整线宽、圈数等几何参数,自动创建端口并进行工艺规则校验,大幅提升高频电路设计效率。附完整代码示例,帮助工程师快速掌握PCell开发技巧。

weixin_30684743的博客 366

MIKE21桥墩模拟实战:抠网格与构筑物法对比与选型指南

本文详细对比了MIKE21软件中抠网格法与构筑物法在桥墩模拟中的应用,包括操作步骤、适用场景及优缺点分析。通过实际案例数据展示两种方法的精度与效率差异,并提供选型决策树和常见问题解决方案,帮助工程师根据项目需求选择最优模拟方法。

weixin_42656416的博客 322

Linux 里的 2>&1 究竟是什么

我们在Linux下经常会碰到nohup command&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;这样形式的命令。首先我们把这条命令大概分解下: 首先就是一个nohup:表示当前用户和系统的会话下的进程忽略响应HUP消息。 &amp;amp;是把该命令以后台的job的形式运行。 command&amp;gt;/dev/null较好理解,/dev/null表示一个空设备,就是说把 comma...

mjb115889的博客 293

并行计算:从概念起源到多层次架构设计及其发展历程的全面解析

20世纪70年代,第一台并行计算机于1972年产生(ILLIAC IV,伊利诺依大学),由64个处理器组成,可扩展性好,但可编程性差。如有21亩地需要除草,一个人一天只能除一亩地的草,那么需要21天才能除完草,这在现实中是不太可能的,因庄稼是有时间段的。其二是机群系统是高性能计算机的一种,它的技术基础和工业基础都是商品化和标准化。之所以称为“专用”,并不是说它们只能运行某种应用,是指它们的组成部件是专门设计的,它们的CPU板、内存板和I/O板,甚至操作系统,都是不能在其它系统中使用的。

1654

Linux 输入输出重定向 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/nul

From:https://www.cnblogs.com/520playboy/p/6275022.html 2&gt;/dev/null 和 &gt;/dev/null 2&gt;&amp;1 和 2&gt;&amp;1&gt;/dev/null :https://blog.youkuaiyun.com/zhongqi2513/article/detai...

墨鱼菜鸡 5219

使用Simulink对液流电池在微电网中的动态响应进行建模与仿真

本文介绍了使用Simulink对液流电池在微电网中的动态响应进行建模与仿真的方法。通过搭建包含液流电池、双向DC-DC变换器、分布式能源和负载的微电网模型,并设计基于SOC的控制器,详细说明了从模型创建到仿真运行的完整流程。重点分析了液流电池在不同负载条件下的动态特性,评估了系统响应速度、充放电效率和稳定性等性能指标。该仿真方法为验证液流电池在微电网中的应用提供有效工具,有助于优化参数设计和提升系统可靠性。

amy_mhd的博客 136

用生成式AI自动生成测试用例的完整教程

本文旨在帮助测试工程师、开发人员快速掌握“生成式AI自动生成测试用例”的核心技术,覆盖从概念理解、工具选择到实战落地的全流程。无论是Web应用、API接口还是移动端功能测试,你都能找到可复用的方法。本文将按照“概念→原理→实战→避坑”的逻辑展开:先通过生活案例理解生成式AI如何生成测试用例,再拆解核心算法原理,接着用Python代码演示完整生成流程,最后分享实际应用中的优化技巧和未来趋势。生成式AI:能“创造内容”的AI模型(如ChatGPT、CodeLlama),像会写作文的智能笔。测试用例。

AIGC应用创新大全的博客 1580

shell程序中 2> /dev/null 代表什么意思?

作者:裕用ID 链接:https://www.zhihu.com/question/53295083/answer/135258024 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 以下来自一个重度linux使用患者不请自来的回答。 先用简单的语言回答题主的问题: shell程序中 2&gt; /dev/null 代表什么意思? 答:“2&gt; /dev/null” 代表忽略掉错误提示信息。 如题 2&gt; 代表什么意思?讲错误输出删除? 答:“2&g.

glenshappy的专栏 1万+

[机器学习] 第二章 模型评估与选择 2.ROC:roc_curve原理及源代码详解

代码见:https://github.com/Carrie-Yi/machine_learning/tree/main/roc_curve

心宝的博客 1493

2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别

一、区别: 2&gt;/dev/null 意思就是把错误输出到“黑洞” &gt;/dev/null 2&gt;&amp;1 默认情况是1,也就是等同于1&gt;/dev/null 2&gt;&amp;1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” 2&gt;&amp;1 &gt;/dev/null 意思就是把错误输出2重定向到标准出...

一颗程序猿 9万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux 输入输出重定向 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/nul、$(( )) 与 $( ) 与 ${ } 区别

Linux 输入输出重定向 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/nul、$(( )) 与 $( ) 与 ${ } 区别

freeking101的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

&>/dev/null表示的意思

在Linux/Unix中,一般在屏幕上面看到的信息是从stdout (standard output) 或者 stderr (standard error output) 来的。许多人会问,output 就是 output,送到屏幕上不就得了,为什麼还要分成stdout 和 stderr 呢?那是因为通常在 server 的工作环境下,几乎所有的程序都是 run 在 background 的,所以...

frank的专栏 5万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Shell中 &>/dev/null和 >/dev/null 2>&1

以下来自一个重度linux使用患者不请自来的回答。先用简单的语言回答题主的问题:shell程序中 2&gt; /dev/null 代表什么意思?答:“2&gt; /dev/null” 代表忽略掉错误提示信息。如题 2&gt; 代表什么意思?讲错误输出删除?答:“2&gt;” 代表重定向操作错误提示信息。只有这两个字符并不能删除错误输出。如果有正确的输出并赋值给i,i会得到正确...

weixin_34062469的博客 1万+

linux 输出到后台 > /dev/null 2>&1 详解

一些终端命令、程序、脚本(crontab)中,常会遇到,"&gt;/dev/null 2&gt;&amp;1 "出现,这具体代表什么意思呢,接下来会一步步操作,大概理清楚流程及作用(咳咳,那个,一些linux内置的方法咱就不理了) 先解释一下字面意思: &gt;/dev/null 就是重定向,将结果(标准输出)重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。1&gt;/dev/null 也是一样的,因为不写的话默认是 1 2&gt;&amp;1 就是将 标准错误输出重定...

散尽浮华 108万+

Shell中的>/dev/null 2>&1 与 2>&1 >/dev/null 与&>/dev/null 的区别

默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 。那么我们来看看下面的几种重定向方法的区别: >/dev/null 2>&1 // 实际上,应该等同于这样: 1>/dev/null 2>/dev/null ,默认情况下就是1,标准输出,所以一般都省略。 而&符号,后面接的是必须的文件

不以物喜不以己悲 6万+

Linux Shell 的“>/dev/null 2>&1” 详解

>/dev/null 2>&1 的含义: 将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃。

迎风悟极道的专栏 7594

linux环境下运行脚本时常用>/dev/null 2>&1 &这一串的作用

>/dev/null 2>&1 & 的作用是将某个程序在后台运行,并将其标准输出和标准错误输出都丢弃,不在终端中显示或记录。这样做常常用于运行不需要显示输出的程序或脚本,并且让它在后台运行,不占用终端的输入输出...

AlbertS Home of Technology 7843
上一篇: Tomcat vs Apache
下一篇: Linux vmstat 命令详解
Augusdi
博客等级 码龄19年 1万+粉丝 1016原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值