结合此图可更直观了解数据流
1.标准输入、输出和错误输出数据流(数据流有多种在这里只讨论以上三种)
• 标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
• 标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
• 标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。
数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:
• 标准输入(stdin):代码为0
• 标准输出(stdout):代码为1
• 标准错误输出(stderr):代码为2
2. 重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
• 输出重定向操作符:>、>>
• 输入重定向操作符:<、<<
3.输出重定向操作符使用说明
使用形式 功能
命令 > 文件或设备 将命令执行后的标准输出信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 2> 文件或设备 将命令执行后产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 >/dev/null 将命令执行后所产生的错误信息不往默认的屏幕上显示,而是写入到空设备文件中,即将输出的错误信息丢弃
命令 &> 文件或设备 将命令执行后的正确输出信息和错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 >> 文件或设备 将命令执行后的正确输出信息以追加的方式写入到指定的文件中(不覆盖原文件内容,若指定的文件不存在,则自动创建该文件 )
命令 < 文件 使命令从指定的文件中读取数据作为输入
命令 << 结束字符串 在命令行读取数据作为输入,直到遇到指定的结束标识字符串
4. 输出重定向案例
标准输出重定向:1> 或 > 、1>> 或 >> (将原有的数据替换掉)
标准错误输出重定向:2> 、2>>
案例1:输出重定向(覆盖)
[root@localhost ~]# date 1> date.txt
执行完这条命令后可以 cat date.txt 一下。如图:
案例2:输出重定向(追加)
[root@localhost ~]# date >> date.txt
如图:
案例3:错误输出重定向
[root@localhost ~]# ls /home/ /a >list.txt
ls: 无法访问 /aaaaaaaaa: 没有那个文件或目录
[root@localhost ~]# ls /home/ /a >list.txt 2>error.txt # 重定向到不同的位置
如图:
案例4:正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /a &>list.txt
混合输出(将正确、错误的信息都以覆盖方式写入list.txt文件 )
如图:
案例5:正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /a >list.txt 2>&1
重定向到相同的位置(将标准错误输出重定向到标准输出,”>“ 重定向,默认为标准输出 “1” )
如图:
案例6:重定向到空设备(/dev/null )
[root@localhost ~]# ls /home/ /a >list.txt 2>/dev/null (将错误输出到 /dev/null 空设备,即不会产生错误)
如图:
[root@localhost ~]# ls /home/ /a &>/dev/null(将正确和错误输出都定向到 /dev/null 空设备,即不会产生输出或错误 )
如图:
5. 输入重定向案例
标准输入重定向:< 或 0<、<< 或 0<<
案例1:从文件读取数据作为cat命令的输入
[root@master ~]# echo test > file
[root@master ~]# cat < file
如图:
案例2:标准输入重定向<<并不表示追加,而是表示输入结束的意思,即作为一个结束符
[root@localhost ~]# cat > file3 << end
\> hello
\> end
利用<<右侧的控制字符,我们可以终止输入,不必输入ctrl+d来结束。
[root@localhost ~]# cat file3
hello
如图: