I speak linux
0,0
рейтинг
23 июля 2010 в 14:39

Администрирование → Горячие клавиши в шелле

Посвящается B_dot, пост которого заставил заинтересоваться возможностями консоли плотнее.
cat /dev/cheat-sheet >> /dev/head

Краткое вступление


В этом посте будет рассказано о некоторых сочетания клавиш, которые могут упросить жизнь администраторам, работающим в консоли. Все они работают в bash'e. Сочетания клавиш я дополнительно проверял на циске (Cisco IOS Software, s72033_rp Software (s72033_rp-ADVIPSERVICESK9_WAN-M), Version 12.2(33)SXH4), csh и zsh. Рассмотренное в других записях повторять особо не буду. Сочетания сгруппированы по использованной функциональной клавише.
Особенно полезен этот текст будет людям, которые любят использовать клавиши Home, End и Delete (которые в цисковой консоли «не работают»).

Сочетания



Сначала немного сочетаний клавиш с ctrl.

Ctrl + a — переход в начало строки (cisco, csh, zsh)
Ctrl + b — переход на 1 символ назад (cisco, csh, zsh)
Ctrl + c — посылает программе SIGINT. Обычно, прерывает текущее задание (csh, zsh)
Ctrl + d — удаляет символ под курсором (аналог delete) (cisco, csh, zsh)
Ctrl + e — переход к концу строки (cisco, csh, zsh)
Ctrl + f — переход на 1 символ вперёд (cisco, csh, zsh)
Ctrl + k — удаляет всё, до конца строки (EOL, а не на экране!) (cisco, csh, zsh)
Ctrl + l — очищает экран. Аналог команды clear. (csh, zsh)
Ctrl + r — поиск по истории. Повторение поиска (листание результатов поиска). То есть инкрементальный поиск. (zsh)
Ctrl + j — прекращает поиск и позволяет отредактировать найденную команду. Если поиск не производился, то аналогично нажатию return. (в zsh выполняет команду)
Ctrl + t — меняет символ под курсором на предыдущий. Или, если хотите, тянет предыдущий символ к концу строки. (cisco, csh, zsh)
Ctrl + u — удаляет все символы слева от курсора до начала строки. (cisco, в csh, zsh удаляет всю строку)
Ctrl + w — удаляет символы слева от курсора до начала слова. (cisco, csh, zsh)
Ctrl + xx — переходит от текущей позиции курса в начало строки и обратно. На циске работает аналогично ctrl + u. (csh)
Ctrl + x @ — показывает возможные дополнения имени хоста (имена берутся из /etc/hosts)
Ctrl + z — suspend'ит текущую задачу (csh, zsh)
Ctrl + x; Ctrl + e — открывает $EDITOR для изменения введённой строки. После сохранения изменений, команда отправляется на исполнение. Если переменная не задана, то открывается системный текстовый редактор (для линукса это, зачастую, nano)

Теперь немного о сочетаниях с альтом.

Alt + < — переход к первой команде в истории команд (zsh)
Alt + > — переход к последней команде в истории
Alt +? — показывает список возможных дополнений команды(аналогично tab-tab) (в csh, zsh аналог which string)
Alt + * — вставляет все возможные дополнений команды в строку команд
Alt + / — пытается дополнить имя файла (аналогично табуляции)
Alt +. — вставляет последний аргумент предыдущей команды (аналог !$, только не надо делать :p, чтобы проверить )
Alt + b — сдвигает курсор влево на 1 слово (cisco, csh, zsh)
Alt + c — делает букву под курсором большой, а остальные, до конца слова, маленькими. (cisco, csh, zsh)
Alt + d — удаляет символы с текущей позиции курсора и до конца слова. (cisco, csh, zsh)
Alt + f — передвигает курсор на одно слово вперёд (cisco, csh, zsh)
Alt + l — делает все буквы с текущей позиции курсора и до конца слова маленькими (cisco, csh, zsh)
Alt + t — меняет местами слова под курсором и предыдущее (zsh)
Alt + u — переводит буквы с текущей позиции курсора и до конца слова в верхний регистр (cisco, csh, zsh)
Alt + back-space — удаляет символы с текущей позиции курсора до начала слова (cisco, csh, zsh)

