首先明确基本:

  • >/dev/null

输出到空设备,表示丢掉输出信息。

  • 2 > &1

将输出到标准错误的信息输出到标准输出设备(通常是屏幕)
有3个默认的i/o,

  • 是标准输入,一般是键盘
  • 是标准输出,一般是屏幕了
  • 是标准错误,有时候屏幕上可以看到,但是重定向的文件中看不到的就是它了

/dev/null 含义:

如果希望执行某个命令,但又不希望在屏幕上显示出输出的结果,那么可以将输出重定向到/dev/null:

$ command > /dev/null
/dev/null是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读取不到。

但是/dev/null文件非常的有用,将命令的输出重定向到它,会起到“静止输出”的效果。

如果希望屏蔽stdout和stderr,则可以这样写:

$ command > /dev/null 2>&1

注意:0是标准输入(STDIN),1是标准输出(STDOUT),2是标准错误输出(STDERR)
————————————————
案例:

执行此脚本:

#/bin/bash
set i=0
while true
do
   i=i+1
done
之前执行的命令时

nohup bash -x cpuUse_hxm.sh &
发现很快磁盘就占满了,发现是nohup.out文件超级大,达到30G,后来打开看大量的   i=i+1,初步断定是脚本输出都到这里了,因此需要将脚本日志输出到空输出上

nohup bash -x cpuUse_hxm.sh > /dev/null &
解析:

如果希望执行某个命令,但又不希望在屏幕上显示出输出的结果,那么可以将输出重定向到/dev/null:

$ command > /dev/null
————————————————

这篇文章主要介绍了详解nohup /dev/null 2>&1 含义的使用.

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

该命令的一般形式为:nohup command &

1

2

ls xxx 1>out.txt 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下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。

1

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要写在后面?

1

command > file 2>&1

首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

1

command 2>&1 >file

2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

用strace可以看到:

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

1

2

3

open(file) == 3

dup2(3,1)

dup2(1,2)

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

1

2

3

dup2(1,2)

open(file) == 3

dup2(3,1)

为什么要用 /dev/null 2>&1 这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.下面我就为大家来说一下, 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 这样的写法.

https://www.jb51.net/article/169837.htm

https://www.cnblogs.com/hanby/p/14291271.html

https://blog.csdn.net/nmjhehe/article/details/109342016

shell 重定向到文件相关推荐

  1. Linux Shell 重定向到文件以当前时间命名

    我们经常在编译的时候,需要把编译的过程日志保留下来,这时候这个命令就非常重要了. make |tee xxx_$(date +%y%m%d%H%M%S).txt

  2. 如何理解Linux shell中的“2>1”(将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出))(尼玛>符号竟然不支持搜索,害我搜搜不到,只能搜)

    文章目录 前言 有何妙用 如何理解 总结 前言 有时候我们常看到类似这样的脚本调用: ./test.sh > log.txt 2>&1 这里的2>&1是什么意思?该如 ...

  3. linux重定向多个文件,Linux base shell重定向详解

    一.标准输入,标准输出与标准错误输出 在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名 ...

  4. Linux Shell重定向 管道命令 grep搜索 awk编程 sed文件操作高阶函数

    在编程中如果能够熟悉shell高阶语法,将对我们进阶为高级程序员有很大的帮助,本文将从Shell重定向 管道命令 awk编程 sed等方面展开介绍. 作者:有勇气的牛排 文章目录 1 shell重定向 ...

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

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

  6. Linux下Shell重定向

    1. 标准输入,标准输出与标准错误输出 Linux下系统打开3个文件,标准输入,标准输出,标准错误输出. 标准输入:从键盘输入数据,即从键盘读入数据. 标准输出:把数据输出到终端上. 标准错误输出:把 ...

  7. linux shell读取文件,Linux shell逐行读取文件的方法

    方法1:while循环中执行效率最高,最常用的方法. function while_read_LINE_bottm(){ While read LINE do echo $LINE done } 注释 ...

  8. python控制台输出到文件_Python print 立即打印内容到重定向的文件

    看到本文标题也许要奇怪了,Python 的 print 难道不是也上可以看到结果的吗?在 Python shell 下只要 >> print('Hello world!') Hello w ...

  9. Linux shell逐行读取文件的方法-比较

    From: http://www.embeddedlinux.org.cn/html/jishuzixun/201211/19-2387.html 在linux中有很多方法逐行读取一个文件的方法,其中 ...

最新文章

  1. 利用linux自带的邮箱服务实现邮件转发
  2. application context not configured for this file?
  3. Jenkins构建之常用的触发器和Git Hook自动构建
  4. Windows用户密码基础知识
  5. Mac彻底卸载搜狗输入法
  6. Swift - 通过url地址打开web页面
  7. HDU 5009 Paint Pearls
  8. Aspose.PDF使用教程:使用 C# 创建多列 PDF 文档
  9. 服务器数字显示器,数字显示器
  10. oracle detele,Oracle中,一个Delete操作的流程
  11. Codeforces Round #828 (Div. 3) E1. Divisible Numbers (easy version) 解题报告
  12. 淘晶驰串口屏入门(三)按钮、双态按钮、状态开关、图片、切图、触摸热区
  13. JDBC连接mysql遇到的问题
  14. 上海亚商投顾:沪指窄幅震荡 “中字头”概念股又暴涨
  15. Linux各个发行版本代号整理
  16. kettle资源库备份
  17. python聚类wardhierachical_聚类之hierachical clustering算法
  18. 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3
  19. mysql怎么用check_MySQL数据库mysqlcheck的使用方法
  20. Cisco—HSRP下实现DHCP主备冗余

热门文章

  1. Vue实现放大镜,但是放大图片跟着鼠标移动
  2. 浏览器当前安全设置不允许发送html表单,当前安全设置不允许发送html表单。怎么办?...
  3. Python 3D可视化(一)
  4. Element Plus 实例详解(二)___Button 按钮
  5. NVIDIA AGX Xavier 部署 CUDA-PointPillars
  6. 一个超级好的学习网站!!!
  7. Matlab表白代码(简单)
  8. 计算机应用基础(专)【8】
  9. 史上最通俗易懂的CPU知识!一分钟秒懂主频、核心、线程、架构!
  10. Web前端大作业 体育主题足球网页制作 足球梅西HTML网页设计制作 dreamweaver学生网页源代码...