讓Unix終端隨用戶而動(dòng)
在Windows操作系統(tǒng)中,也可以對(duì)終端進(jìn)行一些簡(jiǎn)單的設(shè)置。如可以設(shè)置輸入法的切換健等等。但是在Windows操作系統(tǒng)中,這個(gè)終端的設(shè)置是非常少的。而在Unix操作系統(tǒng)中,則可以設(shè)置終端的很多特性,以方便用戶使用。其實(shí)只要有心的用戶,在實(shí)際工作中可能已經(jīng)碰到過(guò)類似的現(xiàn)象。如在有些Unix操作系統(tǒng)上,利用退格鍵可以刪除一個(gè)字符;但是在有些操作系統(tǒng)上則不行。即使在同一個(gè)版本的shell中也會(huì)遇到這種情況。其實(shí),這不是鍵盤有問(wèn)題,而是由于終端的個(gè)性化設(shè)置所造成的。有時(shí)候系統(tǒng)工程師需要調(diào)整Unix終端設(shè)置,以適應(yīng)其自身的工作習(xí)慣。Unix將終端當(dāng)作文件來(lái)管理,所以其可以設(shè)置的參數(shù)有很多,基本上包含了跟終端有關(guān)的所有特性。不過(guò)系統(tǒng)工程師實(shí)際上用的并不是很多,主要有如下幾個(gè)方面的內(nèi)容。
一、Ctrl+C組合鍵能否退出應(yīng)用程序。
無(wú)論是Unix操作系統(tǒng)也好,是Linux操作系統(tǒng)也好,有時(shí)候會(huì)遇到命令無(wú)法響應(yīng)的情況。或者數(shù),由于運(yùn)行時(shí)間比較長(zhǎng),超過(guò)了系統(tǒng)工程師的忍耐時(shí)間。此時(shí),用戶往往可以通過(guò)Ctrl+C鍵來(lái)中斷進(jìn)程,中斷命令的運(yùn)行。但是有些系統(tǒng)工程師用不慣這個(gè)組合鍵。由于它們用慣了微軟的產(chǎn)品。在微軟的記事本或者Word等版本文件中,這個(gè)命令是用來(lái)復(fù)制文本的。現(xiàn)在要讓他們用來(lái)中斷命令行,他們就容易搞混。為此有些系統(tǒng)工程師就喜歡將這個(gè)屏幕屏蔽掉。在Unix系統(tǒng)中,這個(gè)功能是通過(guò)關(guān)鍵字intr來(lái)控制的。如果要屏蔽這個(gè)功能,只需要將這個(gè)執(zhí)行stty命令即可。不過(guò)筆者建議,最好還是不用動(dòng)這個(gè)關(guān)鍵字為好。否則的話,到真的需要推出某個(gè)運(yùn)行著的命令時(shí),就無(wú)法強(qiáng)制退出了。
如果需要重新啟動(dòng)這個(gè)命令,則可以利用stty intr ^c來(lái)設(shè)置。其中Intr是控制這個(gè)功能的關(guān)鍵字。^兩個(gè)符號(hào)在系統(tǒng)中有特殊的含義。在Unix中要設(shè)置某個(gè)終端關(guān)鍵字值,這里采用的是反斜桿,而不是等號(hào)或者其他符號(hào)。另外,^在Unix系統(tǒng)中叫做脫字符,它在終端關(guān)鍵字設(shè)置時(shí)代表的是鍵盤上的ctrl鍵。最后的字符c表示鍵盤上的c鍵。不過(guò)需要注意的是,這是一個(gè)小心的字符c,而不是大寫的。上面這個(gè)命令就是告訴操作系統(tǒng),利用Ctrl+c鍵作為中斷符號(hào)。
二、文件結(jié)尾符號(hào)的設(shè)置。
在Unix操作系統(tǒng)中,有時(shí)候文本方式的操作要比圖形化操作多的多。特別是將Unix操作系統(tǒng)當(dāng)作服務(wù)器來(lái)管理,往往只把操作系統(tǒng)啟動(dòng)當(dāng)文本模式,而不是當(dāng)圖形化模式。這不僅可以提高服務(wù)器的工作效率,而且還有利于提高其穩(wěn)定性。不過(guò)如果通過(guò)文本模式來(lái)管理操作系統(tǒng),對(duì)于不少系統(tǒng)工程師來(lái)說(shuō),會(huì)帶來(lái)一些挑戰(zhàn),因?yàn)槎夹枰ㄟ^(guò)鍵盤來(lái)完成相關(guān)的操作。如在寫郵件時(shí),一切操作都是靠鍵盤來(lái)完成。在此時(shí)就會(huì)遇到一個(gè)文件,如何告訴操作系統(tǒng)已經(jīng)將文本輸入完成了呢?如在文本模式下書寫郵件,需要告訴操作系統(tǒng)可以結(jié)束鍵盤的輸入操作了。如在利用cat命令創(chuàng)建文件時(shí),也需要手工的告訴操作系統(tǒng)文件內(nèi)容已經(jīng)完成了。此時(shí),系統(tǒng)工程師可以使用Ctrl+a鍵來(lái)告訴操作系統(tǒng)。這個(gè)功能在系統(tǒng)中對(duì)應(yīng)的關(guān)鍵字是eof(文件結(jié)尾符)。系統(tǒng)工程師如果用不慣這個(gè)組合鍵的話,可以利用命令stty來(lái)進(jìn)行更改。如有些從微軟轉(zhuǎn)行過(guò)來(lái)的系統(tǒng)工程師,系統(tǒng)使用Ctrl+e鍵來(lái)表示文件結(jié)束符,而不喜歡使用這個(gè)Ctrl+a鍵(可能在微軟產(chǎn)品中這是表示全選的含義吧)。此時(shí)就可以利用這個(gè)命令來(lái)進(jìn)行設(shè)置:stty eof ^e。跟上面的命令非常相似,只是所采用的關(guān)鍵字不同而已。不過(guò)在更改這些終端操作符號(hào)的時(shí)候,需要注意避免采用相同的終端操作符號(hào)。否則的話,可能會(huì)出現(xiàn)一些莫名其妙的問(wèn)題。
三、退格鍵是否允許刪除字符。
在鍵盤上有兩個(gè)鍵,一個(gè)是del鍵,用來(lái)向后刪除字符。另外一個(gè)是退格鍵,則用來(lái)向前刪除字符。但是有時(shí)候系統(tǒng)工程師會(huì)發(fā)現(xiàn)退格鍵不能夠起作用,其不能夠向后刪除字符。排除鍵盤故障外,往往也是這個(gè)終端配置所惹的禍。在終端配置中有個(gè)關(guān)鍵字叫做echoe,其就是用來(lái)控制是否允許使用退格鍵來(lái)向后刪除字符。不過(guò)這個(gè)設(shè)置跟上面的設(shè)置方法有差異。如果需要禁用這個(gè)功能的話,則需要使用stty –echoe命令。如果需要啟用的話,則需要使用stty echoe命令。
其實(shí),在Unix操作系統(tǒng)中,跟終端相關(guān)的關(guān)鍵字主要有兩種表現(xiàn)形式,分別為關(guān)鍵字=某個(gè)值或者關(guān)鍵字(-關(guān)鍵字)等形式表示。這兩種形式的關(guān)鍵字其值設(shè)置的方式是不同的。如上面提到的中端符號(hào),其系統(tǒng)中的顯示格式為關(guān)鍵字=某個(gè)值的格式(intr=^c)。對(duì)于這個(gè)格式的關(guān)鍵字需要采用的是^的調(diào)整方式,其可以重新設(shè)置功能鍵。而現(xiàn)在的退格功能的關(guān)鍵字為echoe,其顯示格式為關(guān)鍵字(-關(guān)鍵字)。這種關(guān)鍵字又叫做開關(guān)關(guān)鍵字。也就是說(shuō)其只有啟用或者禁用。而不能夠使用其他的內(nèi)容來(lái)代替。對(duì)于這種類型的關(guān)鍵字,要調(diào)整其值的話,也相對(duì)簡(jiǎn)單。只需要利用stty (-)關(guān)鍵字的形式即可。如果關(guān)鍵字前面沒有減號(hào)的話,則說(shuō)明這個(gè)功能是啟用的。如果有減號(hào)的話,則說(shuō)明這個(gè)功能是禁用的。如果系統(tǒng)工程師反先這個(gè)退格鍵不能用了,可以先利用命令stty –a命令來(lái)查看當(dāng)前終端的配置。特別是需要關(guān)注一些這個(gè)echoe關(guān)鍵字,看其前面是否有減號(hào)。如果有的話,就表示當(dāng)前不能夠利用退格鍵來(lái)向前刪除一個(gè)字符。此時(shí)系統(tǒng)工程師可以利用stty echoe來(lái)啟用這個(gè)功能。通常情況下,不需要注銷系統(tǒng)或者關(guān)閉當(dāng)前會(huì)話這個(gè)設(shè)置就會(huì)生效。不同的shell對(duì)這個(gè)退格鍵的默認(rèn)設(shè)置是不同的。所以為了操作的方便,系統(tǒng)工程師有時(shí)候往往需要調(diào)整這個(gè)退格鍵的功能,來(lái)保證各個(gè)版本的shell 都能夠使用這個(gè)功能或者禁用這個(gè)功能。
四、用戶輸入的內(nèi)容不回顯。
在登陸Unix操作系統(tǒng)時(shí)(文本模式下),用戶需要輸入帳戶名與密碼才能夠登陸。當(dāng)用戶輸入密碼時(shí),在屏幕上不會(huì)有任何的提示,連*好掩飾符號(hào)都沒有。有時(shí)候,系統(tǒng)工程師為了似的腳步程序也可以向這個(gè)口令一樣,接收用戶的輸入而不是將內(nèi)容輸出到屏幕上(即用戶輸入的內(nèi)部不回顯到屏幕上),就需要修改echo這個(gè)關(guān)鍵字的值。不要要注意,修改這個(gè)關(guān)鍵字的時(shí)候需要三步走。第一步將這個(gè)關(guān)鍵字設(shè)置為-echo(表示向密碼那樣不回顯用戶輸入的內(nèi)容);第二步不回顯的接收用戶輸入的內(nèi)容,此時(shí)用戶的任何輸入不會(huì)顯示到屏幕上;第三步再將這個(gè)關(guān)鍵字設(shè)置為echo,即后續(xù)的內(nèi)容允許其顯示在屏幕上。因?yàn)樵诖蟛糠智闆r下,都是需要系統(tǒng)將用戶輸入的結(jié)果顯示在屏幕上的。否則的話,不能夠保證用戶輸入的準(zhǔn)確性。所以,在使用完畢后,一定要講這個(gè)關(guān)鍵字設(shè)置為原先的值,即利用stty –echo將這個(gè)關(guān)鍵字設(shè)置回來(lái)。這里echo也是利用-號(hào)來(lái)代表的一個(gè)關(guān)鍵字,也就是說(shuō)這個(gè)功能也是一個(gè)開關(guān)功能。在設(shè)置時(shí),要么關(guān)閉,要么啟用。而第三種處理方法。也就是說(shuō),如果想要用戶輸入的內(nèi)容以*號(hào)來(lái)代替的話,則需要采用其他的方式。確實(shí),這個(gè)以*顯示的方式跟終端設(shè)置無(wú)關(guān)。
可見,在Unix操作系統(tǒng)中,對(duì)于終端的控制要比在Windows操作系統(tǒng)強(qiáng)的多。有時(shí)候系統(tǒng)工程師為了在多個(gè)操作系統(tǒng)版中保證一個(gè)比較統(tǒng)一的終端配置,往往會(huì)將這些內(nèi)容寫成一個(gè)腳本文件。然后遇到一個(gè)新的shell時(shí),會(huì)先不管三七二十一,執(zhí)行這個(gè)腳本。如此,就可以實(shí)現(xiàn)Unix終端隨用戶而動(dòng),根據(jù)用戶的操作習(xí)慣來(lái)進(jìn)行終端配置的調(diào)整。
