在crontab定时器中有如下类似的脚本:

0 2 * * * php /data/test/test.php >/dev/null 2>&1 &

其中 > 代表重定向符(更准确的说应该是文件描述符),而

数字1一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result

,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.其中0

表示键盘输入 1表示屏幕输出

2表示错误输出.把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。

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

command > file 2>&1

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

command 2>&1 >file

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

用strace可以看到:

1. command > file 2>&1

这个命令中实现重定向的关键系统调用序列是:

open(file) == 3

dup2(3,1)

dup2(1,2)

2. command 2>&1 >file

这个命令中实现重定向的关键系统调用序列是:

dup2(1,2)

open(file) == 3

dup2(3,1)

可以考虑一下不同的dup2()调用序列会产生怎样的文件共享结构。

linux tab的含义,理解Linux中crontab定时器里的 21 含义 - 金牛座, 爬山虎, PHPCreeper, Workerman, Swoole, PHP爬虫引擎, PHP爬...相关推荐

  1. 深刻理解linux进程间通信 pdf,深刻理解Linux进程间通信.doc

    深刻理解Linux进程间通信.doc 深刻理解 Linux 进程间通信(IPC)级别 初级 郑彦兴 国防科大计算机学院 2002 年 12 月 11 日 一个大型的应用系统,往往需要众多进程协作,进程 ...

  2. 深入浅出地理解STM32中的定时器工作原理

    深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...

  3. 《Linux游戏编程》——理解Linux文件系统标准

    Linux游戏编程 Programming Linux Games [美]John R. Hall 著 作者:[美]John R. Hall 单位:Loki Software, Inc. 时间:200 ...

  4. linux ls 输出对齐,理解 Linux 中 `ls` 的输出

    ls 的输出会因各 Linux 版本变种而略有差异,这里只讨论一般情况下的输出. 下面是来自 man page 关于 ls 的描述: $ man ls ls - list directory cont ...

  5. linux cpu load 值,理解Linux系统中的load average(图文版)转

    一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount ...

  6. linux poweroff关机信号,理解 Linux 中的 Shutdown、Poweroff、Halt 和 Reboot 命令

    在本篇中,我们会向你解释 shutdown.poweroff.halt 以及 reboot 命令.我们会解释当使用可选项时,它们实际做了什么. 如果你想深入管理 Linux 服务器,那么为了有效和可靠 ...

  7. linux janus命令,深入理解janus中的plugin管理

    janus中的plugin是其非常重要的一部分内容,今天我们就来对这块内容做一下分析,看看janus是如何实现plugin的,以及它的工作原理是怎样的. janus的架构模型 janus的最大特色就是 ...

  8. Linux X64 粗糙的理解函数中的指令调用(call,leave,ret)和栈的使用过程(push pop)

    #include"../common"//.intel_syntax noprefix#define as(...) asm volatile(__VA_ARGS__)/*函数的内 ...

  9. linux内核进程状态,深入理解 Linux 内核学习笔记(一):进程

    进程 进程是任何多通道程序设计的操作系统中的基本概念,进程通常被定义为程序执行时的一个实例,在 Liunx 的源代码中,进程通常被称为 "任务". 进程描述符 进程描述符的作用是为 ...

最新文章

  1. Spring中的Controller ,Service,Dao是不是线程安全的?
  2. linux命令:vim
  3. DSP学习 -- GPS时间校准电脑系统时间
  4. leetcode(3)——414. 第三大的数(C++中的 set,::作用符号,迭代器),628 三个数的最大乘积(sort函数的用法)
  5. [译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞
  6. lunixs 退出mysql_MySQL的基本操作
  7. 数据存储之偏好设置NSUserDefaults
  8. DarkNet yoloV2 转到caffe使用
  9. 【你好,windows】Windows 10 X64 21H1 19043.964 纯净版2021.5.2
  10. 基于javaweb+jsp房屋租赁系统(java+SSM+jsp+mysql+maven)
  11. 如何实现1080P延迟低于500ms的实时超清直播传输技术
  12. Elasticsearch Index Aliases详解
  13. android程序突然崩溃如何调试,Android应用开发android 调试崩溃Unable to instantiate application的解决方法...
  14. 删除服务残留注册表_流氓软件卸载残留?不存在的!软件里的扫地僧来了~
  15. Linux 网络驱动 phy 读写寄存器调试方法
  16. 皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
  17. 完整的门店CRM客户管理系统原型设计
  18. 网页上传至服务器失败,网页上传到云服务器失败
  19. 识别车牌号码demo php,Android车牌识别 Demo 源码 能识别蓝色和黄色车牌的OCR android版本...
  20. 微信小程序侧边栏+语音记账本(主页面)

热门文章

  1. 河北大学工商学院计算机分数线,河北大学工商学院录取分数线()
  2. linux java heap space_Linux tomcat9 java.lang.OutOfMemoryError: Java heap space 解决方法
  3. 周长相等的正方形面积一定相等_三年级下册数学期末重点——面积
  4. java when for where_JAVA_EE_MyBatis之动态SQL
  5. 使用mysql命令还原student表_自用mysql自带命令实现数据库备份还原的方法
  6. php 小程序页面传参,介绍小程序中传递参数的实现方法
  7. springboot响应结果超长(7.8M)浏览器无法接收
  8. 数据科学入门的5个技巧
  9. 从Powershell ***脚本学到的如何执行后台runspace~
  10. ubuntu sudo apt-get update 失败 解决方法