操作系统:centos8
我们在shell终端输入命令,一般来说,输出结果也会显示在shell终端。如果我们使用输出重定向符把输出结果直接保存在文件中,而不是显示在终端,这就是输出重定向。
同理,我们使用输入重定向符,直接以文件来作为命令的输入,这就是输入重定向。
我们先学一下以下三个概念:
- 标准输入(STDIN,文件描述符为0):默认从键盘输入,为0时表示是从其他文件或命令的输出。
- 标准输出(STDOUT,文件描述符为1):默认输出到屏幕,为1时表示是文件。
- 错误输出(STDERR,文件描述符为2):默认输出到屏幕,为2时表示是文件。
ps:对于标准输入和标准输出来说,0和1不用写,只有需要把错误输出重定向到文件时才需要写2 。
1、输出重定向
对于输出重定向符有这些情况:
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1 | 将标准输出与错误输出共同写入到文件中(追加到原有内容后面) |
下面是一些输出重定向的例子:
(1) 将man命令的帮助文档写入到 ./test 文件中:
$ man man > ./test
(2) 向 ./test 文件中添加一行字:
$ echo "hello world" >> ./test
(3) 将 ls /hello 命令的错误输出到 ./test 文件中:
$ ls /hello 2> ./test
(4) 将 type echo hello 命令的标准输出和错误输出共同写入到 ./test 文件中:
$ type echo hello > ./test 2>&1
$ cat ./test
echo 是 shell 内建
bash: type: hello: 未找到
(5) 丢弃结果:
如果你既不想把命令的输出结果保存到文件,也不想把命令的输出结果显示到屏幕上,干扰命令的执行,那么可以把命令的所有结果重定向到 /dev/null 文件中。
$ ls -a &> /dev/null
2、输入重定向
对于输入重定向有这些情况:
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
下面是一些输入重定向的例子:
(1) 统计 ./test 文件的行数:
$ wc -l ./test
2 ./test
$ wc -l < ./test
2
(2) 统计./test 文件的行数,并输出到 ./test2 文件中:
$ wc -l < ./test > ./test2
$ cat ./test2
2