购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.5 输入/输出重定向

1.Bash的标准输入/输出

所谓输入/输出重定向,从字面上看,就是改变输入与输出方向的意思。但是,标准的输入与输出方向是什么呢?先来解释一下输入设备和输出设备各有哪些。现在计算机的输入设备非常多,常见的有键盘、鼠标、麦克风、手写板等;常见的输出设备有显示器、投影仪、打印机等。不过,在Linux系统中,标准输入设备指的是键盘,标准输出设备指的是显示器。

在Linux系统中,所有的内容都是文件,计算机硬件也是文件,那么标准输入设备(键盘)和标准输出设备(显示器)当然也是文件。通过表2-4来看看这些标准输入/输出设备。

表2-4 标准输入/输出设备

Linux是使用设备文件名来表示硬件的(比如,/dev/sda1代表第一块SATA硬盘的第一个主分区),但是,键盘和显示器的设备文件名并不容易记忆,那么我们就用“0”“1”“2”来分别代表标准输入、标准输出和标准错误输出。

了解了标准输入和标准输出,那么,输出重定向指的是改变输出方向,不再输出到屏幕上,而输出到文件或其他设备中;输入重定向指的是不再使用键盘作为输入设备,而把文件的内容作为命令的输入。

2.输出重定向

输出重定向指的是把命令的执行结果不再输出到屏幕上,而输出到文件或其他设备中。这样做最大的好处就是把命令的执行结果保存到指定的文件中,在需要的时候可以随时调用。Bash支持的输出重定向符号如表2-5所示。

表2-5 Bash支持的输出重定向符号

1)标准输出重定向

在输出重定向中,“>”代表的是覆盖,“>>”代表的是追加。举一个例子:

这就是“>”的作用,任何有输出的命令都可以使用输出重定向把命令的输出保存到文件中。不过,覆盖保存会把这个文件中的原有内容清空,所以追加重定向更加实用。

2)标准错误输出重定向

如果想要把命令的错误输出保存到文件中,则用标准输出重定向是不行的。比如:

因为在当前目录下没有test文件或目录,所以“ls test”命令报错了。不过,命令的错误输出并没有保存到err.log文件中,而输出到了屏幕上。这时需要这样来写这条命令:

2代表错误输出,只有这样,才能把命令的错误输出保存到指定的文件中。需要注意的是,在错误输出的大于号左侧一定不能有空格,否则会报错;右侧加不加空格则没有影响。但是,为了方便记忆,建议在错误输出的大于号左右两侧都不能有空格。

3)正确输出和错误输出同时保存

在实际使用中,以上两种方法都不实用,因为正确输出和错误输出的保存方法是分开的。也就是说,正确输出和错误输出的格式是不同的。要想保存命令的错误输出,需要事先知道命令会报错,才能采用错误输出保存格式,这显然是不合理的。

那么,最常用的还是可以把正确输出和错误输出都保存下来的方法。命令如下:

要想把正确输出和错误输出写入同一个文件中,有两种方法。

● “命令 >> 文件 2>&1”。

● “命令 &>>文件”。

按照个人习惯,这两种方法都可以使用。不过,我们还可以把正确输出和错误输出分别保存到不同的文件中。命令如下:

如果这样写,会把命令的正确输出写入list.log文件中,可以当作正确日志;把命令的错误输出写入err.log文件中,可以当作错误日志。笔者认为,如果要保存命令的执行结果,那么这种方法更加清晰。

如果我们既不想把命令的执行结果保存下来,也不想把命令的执行结果输出到屏幕上,干扰命令的执行,则可以把命令的所有执行结果放入/dev/null中。大家可以把/dev/null当成Linux系统的垃圾箱,任何放入垃圾箱的数据都会被丢弃,而且不能被恢复。命令如下:

3.输入重定向

既然输出重定向是改变输出的方向,把命令的输出重定向到文件中,那么输入重定向就是改变输入的方向,不再使用键盘作为命令的输入,而使用文件作为命令的输入。先介绍一个命令wc,命令格式如下:

wc命令非常简单,可以统计通过键盘输入的数据。如果使用输入重定向符号“<”,则可以统计文件的内容。命令如下:

其实,如果直接使用“wc anaconda-ks.cfg”命令,则也是可以统计这个文件的内容的,在这里只是演示一下输入重定向的作用。那么,输入重定向在实际工作中有用吗?输入重定向确实不如输出重定向常见,但是,当需要使用patch命令打入补丁时,就会用到输入重定向。

还有一个输入重定向符号“<<”,这个符号的作用是使用关键字作为命令输入的结束,而不使用Ctrl+D组合键。命令如下:

“<<”之后的关键字可以自由定义,只要再碰到相同的关键字,两个关键字之间的内容将作为命令的输入(不包括关键字本身)。 Z4vJ6w8KTUtpJWAqM9cRR8fRkOR9Rik7jD2OpqEka6Tl5SfCOFOk2FPi4bLBs98f

点击中间区域
呼出菜单
上一章
目录
下一章
×