Работа с историей команд bash
Количество хранимых команд определяется двумя переменными: HISTSIZE и HISTFILESIZE . Первая определяет количество команд, хранимых в памяти, вторая — в файле. Их уместно устанавливать в ~/.bachrc . Такие значения, мне представляются оптимальными:
HISTSIZE=5000 HISTFILESIZE=10000
Настройка способа сохранения
По умолчанию, каждый экземпляр bash переписывает историю. То есть, если вы запустите два терминала, что-то в них сделаете, а потом закроете, то история сохранится только от последнего закрытого. (Она затрёт историю первого закрытого.) Это очень неудобно и легко исправляется вот такой командой:
shopt -s histappend
которую тоже уместно написать в ~/.bachrc .
Простой просмотр истории
history
Пять последних команд:
history 5
В сочетании с grep :
history | grep cd
Но это всё только присказка.
Выполнение команд из истории по номеру
Восклицательный знак выполняет команду с данным номером. Пример:
~$ ls -ld /bin lrwxrwxrwx 1 root root 7 май 31 2013 /bin -> usr/bin ~$ history 3 4220 cd 4221 ls -ld /bin 4222 history 3 ~$ !4221 ls -ld /bin lrwxrwxrwx 1 root root 7 май 31 2013 /bin -> usr/bin ~$ echo !4221 echo ls -ld /bin ls -ld /bin
Как видно из последней команды, подстановка с восклицательным знаком может быть частью другой команды. Она может быть использована в пайпе или в другом контексте. Примеры:
$ sudo !4221 $ !4221 >/dev/null
Номер может быть относительным, с конца: !-2 . Специальное сокращение !! — последняя команда.
Передвижение по истории
Все знают о том, что по истории можно двигаться клавишами-стрелками. Но иногда бывают ситуации, когда эти клавиши недоступны, работают не правильно, или просто отсутствуют (у меня такое было, когда я подключался каким-то ssh-клиентом с iPad). На этот случай полезно знать, что промотка работает по Ctrl-p и Ctrl-n .
Поиск по истории
Режим поиск включается по Ctrl-r . Для поиска следующего совпадения надо повторно нажать Ctrl-r . Для передвижения по совпадениям в другую строну есть сочетание клавиш Ctrl-s .
Проблема в том, что Ctrl-s в большинстве терминалов приводит к засыпанию. Чтобы выйти из сна, нажмите Ctrl-q . Чтобы отключить засыпание, есть команда:
stty -ixon
Поиск по истории по началу команды
Bash (а вернее readline) поддерживает очень удобный стиль поиска — по первым символам команды. К сожалению, по умолчанию, этот механизм недоступен. Чтобы его включить, надо написать в ~/.inputrc что-то такое:
# Shift-[Up][Down] "\e[1;2A" history-search-backward "\e[1;2B" history-search-forward
Теперь вы можете набрать начало команды и нажать Shift- . И для вас будет найдена последняя команда из истории с таким же началом. Стрелки с клавишей Shift теперь позволяют двигаться по совпадениям.
Естественно, можно настроить любые другие клавиши.
Подстановки и изменения команд
Вы уже видели три простейшие подстановки:
- !! — последняя команда
- !n — n-ная в истории команда (с номером n)
- !-n — n-ная с конца команда
После восклицательного знака можно указывать подстроку-начало команды.
!ls — последняя команда ls (со всеми аргументами).
Можно указывать подстроку для поиска:
!?encoder? последняя команда с подстрокой encoder .
Операции с отдельными словами
Все слова (параметры разделённые пробелами) доступны через модификатор : (двоеточие). Пример:
$ cd /home $ echo . 1 echo /home /home
Здесь !! — ссылка на последнюю команду, а :1 ссылка на её первый аргумент. Поэтому, в нашем примере echo . 1 преобразуется в echo /home .
Для этого случая: когда мы оперируем именно с последней командой, можно опускать один восклицательный знак и двоеточие:
$ echo !1
Есть и привычные сокращения: первый аргумент — ^ , последний — $ , все — * . Имеются ввиду именно параметры команды. Без учёта самой команды.
Манипуляции с путями и именами файлов
Следующий уровень модификаторов позволяет минимально управлять именами файлов.
Модификатор :t даёт доступ к имени файла. Эта удобно скажем в таком сценарии работы:
Вы обращаетесь к некому файлу, указывая полный путь:
cat /etc/hosts
Потом переходите в директорию с этим файлом
cd /etc
Выполняете ещё какие-то команды, а потом решаете отредактировать файл. Тогда вы можете написать так:
vi !cat:$:t
То есть, вы находите в историю последнюю команду cat ( !cat ), берёте её последний аргумент :$ , а от него оставляете только имя файла :t .
Модификатор :h работает противоположно, он отрезает имя файла, оставляя весь остальной путь. Это полезно, например, когда вы хотите перейти в директорию с последним просмотренным файлом:
vi /etc/hosts cd $vi:$:h
Последняя команда перейдёт в директорию /etc .
Последний модификатор из этой серии — :r . Он отрезает расширение. Его можно указывать несколько раз, есть вы хотите отрезать несколько расширений ( .tar.gz ).
Горячие клавиши в терминале Linux

Давным-давно, такие слова как «hot keys» и «keyboard shortcuts» мне не всегда удавалось перевести на русский без потери лица. Как-то раз, я написал «клавиатурные сокращения», чем сразу же привлёк косые взгляды и вызвал смелые медицинские фантазии. Но вроде бы сейчас принято везде говорить и писать «горячие клавиши». О них и поговорим.
Данная заметка — шпаргалка по линуксовой оболочке Bash и смежным компонентам. Часть приводимых ниже команд относится к библиотеке Readline, часть — к сигналам Linux, однако такие подробности нам здесь не важны. Если вам приходится часто иметь дело с терминалом в Linux (и вы не меняли Bash на другой шелл), то будет очень полезно использовать эти самые «сокращения» на благо себе и в мирных целях. Текст написан для начинающих пользователей, но кто знает — может быть и вы найдёте в нём что-то новое и полезное для себя.
Для удобства будем считать, что по умолчанию под терминалом мы понимаем стандартную в настольной редакции Ubuntu программу «Терминал Gnome».
Вкладки
В программе “Терминал Gnome” предусмотрены вкладки, и работают они аналогично вкладкам в веб-браузере или файловом менеджере. Иными словами, если вам нужно несколько терминалов, вовсе не обязательно открывать несколько окон. Достаточно одного окна с несколькими вкладками. Ниже приведены горячие клавиши, относящиеся ко вкладкам:
Ctrl+Shift+T — открыть новую вкладку;
Ctrl+Shift+W или Ctrl+D — закрыть текущую вкладку (или весь терминал, если вкладка одна);
Ctrl+Shift+N — открыть новое окно терминала из текущего.
Со временем вы можете оказаться в ситуации, когда вкладок станет действительно много, и тогда возникнет вопрос о навигации между ними. Вам пригодятся следующие сочетания клавиш:
Ctrl+PgDn — перейти на следующую (справа) вкладку;
Ctrl+PgDn — перейти на предыдущую (слева) вкладку;
Ctrl+Shift+PgDn — сдвинуть вкладку вправо;
Ctrl+Shift+PgUp — сдвинуть вкладку влево.
Alt+1 — перейти на первую по счёту вкладку. Подставьте другую цифру для нужной вам вкладки. Данный способ позволяет «дотянуться» максимум до десятой по счёту вкладки.
Навигация
Три очень часто используемые комбинации для копирования и вставки текста, а также отмены выполняющейся команды:
Ctrl+Shift+С — копирование в буфер обмена;
Ctrl+Shift+V — вставка из буфера обмена;
Ctrl+C — прерывание выполняющейся команды или очистка текущей строки.
Для того чтобы выделить нужный текст в терминале, вам потребуется воспользоваться мышью. Тем не менее, в программе “Терминал Gnome” имеется встроенное средство поиска текста, которое позволяет искать как по обычному фрагменту, так и по регулярному выражению:
Ctrl+Shift+F — вызов встроенного поиска по любому тексту в терминале.
Если команда в терминале слишком длинная, или вы сделали опечатку в начале и не сразу это заметили, вы можете вернуться в начало строки. А затем — снова в конец. Вот как это сделать:
Ctrl+A — переместиться в начало строки;
Ctrl+E — переместиться в конец строки.
В терминале Linux можно перемещаться внутри строки также по словам и по отдельным символам (в последнем случае, это аналогично использованию клавиш с боковыми стрелками):
Ctrl+F — переместиться на 1 символ вперед;
Ctrl+B — переместиться на 1 символ назад;
Alt+F — переместиться к следующему слову;
Alt+B — переместиться в начало предыдущего слова.
Управление командами и процессами
Предыдущие команды касались навигации по терминалу и строке ввода команды. Далее стоит рассмотреть управляющие команды Bash, с помощью которых можно запускать, останавливать, ставить на паузу и возобновлять команды и процессы. Вы уже знаете, что запущенный в терминале процесс можно прервать по Ctrl+C, но полезно также знать и некоторые нюансы.
В терминале Linux вы можете не только завершать программы полностью, но и ставить их на паузу. Затем выполнение программы можно возобновлять, причём, как с возвратом интерактивной командной строки, так и без него:
Ctrl+Z — приостановка процесса;
команда bg — возобновление процесса с возвратом командной строки (процесс продолжает выполнение в фоне);
команда fg — возобновление процесса, при котором он удерживает командную строку за собой (процесс выполняется на «переднем плане»).
Процессы также можно приостанавливать и возобновлять. Запустите какую-либо команду, например htop , и нажмите Ctrl+Z. Сначала будет казаться, будто команда завершилась, но она будет числиться в списке запущенных процессов ( ps -a ) и появится вновь после ввода команды fg.
Если повторить эксперимент с графическим приложением, например, введя команду firefox , то можно будет использовать для его «оживления» как fg , так и bg . При любом варианте приложение останется «закреплённым» за текущим терминалом: если вы закроете его, то оно тоже завершится.

