Расположение файла истории выходных данных оболочки bash

13

Где оболочка bash хранит фактический сеанс терминала? Я хочу прочитать вывод команд, которые я использовал раньше. Все, что я могу найти, - это как сохранить результаты команды.

Поскольку выходные данные отображаются на экране, их все равно нужно где-то хранить. Итак, мой вопрос: где?

Даниэль Бекенхофф
источник

Ответы:

11

Bash хранит только историю команд, которые вы выполнили (которые вы можете получить, набрав history). Если вы уже не установили прокрутку назад на очень высокое число, невозможно увидеть выходные данные, которые старше, чем установленное значение прокрутки назад. Также установка этого значения на очень большое число сделает вашу прокрутку медленной, так как строки сохраняются в памяти .

Чтобы сохранить ваши будущие команды и их результаты, есть несколько вариантов:

С помощью screen

Начните сеанс экрана , введя screen. Как только вы окажетесь внутри экрана, нажмите Ctrl- a, затем :, затем введите log. Все операции ввода / вывода будут записаны в screenlogфайлы в каталоге, где вы запустили screenкоманду.

С помощью script

Вы можете начать, набрав script. Сценарий сессии начнется , что будет фиксировать все операции ввода / вывода в файл с именем typescript. Вы можете выйти из scriptсеанса с помощью Ctrl- d и просмотреть журналы в typescriptфайле.

С помощью tee

Тройник - удобный инструмент. Вы можете сделать что-то вроде этого:

$ bash | tee log.txt

Это откроет новую оболочку bash внутри той, которую вы уже используете. Когда вы exitвыходите из этого, вы можете увидеть результаты в файле с именемlog.txt

Другие способы

Как Дастин Киркланд предложил в этом посте, вы также можете использовать byobu . Хотя я никогда не пользовался такими инструментами скринкастинга терминалов, как Shelr .

Рон
источник
6

Есть много вопросов, связанных с этим, но все они начинаются с (справа) предположения, что выходные данные не записываются.

Итак, мой вопрос: где?

Нигде: вывод Bash (и любой другой известной мне оболочки) не регистрируется.

Поскольку выходные данные отображаются на экране, их все равно нужно где-то хранить.

Это так, но, скорее всего, не в виде простого текста и даже не на диске (хотя это действительно зависит от эмулятора терминала): скорее всего, и, по крайней мере, в большинстве случаев, в сегменте памяти, выделенном эмулятором терминала.

Однако наверняка он не записывается в файл, по крайней мере, не оболочкой, и я не знаю эмуляторов терминала, которые по умолчанию записывают вывод в файл.

На самом деле это не означает, что невозможно зарегистрировать вывод терминала: сначала я упомяну что-то, о чем, по-моему, мало кто знает, так как я никогда не видел, чтобы кто-нибудь упоминал об этом, по крайней мере, здесь, в Ask Ubuntu: Konsole позволяет сохранить прокрутка к файлу (возможно, есть другие эмуляторы терминала, которые предоставляют такую ​​функциональность, Konsole - единственный, о котором я знаю), хотя это ограничено ограничением размера прокрутки в Konsole.

Это часто не очень полезно, хотя, и, скорее всего, вы захотите найти «правильные» решения для записи вывода всего сеанса в файл ( Как мне записать весь ввод и вывод в терминальном сеансе? И ответ Рона ).

кос
источник
1

Существует команда с именем script, если она не установлена, она apt-get install scriptбудет выполнена.

Тогда в терминале просто введите скрипт.

и делайте что хотите, после того, как вы закончите, просто введите команду exit, и в вашем текущем каталоге будет создан файл со всей информацией о stdout и stdin.

надеюсь, это поможет вам.

rɑːdʒɑ
источник
Пакет NA в Ubuntu 18.04
Маркроксор
1

Это не имеет никакого отношения к вашей оболочке ( bash), это не особенность эмулятора терминала, который вы используете. Он хранится в «буфере прокрутки» вашего терминала. Я не смог найти четких объяснений того, где именно это хранится, но личный опыт показал мне, что он хранится где-то в /tmp.

Как показывает ответ на вопрос, связанный с вышеупомянутым, он, скорее всего, хранится в безымянном файле. Чтобы понять, что я имею в виду, откройте новый файл в текстовом редакторе:

gedit newfile

Запишите строку текста в файл и сохраните его. Теперь, пока этот файл еще открыт, откройте терминал и удалите его:

rm newfile

Поскольку файл все еще открыт gedit, вы можете продолжить запись в него. Вы даже можете записать в него несколько гигабайт данных, несмотря на то, что файл был удален. Это потому, что удаление файла просто удаляет ссылку, указывающую на его индекс . Если его дескриптор файла остается открытым другой программой, данные могут быть записаны в него, несмотря на тот факт, что в файловой системе больше нет фактической ссылки (файла), соответствующей дескриптору файла.

Все это говорит о том, что история вашего терминала, вероятно, сохраняется с помощью такой хитрости, где-то в удаленном файле в /tmp. То, что вы, вероятно, на самом деле хотите, это просто увеличить размер буфера прокрутки вашего эмулятора терминала, чтобы вы могли просто прокрутить вверх и увидеть его. Детали того, как это сделать, зависят от того, какой эмулятор терминала вы используете. У большинства есть переключатель командной строки, который позволяет вам это сделать, и у многих также есть способ настройки GUI. Например, в gnome-terminal(по умолчанию в Ubuntu) это Edit -> Preferences -> Profiles --- нажмите на свой профиль -> Edit -> Scrolling -> Limit scrollback to NNN:

Экран настроек терминала gnome

terdon
источник
Интересное понимание. Однако изучать более длинную историю в терминале - это не то, что я хочу: я хочу иметь доступ к методу терминала, то есть всему, что там было написано ОТ ЭГ ПИТОНА
Даниэль Бёкенхофф
@ DanielBöckenhoff тогда вы, вероятно, хотите, scriptкак описано в принятом ответе.
тердон
Конечно. Я принял это :)
Даниэль Бекенхофф
-2

Терминальная сессия хранится в .bash_historyфайле. Введите это в свой терминал echo $HISTFILE, это даст вам путь к .bash_historyфайлу.

user532036
источник
2
Это дает только ранее выполненные команды , а не вывод команд.
Рон