目录

即看即用

详细

知识铺垫

说明

【shell】输出重定向2>&1


即看即用

标准输出:

ls thereisno 1> out.txt  标准输出重定向  也可以不加1写成 ls thereisno > out.txt

标准错误:

ls thereisno 2> out.txt  标准错误重定向

错误:

ls thereisno > out.txt  2>&1  把错误定向到标准输出,然后统一重定向

所有IO:

ls thereisno &> out.txt  所有IO重定向(&>中的&可以代表任意,0,1,2,3……)

详细

标准输出(stdout)和标准错误(stderr),Stdout的编号为1,stderr的编号为2。

默认情况下,重定向操作符(如>|<)仅适用于stdout的编号1,(service --status-all |& grep network,|&将stdout和stderr一起输送到右侧标准输入(stdin)流上的进程)

操作符>重定向,将stderr(编号为2)输出定向到Stdout(编号为1),使用descriptor重定向到其他流,需要在其前面加上&(请注意,字符之间不能有空格):2>&1

service --status-all 2>&1 | grep network

知识铺垫

在实际开始前,我们先回顾一点 Linux 的知识,对于 Linux 而言:

一切都是文件

然而为了区分不同类型的事物,我们有了:

  • 普通文件
  • 目录文件
  • 链接文件
  • 设备文件

其中文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其值是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行 I/O 操作的系统调用都通过文件描述符。

如果直接这么讲可能有些难以理解,对于 Linux 有一些使用的用户来说,会有类似如下的写法:

g++ lots_of_errors 2>&1 | head

其中2>&1中的 2 就是表示的「标准错误」,1 就是「标准输出」,中间的 & 表示后面跟的数字是文件描述符而不是一个文件(不然所有的「标准错误」就都重定向到了一个名为 1 的文件中了)。

说明

1>/dev/null 2>&1的含义
那么本文标题的语句:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息(将命令的输出扔弃掉了)。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

2>&1 和 &>  的解释

ls thereisno 1> out.txt  标准输出重定向  也可以不加1写成 ls thereisno > out.txt

ls thereisno 2> out.txt  标准错误重定向

ls thereisno > out.txt  2>&1  把错误定向到标准输出,然后统一重定向

ls thereisno &> out.txt  所有IO重定向(&>中的&可以代表任意,0,1,2,3……)

一般在shell包括dos下都可能会这样使用。

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

一般来讲标准输出和标准错误输出都是屏幕,那为什么还要这么用呢?原因是标准输出的重定向。你的例子是重定向到了null,如果重定向到文件,例如:
dir > out.txt
表示标准输出重定向到out.txt文件。此时如果dir命令出错,那么错误信息不会输出到out.txt文件,错误信息仍然会输出到屏幕——标准错误输出。为了使正确的信息和错误的信息都重定向到out.txt文件,那么需要将错误信息的标准错误输出重定向到标准输出。即命令如下:
dir > out.txt 2>&1
重定向到null是一个道理。
dir > null 2>&1

os.system("/etc/init.d/winbind stop >/dev/null 2>&1")
>/dev/null 将输出重定向到/dev/null,这是个空设备,也就是忽略其输出。
2>&1 是将错误输出到标准输出,如果在控制台调试,也就是屏幕上,方便调试。

【shell】输出重定向2>&1

2021-03-02 21:29:13

标准输出(stdout)和标准错误(stderr),Stdout的编号为1,stderr的编号为2。

默认情况下,重定向操作符(如>,|和<)仅适用于stdout的编号1,(service --status-all |& grep network,|&将stdout和stderr一起输送到右侧标准输入(stdin)流上的进程)

操作符>重定向,将stderr(编号为2)输出定向到Stdout(编号为1),使用descriptor重定向到其他流,需要在其前面加上&(请注意,字符之间不能有空格):2>&1

service --status-all 2>&1 | grep network

这里的1就是stdout的文件描述符。重定向操作的语法是[FILE_DESCRIPTOR]>,所以对于将stdout重定向到其它地方,我们可以写成1>

我们用&1来引用文件描述符1(stdout)的值。(理解Shell脚本中'2>&1'的含义 | 王杰强的博客)

转自:Shell重定向&>file、2>&1、1>&2的区别_we will rock you的博客-CSDN博客

shell上:
0表示标准输入
1表示标准输出
2表示标准错误输出
> 默认为标准输出重定向,与 1> 相同
2>&1 意思是把 标准错误输出 重定向到 标准输出.
&>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中

用例子说话:

