linux stdout重定向

linux - 标准流 stdin、stdout、stderr;文件描述符fd git add test.txt 在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: rm test.txt 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: ... 阅读详情

标准输出(stdout)指的就是在命令行里,每次你输入指令后,终端上打印出来的那些话,那些反馈。标准错误(stderr)跟标准输出差不多,只不过是程序出错时反馈的内容。标准输入(stdin)就是程序指示让你输入用户名密码之类的这种,这里不多谈输入。

问题是,我们很常用的会让一些脚本自己在后台24/7运行,这种时候脚本的输出内容到屏幕上(标准输出)也没什么意义,我们看不到也保存不了。所以最好让它把反馈的内容全部直接写如一个文件里,我们叫日志文件,其实就是个txt。然后我们自己可以查看日志来看到底发生了什么。

这种把显示到屏幕的程序反馈,变成存到文件里的动作,我们叫做输出重定向(stdout redirection)

在命令行里,我们可以用符号直接把程序输出转向到某个文件或某个程序,如下:

$ git push > log.txt

然后,理论上我们平常git push后的反馈就会保存到log.txt这个文件里了,且屏幕上不会显示任何东西。
但其实这个还是有问题的,因为事后我们发现有一些存到了log.txt,还有一些话漏网显示到了屏幕上,没存进去文档里。
其实原来这些显示到屏幕上的反馈有些是stdout有些是stderr,我们用>或>>符号重定向,只是默认重定向stdout,没有重定向stderr,所以会有漏网之鱼。对此,我们需要了解下这个符号的设定,和怎么把stderr也包括进来,一起重定向过去。

重定向符号和语句

稍微会一点点linux命令的,都会用到cmd > file这样的语句,把命令反馈的输出到一个文件里。当然还有cmd >> file,这是把内容追加到文件里,而不是重新擦写一遍。>这个符号可以念redirect to。
实际上,重定向有很多种设置和配合,让你可以分别重定向标准输出和标准错误,或者一起重定向,然后还可以选择是只输出到文件里还是同时输出大显示屏上和文件里。
这里我们就要了解一下设置重定向的基本语法了,如下:

  • > 以擦写的模式重定向至...
  • >> 以追加的模式重定向至...
  • 1 代表stdout标准输出
  • 2 代表stderr标准错误

所以,cmd > file实际上是缩略了的写法,理解起来,应该是cmd &1> file,也就是只把标准输出转出去。
那么同理,只把标准错误转出去,就应该是cmd &2> file。
其中,&符号没任何实际意义,只是以至区分,代表后面的符号是要设置重定向用的,而不是某个文件的名字。

2>&1

每次查重定向问题时,我们总会看到这句话,一般人很难理解这到底是在干嘛。我一开始以为是2要大于1什么的,真是笑话。
其实这是个重定向的设置,设置让2重定向到1,也就是让stderr标准错误重定向到stdout标准输出,然后两个并在一起再重定向。其中&没什么意思只是区分开来1是代表stdout而不是代表一个文件名。
用起来的格式是:cmd > file 2>&1。
为什么设置要放在后面呢?
具体暂时还不知道,只知道是这么用,放在前面还不行只能放在后面。

比如:

$ git push > log.txt 2>&1

那么这时候,屏幕上就真的不会显示任何东西了,标准输出、标准错误,全部都会存到log.txt文件里了。

常用重定向及解释

参考文章:stackoverflow回答

image

  • command > output.txt

The standard output stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, it gets overwritten.

  • command >> output.txt

The standard output stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

  • command 2> output.txt

The standard error stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, it gets overwritten.

  • command 2>> output.txt

The standard error stream will be redirected to the file only, it will not be visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

  • command &> output.txt

Both the standard output and standard error stream will be redirected to the file only, nothing will be visible in the terminal. If the file already exists, it gets overwritten.

  • command &>> output.txt

Both the standard output and standard error stream will be redirected to the file only, nothing will be visible in the terminal. If the file already exists, the new data will get appended to the end of the file..

  • command | tee output.txt

The standard output stream will be copied to the file, it will still be visible in the terminal. If the file already exists, it gets overwritten.

  • command | tee -a output.txt