Существует и другой тип «приостановки»: временное прекращение вывода выполняющейся команды. Как консольное, так и графическое приложение может быть запущено в терминале, в который будет выводиться текущая диагностическая информация. Иногда бывает очень удобно временно прекратить постоянный вывод сообщений без завершения самого приложения. Для этого пригодятся следующие сочетания клавиш:
Ctrl+S — прекратить обновление вывода команды;
Ctrl+Q — возобновить вывод команды.
История команд
Bash умеет запоминать все введённые вами команды. Пока терминал запущен, они хранятся в оперативной памяти компьютера, а при выходе из терминала записываются в долговременное хранилище в файле ~/.bash_history .
Если вы точно знаете, что вводили нужную вам команду раньше, поищите её в истории:
history — вывод истории команд;
Если вы помните хотя бы часть команды, поиск можно уточнить:
history | grep — пример уточняющего поиска по истории командам.
У каждой команды в истории есть номер. Введите этот номер, поставив вначале восклицательный знак, и Bash выполнит соответствующую команду:
!151 — выполнить команду под номером 151 из истории;
!151: — показать команду номер 151, но не выполнять её;
!! — повторно выполнить последнюю введенную команду.
В Bash имеется интерактивный режим поиска по истории команд. Нажмите Ctrl+R и начните набирать часть команды. Bash сам предложит вам первый совпадающий вариант. Если он не подходит, нажимайте Ctrl+R дальше для перебора вариантов. Когда нужный вариант будет найден, нажмите Enter.
Интересно, что у этой клавиши ввода есть два аналога — вместо Enter можно нажать Ctrl+M или Ctrl+J.
Самый простой способ перемещаться по истории команд — стрелки «вверх» и «вниз» на клавиатуре. Они тоже имеют дубликаты:
Ctrl+P — вывести предыдущую команду;
Ctrl+N — вывести следующую команду.
Редактирование команд
Самое время рассмотреть средства редактирования команд — они в Bash весьма продвинутые. Удобное перемещение в начало и конец строки, выборочное удаление символов и слов — это лишь часть возможностей, которые могут пригодиться пользователю. За редактирование команд отвечают следующие сочетания клавиш:
Ctrl+U — удалить весь текст слева от курсора;
Ctrl+K — удалить весь текст справа от курсора;
Ctrl+W — удалить 1 слово или параметр слева от курсора;
Ctrl+D — удаление текущего символа (аналогично Del);
Ctrl+H — удаление предыдущего символа (аналогично Backspace);
Alt+D — удалить всё справа от курсора до ближайшего пробела;
Alt+Backspace — удалить всё слева от курсора до ближайшего пробела;
Alt+T — поменять местами текущее слово с предыдущем;
Esc+T — поменять местами два предыдущих слова;
Tab — автодополнение команды после ввода её первых символов.
Ещё одна любопытная деталь: у Bash имеется собственный буфер обмена, который работает независимо от стандартного буфера (как мы помним, копирование по Ctrl+Shift+C, вставка по Ctrl+Shift+V). Это важно, поскольку у первых трёх команд из предыдущего списка есть дополнительные функции: они не просто удаляют часть текста, но и копируют его в тот самый отдельный буфер обмена Bash. Поэтому, будет справедливо уточнить:
Ctrl+U — вырезать и поместить в буфер обмена весь текст слева от курсора;
Ctrl+K — вырезать и поместить в буфер обмена весь текст справа от курсора;
Ctrl+W — вырезать и поместить в буфер обмена 1 слово или параметр слева от курсора;
Кстати, для вставки скопированного текста обратно сработает комбинация Ctrl+Y.
Напоследок
Конечно, выше я описал не все горячие клавиши: их гораздо больше, и полное описание содержало бы в себе кучу бородатой экзотики, унаследованной из древних университетских времён UNIX. В любом случае, не забывайте про man bash (например, там есть замечательный раздел Commands for Moving) и про bind -P .
- bash
- командная строка
- горячие клавиши
- сочетания клавиш
- Настройка Linux
- *nix
- Серверное администрирование
История команд и автодополнение
Поскольку в Bash приходится набирать текст вручную, то были придуманы различные способы облегчения ввода команд. Во-первых, Bash сохраняет историю команд, которые вводились ранее, и предоставляет к ней быстрый доступ. Во вторых, есть автозавершение, или автодополнение, когда вы пишите только начало команды или адреса, а конец подставляется автоматически.
История команд
Если, находясь в командной строке, нажимать клавишу вверх клавиатуры, то в строке будут появляться команды, введенные ранее. После первого нажатия стрелки вверх появится последняя команда, следующее нажатие заполнит строку предпоследней командой и т. д. Прокрутив по восходящей к более ранним командам, можно вернуться к более поздним, нажимая стрелку вниз на клавиатуре.
Это удобно, когда команда длинная или требуется повторить недавно введенную. Или вы даете команду, которая похожа на одну из предыдущих, но с незначительными изменениями. Кроме того, с помощью прокрутки истории можно посмотреть, что происходило ранее.
Если требуется избежать сохранения команды в историю, следует поставить пробел в командную строку перед вводом.
При завершении сеанса Bash сохраняет команды в файл .bash_history , который находится в домашнем каталоге пользователя. Точка перед именем файла в Unix-подобных системах делает файл скрытым, поэтому обычно такие файлы не видны. Однако это не мешает посмотреть файл и даже его отредактировать.

