从零开始学习Linux(三十三):Shell基础之输入输出重定向
2020-12-24 本文已影响0人
通靈鹿小六
1、标准输入输出
设备 | 文件名 | 类型 | 文件描述 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
查看/dev目录下面所有的文件信息,如下图所示:

2、输出重定向
输出重定向,简单的理解就是改变输出方向。比如将命令执行结果由输出到屏幕改变成输出到文件。
2.1、标准正确输出重定向
符号 | 作用 |
---|---|
命令 > 文件 | 以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。 |
命令 >> 文件 | 以追加的方式,把命令的正确输出,输出到指定的文 件或设备当中。 |
将date命令结果输出到文件output.txt中,然后查看文件内容:

2.2、标准错误输出重定向
符号 | 作用 |
---|---|
错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出,输出到指定的文件或设备当中。 |
错误命令 2>> 文件 | 以追加的方式,把命令的错误输出,输出到指定的文件或设备当中。 |
此种方式很少会用到,因为这要求使用之前我们必须要清楚的知道这是一个错误的命令。
(1)date命令是正确输出时间的,而datel命令会报错。
(2)直接执行错误命令 datel >> output.txt ,将结果输出到文件,命令同样报错;
(3)执行命令 datel 2 >> output.txt,命令同样报错,2和>>之间不能有空格;
(4)必须使用命令 datel 2>> output.txt,将错误结果输出到文件;
整个命令执行过程,如下图所示:

2.3、正确输出和错误输出同时保存
符号 | 作用 |
---|---|
命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 &>> 文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 >> 文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
命令 >> 文件 2>&1 和 命令 &>> 文件,这两种保存结果都一样,只不过方式不一样。
(1)执行命令,将date正确输出结果输出到output.txt;
(2)执行命令,将datel错误输出结果输出到output.txt;
(3)查看output.txt文件内容;
整个执行过程,如下图所示:

测试 &>> 方式结果一样。
特殊用法:&>> /dev/null 不管命令是否正确,直接丢弃,不做任何数据保存。
3、输入重定向
不通过键盘输入,通过文件输入,在实际场景中应用不多。
把文件作为命令的输入:命令 < 文件。
wc命令统计输入的信息,将文件hello.sh作为wc命令的输入,然后进行统计:

显示结果从左到右依次是:行数、单词数、字节数。
3.1、wc命令
命令格式:wc [选项] [文件名];
选项说明:
- -l 统计行数;
- -w 统计单词数;
- -c 统计字节数;