1. 数据流
标准输入( standard input ,简称 stdin ):默认情况下,标准输入指从键盘获取的输入
标准输出( standard output ,简称 stdout ):默认情况下,命令执行所回传正确的信息会输出到屏幕上
标准错误输出( standard error output ,简称 stderr ):默认情况下,标准错误输出可理解为命令执行失
败后,所回传的错误信息会输出到屏幕上
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条
数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所
用的特殊字符如下所示:
标准输入( stdin ):代码为 0
标准输出( stdout ):代码为 1
标准错误输出( stderr ):代码为 2
2. 重定向操作符
概念
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。
重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
符号
输出重定向操作符: > >>
输入重定向操作符: < <<
用法
命令 > 文件 或 命令 1 > 文件 : 将命令执行后的结果不在默认的屏幕上显示,而是以覆盖的方式写入到指定文
件中,若指定的文件不存在,则自动创建该文件
命令 2 > 文件 : 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件
中,若指定的文件不存在,则自动创建该文件
命令 2 >/dev/null : 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件(黑
洞)中,即将输出的错误信息丢弃掉
命令 &> 文件 命令 >& 文件 : 将命令执行后的正确输出信息和错误信息不在默认的屏幕上显示,而是以覆盖
的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
命令 >> 文件 : 将命令执行后的正确输出信息以追加的方式写入到指定的文件中,不覆盖原文件内容,若指定
的文件不存在,则自动创建该文件
命令 < 文件 : 使命令从指定的文件中读取数据作为输入
命令 << 结束标识字符串 : 在命令行读取数据作为输入,直到遇到指定的结束标识字符串
4. 输出重定向案例
例 1 :输出重定向(覆盖)
[root@server ~]# date > date.txt
[root@server ~]# cat date.txt
2024年 06月 28日 星期五 20:33:52 CST
[root@server ~]#
[root@server ~]# cat date.txt
2024年 06月 28日 星期五 20:33:52 CST
[root@server ~]#
例 2 :输出重定向(追加)
[root@server ~]# cal 6 2024 >> date.txt
[root@server ~]# cat date.txt
2024年 06月 28日 星期五 20:33:52 CST
六月 2024
一 二 三 四 五 六 日
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
[root@server ~]#
[root@server ~]# cat date.txt
2024年 06月 28日 星期五 20:33:52 CST
六月 2024
一 二 三 四 五 六 日
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
[root@server ~]#
例3:错误输出重定向
[root@server ~]# ls /home
nianwan tom
[root@server ~]# ls /homee
ls: 无法访问 '/homee': 没有那个文件或目录
[root@server ~]# ls /homee > list.txt
ls: 无法访问 '/homee': 没有那个文件或目录
[root@server ~]# cat list.txt
[root@server ~]# ls /homee 2> list.txt # 错误信息重定向
[root@server ~]# cat list.txt
ls: 无法访问 '/homee': 没有那个文件或目录
[root@server ~]#
nianwan tom
[root@server ~]# ls /homee
ls: 无法访问 '/homee': 没有那个文件或目录
[root@server ~]# ls /homee > list.txt
ls: 无法访问 '/homee': 没有那个文件或目录
[root@server ~]# cat list.txt
[root@server ~]# ls /homee 2> list.txt # 错误信息重定向
[root@server ~]# cat list.txt
ls: 无法访问 '/homee': 没有那个文件或目录
[root@server ~]#
例 4 :正确和错误信息都重定向
[root@server ~] # ls /homeee &> list.txt # 混合输出
例 5 :重定向到空设备 /dev/null
例 6 :重定向到黑洞,正确和错误都不显示
[root@server ~] # echo "123456" | passwd --stdin root &> /dev/null
.5. 输入重定向
例 1 :从文件中读取数据作为cat命令的数据来源
例 2 :标准输入重定向<< 并不表示追加,而是表示输入结束的意思即作为一个结束符
# 输入 end 终止输入,不需要按下 ctrl+d 来结束