Все привыкли редактировать текст в текстовых редакторах, блокнотах, веб-формах и т.д. В процессе набора текста мы пользуемся привычными стрелками, кнопками «End» и «Home», более опытные зажимают «Ctrl» и стрелками шагают по словам (что, кстати, не всегда работает). И при переходе на консоль мы ориентируемся на те же самые правила, даже не зная, что bash предлагает очень удобные средства и комбинации клавиш, которые очень упрощают работу и минимизируют количество операций для выполнения задачи. К тому же, в bash есть удобные средства работы с историей, масса различных подстановок и других интересных функций. Самые часто используемые мной и любым опытным администратором я и опишу в этой статье.
Для того, чтобы все, описанное мной, заработало, не нужно ничего до устанавливать, не нужно писать скрипты, конфиги и прочие дополнения: все эти средства работают абсолютно одинаково в большинстве современных интерпретаторах bash, работающих на любой UNIX системе.
Мой педагогический опыт говорит о том, что практика — лучший способ понять, полюбить и привыкнуть к новым функциям, поэтому я не стал рисовать голые таблицы, а сделал повествование, и рекомендую в процессе чтения статьи открыть консоль и пробовать все, чем еще не пользовались, руками.
По привычке, для перемещения в начало строки используется кнопка «Home», а для перемещения в конец — кнопка «End». Но на сколько удобно тянуться к этим кнопкам при наборе команды? Bash предлагает не отрываться от буквенно-цифровой клавиатуры и использовать комбинации «Ctrl+A» вместо «Home» и «Ctrl+E» вместо «End». Иногда, набрав длинную команду, вспоминаешь, что перед ней нужно было выполнить еще одну: в этом случае оптимальным способом будет переместиться по «Ctrl+A» в начало строки, дописать символ "#" (тем самым закомментировав команду, но оставив ее в истории), и нажав Enter, после чего можно выполнить нужную команду, в истории найти закомментированную команду, убрать символ комментария и выполнить ее.
Чтобы очищать текст до или после курсора используются комбинации клавиш: «Ctrl+K» — удаление текста от текущей позиции курсора до конца строки, а «Ctrl+U» — до начала строки. Ну и наконец, по «Ctrl+C» можно удалить сразу всю строку.
Можно удалять сразу слова: «Ctrl+W» удаляет слово слева от курсора, «Alt+D» — справа. Но удаленные слова еще и помещаются в буфер, последнее удаленное слово можно вставить начиная с текущего положения курсора по комбинации «Ctrl+Y».
Часто в спешке можно набрать 2 символа в не правильной последовательности: в этом случае удобно воспользоваться комбинацией клавиш «Ctrl+T», которая предназначена для замены местами символа до курсора и символа под курсором.
Обычно познания подсистем истории bash ограничиваются стрелками вверх и вниз. В работе удобно использовать еще следующие возможности:
[vorb@localhost ~]$ ls -l /dev/dsa
ls: невозможно получить доступ к /dev/dsa: Нет такого файла или каталога
[vorb@localhost ~]$ ^dsa^sda
ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Апр 5 03:18 /dev/sda
Здесь ошибочная запись «dsa» прошлой команды заменена на корректную «sda», и новая команда выполнена успешно.
Командой «cd», как и авто дополнением по кнопке «TAB» уже никого не удивишь. Но часто приходится «бегать» по всей файловой системе с необходимостью потом вернуться назад. Здесь пригодится основанный на модели стека механизм bash, который поддерживается командами pushd и popd: pushd выполняет переход в целевой каталог и занесение абсолютного пути предыдущего каталога в стек, а popd — наоборот, выбирает из стека предыдущий путь и переходит в него. Пример:
[vorb@localhost ~]$ pushd /var/cache/urpmi/rpms/
/var/cache/urpmi/rpms ~
[vorb@localhost rpms]$ pushd /etc/urpmi/mediacfg.d/Cooker-2010.0-i586/
/etc/urpmi/mediacfg.d/Cooker-2010.0-i586 /var/cache/urpmi/rpms ~
[vorb@localhost Cooker-2010.0-i586]$ popd
/var/cache/urpmi/rpms ~
[vorb@localhost rpms]$ popd
~
[vorb@localhost ~]$
В этом примере я сначала перешел в каталог с кэшем urpmi, потом в каталог с конфигами urpmi, затем вернулся назад в каталог с кэшем, и домой. Одна из самых распространенных задач, решаемых с использованием этого механизма: перейти в каталог с конфигами, затем в каталог с кэшем, с логами, или чем либо еще, и иметь возможность быстро вернуться назад.
Кстати, команда «cd» тоже имеет свои хитрости: «cd» без параметров сменит каталог на домашний, «cd ~user» — на домашний каталог пользователя user.
В принципе, это все, о чем я хотел рассказать в рамках этой статьи. Конечно, это далеко не все, и, если есть желание развивать знания в этом направлении, рекомендую книгу Джерри Пика, Тима О'Райли и Майка Лукидиса «UNIX: Инструментальные средства». В ней описан не только bash, но и C shell, и ksh, и сколько я ее читаю — всегда нахожу что-то новое для себя.
Успехов!
Комментарии (7)
Горячие клавиши в Bash
В большинстве Linux систем стандартной коммандной оболочка является Bash (Bourne-Again Shell). Есть несколько удобных горячих главиш, которые рекомендуется запомнить и использовать при работе с коммандной строкой и которые позволяют сэкономить кучу времени при наборе и редактировании команд.
Вместо клавиши Alt, которая не работает на некоторых терминалах (например, при ssh сессии), можно использовать клавишу Esc. При этом нажимать необходимо последовательно - Esc, затем t. Вместо клавиши Esc можно нажать комбинацию Ctrl + [, это удобно, если у Вас клавиша Ctrl расположена слева от латинской буквы A.
Нагло содрано отсюда: Горячие клавиши в Bash
Давно хочу узнать, как можно (желательно, быстро - хоткеем или простой командой) отключать/включать отображение текущего каталога перед командной строкой: roman@desktop1:~/sources$ или roman@desktop1:/usr/bin$, например.
А то иногда - видеть, в каком каталоге находишься, необходимо, а в случаях, когда это не критично, а путь длинный, ужасно неудобно.
pwd - отображает полный путь до текущего каталога. Не совсем
, но удобно.Это-то, да; как без этого. Но, когда запутываешься в своём местонахождении, обычно даже не думаешь, что можешь находиться не там, где кажется... Соответственно, перепроверить просто в голову не приходит. Закон подлости :)
Иногда единственный выход, чтобы само глаза мозолило; но иногда - глаза мозолит слишком...
Чтобы было более понятно, о чём, вообще речь-то идёт...
Обычно то, что идёт перед приглашением командной строки, правится так: bash-prompt-tuning на Убунтологии. Но лезть за этим каждый раз в записи мне лень, а пользуюсь (опять же, по причине лени) слишком редко, чтобы запомнить наизусть, и набирать - на автомате.
Посему, интересуюсь методами убыстрения и упрощения сего действия.
Используй команду alias . Она для сокращения команд
Всё хорошо. Но только для текст надо получше отформатировать. То что давно искал, но с наскоку на такой большой текст не наскочить, "много букв", а отдельные отрезки не выделить.
Получше, чем даже на самом хабре.
P.s. это не придирка, это примечание. Было бы время, попробовал бы в спойлере реализовать, что имею ввиду.