admin 管理员组

文章数量: 1086019

nohup command > out.file 2>1 命令详解

nohup

hup是hang up的缩写,是挂断、挂起的意思,而顾名思义,nohup就是不挂断、不挂起的意思。在 Unix 的早期版本中,每个终端都会通过modem和系统通讯。当用户 logout 时,modem就会挂断(hang up)。并且,当modem和系统断开连接时,就会给系统发送hangup信号来通知其关闭该终端打开的所有进程。 而nohup命令的用途就是让该终端提交的命令忽略该hangup信号,从而能够在系统中继续执行。

当然,nohup命令会解除终端和其打开的进程之间的关联,进程会丢掉STDOUT和STDERR的链接。标准输出和标准错误的缺省会导致输出被重定向到nohup.out文件中。所以在使用nohup命令时,我们通常会在命令的结尾加上"&"来将命令同时放入后台运行。当然我们也可以用">out.file 2>&1"来将输出重定向到out.file文件中。

nohup和末尾&的区别:nohup可以使命令脱离终端执行下去,和命令是前台执行还是后台执行没有关系;&是指让命令后台运行,如果没有nohup,当用户退出(挂起)的时候,命令也会跟着退出。

前台任务和后台任务

Threads can be executing in either foreground mode or background mode. A foreground task is one that displays and controls animations on your graphics pages. Any expression (not a command) entered in a property field (that is Text, Rectangle, Buttion, etc.) is executed as a foreground task.

The difference between a background and foreground task is that a background task can be preempted. That is, if system resources are limited, the task (for example, the printing of a report) can pause to allow a higher priority task to be executed. When the task is completed (or when system resources become available) the original task resumes. Foreground tasks are the highest priority and can not be pre-empted.

FD (file descriptor文件描述符)

在 shell 程式中,最常使用的 FD (file descriptor文件描述符) 有三个, 分别是:

0 是一个文件描述符,表示标准输入(stdin)

1是一个文件描述符,表示标准输出(stdout)

是一个文件描述符,表示标准错误(stderr)

在标准情况下, 这些FD分别跟如下设备关联: 
stdin(0): keyboard 键盘输入,并返回在控制台 
stdout(1): monitor 正确返回值 输出到控制台 
stderr(2): monitor 错误返回值 输出到控制台

> 重定向符

>是重定向符,就是把前面的输出内容重定向到后面指定的位置(文件),比如>out.file就是将标准输出重定向到out.file文件。

&描述符

& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。

1>&2 意思是把标准输出重定向到标准错误,等价于>&2。

2>&1 意思是把标准错误输出重定向到标准输出。

&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中

command>out.file 2>a 与 command>out.file 2>&1的区别

command 1>out.file 2>&1与command 1>out.file 2>out.file 的区别在于前者只打开一次文件out.file,后者会打开文件两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的out.file。从IO效率上来讲,command 1>out.file 2>&1比 command 1>out.file 2>out.file的效率更高。

/dev/null

在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。
在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。

在类Unix系统中,想要查询某个文件时,常常会使用如下命令:

find / -name  fileName

但如果当前账号的权限不够大的化,就会发现查询结果中会有大量的Permission denied,影响我们想看的结果:

find: /.DocumentRevisions-V100: Permission denied
find: /.fseventsd: Permission denied

在这种情况下,即使结合grep命令也无法过滤掉这些Permission denied日志:

find / -name  fileName | grep fileName

这个时候,/dev/null就派上用场了,我们可以将错误日志重定向到/dev/null中:

find / -name  fileName 2>/dev/null

/dev/zero

/dev/zero  : 在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是创建一个指定长度用于初始化的空文件,像临时交换文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。

参考博客:

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

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

3、.html nohup命令

4、 前台任务和后台任务

5、 Linux 下 2>&1 >2& 的理解

6、.html  Shell特殊变量:Shell $0 $# S* $@ $? $$

7、  Linux-hup信号的干扰问题

8、 Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比

9、.html  linux后台运行和关闭、查看后台任务

 

本文标签: nohup command > outfile 2>1命令详解