数据流重定向

通俗来讲,本来数据要传到A处,但让它传到B处

  • 标准输入,代码为0,使用<

  • 标准输出,代码为1,使用>>>

  • 标准错误输出,代码为2,使用2>2>>

标准输出


  • >:以覆盖方式将屏幕输出传到指定文件或设备上

  • >>:以累加方式将屏幕输出传到指定文件或设备上

例子:

[user1@qmmms ~]$ ll > ll_info
[user1@qmmms ~]$ cat ll_info 
总用量 684
drwxrwxrwT 2 user1 basic_users   4096 9月   2 17:24 dir_test
-rw------- 1 user1 basic_users    348 9月  12 15:05 doc
-rw-r--r-- 1 user1 basic_users      0 9月  17 10:39 ll_info
-rw-r--r-- 1 user1 basic_users    752 9月  12 16:13 lucas.cpp
-rwxr-xr-x 1 user1 basic_users   8360 9月   2 13:36 sayhi
-rw-r--r-- 1 user1 basic_users 670293 9月  12 10:46 services
drwxrwxrwt 2 root  root          4096 9月   4 23:05 tmp

标准错误输出


  • 2>:以覆盖方式将屏幕错误输出传到指定文件或设备上

  • 2>>:以累加方式将屏幕错误输出传到指定文件或设备上

例子:

[user1@qmmms ~]$ qmmms 2> wrong_info
[user1@qmmms ~]$ cat wrong_info 
-bash: qmmms: 未找到命令

组合用法


写入不同文件

[user1@qmmms ~]$ find /home -name .bashrc > list_right 2> list_error
[user1@qmmms ~]$ cat list_right 
/home/user1/.bashrc
[user1@qmmms ~]$ cat list_error 
find: ‘/home/qms’: 权限不够

输出转化

  • 1>&2:将标准输出转到标准错误输出

  • 2>&1:将标准错误输出转到标准输出

例子:

[user1@qmmms ~]$ find /home -name .bashrc > list 2>&1
[user1@qmmms ~]$ cat list
find: ‘/home/qms’: 权限不够
/home/user1/.bashrc

黑洞设备

如果对于某些输出,不想在屏幕上看到,也不想保存到文件,那么可以重定向到/dev/null黑洞设备

例子:

[user1@qmmms ~]$ find /home -name .bashrc > list 2> /dev/null         
[user1@qmmms ~]$ cat /dev/null
[user1@qmmms ~]$ 

标准输入


  • <:本来要键盘输入的数据,转而由文件提供

例子:在程序中使用数据文件代替键盘输入

写一个简单加法C++文件(simple_add.cpp)

#include<iostream>
using namespace std;

int main(){
	int n = 0;
	int num = 0;
	while(cin >> num) n += num;
	cout << n << endl;
	return 0;
}

编辑一个数据文件(data.in)

1 2 3 4 5 6 7 8 9 10

编译后执行

[user1@qmmms ~]$ g++ -o ./simple_add simple_add.cpp 
[user1@qmmms ~]$ ./simple_add < data.in 
55

双向重定向


tee命令可以让其他命令的屏幕输出保留,同时留存一份到文件

格式:

其他命令 | tee [参数] 文件

参数:

  • 没有参数,直接覆盖文件

  • -a:以追加的方式加入数据到文件

例子:

[user1@qmmms ~]$ date | tee date_list
2022年 09月 17日 星期六 18:39:24 CST
[user1@qmmms ~]$ cat date_list 
2022年 09月 17日 星期六 18:39:24 CST

最后更新于