命令行是你的至交好友 -Part 4

输入/输出重定向我们可以综合我们的知识,以不同的方向重定向标准错误(stderr),标准输入(stdin)和标准输出(stdout)。实际上,以下的命令功能相同:
csaba@csaba-pc ~/tmp/NetTuts $ ls -al > ./SecondDir/ThirdFile
csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1> ./SecondDir/ThirdFile

在第二个命令中,在重定向之前我们指定标准输出的来源。请注意1与>之间没有空格。实际上,如果两者之间有空格,则1会作为ls命令的一个参数,并且>会自动重定向标准输出。以下两个表达功能相同,但和上面的那个功能不同。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1 > ./SecondDir/ThirdFile
csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1 1> ./SecondDir/ThirdFile

当然,这些结果会出错:"ls:不能访问1:没有那个文件或目录” ——除非你真的有一个名字为1的目录。这会让我们惊讶下一步我们得到的:重定向错误。
aba@csaba-pc ~/tmp/NetTuts $ ls -al inexistenFilder > ./SecondDir/ThirdFile
ls: cannot access inexistenFilder: No such file or directory
csaba@csaba-pc ~/tmp/NetTuts $ ls -al inexistenFilder 2> ./SecondDir/ThirdFile

如你所见,第一个命令在控制台输出标准输出并重定向标准输出到一个文件。第一个命令的结果是一个空文件和屏幕上的一条信息。然而,第二条命令重定向错误到我们的文件。其结果是如果在标准输出上有任何输出,则它们会显示在屏幕上,并且错误信息会输入到这个文件。

一个实际的I/0重导例子 当你需要在命令行寻找一些文件时,你基本上只有两个选择。第一个就是选择用本地命令。这些命令常常是伴随着安装各种Linux版本而已经安装好的,当然不是每一个版本都安装了。更新文件数据库命令索引你的文件和定位,然后使用那个数据库去发现你的文件。实际上他不是做一个实时的搜索,它只是简单的在数据库做索引。这就是为什么这个应用程序常常定期的做每日更新文件数据库。

我们来用这个命令演示一个实时搜索,它比本地命令搜索的更精确,但是很显然更慢一些。现在让我们用这个命令来演示一段:
csaba@csaba-pc ~/tmp/NetTuts $ ls -al
total 16
drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .
drwx------ 7 csaba csaba 4096 Feb 19 21:09 …
drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir
drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir
csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./SecondDir/
total 16
drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 .
drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 …
-rw-r–r-- 1 csaba csaba 12 Feb 19 21:19 aFile
-rw-r–r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile
-rw-r–r-- 1 csaba csaba 61 Feb 24 00:23 ThirdFile
csaba@csaba-pc ~/tmp/NetTuts $ find . -name ThirdFile
./SecondDir/ThirdFile