В Linux нельзя игнорировать важность Bash. Ежедневное администрирование и операции в Linux в основном выполняются в Bash. Поэтому, чтобы повысить эффективность работы в Linux, вопрос естественно сводится к тому, как эффективно использовать Bash. Использование некоторых сочетаний клавиш в Bash — самый простой и прямой способ повысить эффективность. Эта статья как раз и посвящена этой цели!

Bash 快捷键大全

Некоторые пояснения о сочетаниях клавиш:

  1. CTRL=C: Под этой клавишей подразумевается клавиша Ctrl на клавиатуре ПК.
  2. ALT=M: Эта клавиша — клавиша ALT на клавиатуре ПК. Если на вашей клавиатуре нет этой клавиши, вы можете попробовать вместо неё использовать клавишу ESC.
  3. SHIFT=S: Эта клавиша — клавиша Shift на ПК.
  4. ESC=E: Эта клавиша — клавиша ESC на клавиатуре ПК, обычно расположенная в верхнем левом углу клавиатуры.
  5. BACKSPACE=DEL: Эта клавиша — клавиша Backspace на клавиатуре ПК, обычно расположенная в верхнем правом углу основной области клавиш.
  6. В этой статье содержимое, заключённое в «[]», — это содержимое сочетания клавиш. Клавиши по обе стороны от «-» означают: удерживая левую клавишу, нажать правую. Клавиши по обе стороны от «,» (запятой) означают: сначала нажать левую клавишу, отпустить её, затем нажать правую. Например, [CTRL-v] означает нажать клавишу Ctrl, не отпускать её, а затем нажать клавишу v.
  7. По умолчанию формат составления сочетания клавиш таков: <CTRL | ALT | ESC >-[SHIFT-]<char>. То есть оно начинается с одной из клавиш Ctrl, Alt, Esc, затем идёт дефис, Shift, дефис и символ. При этом Shift и «-» внутри квадратных скобок иногда можно опускать.
  8. По умолчанию только последняя клавиша сочетания является символом; остальные значения клавиш — это функциональные клавиши.
  9. Для таких сочетаний, как [CTRL-?], поскольку «?» — это символ, для ввода которого требуется клавиша Shift, такие сочетания по умолчанию имеют вид [CTRL-SHIFT-?].

Обратите внимание, что в Bash сочетания клавиш могут быть записаны в восьмеричной или шестнадцатеричной форме (после escape-символа); сочетания клавиш в файлах сценариев работают не всегда. Кроме того, сочетания клавиш следуют шаблону:Сочетания клавиш, начинающиеся с Ctrl, обычно предназначены для символов, а сочетания клавиш, начинающиеся с Alt, обычно предназначены для слов.。

В Bash, если вы используете файл сценария оболочки, сочетания клавиш могут быть не такими же. Иногда одно и то же сочетание клавиш может вести себя по-разному. Обычно это вызвано тем, что Bash находится в разных режимах. Вы можете настроить режим с помощью команды set:

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

Это настройка параметров Bash; вы можете настроить её в соответствии с конкретной ситуацией. В этой статье используется режим emacs.

Горячая клавиша Описание сочетаний клавиш
CTRL-A Переместить курсор в начало строки (в командной строке).
CTRL-B Backspace (неразрушающий). Это лишь сдвигает курсор на одну позицию назад.
CTRL-C Прервать, завершить задание переднего плана.
CTRL-D "EOF" (конец файла). Он используется для обозначения конца стандартного ввода (stdin). При вводе текста в консоли или окне xterm CTRL-D удаляет символ под курсором.

Выход из оболочки (аналогично exit). Если символы отсутствуют, CTRL-D завершит сеанс. В окне xterm это приведёт к закрытию окна.

CTRL-E Переместить курсор в конец строки (в командной строке).
CTRL-F Переместить курсор вперёд на один символ (в командной строке).
CTRL-G BEL. На некоторых старых печатающих терминалах это вызывает звонок. На терминалах xterm это может быть звуковой сигнал.
CTRL-H Стереть (Rubout) (удаляющий возврат на один символ). Когда курсор перемещается назад, он одновременно стирает символ перед курсором.
CTRL-I Горизонтальная табуляция.
CTRL-J Новая строка (перевод строки и возврат каретки к началу строки). В сценариях она также может быть представлена в восьмеричной форме ('/012') или шестнадцатеричной форме ('/x0a').
CTRL-K Вертикальная табуляция. При вводе текста в консоли или окне 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
CTRL-L Перевод страницы, подача страницы, очистка экрана.

Очищает экран терминала. В терминале эта команда работает так же, как команда clear. Но когда эта команда отправляется на принтер, Ctrl-L сразу переходит к концу листа бумаги.