The standard output stream will be copied to the file, it will still be visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

  • (*)

Bash has no shorthand syntax that allows piping only StdErr to a second command, which would be needed here in combination with tee again to complete the table. If you really need something like that, please look at "How to pipe stderr, and not stdout?" on Stack Overflow for some ways how this can be done e.g. by swapping streams or using process substitution.

  • command |& tee output.txt

Both the standard output and standard error streams will be copied to the file while still being visible in the terminal. If the file already exists, it gets overwritten.

  • command |& tee -a output.txt

Both the standard output and standard error streams will be copied to the file while still being visible in the terminal. If the file already exists, the new data will get appended to the end of the file.

linux stdout/stderr重定向到文件,>或tee 正常情况下直接使用 '>'或者tee命令只能把stdout的终端输出重定向到文件中,而stderr的输出是无法写到文件中的。比如在使用svn up时遇到svn 报错的错误,svn ERROR/WARNING用下面的语句是不会将ERROR/WARNING行写到svn.log的要想同时将这两类输出都写到文件中,可以如下操作。 阅读详情

相关推荐

Linux- 深入理解文件描述符:stdout与stderr重定向的底层逻辑

本文深入解析Linux文件描述符的底层机制,重点探讨stdout与stderr重定向的原理与实践技巧。通过实际案例演示如何正确使用重定向操作符、/dev/null设备及管道组合命令,帮助开发者避免常见陷阱并优化日志管理,提升Linux系统运维效率。

dy_f的专栏 432

stdout(打印函数)的重定向

调用printf时,打印不再输出在终端,而在文件中。

weixin_42549534的博客 989

STDOUT和STDERR,以及它们的重定向

STDOUT和STDERR,以及它们的重定向。

DongAoTony的博客 2735

重定向stdout的输出

在这种方式下只有当调用close函数时数据才会写入到文件,若需要实时写入到文件,则设置stdout的缓存为空,setbuf(stdout, NULL)。使用freopen函数指定stdout重定向到output.txt 文件中,后续程序中printf函数打印都会输出到文件。stdout 标准输出 屏幕。默认的输入输出都是有指定的文件描述符,而且是固定的。这样就可以让标准输出被系统直接扔掉,或者。所以我们再运行程序是可以使用以下方式。1. 程序启动的时候指定输出。

qq_41851997的博客 908

【YOLOV5-5.x 源码讲解】整体项目文件导航

前言 这个项目是github的开源项目,YOLOV5:https://github.com/ultralytics/yolov5,目前已经有14.1k个Star 和 4.9k 个Folk了,非常的火。下面我会给大家逐个的文件介绍这个项目中的所有代码,希望能帮到大家。 我下的2021年4月12日更新的v5.0版本,整个项目我做了一点点的文件位置的改变,也加了点自己在其他论文中学到的tricks,不过我没有删除它源码任何一个代码。下面我会按文件逐个函数的进行攻破,因为我本人也还是研一,肯定会有很多的不足,希望大

qq_38253797的博客 6万+

TMC5160电机驱动芯片实战:从模式选择到参数配置全解析

本文深入解析TMC5160电机驱动芯片的实战应用,涵盖三种核心工作模式的选择策略与参数配置。详细介绍了全功能运动控制、外部脉冲驱动及独立驱动模式的应用场景与配置要点,并提供了电流控制、静音优化、SPI通信及高级功能(如StallGuard2)的调优指南,帮助开发者充分发挥其高精度、低噪音性能。

weixin_29179311的博客 322

linux 系统标准输出、标准输入、标准错误 io 详解

linux 系统标准输出、标准输入、标准错误 io 详解

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 1302

altium room 布局_ALtium 16相同重复模块PCB布局,复制布局走线

自己做了实际工程以后发现PCB器件名字后缀太长了,所以文章最后写了一下后缀的调整方法。第一种方法:1、建立子原理图如下,文件名CANM 2、之后新建一个顶层文件,文件名TOP,之后design—create sheet symbol form sheet or hdl。选择CANM,并放置到TOP中,如下 3、由于我们要多次调用CANM所以使用repeat命令修改如下: 4、之后根据自己的定义,连...

weixin_39609573的博客 5749

