练习 7:Bash:重定向,stdin
,stdout
,stderr
,<
,>
,>>
,|
,tee
,
在 Linux 中,一切都只是文件。这意味着,对于控制台程序:
- 键盘表示为一个文件,Bash 从中读取你的输入。
- 显示器表示为一个文件,Bash向输出写入它。
让我们假设,你有一个程序可以计算文件中的行。你可以通过键入wc -l
来调用它。现在尝试一下 没有发生什么事吧?它只是卡在那里。错了,它正在等待你的输入。这是它的工作原理:
但是如果你想计算现有文件中的行呢?那么,这就需要重定向 了!为了在其输入上提供现有文件,请键入以下内容:wc -l < .bash_history
。你看,它有作用!真的是那么简单! 是一种机制,允许你告诉程序,将其来自键入输入和/或到显示器的输出,重定向到另一个文件。为此,你可以使用这些特殊命令,然后启动程序:
<
- 用文件替换标准输入(例如键盘)。>
- 用文件替换标准输出(例如显示器)。警告!此命令将覆盖 你的指定文件的内容,因此请小心。|
- 从一个程序获取输出,并将其连接到另一个程序。这将在下一个练习中详细阐述。
现在,你将学习如何将程序的输入和输出重定向到文件或其他程序。
- 在你的系统上安装
pv
(管道查看器)程序,稍后你需要它。 - 将你的输入读取到变量
foo
。这是可能的,因为显示器和键盘实际上是系统的电传打字机。是的,那个电传打字机!在线阅读更多关于tty
的东西。 - 这是你输入的东西。
- 将
foo
变量的内容重定向到文件,在进程中创建文件或覆盖现有文件,而不会警告删除所有内容! - 打印出
foo.out
的内容。 - 将
foo
变量的内容重定向到foo.out
文件,在进程中创建文件或附加 到现有文件。这是安全的,但不要混淆这两者,否则你会有巨大的悲剧。 - 再次打印出
foo.out
内容。 - 显示文件确实是空的。
- 列出你的目录并将其通过管道输出到
grep
。它的原理是,获取所有ls -al
的输出,并将其扔给grep
。这又称为管道。 - 将你的目录列出到屏幕上,并写入
ls.out
。很有用! - 创建大小为 10 兆字节的清零文件。现在不要纠结它如何工作。
- 将这个文件读取到
/dev/null
,这是你系统中终极的垃圾桶,什么都没有。写入它的一切都会消失。请注意,pv
会向你展示读取文件的进程,如果你尝试使用其他命令读取它,你就不会知道它需要多长时间来完成。 - 删除
foo.out
。记得自己清理一下。 - 删除
test.img
。
- 阅读 上的管道和重定向,再次阅读 stackoverflow 和 ,这是非常有用的资源,记住它。
- 阅读
man pv
和man tee
的描述。