◎ 附加输出导向(>>)
相信大家对於以上介绍的重新导向至此应该有基本的认识,但是此处会出现一个问题一若是重新导向的档案原来已存在,那我们在输入新的资料后会產生什麼结果?答案是所有旧的资料都会消失,而以新的內容取代。 想必这是许多人所不愿意乐见的,因为旧有的资料常常包含许多有价值的內容,所以在硬碟空间足夠的条件下,最好能保存先前的资料。
为了解決这个问题,Linux提供了「附加输出导向」的功能,它的用法及功能与输出导向很类似,唯一不同的是,新输入的资料会附加(Append)在原有內容之后,同时它的表示符号为「>>」。 以下我们利用一个范例来說明使用输出导向和附加输出导向对原始档案所產生的影响,我们假设原有的档案/testl/origin.txt中只有一行文字This is the original words inthe file!

◎ 输入导向(<)
输出导向的观念和输入导向刚好相反,前者是将指令或程式的执行结果透过萤幕或档案来输出,但是后者卻是将键盘或档案提供给指令来执行,有时这个观念常会令人困惑,我们先来看以下的范例:
[root@nsl root]# cat file1
The content of file1 !
[root@nsl test1]# cat < file1
The content of file1 !
在上述的范例中,二者的输出结果完全相同,但是在执行的程序上卻完全不同。 在「cat filel 」指令中,cat的标準输入档案为filel,因此cat在收到输入档案后,会执行它的功能而将filel的內容显示到萤幕。但是在「cat < filel 」指令中,cat並沒有任何的标準输入档案,而是利用「输入重导(<)」的功能来将filel传给cat当成标準输入档案,最后才将filel的內容显示到萤幕。
由以上的二个范例我们会感觉似乎输入重导並沒有太大的功能! 的确,在可以接受参数的指令上,输入重导並沒有很大的用处,但是在无法接受参数的指令上就相当有用,例如「patch」。
[root@nsl test1]# patch patch-2.4.8-2
[root@nsl test1]# patch < patch-2.4.8-2
因为patch指令並无法接受参数,所以在上述的第一行指令输入后,patch指令会将patch-2.4.8-2视为参数,但因为它无法接受参数,所以画面不会有任何的反应,但若是利用输入重导 (< ) 来将patch-2.4.8-2档案输入给patch,则系统就会开始执行原始码更新的动作。
▓ 附加输入导向 (<<字串)
附加输入导向可以让您自行定义一个字串,例如quit,系统在收到此字串前,会持续的将资料输入档案,这个功能经常使用在电子邮件系统中。以下是一个传送电子邮件的范例,假设我们定义的字串是「Finish」您可以继续输入邮件內容,当输入「Finish」字串后,系统便会结束邮件的编辑並且寄出。
[root@nsl root]# mail jacklee1024@sinamail.com <
>The mail is from jack!
>Finish →结束邮件的编辑并寄出
◎ 错误输出导向(& >)
输出导向(>)和错误输出导向(& >)最大的差別是在於指令执行发生错误时,若是指令执行发生错误,输出导向会错误讯息直接显示到萤幕,但是並不记錄到档案中。而错误输出导向不论是正常或错误的执行,都不会将讯息结果显示在萤幕上,而是直接写入档案中。
一般的程式设计师都会习惯将程式测试和除错时的所有讯息(正常和错误)记錄在档案中,以利曰后修改时的参考,以下提供一个简单的范例来让读者了解二者问的不同:

