linux系统输出重定向浅析

当初刚刚接触Linux的时候,在定时脚本里面发现了一个比较特别的字段(>>/dev/null 2>&1 &),所以今天来看看这个是代表什么意思?顺便学习一些Linux的重定向知识。


在这里会先来了解一些Linux的重定向的知识,在Linux里面,默认打开的文件描述符有三种,它们是标准输入,标准输出以及标准错误输出。我们知道一个程序一般具备有输入参数,同是有输出参数,不过输出参数有两种类型,当程序执行正常的时候的输出称为正确输出,而当程序出现异常的输出则称之为错误输出。在Linux的shell里面这三个的描述大概如下图:

linux系统输出重定向浅析

输入输出


下面我们先看运行一个脚本的执行情况,如下图:

linux系统输出重定向浅析

std

这里,我们看到当程序执行正常的时候输出是对的,而当脚本错误的时候会输出相对应的提示。假设这个是一个任务或许某个组件的二进制,执行的时候要将输出日志都放在一个文件里面,那应该怎么做呢?这时我们就需要用到重定向的功能了,这里需要了解的一个地方是使用的符号,当使用一个大于号的时候,表示覆盖原来文件的里面原有的旧的日志,而使用两个大于号的时候表示在原有的旧的日志上进行追加。如下:

linux系统输出重定向浅析

std2

在这里,我们可以清楚地看到,使用两个大于号的时候没有覆盖原有的日志,我们看log的文件的时候应该还要看到一点,那就是错误的输出没有重定向到日志文件里面,而是直接输出到前台,那我们怎么才能将错误的输出也重定向到文件里面呢?这时就需要将错误的输出先重定向给标准输出,然后一起重定向到日志文件里面,如下:

linux系统输出重定向浅析

std3

这时,我们应该知道基本刚刚开始提的那个问题的答案了吧,不过还有一个&是什么意思呢,这个就是表示让程序在后台运行的意思,所以现在来看看(>>/dev/null 2>&1 &)这个代表的是什么意思吧,首先将错误输出重定向给标准输出,然后将输出重定向给/dev/null这个文件,/dev/null这个文件也是蛮有意思的,我们一般称为空文件,而由于我们无论放什么东西,其实里面都不存在的,所以大家有时候称它为黑洞。最后就是让程序在后台运行。


好了,本篇内容到此结束。

May you share freely, never taking more than you give.



分享到:


相關文章: