在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 鍵盤高級操作技巧
網(wǎng)絡(luò)系統(tǒng)
打印
重定向
使用命令
位置參數(shù)
權(quán)限
文本處理
疑難排解
layout: book-zh title: 自定制 shell 提示符
查找文件
layout: book-zh title: vi 簡介
shell 環(huán)境
什么是 shell
編譯程序
鍵盤高級操作技巧
流程控制:case 分支
流程控制:if 分支結(jié)構(gòu)
layout: book-zh title: 軟件包管理
進(jìn)程
存儲(chǔ)媒介
格式化輸出
編寫第一個(gè) Shell 腳本
啟動(dòng)一個(gè)項(xiàng)目
流程控制:while/until 循環(huán)
文件系統(tǒng)中跳轉(zhuǎn)
字符串和數(shù)字
讀取鍵盤輸入
歸檔和備份
探究操作系統(tǒng)
流程控制:for 循環(huán)
自頂向下設(shè)計(jì)
數(shù)組
操作文件和目錄
奇珍異寶
從 shell 眼中看世界
正則表達(dá)式

鍵盤高級操作技巧

開玩笑地說,我經(jīng)常把 Unix 描述為“這個(gè)操作系統(tǒng)是為喜歡敲鍵盤的人們服務(wù)的?!?當(dāng)然,Unix 甚至還有一個(gè)命令行,這個(gè)事實(shí)是個(gè)確鑿的證據(jù),證明了我所說的話。 但是命令行用戶不喜歡敲入那么多字。那又為什么如此多的命令會(huì)有這樣簡短的命令名,像 cp,ls,mv,和 rm?事實(shí)上,命令行最為珍視的目標(biāo)之一就是懶惰;用最少的擊鍵次數(shù) 來完成最多的工作。另一個(gè)目標(biāo)是你的手指永遠(yuǎn)不必離開鍵盤,永不觸摸鼠標(biāo)。在這一 章節(jié),我們將看一下 bash 特性,這些特性使鍵盤使用起來更加迅速,更加高效。

以下命令將會(huì)露面:

  • clear - 清空屏幕

  • history - 顯示歷史列表內(nèi)容

命令行編輯

Bash 使用了一個(gè)名為 Readline 的庫(共享的線程集合,可以被不同的程序使用), 來實(shí)現(xiàn)命令行編輯。我們已經(jīng)看到一些例子。我們知道,例如,箭頭按鍵可以移動(dòng)鼠標(biāo), 此外還有許多特性。想想這些額外的工具,我們可以在工作中使用。學(xué)會(huì)所有的特性 并不重要,但許多特性非常有幫助。選擇自己需要的特性。

注意:下面一些按鍵組合(尤其使用 Alt 鍵的組合),可能會(huì)被 GUI 攔截來觸發(fā)其它的功能。 當(dāng)使用虛擬控制臺(tái)時(shí),所有的按鍵組合都應(yīng)該正確地工作。

移動(dòng)光標(biāo)

下表列出了移動(dòng)光標(biāo)所使用的按鍵:

表9-1: 光標(biāo)移動(dòng)命令
按鍵 行動(dòng)
Ctrl-a 移動(dòng)光標(biāo)到行首。
Ctrl-e 移動(dòng)光標(biāo)到行尾。
Ctrl-f 光標(biāo)前移一個(gè)字符;和右箭頭作用一樣。
Ctrl-b 光標(biāo)后移一個(gè)字符;和左箭頭作用一樣。
Alt-f 光標(biāo)前移一個(gè)字。
Alt-b 光標(biāo)后移一個(gè)字。
Ctrl-l 清空屏幕,移動(dòng)光標(biāo)到左上角。clear 命令完成同樣的工作。

修改文本

表9-2列出了鍵盤命令,這些命令用來在命令行中編輯字符。

表9-2: 文本編輯命令
按鍵 行動(dòng)
Ctrl-d 刪除光標(biāo)位置的字符。
Ctrl-t 光標(biāo)位置的字符和光標(biāo)前面的字符互換位置。
Alt-t 光標(biāo)位置的字和其前面的字互換位置。
Alt-l 把從光標(biāo)位置到字尾的字符轉(zhuǎn)換成小寫字母。
Alt-u 把從光標(biāo)位置到字尾的字符轉(zhuǎn)換成大寫字母。

剪切和粘貼文本