CTRL-M Возврат каретки.
CTRL-N Стереть строку текста, вызванную из буфера истории (в командной строке). Если текущий ввод выбран из истории, начиная с этой записи истории, каждое нажатие даёт более новую команду.
CTRL-O Создать новую строку (в командной строке).
CTRL-P Вызвать предыдущую команду из буфера истории (в командной строке). Это сочетание клавиш вызывает команды по порядку от самых новых к самым старым; то есть при первом нажатии вызывается предыдущая команда, а при повторном нажатии — команда перед ней. И это сочетание, и CTRL-N начинают с текущего ввода, но эти две команды работают в прямо противоположных направлениях: CTRL-N идёт от начальной точки от самых старых к самым новым (если начальная точка является исторической командой).
CTRL-Q Возобновить (XON). Продолжить/разморозить. Эта команда используется для восстановления stdin терминала; см. CTRL-S.
CTRL-R Обратный поиск по тексту в буфере истории (в командной строке). Примечание: после нажатия приглашение становится `(reverse-i-search)`: введённый текст поиска отображается в одинарных кавычках, а самая новая наиболее подходящая команда из истории появляется после двоеточия.
CTRL-S Приостановить (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 (конец файла).
CTRL-/ Выход. Подобно CTRL-C, он также может записать файл "core" в ваш рабочий каталог (этот файл может быть бесполезен для вас).
CTRL-/ Отмена операции.
CTRL-_ Отмена операции.
CTRL-xx Переключение между началом строки и позицией курсора; здесь есть два символа "x".
ALT-B Курсор перемещается назад на одно слово, при этом слова разделяются небуквенными символами (перемещается к началу текущего слова под курсором).
ALT-F Курсор перемещается вперёд на одно слово (перемещается к концу текущего слова под курсором).
ALT-D Удалить всё содержимое от позиции курсора до конца текущего слова (если курсор находится в начале слова, удалить всё слово).
ALT-BASKSPACE Удалить всё содержимое от позиции курсора до начала слова.
ALT-C Преобразовать букву в позиции курсора в верхний регистр (если курсор находится в начале слова или перед ним, сделать первую букву слова заглавной).
ALT-U Преобразовать все буквы от позиции курсора до конца слова в верхний регистр.
ALT-L Преобразовать все буквы от позиции курсора до конца слова в нижний регистр.
ALT-R Отменить все изменения и восстановить текущую строку в её исходное состояние в истории (при условии, что текущая команда была взята из истории; если она введена вручную, строка будет очищена).
ALT-T Когда по обе стороны от курсора есть слова, поменять местами слова с обеих сторон. Например: `abc <ALT-T>bcd -> bcd abc`
ALT-. Использовать последнее слово предыдущей команды (сама команда также считается словом; см. концепцию индикатора слова в разделе команд Bang следующей статьи).
ALT-_ То же, что ALT-.
ALT-number Это числовое значение может быть положительным или отрицательным. Эта клавиша сама по себе не действует; за ней должно следовать другое содержимое. Если за ней следует символ, он указывает количество повторений. Например: [ALT-10,k] вставляет 10 символов 'k' в позицию курсора (отрицательные значения в этом случае недопустимы); если за ней следует команда, число влияет на результат выполнения последующей команды. Например: [ALT--10,CTRL-D] выполняет операцию 10 раз в направлении, противоположном направлению по умолчанию для CTRL-D (отрицательному).
ALT-< Перейти к первой команде в истории.
ALT-> Перейти к последней строке в истории, то есть к строке, которая вводится в данный момент (пустой, если ввода нет).
ALT-P Искать вперёд, начиная с текущей строки, при необходимости перемещаясь "вверх"; во время перемещения используйте неинкрементальный поиск для нахождения строки, заданной пользователем.
ALT-N Искать вперёд от текущей строки, при необходимости перемещаясь "вниз". При перемещении использовать неинкрементный поиск для нахождения строки, заданной пользователем.
ALT-CTRL-Y Вставить первый аргумент предыдущей команды (обычно второе слово предыдущей строки) в точку. Если задан аргумент n, вставить n-е слово предыдущей команды (нумерация слов начинается с 0; см. History Expansion). Отрицательный аргумент вставляет n-е слово с конца предыдущей команды. Аргумент n передаётся через M-No., например, [ALT-0, ALT-CTRL-Y] вставляет 0-е слово предыдущей команды (саму команду).
ALT-Y Переместиться по кольцу уничтоженного текста и скопировать новый верхний текст. Эту команду можно использовать только после yank [CTRL-Y] или yank-pop [M-Y].
ALT-? Перечислить возможные дополнения текста перед точкой.
ALT-* Вставить перед точкой все текстовые элементы, которые может сгенерировать команда possible-completions [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 есть два типа сочетаний клавиш: одни — это сочетания для внутренних функций 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

Эта настройка действует только для текущего сеанса. Как только сеанс завершается, сочетания клавиш, заданные таким образом, теряются. Чтобы сделать сочетания клавиш постоянными, нужно записать конфигурацию сочетаний клавиш в файл. В 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

Примечания:

  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. В конфигурационном файле для представления символов могут использоваться восьмеричная или шестнадцатеричная система.

Если мы зададим подходящие сочетания клавиш для частых операций, команды, которые раньше требовали много набирать, можно будет выполнить всего одним сочетанием клавиш. Это, несомненно, значительно повысит эффективность нашей работы! Используйте сочетания клавиш, молодой человек!

Источник: http://www.codeceo.com/article/bash-shortcut.html