linux 进程 stdout,linux下的stdin,stdout和stderr理解和程序实例分析

玩linux的时候经常会看到stdin,stdout和stderr,这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出(standard error)。通过man stdin查看手册,可以看到它们都是在stdio.h中定义的。 当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出...

weixin_29579377的博客 1765

axi时序图_(AXI)握手协议(pvld/prdy或者valid-ready)中ready打拍技巧

内容提要ready打拍的问题用FIFO的思路去解决用Buffer的思路去解决问题提出:ready时序如何优化?在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解,(不熟悉valid/ready协议或者valid打拍方法的)大家可以参考上次推送(握手协议(pvld/prdy或者valid-ready或AXI)中Valid及data打拍技巧)。 但是有时候,关键路径是...

weixin_29763641的博客 3323

Python逻辑回归——以车险定价为例(附代码)

保费定价也成为费率厘定,是保险公司运营的环节之一。其过程是根据保单(被保险人)的损失经验和其他相关信息建立模型,并且对未来的保险成本(赔款、代理人佣金、一般管理费用、理赔费用以及支持该业务所需的资本金成本)进行预测的过程。保险公司实际使用的费率还会受到市场供求关系和公司自身发展战略的影响。汽车保险也称机动车辆保险,失意机动车辆本身及其第三者责任等为保险标的的一种运输工具险,在非寿险井算领域中占有重要地位。

m0_62929945的博客 1984

Linux C stdin stdout 以及重定向

最近观摩了一下Tinyhttpd的源码,Tinyhttpd 是J. David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server。 官网:http://tinyhttpd.sourceforge.net/ 别人的总结:https://github.com/EZLippi/Tinyhttpd 其中有一段: 管道、重定向!! 自己来写个demo来...

ZRXSLYG的博客 2300

Unity中基于SkinMeshRenderer的骨骼动画换装系统优化实践

本文深入探讨了Unity中基于SkinnedMeshRenderer的骨骼动画换装系统优化实践。针对换装卡顿、显示错误等常见问题,文章剖析了SkinnedMeshRenderer的核心数据原理,对比了“数据替换”与“实体替换”两种主流方案的性能差异,并详细阐述了通过骨骼字典缓存、对象池管理、材质合并与Draw Call优化等实战技巧,构建高性能、高稳定性的生产级换装系统。

weixin_29008055的博客 314

如何在Linux上重定向sudo命令的STDOUT并以root身份写入文件?

A try like the following command failed 像下面的命令尝试失败 $ sudo echo "echo hello" > /usr/local/bin/hellowith an message 一条消息 bash: /usr/local/bin/hello: Permission deniedIt seems the writing to the fil...

cuma2369的博客 669

生成式引擎优化(GEO)标准化操作流程:构建高效AI生成系统的全链路指南

GEO是针对生成式AI的内容优化策略,通过提升内容在AI生成答案中的引用优先级实现品牌传播。相比传统SEO,GEO使内容直接嵌入AI答案,无需用户点击链接。核心流程包括:1)逆向拆解AI问答场景,结构化知识资产;2)生产权威内容(白皮书、专利数据)和算法适配内容(PCOE模板);3)技术实现(数据投喂、模型微调);4)331渠道分发策略;5)效果监控与动态防御。需注意采用结构化数据标记、主动提交训练数据,并避免简单复制SEO策略。2025版强调内容权威性和语义优化,通过AI原生内容工程实现高效曝光。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1160

uniapp - 实现扫码功能自定义扫描二维码/条码界面+手电筒轻触照亮+扫码屏幕添加手动输入框,手机扫描二维码并跳转过程,调用手机原生摄像头进行扫码且自动识别执行事件(uniApp安卓苹果App端)

uniapp,app端,安卓app,苹果ios,uniapp扫码识别,二维码展示和扫码,uniapp如何实现扫码功能,uni-app实现扫码功能,二维码和一维码/条码扫描,UniApp实现扫描二维码,uniapp开发原生app页面的扫码功能,自定义扫码界面,uniapp怎么调用扫一扫功能,app自定义扫码界面,uniapp 自定义扫一扫页面,扫码手电筒功能,自定义扫描框,扫码报错怎么办,扫码黑屏,扫一扫摄像头黑屏,uniapp扫码原生插件,最新扫码组件,连续扫码,uniapp APP扫码,扫码后如何处理跳转