Readline 的文檔使用術(shù)語 killing 和 yanking 來指我們平常所說的剪切和粘貼。 剪切下來的本文被存儲(chǔ)在一個(gè)叫做剪切環(huán)(kill-ring)的緩沖區(qū)中。

表9-3: 剪切和粘貼命令
按鍵 行動(dòng)
Ctrl-k 剪切從光標(biāo)位置到行尾的文本。
Ctrl-u 剪切從光標(biāo)位置到行首的文本。
Alt-d 剪切從光標(biāo)位置到詞尾的文本。
Alt-Backspace 剪切從光標(biāo)位置到詞頭的文本。如果光標(biāo)在一個(gè)單詞的開頭,剪切前一個(gè)單詞。
Ctrl-y 把剪切環(huán)中的文本粘貼到光標(biāo)位置。

元鍵

如果你冒險(xiǎn)進(jìn)入到 Readline 的文檔中,你會(huì)在 bash 手冊頁的 READLINE 段落, 遇到一個(gè)術(shù)語"元鍵"(meta key)。在當(dāng)今的鍵盤上,這個(gè)元鍵是指 Alt 鍵,但 并不總是這樣。

回到昏暗的年代(在 PC 之前 Unix 之后),并不是每個(gè)人都有他們自己的計(jì)算機(jī)。 他們可能有一個(gè)叫做終端的設(shè)備。一個(gè)終端是一種通信設(shè)備,它以一個(gè)文本顯示 屏幕和一個(gè)鍵盤作為其特色,它里面有足夠的電子器件來顯示文本字符和移動(dòng)光標(biāo)。 它連接到(通常通過串行電纜)一個(gè)更大的計(jì)算機(jī)或者是一個(gè)大型計(jì)算機(jī)的通信 網(wǎng)絡(luò)。有許多不同的終端產(chǎn)品商標(biāo),它們有著不同的鍵盤和特征顯示集。因?yàn)樗鼈?都傾向于至少能理解 ASCII,所以軟件開發(fā)者想要符合最低標(biāo)準(zhǔn)的可移植的應(yīng)用程序。 Unix 系統(tǒng)有一個(gè)非常精巧的方法來處理各種終端產(chǎn)品和它們不同的顯示特征。因?yàn)?Readline 程序的開發(fā)者們,不能確定一個(gè)專用多余的控制鍵的存在,他們發(fā)明了一個(gè) 控制鍵,并把它叫做"元"("meta")。然而在現(xiàn)代的鍵盤上,Alt 鍵作為元鍵來服務(wù)。 如果你仍然在使用終端(在 Linux 中,你仍然可以得到一個(gè)終端),你也可以按下和 釋放 Esc 鍵來得到如控制 Alt 鍵一樣的效果。

自動(dòng)補(bǔ)全

shell 能幫助你的另一種方式是通過一種叫做自動(dòng)補(bǔ)全的機(jī)制。當(dāng)你敲入一個(gè)命令時(shí), 按下 tab 鍵,自動(dòng)補(bǔ)全就會(huì)發(fā)生。讓我們看一下這是怎樣工作的。給出一個(gè)看起來 像這樣的家目錄:

[me@linuxbox ~]$ ls
Desktop   ls-output.txt   Pictures   Templates   Videos
....

試著輸入下面的命令,但不要按下 Enter 鍵:

[me@linuxbox ~]$ ls l

現(xiàn)在按下 tab 鍵:

[me@linuxbox ~]$ ls ls-output.txt

看一下 shell 是怎樣補(bǔ)全這一行的?讓我們再試試另一個(gè)例子。這回,也 不要按下 Enter:

[me@linuxbox ~]$ ls D

按下 tab:

[me@linuxbox ~]$ ls D

沒有補(bǔ)全,只是嘟嘟響。因?yàn)?quot;D"不止匹配目錄中的一個(gè)條目。為了自動(dòng)補(bǔ)全執(zhí)行成功, 你給它的"線索"必須不模棱兩可。如果我們繼續(xù)輸入:

[me@linuxbox ~]$ ls Do

然后按下 tab:

[me@linuxbox ~]$ ls Documents

自動(dòng)補(bǔ)全成功了。