В следующем абзаце я, для краткости, буду писать «2Т» чтобы обозначить двойное нажатие табуляции.

2T — дополнение команды. Если нажать при пустой строке — выведет список всех доступных команд
(string)2T — выведет список возможных дополнений
(dir)2T — покажет подпапки папки dir
*2T — покажет подпапки исключая скрытые (имена которых начинаются с точки)
~2T — выведет всех пользователей из /etc/passwd. Дополнив имя пользователя можно перейти в его домашний каталог. Например ~oxpa/ — домашний каталог пользователя oxpa
$2T — выводит список дополнений для системных переменных
@2T — дополняет имена хостов содержащимися в /etc/hosts
=2T — листинг текущей директории, аналогичный ls.

Небольшое заключение



Так как в своей работе я чаще всего использую bash и cisco'вский шелл, то просто подписал сочетания, которые, я знаю, работают и для других шеллов. Возможности csh, zsh наверняка не меньше башевских, просто я меньше с ними работал.
Вышеприведённый список будет неправильно показывать без пояснения: все эти горячие клавиши в bash'e можно переназначать. Есть действия, которые по умолчанию не назначены на горячие клавиши. Подобные «трюки» описаны в руководстве bash'a, которое я рекомендую прочитать всем заинтересовавшимся.
@oxpa
карма
37,5
рейтинг 0,0
I speak linux
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (59)

  • +4
    полезный сборник, спасибо. Часть интуитивно знаешь, часть из опыта, но многие сокращения для меня стали открытием.
    • +3
      ну кроме полезных переходов в начала/конец строки, настоящим открытием стало «Ctrl + x; Ctrl + e»: я люблю иногда писать «однострочки» из команд 10, а без редактора это не всегда удобно (или становится неудобно, по мере написания ;). Вот однажды вычитал в мане, что эта моя проблема легко решается. Да и результат можно сразу сохранить в файлик.
  • +2
    Ох какая красота, надо раскрасить и на стенку бабахнуть. Спасибо.
    • +1
      Я пока набирал попробовал раскидать информацию по таблице или в каком-то формате более похожем на cheat-sheet, но для статьи здесь они не очень подошли. Всю статью можно свести к одной-двум картинками подобного вида, на самом деле. Но лучше при этом заранее прочитать более развёрнутое объяснение.
      • +1
        Нет я считаю хорошо у вас вышло, хоть и просто списком, но я не могу представить как это сделать еще лучше, схемой или чем-то.
  • +1
    >Ctrl + x; Ctrl + e
    о спасение
    как часто писал длинные команды, изменял их, правил… они потом превращались в не читаемый ужас, не влезая в терминал, но отдельно файл со скриптом создавать ещё лень… а вот как просто всё оказалось:)
  • 0
    zsh выводит список дополнений при одиночном нажатии Tab, а при последующих начинает перебирать их.
  • +6
    Это режим редактирования emacs. Существует еще и режим vi.

    set -o vi
    set -o emacs
    • 0
      Это не совсем правильный режим emacs, в zsh он куда правильней. Например, C-w «вырезает» регион, а не удаляет слово перед курсором и т.д.
    • 0
      !!! Большое спасибо, не знал, что оно уже встроено. Фантастически удобно.
  • +1
    Мега респект за Ctrl + x; Ctrl + e и Ctrl + xx :)
    • +1
      вместо Ctrl+xx всегда можно было использовать Home и End кнопками, кстати.
      • 0
        А как вернуться обратно?
      • 0
        Вы не верно поняли для чего эта горячая клавиша…
        Введите какую-нибудь команду, потом переместите курсор влево на несколько символов, нажмите ^xx (Ctrl+xx), попадете в начало строки, нажмите еще раз ^xx и попадете обратно, где были до этого.
        В этом и есть сила ^xx :))
  • +2
    Может кому будет полезно:
    Прерывание «текущего выполнения» — аналог Ctrl+C в Cisco:
    Ctrl+6
    • 0
      Ctrl+Shift+6
      Можно сменить на привычный Ctrl+C командой escape-character 3 на линии vty.
      • 0
        Спасибо, по поводу escape-character буду знать.
        Но Ctrl+6 у меня по-умолчанию работает на:
        cisco 2600, 7500, 2800, 7200, 7600.
        catalyst 3560, 3750G, 3750E.
        Так что думаю, можно и без Shift обойтись;)
  • 0
    Теперь я понял, почему пользователи FreeBSD использую zsh =)
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Да благословит вас всех святой emacs!
    • +8
      Преподобный Vim не одобряет свалок из свистелок «все-в-одном».
  • 0
    Спасибо большое. Вот только вопрос: можно ли баш научить по нажатию стрелки вверх перебирать из истории только те команды, начало которых совпадает с тем, что уже было набрано в строке непосредственно перед нажатием стрелки вверх? Так действует ipython и я нахожу это чрезвычайно удобным.
    • 0
      И fish.
    • +3
      Сделал так:

      в .bash_login
      if [ -f "$HOME/.inputrc" ] ; then
          export INPUTRC=$HOME/.inputrc
      fi
      


      в ~/.inputrc
      "\e[A": history-search-backward
      "\e[B": history-search-forward
      
      • 0
        в убунте лучше читать и править /etc/inputrc кстати говоря.
  • +5
    При чём тут разные шеллы? Это же readline делает.
  • 0
    Хмм… В симуляторе на Cisco IOS Alt+символ просто вводит символ. Попробую в вс на реальной железке, может не посчитали нужным добавить в симулятор. За Ctrl+a и Ctrl+e отдельное спасибо )
  • +4
    Возможно, мой комментарий будет полезен начинающим.

    Ctrl + z — suspend'ит текущую задачу (csh, zsh)


    Чтобы вернуться к таким задачам, используется команда fg.
    Если задач несколько, введите аргумент — число, стоящее в квадратных скобках вывода команды jobs:

    root@vpupkin# jobs
    [1] Остановлено vim
    [2]+ Остановлено nano
    [3]- Остановлено less /etc/hosts
    root@vpupkin# fg 2


    Для двух последних команд можно использовать '+' и '-'.
    • +1
      Остановлено vim
      Зачем, зачем переводить шелл? Мне вот приятнее читать английский, чем такую красоту.
      • 0
        Это вывод терминала Ubuntu (bash).
        Отвечай я на этот пост с FreeBSD, перевода не последовало бы.

        Признаюсь, самому больше нравится английский.
        • 0
          export LANG=C?
    • +1
      Ну и я тогда ляпну:

      Ctrl+\ — убьёт то, что не может быть остановлено по Ctrl+C, например если оно впадает в dead-lock на выходе.
      • 0
        ctrl + \ или ctrl + | посылает программе SIGQUIT и она выходит оставляя core dump. Кроме того, можно использовать сочетание клавиш ctrl + 4, если я правильно понял.

        Спасибо за комментарий, я не знал этого сочетания.
  • +1
    Как бы настроить Putty, чтобы он понимал виндовые сочетания клавиш для работы с кареткой? Ctrl+←, Ctrl+→, Ctrl+BckSp, Ctrl+Del

    Как бы научить screen прокручивать экран по нажатию клавиши, а не по адовому сочетанию из трех сочетаний (Ctrl+A, [, Ctrl+B)?
    • 0
      для zsh добавить строки ~/.zshrc
      #Ctrl+←,
      bindkey "^[OD" beginning-of-line
      # Ctrl+→
      bindkey "^[OC" end-of-line

      или для баша — как было выше, в .inputrc
      "\eOD": beginning-of-line
      "\eOC": end-of-line

      насчет Ctrl+BckSp, Ctrl+Del — не могу выловить сканкод, для ctrl+del должно быть действие «удалить от курсора до конца строки» — kill-line
      от Ctrl+BckSp — не понял
      • 0
        Подскажите, как забиндить Ctrl+Z. А лучше, как это определять для разных клавиш и сочетаний.

        Ctrl+BckSp — удаление последнего слова, тоже интересно.
      • 0
        В винде все привыкли к этому:

        Ctrl+← — переместить курсор на одно слово влево;
        Ctrl+→ — переместить курсор на одно слово вправо;
        Ctrl+BckSp — удалить слово слева от курсора;
        Ctrl+Del — удалить слово справа от курсора.

        Под словом понимается группа буквенно-цифровых символов, а также подчеркиваний, неразрывных пробелов и, возможно, чего-то еще.
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
      • +1
        Символ конца потока.
  • 0
    А есть ли комбинация, чтобы послать задачу в фон, не усыпляя её? А то делать ctrl+z а потом bg как-то не очень…
  • 0
    Я так адски страдала без ctrl+r. Спасибо вам.
  • 0
    Тем, кто хочет получить ещё больше экспириенса в работе с шеллом, советую поставить zsh а затем посмотреть grml-zsh-config с сайта дистрибутива grml и man-page zsh-lovers тоже с сайта grml. Там очень много интересных трюков.

    Например там есть подстановка по хоткею sudo в начало текущей строки, или, если строка пустая, в последнюю введенную комманду. Или хоткей для перехода в точку после первого слова в строке (для дописывания аргументов, например) и т.п., очень много функций облегчающих работу в шелле. Есть там и функция, которой можно заменить сочетание C-z, используемое для саспенда задачи. В версии grml, если активной задачи нет — выполняется fg.

    P.S. zsh самый навороченный shell, afaik
    • 0
      У меня он так тормозил, что пришлось вернуться к bash. Наверно, можно было просто отключить ряд фич, но тогда [для меня] терялся смысл использования zsh.
  • 0
    Огромное спасибо! Добавил все команды в виде комментариев в свой .bashrc. Теперь они всегда под рукой будут. Я как то редко консолью пользуюсь, но зато очень метко :) Поэтому такие шпаргалки необходимы.
  • +2
    Спасибо огромное! Ctrl+x,Ctrl+e вынес мой моск.

    От себя добавлю в копилку:

    <Esc>+. подставит последний аргумент из предыдущей команды.

    Пример:
    $ touch /tmp/testfile
    $ rm <Esc>+. превратится в rm /tmp/testfile
    
  • 0
    Это же Emacs режим
    • 0
      Кстати в Макоси комбинации вроде Ctrl-A, Ctrl-E работает в любом поле ввода
      о_О
      • +1
        Если скомандовать gconftool-2 --set /desktop/gnome/interface/gtk_key_theme Emacs --type string с консоли то в Gtk тоже будет везде, а так же в фаерфокс и хром
        • 0
          ухты, спасибо.
          а графическая настройка есть какая-то для этого?
  • 0
    а скажите как скопировать/вставить а bash?
    • 0
      например, это возможно через выход в текстовый редактор (если нужно скопировать и вставить часть команды). Однако по моему опыту, copy/paste редко нужен в консоли. Если что-то нужно сохранить используются переменные и простейшие скрипты для их обработки. Хотя, бывает, иногда проще руками ввести что-то с экрана.
    • +1
      Этим занимается эмулятор терминала. Например, для копирования текста в буфер нужно выделить его мышью, а для вставки — нажать среднюю кнопку.

      На самом деле буфера нет и всё происходит при нажатии средней кнопки мыши. При выделении только устанавливается окно-владелец PRIMARY SELECTION, но вам это не интересно. :) Единственное, что нужно помнить — при закрытии окна с выделением, оно теряется. Никакого промежуточного буфера нет.
  • +1
    Это, и многое другое, в скринкасте «Bash Command Line Editing» от Tim Harper
  • +1
    Кстати Ctrl+S это поиск по истории вперед, но он по умолчанию совпадает с управлением потоком. Добавте команды
    stty ixany
    stty ixoff -ixon

    В .bashrc
  • 0
    Ну хорошо бы в добавок ссылку на первоисточник дать Bindable Readline Commands — Bash Reference Manual

    Кстати раз уж про клавиши зашёл разговор, как в PuTTY передать Ctrl+Alt+Del?
  • 0
    Спасибо. Надо распечатать и повесить рядом с монитором.

    Офф: нет ли программы дополнения команд/имен файлов под Win? Привык уже к bash, а в Win как будто руки связаны :(
    • 0
      вообще, имена в cmd дополняются так же как в баше. По крайней мере я всегда пользовался табом и это срабатывало.
  • 0
    «Возможности csh, zsh наверняка не меньше башевских, просто я меньше с ними работал.»
    zsh самый навороченный по возможностям шел =)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.