Bash 快捷鍵大全

jopen 9年前發布 | 12K 次閱讀 Bash Linux

在Linux下,Bash的地位無可忽視,日常中涉及到Linux下的管理與操作基本都是在Bash中進行,因此,為了提高Linux下工作效率,自然而然的就變成了如何高效使用Bash的問題。雖然上一篇Shell下的一些特殊字符在使用的時候,能夠一定程度上提高效率,后一篇關于Bash下的歷史擴展也能很大程度提高效率,但Bash上的一些快捷鍵才是提高效率的最簡單也是最直接方式。本文正是奔著這個目標來的!

Bash 快捷鍵大全

快捷鍵的一些說明:

  1. CTRL=C:這個鍵是指PC鍵盤上的Ctrl鍵
  2. ALT=M:這個鍵是PC鍵盤上的ALT鍵,如果你鍵盤上沒有這個鍵,可以嘗試使用ESC鍵代替
  3. SHIFT=S:此鍵是PC上的Shift鍵
  4. ESC=E:這個鍵是PC鍵盤上的ESC鍵,此鍵一般在鍵盤的左上角
  5. BACKSPACE=DEL:此鍵是是PC鍵盤上的Backspace鍵,一般位于主鍵盤區的右上角
  6. 文中"[]"括住的為快捷鍵內容,"-"兩邊的內容是按住左邊鍵,再按右邊鍵獲得,","逗號兩邊的內容是先按左邊鍵,松開后再按右邊鍵。如:[CTRL-v]是表示按下Ctrl鍵之后,不要松開,再按下v鍵。
  7. 默認的情況下,快捷鍵的組成格式是:<CTRL|ALT |ESC>-[SHIFT-]<char>。即由Ctrl、Alt、Esc之一開頭,中劃線,Shift,中劃線,和一個字符組成。其中,中括號內的Shift和"-"有時可省略。
  8. 默認情況下,快捷鍵只有最后一個為字符,其他的鍵值均為功能鍵
  9. 出現[CTRL-?]這類快捷鍵,由于"?"是需要使用Shift按鍵才能獲得的字符,因此此類快捷鍵默認使用的是[CTRL-SHIFT-?]
  10. </ol>

    要注意,在Bash里面,快捷鍵可能會被寫成八進制或者十六進制的形式(跟在轉義符后面); 腳本文件中的快捷鍵并不是總能起作用的。另外快捷鍵有個規律,Ctrl開頭的快捷鍵一般是針對字符的,而Alt開頭的快捷鍵一般是針對詞的

    Bash下,如果使用的是shell腳本文件,快捷鍵不一定是一樣的,有的時候會出現同一個快捷鍵有不同的表現,這種情況一般是由于Bash所處的模式不同而引起的,你可以通過set命令來調整模式:

    set -o emacs

    切到emacs模式

    set -o vi

    切到vi模式

    set -o

    查看當前選項的設置狀態</pre>

    這個是Bash的option選項,你可以根據具體情況進行設置,本文使用的是emacs模式。

    </tr> </tbody>

    </tr>

    </tr>

    快捷鍵 快捷鍵說明
    CTRL-A

    將光標移到行首(在命令行下)

    </td> </tr>

    CTRL-B

    退格 (非破壞性的),這個只是將光標位置往回移動一個位置。

    </td> </tr>

    CTRL-C

    中斷,終結一個前臺作業。

    </td> </tr>

    CTRL-D

    "EOF" (文件結尾:end of file)。它用于表示標準輸入(stdin)的結束。在控制臺或xterm 窗口輸入文本時,CTRL-D刪除在光標下的字符。

    從一個shell中退出 (類似于exit)。如果沒有字符存在,CTRL-D 則會登出該會話。在一個xterm窗口中,則會產生關閉此窗口的效果。

    </td> </tr>

    CTRL-E

    將光標移動到行尾(在命令行下)

    </td> </tr>

    CTRL-F

    將光標向前移動一個字符(在命令行下)

    </td> </tr>

    CTRL-G

    BEL。在一些老式打印機終端上,這會引發一個響鈴。在xterm終端上可能是嗶的一聲。

    </td> </tr>

    CTRL-H

    擦除(Rubout)(破壞性的退格)。在光標往回移動的時候,同時擦除光標前的一個字符。

    </td> </tr>

    CTRL-I 水平制表符。
    CTRL-J

    新行(換行[line feed]并到行首)。在腳本中,也可能表示為八進制形式('\012')或十六進制形式('\x0a')。

    </td> </tr>

    CTRL-K

    垂直制表符(Vertical tab)。在控制臺或 xterm 窗口輸入文本時,CTRL-K會刪除從光標所在處到行尾的所有字符。

    在腳本中,也可能表示為八進制形式('\013')或十六進制形式('\x0b')。在腳本中,CTRL-K可能會有不一樣的行為,下面的例子給出其不一樣的行為:

    #!/bin/bash

    一個CTRL-K垂直制表符的例子

    var=$'\x0aBottom Line\x0bTop line\x0a'

    直接輸出

    echo "$var"

    使用col來過濾控制字符

    echo "$var" | col

    上面的顯示將會不一樣

    exit 0</pre></td> </tr>

    CTRL-L

    跳紙,換頁(Formfeed),清屏。

    清空終端屏幕。在終端上,這個命令的作用和clear命令一樣。但當這個命令發送到打印機時,Ctrl-L會直接跳到紙張(Paper sheet)的末尾。

    </td> </tr>

    CTRL-M

    回車(Carriage return)。

    </td> </tr>

    CTRL-N

    擦除從history緩沖區召回的一行文本(在命令行下)。如果當前輸入是歷史記錄中選擇的時候,這個是從這個歷史記錄開始,每按一次,是更接近的一條命令。

    </td> </tr>

    CTRL-O

    產生一個新行(在命令行下)。

    </td> </tr>

    CTRL-P

    從history緩沖區召回上一次的命令(在命令行下)。此快捷鍵召回的順序是由近及遠的召回,即按一次,召回的是前一次的命令,再按一次,是召回上一次之前的命令,這和CTRL-N都是以當前的輸入為起點,但是兩個命令操作剛好相反,CTRL-N是從起點開始由遠及近(如果起點是歷史命令的話)。

    </td> </tr>

    CTRL-Q

    Resume (XON)。恢復/解凍,這個命令是恢復終端的stdin用的,可參見CTRL-S。

    </td> </tr>

    CTRL-R

    回溯搜索(Backwards search)history緩沖區內的文本(在命令行下)。注意:按下之后,提示符會變成(reverse-i-search)'':輸入的搜索內容出現在單引號內,同時冒號后面出現最近最匹配的歷史命令。

    </td> </tr>

    CTRL-S

    Suspend(XOFF),掛起。這個是凍結終端的stdin。要恢復可以按CTRL-Q。

    </td> </tr>

    CTRL-T

    交換光標位置與光標的前一個位置的字符內容(在命令行下)。比如:echo $var;,假設光標在a上,那么,按下C-T之后,v和a將會交換位置:echo $avr;。

    </td> </tr>

    CTRL-U

    擦除從光標位置開始到行首的所有字符內容。在某些設置下,CTRL-U會不以光標位置為參考而刪除整行的輸入。

    </td> </tr>

    CTRL-V

    在輸入文本的時候,按下C-V之后,可以插入控制字符。比如:echo -e ‘\x0a';和echo <CTRL-V><CTRL-J>;這兩種效果一樣。這點功能在文本編輯器內非常有效。

    </td> </tr>

    CTRL-W

    當在控制臺或一個xterm窗口敲入文本時,CTRL-W 會刪除從在光標處往后(回)的第一個空白符之間的內容。在某些設置里,CTRL-W 刪除光標往后(回)到第一個非文字和數字之間的字符。

    </td> </tr>

    CTRL-X

    在某些文字處理程序中,這個控制字符將會剪切高亮的文本并且將它復制到剪貼板中。

    </td> </tr>

    CTRL-Y

    將之前已經清除的文本粘貼回來(主要針對CTRL-U或CTRL-W)。

    </td> </tr>

    CTRL-Z

    暫停一個前臺的作業;在某些文本處理程序中也作為替換操作;在MSDOS文件系統中作為EOF(End-of-file)字符。

    </td> </tr>

    CTRL-\

    退出。和CTRL-C差不多,也可能dump一個"core"文件到你的工作目錄下(這個文件可能對你沒用)。

    </td> </tr>

    CTRL-/

    撤消操作,Undo。

    </td> </tr>

    CTRL-_

    撤消操作。

    </td> </tr>

    CTRL-xx

    在行首和光標兩個位置間進行切換,此處是兩個"x"字符。

    </td> </tr>

    ALT-B

    光標往回跳一個詞,詞以非字母為界(跳動到當前光標所在詞的開頭)。

    </td> </tr>

    ALT-F

    光標往前跳一個詞(移動到光標所在詞的末尾)。

    </td> </tr>

    ALT-D

    刪除光標所在位置到光標所在詞的結尾位置的所有內容(如果光標是在詞開頭,則刪除整個詞)。

    </td> </tr>

    ALT-BASKSPACE

    刪除光標所在位置到詞開頭的所有內容。

    </td> </tr>

    ALT-C

    將光標所在位置的字母轉為大寫(如果光標在一個詞的起始位置或之前,則詞首字母大寫)。

    </td> </tr>

    ALT-U

    將光標所在位置到詞尾的所有字母轉為大寫。

    </td> </tr>

    ALT-L

    將光標位置到詞尾的所有字母轉為小寫。

    </td> </tr>

    ALT-R

    取消所有變更,并將當前行恢復到在歷史記錄中的原始狀態(前提是當前命令是從歷史記錄中來的,如果是手動輸入,則會清空行)。

    </td> </tr>

    ALT-T

    當光標兩側都存在詞的時候,交換光標兩側詞的位置。如:abc <ALT-T>bcd -> bcd abc

    </td> </tr>

    ALT-.

    使用前一次命令的最后一個詞(命令本身也是一個詞,參見后一篇的Bang命令中的詞指示符概念)。

    </td> </tr>

    ALT-_ 同ALT-.。
    ALT-數值

    這個數值可以是正或者是負,這個鍵單獨沒有作用,必須后面再接其他內容,如果后面是字符,則表示重復次數。如:[ALT-10,k]則光標位置會插入10個k字符(負值在這種情況下無效);如果后面接的是命令,則數字會影響后面命令的執行結果,如:[ALT--10,CTRL-D]則向CTRL-D默認方向相反(負數)的方向執行10次操作。

    </td> </tr>

    ALT-<

    移動到歷史記錄中的第一行命令。

    </td> </tr>

    ALT->

    移動到歷史的最后一行,即當前正在輸入的行(沒有輸入的情況下為空)。

    </td> </tr>

    ALT-P

    從當前行開始向前搜索,有必要則向"上"移動,移動時,使用非增量搜索查找用戶提供的字符串。

    </td> </tr>

    ALT-N

    從當前行開始向后搜索,如果有必要向"下"移動,移動時,使用非增量搜索查找用戶提供的字符串。

    </td> </tr>

    ALT-CTRL-Y

    在標志點上插入前一個命令的第一個參數(一般是前一行的第二個詞)。如果有參數n,則插入前一個命令的第n個詞(前一行的詞編號從0開始,見歷史擴展)。負的參數將插入沖前一個命令的結尾開始的第n個詞。參數n通過M-No.的方式傳遞,如:[ALT-0,ALT-CTRL-Y]插入前一個命令的第0個詞(命令本身)。

    </td> </tr>

    ALT-Y

    輪詢到刪除環,并復制新的頂端文本。只能在yank[CTRL-Y]或者yank-pop[M-Y]之后使用這個命令。

    </td> </tr>

    ALT-?

    列出能夠補全標志點前的條目。

    </td> </tr>

    ALT-*

    把能夠補全[ALT-?]命令能生成的所有文本條目插入到標志點前。

    </td> </tr>

    ALT-/

    試圖對標志點前的文本進行文件名補全。[CTRL-X,/]把標志點前的文本當成文件名并列出可以補全的條目。

    </td> </tr>

    ALT-~

    把標志點前的文本當成用戶名并試圖進行補全。[CTRL-X,~]列出可以作為用戶名補全標志點前的條目。

    </td> </tr>

    ALT-$

    把標志點前的文本當成Shell變量并試圖進行補全。[CTRL-X,$]列出可以作為變量補全標志點前的條目。

    </td> </tr>

    ALT-@

    把標志點前的文本當成主機名并試圖進行補全。[CTRL-X,@]列出可以作為主機補全標志點前的條目。

    </td> </tr>

    ALT-!

    把標志點前的文本當成命令名并試圖進行補全。進行命令名補全時會依次使用別名、保留字、Shell函數、shell內部命令,最后是可執行文件名。[CTRL-X,!]把標志點前的文本當成命令名并列出可補全的條目。

    </td> </tr>

    ALT-TAB

    把標志點前的文本與歷史記錄中的文本進行比較以尋找匹配的并試圖進行補全。

    </td> </tr>

    ALT-{

    進行文件名補全,把可以補全的條目列表放在大括號之間,讓shell可以使用。

    </td> </tr> </tbody> </table>

    在Bash下,如果能夠妥善的使用快捷鍵,在Linux系統的操作會變得非常快捷,比如我們在使用cat創建一個文件時,我們可以使用快捷鍵[CTRL-D]:

    ## 不用快捷鍵
    cat >>/tmp/test<<_EOF

    這里是內容

    最后我們要在新行里面輸入_EOF

    cat見到_EOF才會將內容寫到文件中

    使用快捷鍵

    cat >>/tmp/test

    這里輸入內容

    輸入完畢之后,直接[CTRL-D]結束</pre>

    有的時候我們需要創建一個文件,而后對這個文件進行操作:

    touch /tmp/a-test-file-from-blog.useasp.net

    不使用快捷鍵,文件名要重新輸入

    chmod u+x /tmp/a-test-file-from-blog.useasp.net

    使用快捷鍵

    chmod u+x <ALT-.>

    快捷鍵[M-.]自動會將上面的最后一個參數附加</pre>

    怎么樣,有沒有更有效率?

    當然,Bash的快捷鍵只有在不斷的使用中,才能達到真正的高效,在開始連要用那個快捷鍵都要思考半天的情況下,高效是很難的——但磨刀不誤砍材工,前期的投入是值得的。

    如果你想自己的Bash有那么一些不同,你也可以自己自定義快捷鍵,使用bind命令即可,Bash中的快捷鍵其實是Readline來提供的,因此,這里快捷鍵的設置其實就是配置Readline,Readline中分兩種快捷鍵,一種是Readline內部的函數快捷鍵,另外一種是執行Shell命令,設置的時候稍有不同:

    ##查看Readline中可以使用的函數名稱
    bind -l

    查看當前綁定的案件配置與其對應的功能

    bind -v

    已經綁定的快捷鍵

    bind -p

    綁定自定義執行命令shell命令的快捷鍵

    bind -x '"\C-x\C-l":ls -al'

    綁定后,按[C-x,C-L]就能執行ls -al

    綁定內置函數功能

    bind "\C-x":backword-delte-char

    這個是這行Readline庫中的函數backword-delte-char</pre>

    這種設置只是針對當前的會話有效,一旦會話丟失,這樣設置的快捷鍵就會丟失,為了能夠讓設置的快捷鍵永久有效,我們就需要將快捷鍵的配置寫入文件。在Linux系統中,能永久保存快捷鍵的地方有兩個,全局和用戶的配置文件,全局的是/etc/inputrc,而用戶的是在用戶的根目錄下~/.inputrc,全局的會影響所有的用戶,而用戶根目錄下的只會對相應的用戶產生影響。inputrc文件的大概樣子像下面這樣:

    ## 本例來自CentOS6.4的默認配置文件
    $if mode=emacs

    for linux console and RH/Debian xterm

    "\e[1~": beginning-of-line "\e[4~": end-of-line

    commented out keymappings for pgup/pgdown to reach begin/end of history

    "\e[5~": beginning-of-history

    "\e[6~": end-of-history

    "\e[5~": history-search-backward "\e[6~": history-search-forward "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word "\e[5D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word

    for rxvt

    "\e[8~": end-of-line "\eOc": forward-word "\eOd": backward-word

    for non RH/Debian xterm, can't hurt for RH/DEbian xterm

    "\eOH": beginning-of-line "\eOF": end-of-line

    for freebsd console

    "\e[H": beginning-of-line "\e[F": end-of-line $endif</pre>

    說明: 

    1. 在配置文件中,\C代表CTRL,\M代表ALT,\e代表ESC,\是反斜杠\,\'是單引號,\"是雙引號;

      \C-    control prefix
      \M-    meta prefix
      \e     an escape character
      \\     backslash
      \"     literal ", a double quote
      \’     literal ’, a single quote
      </li>

    2. 如果要查看某一個功能鍵的字符序列可以通過[CTRL-V]來實現,或者輸入cat后回車,進入編輯中,直接按快捷鍵
    3. 配置文件中可能會使用八進制或者十六進制來表示字符。
    4. </ol>

      如果我們針對常用的操作設置成適當的快捷鍵,也許以前需要巴拉巴拉敲上半天的命令,你一個快捷鍵就能搞定,這無疑將會大大的提高我們的工作效率!快捷鍵吧,騷年!

      來源: http://blog.useasp.net/archive/2014/06/03/use-bash-more-efficient-with-shortcuts-for-terminal-or-xtream-window-on-linux.aspx

       本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
sesese色