Linux において、Bash の重要性は無視できません。日常の Linux の管理や操作は基本的に Bash で行われます。したがって、Linux での作業効率を向上させるには、自然と 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、中線、そして1つの文字で構成されます。ここで、角括弧内の Shift と「-」は省略できる場合があります。
  8. デフォルトでは、ショートカットキーの最後の1つだけが文字で、他のキーはすべてファンクションキーです
  9. [CTRL-?] のようなショートカットキーの場合、「?」はShiftキーを使って入力する文字であるため、この種のショートカットキーはデフォルトで [CTRL-SHIFT-?] を使用します

注意すべき点として、Bash ではショートカットキーが8進数または16進数の形式(エスケープ文字の後ろ)で記述されることがあります。スクリプトファイル内のショートカットキーは常に機能するとは限りません。また、ショートカットキーには規則があります。Ctrlで始まるショートカットキーは通常文字を対象とし、Altで始まるショートカットキーは通常単語を対象とします。

Bash では、shell スクリプトファイルを使用している場合、ショートカットキーは必ずしも同じとは限らず、同じショートカットキーでも異なる動作をすることがあります。これは通常、Bash が置かれているモードの違いによるもので、set コマンドでモードを調整できます。

set -o emacs
##切到emacs模式
set -o vi
##切到vi模式
set -o
## 查看当前选项的设置状态

これは Bash のオプションです。状況に応じて設定できます。この記事では emacs モードを使用しています。

ショートカットキー ショートカットキーの説明
CTRL-A カーソルを行頭に移動する(コマンドライン上)
CTRL-B バックスペース(非破壊的)。カーソル位置を1つ前に移動するだけです。
CTRL-C 割り込み。フォアグラウンドジョブを終了する。
CTRL-D 「EOF」(ファイルの終わり:end of file)。標準入力(stdin)の終了を示すために使用されます。コンソールまたは xterm ウィンドウでテキストを入力しているとき、CTRL-D はカーソル位置の文字を削除します。

シェルから退出します(exit と同様)。文字が存在しない場合、CTRL-D はセッションからログアウトします。xterm ウィンドウでは、ウィンドウを閉じる効果があります。

CTRL-E カーソルを行末に移動する(コマンドライン上)
CTRL-F カーソルを1文字前に移動する(コマンドライン上)
CTRL-G BEL。一部の古いプリンター端末では、ベルが鳴ります。xterm 端末ではビープ音が鳴る場合があります。
CTRL-H 消去(Rubout)(破壊的なバックスペース)。カーソルが戻るときに、カーソル前の1文字を同時に消去します。
CTRL-I 水平タブ。
CTRL-J 改行(ラインフィード[line feed]して行頭へ)。スクリプト内では、8進数形式('/012')または16進数形式('/x0a')で表されることもあります。
CTRL-K 垂直タブ(Vertical tab)。コンソールまたは xterm ウィンドウでテキストを入力しているとき、CTRL-K はカーソル位置から行末までのすべての文字を削除します。

スクリプト内では、8進数形式('/013')または16進数形式('/x0b')で表されることもあります。スクリプト内では、CTRL-K は異なる動作をする場合があります。以下の例はその異なる動作を示しています。

#!/bin/bash
## 一个CTRL-K垂直制表符的例子

var=$'/x0aBottom Line/x0bTop line/x0a'
## 直接输出
echo "$var"
## 使用col来过滤控制字符
echo "$var" | col

## 上面的显示将会不一样

exit 0
CTRL-L 用紙送り、改ページ(Formfeed)、画面消去。

端末画面をクリアします。端末では、このコマンドは clear コマンドと同じ働きをします。ただし、このコマンドがプリンターに送信された場合、Ctrl-L は用紙の最後まで直接送ります。