1. grep da * 1>&2 
2. rm -f $(find / -name core) &> /dev/null
上面两例中的 & 如何理解,&不是放到后台执行吗?
牛解:
1.&>file或n>&m均是一个独立的重定向符号,不要分开来理解。
2.明确文件和文件描述符的区别。
3.&>file表示重定向标准输出和错误到文件
例如:
rm -f $(find / -name core) &> /dev/null,/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉。
4.n>&m表示使文件描述符n成为输出文件描述符m的副本。这样做的好处是,有的时候你查找文件的时候很容易产生无用的信息,如:2> /dev/null的作用就是不显示标准错误输出;另外当你运行某些命令的时候,出错信息也许很重要,便于你检查是哪出了毛病,如:2>&1
例如:
注意,为了方便理解,必须设置一个环境使得执行grep da *命令会有正常输出和错误输出,然后分别使用下面的命令生成三个文件:
grep da * > greplog1
grep da * > greplog2 1>&2   
grep da * > greplog3 2>&1  //grep da * 2> greplog4 1>&2 结果一样
#查看greplog1会发现里面只有正常输出内容
#查看greplog2会发现里面什么都没有

#查看greplog3会发现里面既有正常输出内容又有错误输出内容

【shell】linux输出重定向|输出重定向2>1相关推荐

  1. linux shell编程输入输出,Linux shell编程 13标准输入、输出及文件重定向-dps文件怎么打开...

    5.6 标准输入.输出和错误 当我们在 s h e l l中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆, s h e l l同时也给出了 ...

  2. linux将屏幕输出内容转储到文件,Linux实时将所有输出重定向到文件

    Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...

  3. linux 输入、输出重定向的概念和用法详解(Day01)

    介绍重定向之前先来介绍几个重要的概念:(笔记不易---- 转载请注明出处) 1.linux 的标准输入与输出  linux标准输入设备指的是键盘,标准输出设备指的是显示器,标准错误输出指的是显示器. ...

  4. Linux:输入/输出重定向

    文章目录 1 输入重定向 2 输出重定向 3 标准错误文件重定向 4. Here Document 5 /dev/null 文件 6. 追加重定向 一个命令通常从一个叫标准输入的地方读取输入,默认情况 ...

  5. linux将屏幕输出到文件,Linux命令执行的屏幕输出内容重定向到日志文件

    摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...

  6. 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道

    vi/vim 在linux下一般使用vi编辑器来编辑文件 Vi既可以查看文件也可以编辑文件. 三种模式: 命令行.插入.底行模式 切换到命令行模式:ESC键 切换到插入模式:按i,o,a键 切换到底行 ...

  7. Linux重定向输出日志

    作者:翁松秀 Linux重定向输出日志 重定向类型 0:标准输入. 1:标准输出. 2:错误信息输出. 2>&1:将错误信息重定向到标准输出. 重定向格式 1,./spark-submi ...

  8. Linux笔记之浅析linux重定向——输出重定向与输入重定向

    重定向 大多数 UNIX 系统命令从你的终端接受输入,并将所产生的输出发送回到您的终端. 一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端. 同样,一个命令通常将其输出写入到标 ...

  9. 【Linux】重定向(输入重定向 | 输出重定向)

    摘要 为了有效地让 Linux 程序协同工作,我们需要对命令输入输出进行重定向(Redirection),并将一个命令的输出通过管道(Pipes)连接到另一个程序的输入.本文将介绍如何在 Linux ...

  10. Linux命令 结果输出重定向

    重定向符号:>.>>.2>.2>>.&>.&>>.2>&1.1>&2 以查看当前目录下存在的文件和不存 ...

最新文章

  1. iOS progressive Web App (PWA) 技术
  2. 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4小结
  3. VC中使用Matlab Engine出现无法找到libeng.dll的问题
  4. 暴风影音CEO冯鑫称与腾讯不惜一战
  5. linux数据流重定向
  6. 操作符offset 和 jmp指令
  7. EM算法和GMM(下)
  8. Redis在PHP项目中的应用
  9. 攻防世界web题ics-06(爆破id值)
  10. 基于JavaSwing+mysql的图书管理系统设计和实现
  11. 大数据之-Hadoop3.x_MapReduce_全排序案例---大数据之hadoop3.x工作笔记0115
  12. ES6 系列之模块加载方案
  13. Dubbo 服务 IP 注册错误踩坑经历
  14. 使用Mesos和Marathon管理Docker集群
  15. 如何不如计算机科学,第四轮学科评估结果:西交不如华中武大,你怎么看?很多网友表示不满!...
  16. CCF_Java_201909-3_字符画
  17. 服务器多网卡同一网段
  18. Java使用itextpdf实现为已有的pdf文件添加水印
  19. Emscripten 单词_这300个单词务必让孩子在三年级前搞定
  20. 2021年危险化学品生产单位安全生产管理人员报名考试及危险化学品生产单位安全生产管理人员模拟考试

热门文章

  1. 中国PCTG行业研究与投资前景报告(2021版)
  2. 【Linux】磁盘分区和挂载
  3. linux 多硬盘挂载
  4. 印刷机远程维护物联网解决方案
  5. 在NS2 AODV协议中添加blackhole attacker(黑洞攻击)
  6. linux shell 函数库,bash shell 函数库
  7. 用C语言模拟实现字符函数与字符串函数
  8. SpringSecurity - 整合JWT使用 Token 认证授权
  9. Navicat for MySQL破解版
  10. matlab高代求商与余式,matlab求商取余remmod区别