Хранит ли терминал данные?

9

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

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

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

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

Projjol
источник
написать историю, чтобы получить все ранее использованные команды ..
Sukupa91
ОП спрашивает не о historyкоманде, а о том, как работает вся эта система запоминания старых команд.
Тарун
извините, я ошибся ..
Sukupa91
2
Помните об этом исключении: если команда начинается с пробела, команда не попадет в историю.
Rinzwind
@Rinzwind, он добавляется в историю, если начинается с пробела.
GC 13

Ответы:

10

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

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

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

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

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

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

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

Adaephon
источник
1
И если вы не хотите, чтобы он сохранял историю, поместите unset HISTFILEв ваш ~ / .bashrc. Тогда он будет только хранить историю в памяти, очищая ее для каждого нового вызова оболочки.
CVN
10

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

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

Tarun
источник