CTRL-M キャリッジリターン(Carriage return)。
CTRL-N 履歴バッファーから呼び出した1行のテキストを消去します(コマンドライン上)。現在の入力が履歴から選択されたものである場合、これはその履歴を起点として、押すたびにより最近のコマンドに移動します。
CTRL-O 新しい行を作成します(コマンドライン上)。
CTRL-P 履歴バッファーから前のコマンドを呼び出します(コマンドライン上)。このショートカットキーは、最近のものから古いものへと順に呼び出します。つまり、1回押すと直前のコマンド、もう1回押すとその前のコマンドが呼び出されます。これは CTRL-N も現在の入力を起点としますが、2つの操作はちょうど逆で、CTRL-N は起点から遠いものから近いものへ向かいます(起点が履歴コマンドの場合)。
CTRL-Q Resume (XON)。再開/解凍。このコマンドは端末のstdinを再開するために使用します。CTRL-S を参照してください。
CTRL-R 履歴バッファー内のテキストを後方検索(Backwards search)します(コマンドライン上)。注意:押すと、プロンプトが (reverse-i-search) に変わり、入力した検索テキストが引用符内に表示され、コロンの後に最も近く一致する履歴コマンドが表示されます。
CTRL-S Suspend (XOFF)。一時停止。これは端末のstdinを凍結します。再開するには CTRL-Q を押します。
CTRL-T カーソル位置の文字とその前の位置の文字を入れ替えます(コマンドライン上)。例:echo $var; で、カーソルが a の上にあるとします。C-T を押すと、v と a が入れ替わり、echo $avr; になります。
CTRL-U カーソル位置から行頭までのすべての文字を消去します。一部の設定では、CTRL-U はカーソル位置に関係なく入力行全体を削除します。
CTRL-V テキスト入力中に C-V を押すと、制御文字を挿入できます。例:echo -e '/x0a'; と echo <CTRL-V><CTRL-J>; は同じ効果です。この機能はテキストエディター内で非常に役立ちます。
CTRL-W コンソールまたは xterm ウィンドウでテキストを入力しているとき、CTRL-W はカーソル位置から後方(戻る)の最初の空白文字までの内容を削除します。一部の設定では、CTRL-W はカーソル位置から後方(戻る)の最初の非英数字までの文字を削除します。
CTRL-X 一部のワープロソフトでは、この制御文字はハイライトされたテキストを切り取ってクリップボードにコピーします。
CTRL-Y 以前に消去したテキストを貼り付けます(主に CTRL-U または CTRL-W を対象とします)。
CTRL-Z フォアグラウンドジョブを一時停止します。一部のテキスト処理プログラムでは置換操作としても使われます。MSDOS ファイルシステムでは EOF(End-of-file)文字として使われます。
CTRL-/ 終了。CTRL-C と似ていますが、作業ディレクトリに「core」ファイルをダンプする場合もあります(このファイルは役に立たないかもしれません)。
CTRL-/ 操作を元に戻します。Undo。
CTRL-_ 操作を元に戻します。
CTRL-xx 行頭とカーソル位置の間で切り替えます。ここでは2つの「x」文字です。
ALT-B カーソルを1単語分戻ります。単語は非英字で区切られます(現在のカーソル位置にある単語の先頭に移動します)。
ALT-F カーソルを1単語分進めます(カーソル位置にある単語の末尾に移動します)。
ALT-D カーソル位置から単語の末尾までのすべての内容を削除します(カーソルが単語の先頭にある場合は、単語全体を削除します)。
ALT-BASKSPACE カーソル位置から単語の先頭までのすべての内容を削除します。
ALT-C カーソル位置の文字を大文字に変換します(カーソルが単語の先頭またはその前にある場合は、単語の最初の文字が大文字になります)。
ALT-U カーソル位置から単語の末尾までのすべての文字を大文字に変換します。
ALT-L カーソル位置から単語の末尾までのすべての文字を小文字に変換します。
ALT-R すべての変更を取り消し、現在の行を履歴内の元の状態に戻します(現在のコマンドが履歴から呼び出された場合。手動入力の場合は行がクリアされます)。
ALT-T カーソルの両側に単語が存在する場合、カーソルの両側の単語の位置を入れ替えます。例:abc <ALT-T>bcd -> bcd abc
ALT-. 直前のコマンドの最後の単語を使用します(コマンド自体も1つの単語です。後編のBangコマンドの単語指定子の概念を参照してください)。
ALT-_ ALT-. と同じ。
ALT-数値 この数値は正または負にできます。このキー単独では機能せず、後ろに他の内容を続ける必要があります。後ろが文字の場合は、繰り返し回数を表します。例:[ALT-10,k] はカーソル位置に k 文字を10個挿入します(負値はこの場合無効です)。後ろがコマンドの場合は、数値がそのコマンドの実行結果に影響します。例:[ALT--10,CTRL-D] は CTRL-D のデフォルトの方向と逆(負)の方向に10回実行します。
ALT-< 履歴内の最初の行のコマンドに移動します。
ALT-> 履歴の最後の行、つまり現在入力中の行に移動します(入力がない場合は空)。
ALT-P 現在の行から前方に向かって検索し、必要に応じて「上」へ移動します。移動中は、ユーザーが指定した文字列を非インクリメンタル検索で探します。
ALT-N 現在の行から後方に向かって検索し、必要に応じて「下」に移動します。移動時には、非インクリメンタル検索を使用してユーザーが指定した文字列を探します。
ALT-CTRL-Y ポイントに前のコマンドの最初の引数(通常は前の行の2番目の単語)を挿入します。引数nがある場合は、前のコマンドのn番目の単語を挿入します(前の行の単語番号は0から始まります。履歴展開を参照)。負の引数は、前のコマンドの末尾から数えてn番目の単語を挿入します。引数nはM-No.の方法で渡されます。例:[ALT-0,ALT-CTRL-Y]は前のコマンドの0番目の単語(コマンド自体)を挿入します。
ALT-Y キルリングをローテートし、新しい先頭テキストをコピーします。このコマンドはyank[CTRL-Y]またはyank-pop[M-Y]の後にのみ使用できます。
ALT-? ポイントの前に補完できる項目を一覧表示します。
ALT-* [ALT-?]コマンドが生成できるすべてのテキスト項目をポイントの前に挿入します。
ALT-/ ポイント前のテキストに対してファイル名補完を試みます。[CTRL-X,/]はポイント前のテキストをファイル名とみなし、補完できる項目を一覧表示します。
ALT-~ ポイント前のテキストをユーザー名とみなして補完を試みます。[CTRL-X,~]はポイント前のテキストをユーザー名として補完できる項目を一覧表示します。
ALT-$ ポイント前のテキストをShell変数とみなして補完を試みます。[CTRL-X,$]はポイント前のテキストを変数として補完できる項目を一覧表示します。
ALT-@ ポイント前のテキストをホスト名とみなして補完を試みます。[CTRL-X,@]はポイント前のテキストをホスト名として補完できる項目を一覧表示します。
ALT-! ポイント前のテキストをコマンド名とみなして補完を試みます。コマンド名の補完では、エイリアス、予約語、Shell関数、シェル組み込みコマンド、最後に実行可能ファイル名の順に使用されます。[CTRL-X,!]はポイント前のテキストをコマンド名とみなし、補完できる項目を一覧表示します。
ALT-TAB ポイント前のテキストを履歴内のテキストと比較して一致するものを探し、補完を試みます。
ALT-{ ファイル名補完を実行し、補完できる項目のリストを中括弧で囲んで、シェルが使用できるようにします。

Bashでは、ショートカットキーを適切に使用できれば、Linuxシステムでの操作が非常に迅速になります。例えば、catを使用してファイルを作成する際に、ショートカットキー[CTRL-D]を使用できます。

## 不用快捷键
cat >>/tmp/test<<_EOF
##这里是内容
##最后我们要在新行里面输入_EOF
##cat见到_EOF才会将内容写到文件中

##使用快捷键
cat >>/tmp/test
##这里输入内容
##输入完毕之后,直接[CTRL-D]结束

時にはファイルを作成し、その後そのファイルに対して操作を行う必要があります:

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-.]自动会将上面的最后一个参数附加

