重定向和管道
内容提要
Linux 中的 init 进程创建了标准输入、输出和错误的文件描述符。程序可以通过重定向将输出和错误信息保存到文件,使用 /dev/null 丢弃输出。输入重定向和 Here Document 允许从文件或多行输入获取数据,管道则可以将一个命令的输出作为下一个命令的输入,并处理错误信息。
关键要点
-
Linux 中的 init 进程创建了 3 个特殊的文件描述符用于输入输出。
-
程序通过标准输入从键盘读取数据,标准输出和标准错误显示在屏幕上。
-
重定向可以将输出和错误信息保存到文件,使用 /dev/null 可以丢弃输出。
-
输出重定向的语法为 cmd [1-n]> [文件/文件描述符/设备等]。
-
可以将 stdout 和 stderr 重定向到同一文件,但需注意文件打开次数和内容覆盖问题。
-
输入重定向的语法为 cmd [1-n]< [文件/文件描述符/设备等]。
-
Here Document 允许将多行输入传递给命令,使用特定的分隔符。
-
管道可以将一个命令的 stdout 作为下一个命令的 stdin,但无法处理 stderr。
-
可以同时将 stdout 和 stderr 重定向到下一个命令的 stdin。
延伸问答
Linux 中的 init 进程创建了哪些文件描述符?
init 进程创建了标准输入、标准输出和标准错误三个文件描述符。
如何在 Linux 中将命令的输出重定向到文件?
可以使用语法 cmd [1-n]> [文件] 将命令的输出重定向到指定文件。
什么是 Here Document,如何使用它?
Here Document 是一种特殊的重定向方式,可以用来将多行输入传递给命令,使用方式为 cmd << delimiter ... delimiter。
如何将标准错误和标准输出同时重定向到同一个文件?
可以使用语法 cmd > out.log 2>&1 将 stdout 和 stderr 同时重定向到 out.log 文件。
管道在 Linux 中的作用是什么?
管道可以将一个命令的标准输出作为下一个命令的标准输入,但无法处理标准错误。
如何使用 /dev/null 丢弃命令的输出?
可以使用命令 2> /dev/null 或者 > /dev/null 来丢弃标准输出或标准错误。