這個(gè)實(shí)例展示了路徑名自動(dòng)補(bǔ)全,這是最常用的形式。自動(dòng)補(bǔ)全也能對變量起作用(如果 字的開頭是一個(gè)"$"),用戶名字(單詞以"~"開始),命令(如果單詞是一行的第一個(gè)單詞), 和主機(jī)名(如果單詞的開頭是"@")。主機(jī)名自動(dòng)補(bǔ)全只對包含在文件/etc/hosts 中的主機(jī)名有效。

有一系列的控制和元鍵序列與自動(dòng)補(bǔ)全相關(guān)聯(lián):

表9-4: 自動(dòng)補(bǔ)全命令
按鍵 行動(dòng)
Alt-? 顯示可能的自動(dòng)補(bǔ)全列表。在大多數(shù)系統(tǒng)中,你也可以完成這個(gè)通過按 兩次 tab 鍵,這會(huì)更容易些。
Alt-* 插入所有可能的自動(dòng)補(bǔ)全。當(dāng)你想要使用多個(gè)可能的匹配項(xiàng)時(shí),這個(gè)很有幫助。

可編程自動(dòng)補(bǔ)全

目前的 bash 版本有一個(gè)叫做可編程自動(dòng)補(bǔ)全工具??删幊套詣?dòng)補(bǔ)全允許你(更可能是,你的 發(fā)行版提供商)來加入額外的自動(dòng)補(bǔ)全規(guī)則。通常需要加入對特定應(yīng)用程序的支持,來完成這個(gè) 任務(wù)。例如,有可能為一個(gè)命令的選項(xiàng)列表,或者一個(gè)應(yīng)用程序支持的特殊文件類型加入自動(dòng)補(bǔ)全。 默認(rèn)情況下,Ubuntu 已經(jīng)定義了一個(gè)相當(dāng)大的規(guī)則集合??删幊套詣?dòng)補(bǔ)全是由 shell 函數(shù)實(shí)現(xiàn)的,shell 函數(shù)是一種小巧的 shell 腳本,我們會(huì)在后面的章節(jié)中討論到。如果你感到好奇,試一下:

set | less

查看一下如果你能找到它們的話。默認(rèn)情況下,并不是所有的發(fā)行版都包括它們。

利用歷史命令

正如我們在第二章中討論到的,bash 維護(hù)著一個(gè)已經(jīng)執(zhí)行過的命令的歷史列表。這個(gè)命令列表 被保存在你家目錄下,一個(gè)叫做 .bash_history 的文件里。這個(gè) history 工具是個(gè)有用資源, 因?yàn)樗梢詼p少你敲鍵盤的次數(shù),尤其當(dāng)和命令行編輯聯(lián)系起來時(shí)。

搜索歷史命令

在任何時(shí)候,我們都可以瀏覽歷史列表的內(nèi)容,通過:

[me@linuxbox ~]$ history | less

在默認(rèn)情況下,bash 會(huì)存儲(chǔ)你所輸入的最后 500 個(gè)命令。在隨后的章節(jié)里,我們會(huì)知道 怎樣調(diào)整這個(gè)數(shù)值。比方說我們想要找到列出目錄 /usr/bin 內(nèi)容的命令。一種方法,我們可以這樣做:

[me@linuxbox ~]$ history | grep /usr/bin

比方說在我們的搜索結(jié)果之中,我們得到一行,包含了有趣的命令,像這樣;

88  ls -l /usr/bin > ls-output.txt

數(shù)字 "88" 是這個(gè)命令在歷史列表中的行號。隨后在使用另一種展開類型時(shí),叫做 歷史命令展開,我們會(huì)用到這個(gè)數(shù)字。我們可以這樣做,來使用我們所發(fā)現(xiàn)的行:

[me@linuxbox ~]$ !88

bash 會(huì)把 "!88" 展開成為歷史列表中88行的內(nèi)容。還有其它的歷史命令展開形式,我們一會(huì)兒 討論它們。bash 也具有按遞增順序來搜索歷史列表的能力。這意味著隨著字符的輸入,我們 可以告訴 bash 去搜索歷史列表,每一個(gè)附加字符都進(jìn)一步提煉我們的搜索。啟動(dòng)遞增搜索, 輸入 Ctrl-r,其后輸入你要尋找的文本。當(dāng)你找到它以后,你可以敲入 Enter 來執(zhí)行命令, 或者輸入 Ctrl-j,從歷史列表中復(fù)制這一行到當(dāng)前命令行。再次輸入 Ctrl-r,來找到下一個(gè) 匹配項(xiàng)(向上移動(dòng)歷史列表)。輸入 Ctrl-g 或者 Ctrl-c,退出搜索。實(shí)際來體驗(yàn)一下:

