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

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

posted @ 2024-01-29 10:36  hasome  阅读(266)  评论(0)    收藏  举报