输出
学过代码的小伙伴应该知道STDIN、STDOUT、STDERR
通常都是指定输出通道的,perl里又称之为句柄
那么1代表的就是STDOUT、2代表的是STDERR、
jimmy在视频中会翻译成1代表的是正确输出,2代表的是错误输出。
其实严格上不能这样去固有化去理解每一个软件的定向输出是正确还是错误,因为定义谁是正确输出还是错误输出,是写软件的人说的算呢,比如软件运行中的日志信息,通常一般会定向到STROUT里,万一有人会定向到错误输出流呢
但是不管肿么样,他都是软件的日志信息,正确的提示日志也罢,错误的提示日志信息也罢,但凡提交到后台的任务,如果运行异常,我们就必须查询日志信息,这是任何一个运行任务或者前端端口必需学习的一个事情!因为有时候,即使运行没错,你也可能需要查询一下日志信息才能确认真的是正确的!
反正说了这么多,保存日志信息就是很重要。怎么理解呢,运行下面两句代码
find / -name '*gz'
# 功能:找到存储在这个服务器内所有gz结尾的文件
find / -name '*gz' 2>~/error.txt
避免屏幕上出现很多报错信息,影响找到正确信息,如find: ‘/lost+found’: Permission denied,所以吧错误信息输出到一个没用的文本内
运行示例:
image.png
image.png
image.png
为什么有1和2
我是这样理解的,通常一个程序有正确也有错误信息,但是我们有时候用>重定向符的时候会捕获正确输出,并且存到文本里面,但是如果错误输出也输入进去了,那么我们还要去用肉眼检查吗?如果文件很大的话,核查起来很困难的。再加上,我们希望报错信息在提交任务的时候尽可能出现在屏幕上,让我们能看到,因此正确和错误信息在计算机里确实是有两个输出流的~
1>log 2>&1
nohup ... &
这里的...是指你的代码,或者一个.sh的文本,(如果不懂的话,请学习linux下任务提交以及如何后台运行任务)
# ...是任务命令,一下是不同格式的理解
... 1>log1 2>log2 &
# 会生成两个文本,一个是log1,一个是log2,
# 打开了两个文件
... 1>log1 2>&1 &
# 会生成一个文本,1和2的输出流都输出到了log1里面
# 打开一次文件
... 1>log1 2>log1 &
# 错误用法,因为>重定向符号是打开文本前先清空,所以2在写入文件的时候,会清空log1。会导致信息的丢失
不理解的直接做法
... 1>log1 2>&1 &
# 最佳做法,少存一个文本
# 为什么我不担心正确信息会和错误信息存一起呢,那怎么办
# 那是因为通常软件的正确结果信息,已经被输出到了一个文件内了,这里的1通常捕获的是日志信息,比如gatk的日志信息,特别多,约每10s都有一行运行提示信息
结束
打字打到手指痛,好心疼我的手指,大家再会。有错误/问题,直接留言!!!