どうですか、もっと効率的になりましたか?

もちろん、Bashのショートカットキーは使い続けてこそ本当の効率を発揮できます。どのショートカットキーを使うべきか考えるのに半日もかかるようでは、効率は難しいでしょう——しかし「刃を研ぐことは薪を切る手間を損なわない」(準備の努力は無駄にならない)のです。初期の投資には価値があります。

自分のBashを少し変えたいなら、bindコマンドを使用してショートカットキーを自分でカスタマイズすることもできます。Bashのショートカットキーは実際にはReadlineによって提供されているため、ここでのショートカットキー設定は実質的にReadlineの設定です。Readlineには2種類のショートカットキーがあります。1つはReadline内部の関数用ショートカットキー、もう1つは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

この設定は現在のセッションでのみ有効で、セッションが失われると、このように設定したショートカットキーも失われます。設定したショートカットキーを永続のに有効にするには、ショートカットキーの設定をファイルに書き込む必要があります。Linuxシステムでは、ショートカットキーを永続のに保存できる場所が2つあります。グローバル設定とユーザー設定です。グローバル設定は/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

説明:

  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
    
  2. 特定のファンクションキーの文字シーケンスを確認したい場合は、[CTRL-V]を使用するか、catと入力してEnterキーを押し、編集状態に入ってショートカットキーを直接押すことで確認できます。
  3. 設定ファイルでは、文字を八進数または十六進数で表す場合があります。

よく使う操作に適切なショートカットキーを設定すれば、以前はぺらぺらと半日かけて打ち込んでいたコマンドも、ショートカットキー1つで完了できるかもしれません。これは間違いなく作業効率を大幅に向上させるでしょう!ショートカットキーを使いこなそうぜ、少年よ!

出典:http://www.codeceo.com/article/bash-shortcut.html