✅ 精选推荐文章 1万+

linux重定向stderr,在Bash和其他Linux Shell中将stderr重定向到stdout的方法

本文介绍重定向输出及在Bash和其他Linux Shell中将stderr重定向到stdout的方法。前言将命令的输出重定向到文件或将其通过管道传递到另一个命令时,您可能会注意到错误消息被打印在屏幕上。在Bash和其他Linux Shell中,执行程序时,它使用三个标准I/O流,每个流都由一个数字文件描述符表示:0 - stdin,标准输入流。1 - stdout,标准输出流。2 - stderr...

weixin_29794879的博客 2691

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux程序 stdout stderr 重定向问题

linux 应用程序 stderr stdout 输出到指定目录

Terminator的专栏 2333

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

c++输出重定向 linux,C++ stderr/stdout 重定向到文件

通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。stderr/stdout 重定向到文件这里以stderr代码说明。#include #include int main( void ){FILE *stream = freopen( "freopen.ou...

weixin_39633090的博客 1226

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux 技巧:重定向 stderr 和 stdout 输出到 gdb 窗口

Linux 技巧:重定向 stderr 和 stdout 输出到 gdb 窗口 http://www.ibm.com/developerworks/cn/linux/l-cn-redirect/index.html

拾贝者 801

如何在Linux Bash中将Stderr重定向到Stdout?

I have an application. This application can be run from the command line. This application is a bit old and requires some optional libraries but I can not find them because of this libraries are depre...

cunjiu9486的博客 1100

Linux 标准输出(stdout)和标准错误(stderr)的重定向

原文地址::https://segmentfault.com/a/1190000015143583 相关文章 1、Chapter 20. I/O Redirection----http://www.tldp.org/LDP/abs/html/io-redirection.html 2、Linux重定向:将标准输出stdout和标准错误stderr重定向到一个文件----https://www...

xqhrs232的专栏 971

linux 输出重定向_Linux--文件描述符和stdin,stdout,stderr

基本概念1. 文件描述符总览: 当一个程序成功向操作系统请求访问一个打开的文件, 内核会返回一个指向内核中全局文件表(global file table)中的入口点(entry)的文件描述符. 文件表入口点包含如: 文件的inode(硬盘中的位置), 字节偏移量(byte offset), 以及对这个数据流的访问限制(只读, 只写等). 整个过程如下图所示:文件描述符: 是计算机操作系统中被打开文...

weixin_39533432的博客 275

利用stdin stdout stderr及POSIX-linux机制重定向写日志

利用stdin stdout stderr及POSIX-linux机制重定向写日志 由open返回的文件描述符一定是该进程尚未使用的最小描述符。由于程序启动时自动打开文件描述符0、1、2,因此第一次调用open打开文件通常会返回描述符3,再调用open就会返回4。可以利用这一点在标准输入、标准输出或标准错误输出上打开一个新文件,实现重定向的功能...

weixin_34130269的博客 109

Linux 重定向入门:彻底搞懂 stdout、stdin、stderr 和 `>`、`|`、`tee`

stdout就是标准输出,表示命令执行成功后产生的正常结果。这个命令会把发送到stdout,而默认情况下,stdout会显示在终端上,所以你就看到了这行文字。stdin是标准输入,也就是命令接收数据的入口。最常见的标准输入来源就是键盘。cat这时你在终端输入什么,cat就会接收什么;按Ctrl + D可以结束输入。除了键盘,stdin还可以来自文件,或者来自上一个命令的输出。这里的不从键盘读入而是把demo.txt的内容交给wc -l作为输入stderr是标准错误输出,用来输出错误信息。

Zy100Papa的博客 185

linux shell 屏幕显示stdout stderr的同时 分别重定向到文件

I'm assuming you want to still see STDERR and STDOUT on the terminal. You could go for Josh Kelley's answer, but I find keeping a tail around in the background which outputs your log file very hacki

LEEtcWorks 8067
上一篇: /proc/$pid 进程信息说明
下一篇: amd opencl使用低版本驱动
dataowner
博客等级 码龄19年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值