На скрине командой cat содержимое файла выводится на экран. Отметим, команды текущего сеанса еще не дописаны в .bash_history .
Автодополнение
Автодополнение, или автозавершение, – это способность командной оболочки автоматически дописывать конец вводимого слова, если это слово однозначно определено. В Bash для автозавершения используется клавиша Tab клавиатуры.
Например, вы через командную строку запускаете программу под названием filezilla . Скорее всего достаточно будет ввести filez и нажать Tab . Оболочка сама допишет слово до конца, если нет других команд, начинающихся с filez .
Автозавершение работает как по отношению к командам-программам, так и адресам. Например, обычно в домашних каталогах дистрибутивов GNU/Linux имеется папка Загрузки (или Downloads ). При вводе ее имени может быть достаточным ввести только первую букву и нажать Tab , чтобы получить полное имя.
Обратим внимание, что Bash, да и Linux в общем, различают большие и малые буквы. Поэтому text.txt и Text.txt – разные файлы.
Если команду или имя файла/каталога однозначно идентифицировать нельзя, то двойное нажатие Tab выводит на экран все возможные варианты.

Здесь было введено слово apt , после этого два раза нажат Tab . В ответ Bash вывел все команды, начинающиеся с заданного слова.
Также автодополнение может помочь, когда вы не помните полное название программы.
Ctrl + U и Ctrl + W
Сочетание клавиш Ctrl + U удаляет написанную в текущей строке команду целиком, т. е очищает командную строку (не путать с командой clear , которая очищает весь экран терминала). Это куда удобнее, чем стирать клавишей Backspace. При этом курсор должен стоять в конце всей строки.
Если курсор находится где-либо в середине строки, то будет удалено все, что находится перед курсором. Текст позади него останется.
Комбинация Ctrl + W удаляет только одно слово перед курсором. Например, в примере ниже нажатие Ctrl + W приведет к удалению только слова install .

Обычно нажатие Ctrl + H в файловых менеджерах графических оболочек Linux отображает скрытые файлы.
- Откройте «Терминал» и проверьте, что у вас есть история команд. Закройте «Терминал».
- Откройте в графическом текстовом редакторе файл .bash_history , удалите его содержимое, сохраните файл.
- Снова откройте «Терминал». Остались ли в истории ранее введенные вами команды?
Курс с ответами к заданиям и дополнительными уроками в PDF
X Скрыть Наверх
Введение в Linux и Bash. Курс
Форум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.031 секунд. Запросов: 23.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.