Сохраняет ли терминал данные?

Это то, что я хотел знать в течение очень долгого времени, но никогда не приходил к тому, чтобы поставить вопрос.

Я знаю, что в терминале, который предоставляется в дистрибутивах Linux, всю историю команд можно увидеть с помощью клавиш со стрелками (если есть какой-либо другой метод, я не знаю об этом), поэтому как это происходит?

Есть ли место, где терминал регистрирует все нажатия клавиш? Это какой-то буфер? Но, опять же, если бы это был буфер, через некоторое время он был бы очищен, не так ли?

Как работает эта система?

9
задан 19 November 2013 в 14:40

2 ответа

Это история команд, и это особенность оболочки, а не терминала.

В Ubuntu (и во многих, если не в большинстве других дистрибутивов Linux) оболочкой по умолчанию для интерактивного использования является Bash (/bin/bash). Bash хранит вашу историю, это список последних команд в ~/.bash_history. Когда вы открываете оболочку (обычно открывая терминал), этот файл читается и загружается во внутреннюю историю этой оболочки. После закрытия оболочки изменения записываются обратно в файл. По умолчанию это ограничено последними 500 командами.

Есть несколько переменных и параметров оболочки, которые могут изменить поведение, как это работает точно. Загляните на страницу руководства bash (man bash), если вы хотите узнать больше. Просто найдите ИСТОРИЯ (введите /^HISTORY и подтвердите с помощью Enter , перейдите к следующей находке с помощью n )

Также есть гораздо больше способов обойти историю, чем просто Up и Down :

  • Например, нажмите Ctrl + R и часть предыдущей команды, bash будет искать в истории обратный поиск соответствующей команды, повторяя нажатие Ctrl + R Если первый матч не тот, который вы ищете. (См. «Команды для управления историей» на справочной странице bash)

  • Скопируйте /etc/inputrc в ~/.inputrc и раскомментируйте строки с history-search-forward и history-search-backward в них. Если вы введете первые буквы команды и нажмете PgUp , bash отобразит только те команды из истории, которые начинаются с одинаковых букв. (Работа только в оболочках, открытых после внесения этого изменения)

  • Введите !! вместо команды на оболочке, это будет повторять последнюю команду (см. «РАСШИРЕНИЕ ИСТОРИИ» в bash manpage для получения дополнительной информации об этом).

0
ответ дан 19 November 2013 в 14:40

История команд обычно сохраняется для каждого пользователя в файле .bash_history в вашем домашнем каталоге. Значит, у каждого пользователя есть свой набор команд, которые он выполнил.

Когда открыто несколько сеансов терминала, они могут показывать вам разные команды при нажатии клавиши со стрелкой, но когда вы закроете все окна терминала, история другого сеанса терминала будет объединена в общий файл ~/.bash_history.

0
ответ дан 19 November 2013 в 14:40

Другие вопросы по тегам:

Похожие вопросы: