Библиотека сайта rus-linux.net
"Быстрые клавиши" в командной оболочке Linux
Оригинал: Linux Shell Editing ShortcutsАвтор: Аккана Пек (Akkana Peck)
Дата: 15 января 2009 г.
Перевод: Сергей Супрунов
Дата перевода: 13 марта 2009 г.
Если вы хотите изучить командную строку Linux, вам придётся очень много набирать вручную и постоянно следить за тем, что вы нигде не ошиблись... правильно?
Вовсе нет! Один из секретов, которым владеют опытные пользователи командной строки заключается в том, что не обязательно быть превосходным наборщиком. Они пользуются преимуществами клавиатурных сокращений, которые предоставляет командная оболочка.
Исправление ошибок
Вы, скорее всего, в курсе, что последний введённый символ можно стереть клавишей Backspace
. Но, помимо этого, существуют и другие способы исправления ошибок.
Первый приём: Ctrl-U
удаляет всё от начала строки до позиции курсора. Нет необходимости держать нажатой Backspace
и ждать, пока всё сотрётся; простое нажатие Ctrl-U
работает гораздо быстрее. Это очень удобно в тех случаях, когда вы вдруг решили использовать другую команду или просто хотите очистить командную строку и подумать, что делать дальше. Если вы знакомы с английским языком, это сокращение удобно запомнить как "Undo".
Следующий (и мой самый любимый) приём - комбинация Ctrl-W
, удаляющая последнее слово. Подобно Ctrl-U
, это намного быстрее, чем держать Backspace
. Но, в отличие от Ctrl-U
, она позволяет вам сохранить кое-что из того, что вы уже набрали. Испытайте её в работе, и вы удивитесь, насколько она удобна.
Думаю, вы замечали, что можете использовать стрелки "влево" и "вправо", когда работаете в командной строке. Но вот Home
и End
ожидаемый переход на начало и конец строки не выполняют - и как же быть? А вот так: используйте Ctrl-A
для перехода на начало строки и Ctrl-E
для перехода в конец. Ассоциации для запоминания: "А" - первая буква алфавита, "Е" = "End".
Если вы передвинете курсор влево (стрелкой или с помощью Ctrl-A
), то, возможно, вам станет интересна комбинация Ctrl-K
- она удаляет всё от позиции курсора до конца строки.
Использование сокращений в других приложениях
Большинство из этих клавиатурных сокращений будут работать во многих приложениях Linux, помимо командной строки, хотя и не каждая программа поддерживает их в полном объёме. Попробуйте использовать их в текстовых редакторах, почтовых клиентах, браузерах.
В некоторых программах (и в зависимости от дистрибутива) они по умолчанию отключены. Если вам они кажутся удобными, вы можете включить их для Firefox и GTK-приложений, установив параметр gtk-key-theme-name
в значение "Emacs". Для этого либо добавьте в файл .gtkrc-2.0
в вашем домашнем каталоге следующую строку:
gtk-key-theme-name = "Emacs"
либо запустите следующую команду:
gconftool-2 --set /desktop/gnome/interface/gtk_key_theme Emacs --type string
Перемещение по истории команд
Командные оболочки упрощают повтор уже вводимых команд или внесение в них небольших изменений перед повторным запуском. Происходит это благодаря тому, что оболочки поддерживают список команд, которые вы недавно набирали - вашу "историю команд" - и предоставляют вам различные способы доступа к нему.
Первый, и самый простой: чтобы увидеть последнюю команду, нажмите стрелку вверх. Вы увидите последнюю команду, которую набирали, и сможете её подредактировать, или же просто очистить (с помощью Ctrl-U
) и нажать Enter
для её выполнения.
Командная оболочка также предоставляет команду просмотра истории сразу большими порциями:
$ history
Эта команда выведет список всех команд, которые вы набирали в последнее время. (Не забывайте, что $
представляет здесь приглашение вашей оболочки; не вводите этот символ.)
Если список слишком длинный, вы можете ограничить его, например, до последних 15-ти команд (как показано на рисунке):
$ history 15
У каждой из этих команд есть свой номер. Если вы нашли нужную команду, вы можете повторно выполнить её, просто введя восклицательный знак и её номер:
$ !27
Так мы запустим 27-ю команду, gimp &
, без необходимости долго давить стрелку вверх.
Также вы можете использовать восклицательный знак, чтобы найти команды, начинающиеся с определённых букв. На рисунке, если вы ещё раз захотите запустить ту длинную команду gconftool...
, вам нужно будет набрать лишь следующее:
$ !gcon
И командая оболочка выполнит последнюю команду, начинавшуюся с указанных символов.
Заметьте, что если я просто набрал бы !g
, оболочка не выполнила бы gconftool-2
; она бы запустила gimp
, поскольку я выполнял эту команду позже. Это делает использование таких сокращений немного опасным: вы не видите команду и от вас не запрашивают подтверждение её выполнения. Представьте себе, что вы набрали !r
, намереваясь повторить команду rename
, о которой вы помните; но вы забыли, что после неё запускали что-нибудь наподобие rm -rf
...
Если у вас есть сомнения в том, какая из команд будет исполнена при выполнении данной "!-команды", вы можете сперва её распечатать, добавив после неё :p
:
$ !r:p
Так мы распечатаем последнюю команду, которая начиналась с r
. Внимательно с ней ознакомившись, вы сможете запустить её на выполнение, нажав стрелку вверх или набрав !!
.
(У пользователей tcsh здесь есть небольшое преимущество: они могут использовать клавишу табуляции для работы с историей; например, ввод !r<TAB>
позволит увидеть команду. Я не знаю способа сделать это в bash.)
Использование конвейеров совместно с командой history
Если вы уже экспериментировали с конвейерами в командной оболочке, вы уже догадываетесь, как можно комбинировать историю с утилитой grep
для поиска определённой команды, которую вы когда-то запускали и не хотите набирать второй раз:
$ history | grep man
В результате вы получите список всех ранее введённых команд, содержащих man
. Очень полезно!
Ресурсы
Emacs Keybindings (Firefox): здесь идёт речь о "привязках" клавиш, используемых при редактировании (которые во многом совпадают с используемыми в командной оболочке), а также о том, как их использовать в Gtk-приложениях.
Bash Reference Manual: Using History Interactively: обсуждаются детали механизма истории в bash и его настройка.
Посмотрите другие статьи о работе в командной оболочке в разделе Работа в консоли нашей Библиотеки.