linux中输出重定向
介绍#
- 任何一个程序在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#
把错误输出到“黑洞” ,不会显示在屏幕上
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~