linux中输出重定向

介绍#

image

  • 任何一个程序在Linux中运行,Linux系统都会为其创建3个已经打开的stream,分别用来输入(0:stdin),输出(1:stdout),打印诊断和错误信息(2:stderr)。通常他们会被连接到用户终端。这3个句柄的类型为指向FILE的指针。可以被fprintf、fread等函数使用,他们在程序开始启动后,stdin, stdout, and stderr 的文件描述符是 0, 1和2,其它的文件描述符则排在其后
  • 从图中可以看到1代表标准输出,什么是标准输出?就是往屏幕上输出!
  • 同样的0代表标准输入,就是键盘输入!
  • 标准错误输出,就是往屏幕上显示错误信息!
  • 0, 1 和 2 常与操作符一起用,表示输入重定向或输出重定向!

重定向 >#

运行程序时,加上 "> 文件名",即可将代码中标准输出(stdout)的字符串输出到指定文件中。

//屏幕的输出重定向至t.log 文件
echo "hello" > t.log
echo "hello" 1> t.log 
1 > t.log 等同于 > t.log

标准输出和标准错误输出分别指定到不同的文件中#

[root@test]$ ls test >succ.log  2>err.log  `test文件夹真实存在,产生标准日志`
[root@test]$ cat succ.log
a.txt
[root@test]$ ls xxx >succ.log  2>err.log    `xxx文件夹不存在,产生错误日志`
[root@test]$ cat err.log
ls: cannot access xxx: No such file or directory   		`果然错误日志被重定向到err.txt`

标准输出和标准错误输出指定到同一个文件中#

[root@test]$ ls test >my.log 2>my.log   `test文件夹真实存在,产生标准日志`
[root@test]$ ls xxx >my.log 2>my.log    `xxx文件夹不存在,产生错误日志`

2 > & 1#

  • 2 代表错误标准输出,1代表标准输出,“2>&1”是一种优化写法,表示把标准错误输出也输出到标准输入所指定的文件中
[root@test]$ ls test >my.log 2>& 1
[root@test]$ ls xxx >my.log 2>& 1

符号>&是一个整体,不可分开,">"表示重定向,但是为了避免把1当成普通文件1,通过>&1,表示指向一个对象1,对象1对应着前面的标准输出!

追加 >>#

运行程序时,加上 ">> 文件名",即可将代码中标准输出(stdout)的字符串追加到指定文件末尾

黑洞#

  • /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃,俗称“黑洞”
  • 它非常等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到,然而,/dev/null对命令行和脚本都非常的有用。

1> /dev/null#

将正常信息出入到黑洞

 echo "httpd server is running" >> /dev/null  #如果不希望将信息打印到屏幕,可以输出到黑洞

2> /dev/null#

把错误输出到“黑洞” ,不会显示在屏幕上

作者:hasome

出处:https://www.cnblogs.com/hasome/p/17993994

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   hasome  阅读(230)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示