本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
数据流重定向
重定向,将原本输出到标准输出的数据重定向到一个文件中,因为标准输出(
/dev/stdout)本身也是一个文件,我们将命令输出导向另一个文件自然也是没有任何问题的。 Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。
| 文件描述符 | 设备文件 | 说明 |
|---|---|---|
| 0 | /dev/stdin | 标准输入 |
| 1 | /dev/stdout | 标准输出 |
| 2 | /dev/stderr | 标准错误 |
文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。
我们可以这样使用这些文件描述符。例如默认使用终端的标准输入作为命令的输入和标准输出作为命令的输出:
cat # 按 Ctrl+C 退出
将 cat 的连续输出(heredoc 方式)重定向到一个文件:
mkdir Documents
cat > Documents/test.c <<EOF
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
EOF
将一个文件作为命令的输入,标准输出作为命令的输出:
cat Documents/test.c
(注意不要将管道和重定向混淆,管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接)