▓ 管線
Linux系统中的「管線」(Pipe)最主要的功能是将其他程式的输出结果,直接导向到另一个程式来当成输入资料,虽然这个方式对於初学者可能会觉得复杂,但是有效的利用这个功能可以节省不少指令的输入时间,以及避免错误的发生。
举例来說,/etc目錄下的档案有很多,若是您使用「1s -al」指令,它们並沒有办法在同一页中显示,若要浏览第一页中的资料,就显得很不方便。此时就可以将「1s -al」指令產生的结果利用管線( | )直接导向至「1ess 」指令,因此就可以使用上下键来逐行浏览输出结果。
[root@nsl root]# ls -al /etc | less
管線的使用可以与许多现有的指令相结合,也能產生许多不同的效果,若是读者有兴趣可以多多尝试管線与不同的指令组合,例如< 、> 和 &>,相信您一定可以从中得到许多的便利。
1-7 使用指令与图形管理工具的迷失
在本章的最后,笔者想提出一些有关大家对於指令与图形介面工具在进行系统管理上一直爭论不休的看法,也希望能给大家一个新的思考方向。
相信对於大多数Linux入门的新手(包括才疏学浅的我)来說,沒有人会对Linux的指令產生好印象,因为使用者永远不知到底有多少指令?每个指令支援的参数有多少?尤其在微软的图形介面系统橫扫全球个人电脑的旋风后,对於习惯鲇鲇滑鼠便可完成操作的使用者来說,学习Linux繁复的指令可說是梦魇的开始,此时在大家的心里不禁產生了一个问题一我们真的要学指令吗?
IXDBA.NET技术社区尤其在X Window System问市后,其功能在一再的加強后,以目前来讲已经可以与微软系统上的图形使用者介面(GUI)相媲美(虽不中亦不远矣!),但是为何翻开坊问Linux的管理书籍,其中的內容多半是指令的介绍,而寻卜使用作业系统中附加的图形工具呢?
甚至现在也有一些可由微软的作业系统上,利用浏览器连接到Linux上进行远端管理的图形工具,例如Webmin’它们的功能也能包含大部份的管理內容,为何我们还要苦苦死守文字模式的Telnet来进行远端管理呢?
相信笔者以上提出的几个问题一定可以让各位反覆的思考许久,若是您有宝贵的意见,也希望能与读者共同分享,以下仅提出笔者对这个思想冲突上的浅见:
◎ 实体上的限制
由於使用者图形介面会比指令耗损较多的实体记忆体,因此在理论上,使用指令的操作确实可以增加系统效能。但是在目前记忆体价格大幅滑落的情形下,以这个理由来回答必须使用指令进行管理似乎过於牵強。
其实笔者认为第一个必须使用指令的理由是,若是GUI无法啟动,例如显示卡的设定產生问题时,您就必须使用指令的方式来进行有关的设定。因此以这个角度上来思考,学习指令並非是Linux的专利,使用微软作业系统的使用者也必须一同来学习需要的指令,因为Windows系列產品有时也会遇到视窗无法开啟的问题。
◎ 管理上的深度
GUI的设计常以大部份使用者的需求来设计,因此在一般的情形下使用GUI已是绰绰有余,其实並不需要指令的辅助。
但重要的是,有时您要进行较为精细的管理工作,或是专为特定的对象来设计系统,此时您就必须使用指令才可方便的进行设定,因为GUI可能並沒有提供该项的功能。所以笔者
並不赞成入门者一开始就接触艰深的指令操作,相反的,笔者认为初学者可以尽可能的使用GUI工具,等到对於Linux建立初步的观念后,再来对指令进行探讨,相信可以消除大多数读者对於这个強大作业系统的恐惧感。
◎ 应避免的错误观念
记得笔者在求学时,学校的老师大多以Unix指令教授为主,其实这並不是一件错的事,而是他们的观念错了,因为他们不会使用图形介面工具,所以他们就一昧的反驳使用GUI的使用者。 笔者认为在电脑的学习上应该抱著多所包容且虛心的态度才可使自己增长,不论指令或是图形工具一定有我们可以学习的地方,因此不应对任何一种方式存在偏颇的观念,否则最后您必是被资讯世界淘汰的人。
总归一句话,多角度的学习一定会有所助益,最重要的是不要对Linux失云信心,因为它是一个很好的作业系统,失去了学习它的机会,一定会是您的一大憾事。 虽然笔者完全肯定GUI的功能,但是因为要将指令与GUI的內容同时在书中介绍並非易事,所以本书会以指令讨论为主,而以图形介面工具为辅,希望能给予读者一个多樣式的选择。
希望大家用功的学习!!!