[me@linuxbox ~]$

首先輸入 Ctrl-r:

(reverse-i-search)`':

提示符改變,顯示我們正在執(zhí)行反向遞增搜索。搜索過程是"反向的",因?yàn)槲覀儼凑諒?quot;現(xiàn)在"到過去 某個(gè)時(shí)間段的順序來搜尋。下一步,我們開始輸入要查找的文本。在這個(gè)例子里是 "/usr/bin":

(reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt

即刻,搜索返回我們需要的結(jié)果。我們可以執(zhí)行這個(gè)命令,按下 Enter 鍵,或者我們可以復(fù)制 這個(gè)命令到我們當(dāng)前的命令行,來進(jìn)一步編輯它,輸入 Ctrl-j。復(fù)制它,輸入 Ctrl-j:

[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt

我們的 shell 提示符重新出現(xiàn),命令行加載完畢,正準(zhǔn)備行動(dòng)!下表列出了一些按鍵組合, 這些按鍵用來操作歷史列表:

表9-5: 歷史命令
按鍵 行為
Ctrl-p 移動(dòng)到上一個(gè)歷史條目。類似于上箭頭按鍵。
Ctrl-n 移動(dòng)到下一個(gè)歷史條目。類似于下箭頭按鍵。
Alt- 移動(dòng)到歷史列表開頭。
Alt-> 移動(dòng)到歷史列表結(jié)尾,即當(dāng)前命令行。
Ctrl-r 反向遞增搜索。從當(dāng)前命令行開始,向上遞增搜索。
Alt-p 反向搜索,不是遞增順序。輸入要查找的字符串,然后按下 Enter,執(zhí)行搜索。
Alt-n 向前搜索,非遞增順序。
Ctrl-o 執(zhí)行歷史列表中的當(dāng)前項(xiàng),并移到下一個(gè)。如果你想要執(zhí)行歷史列表中一系列的命令,這很方便。

歷史命令展開

通過使用 "!" 字符,shell 為歷史列表中的命令,提供了一個(gè)特殊的展開類型。我們已經(jīng)知道一個(gè)感嘆號 ,其后再加上一個(gè)數(shù)字,可以把來自歷史列表中的命令插入到命令行中。還有一些其它的展開特性:

表9-6: 歷史展開命令
序列 行為
!! 重復(fù)最后一次執(zhí)行的命令??赡馨聪律霞^按鍵和 enter 鍵更容易些。
!number 重復(fù)歷史列表中第 number 行的命令。
!string 重復(fù)最近歷史列表中,以這個(gè)字符串開頭的命令。
!?string 重復(fù)最近歷史列表中,包含這個(gè)字符串的命令。

應(yīng)該小心謹(jǐn)慎地使用 "!string" 和 "!?string" 格式,除非你完全確信歷史列表?xiàng)l目的內(nèi)容。

在歷史展開機(jī)制中,還有許多可利用的特點(diǎn),但是這個(gè)題目已經(jīng)太晦澀難懂了, 如果我們再繼續(xù)討論的話,我們的頭可能要爆炸了。bash 手冊頁的 HISTORY EXPANSION 部分詳盡地講述了所有要素。

腳本

除了 bash 中的命令歷史特性,許多 Linux 發(fā)行版包括一個(gè)叫做 script 的程序, 這個(gè)程序可以記錄整個(gè) shell 會(huì)話,并把 shell 會(huì)話存在一個(gè)文件里面。這個(gè)命令的基本語法是:

script [file]

命令中的 file 是指用來存儲(chǔ) shell 會(huì)話記錄的文件名。如果沒有指定文件名,則使用文件 typescript。查看腳本的手冊頁,可以得到一個(gè)關(guān)于 script 程序選項(xiàng)和特點(diǎn)的完整列表。

總結(jié)歸納

在這一章中,我們已經(jīng)討論了一些由 shell 提供的鍵盤操作技巧,這些技巧是來幫助打字員減少工作量的。 隨著時(shí)光流逝,你和命令行打交道越來越多,我猜想你會(huì)重新翻閱這一章的內(nèi)容,學(xué)會(huì)更多的技巧。 目前,你就認(rèn)為它們是可選的,潛在地有幫助的。

拓展閱讀

上一篇:數(shù)組下一篇:shell 環(huán)境