>/dev/null 2>&1分析

如题所述

Linux的重定向功能允许程序改变输入和输出的方向,例如,通常数据从键盘流入程序,或者从程序流向显示器。然而,通过重定向,数据可以来自或流向其他位置。具体来说,输入重定向是指改变数据流向程序的方向,而输出重定向则改变程序结果输出的方向。

Linux中与输入输出相关的文件描述符默认为标准输入(0)、标准输出(1)和标准错误输出(2)。Linux shell的输出重定向目的主要是控制指令结果不再显示在屏幕上,而是输出到其他文件,也可以选择不输出,避免生成特定文件。

Linux Bash支持的输出重定向语法为 fd>file或fd>>file,其中fd代表文件描述符,通常默认为1,即标准输出。因此,在实际使用中,通常会省略不写。

/dev/null在Linux中代表一个特殊的控制设备,所有写入它的内容都会被忽略,常被比喻为“黑洞”。

&符号表示输出绑定,即重定向绑定。命令2>&1将错误输出(文件描述符2)与标准输出(文件描述符1)重定向到同一个地方,即黑洞。

/dev/null 2>&1同时使用的目的是将标准输出和错误输出都重定向到黑洞,结果是忽略所有输出,相当于将输出结果丢弃。如果颠倒了2和1的位置,即1>&2,那么只会将标准输出重定向到错误输出,不能实现忽略输出的效果。

重定向绑定的目的是让两个输出重定向到同一个地方。尝试通过两次重定向实现同样的效果是不可行的,因为这样做会导致两个输出抢占同一管道,造成输出内容缺失或覆盖,同时,由于同一文件被打开多次,整体的IO效率也会降低。

示例中,当执行ls命令时,若目标文件不存在,会显示错误信息。通过将输出结果重定向到一个名为out的文件中,可以将标准输出结果保存到文件中,避免了在屏幕上显示。进一步,如果将错误输出也重定向到同一文件,那么无论标准输出还是错误输出,都不会显示在屏幕上,而是被丢弃。

使用nohup命令启动程序并将其后台执行时,常常会利用重定向将运行日志写入指定文件,避免了保留日志的需求。通过结合上述知识,可以深入理解nohup命令的含义及其用法。
温馨提示:答案为网友推荐,仅供参考
相似回答