Подтвердить что ты не робот

Как я могу просмотреть всю историю bash?

Сначала позвольте мне привести пример ниже.

В оболочке (1) я выполнил следующую команду.

$ ping google.com
PING google.com (74.125.235.164) 56(84) bytes of data.
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=1 ttl=54 time=2.85 ms
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=2 ttl=54 time=3.42 ms

И после этого откройте другую оболочку (2) и посмотрите на историю.

$ history
 .
 .
 .
 8720  exit
 8721  clear
 8722  history

В этом случае оболочка не может видеть историю, выполняемую оболочкой (1), но я хочу видеть всю историю bash в каждой оболочке.

Итак, мой вопрос: как я могу увидеть всю историю bash? Кто-нибудь знает, как взломать?

Спасибо вам заблаговременно!

4b9b3361

Ответ 1

Вы должны посмотреть в оболочку histappend и флаг -a на history:

histappend

Если установлено, список истории добавляется к файлу, названному значением переменной HISTFILE, когда оболочка завершается, а не перезаписывает файл.

history

-a Добавьте в файл истории "новые" строки истории (строки истории, введенные с начала текущего сеанса bash).

Если вы поместите history -a в свой PROMPT_COMMAND, вы получите всегда обновляемый файл .bash_history.

Ответ 2

cat ~/.bash_history

также будет работать, хотя я обычно использую

vim ~/.bash_history 

а затем используйте / для поиска

Ответ 4

Вы можете установить что-то вроде Advanced Shell History, которая будет записывать каждую команду в базу данных sqlite3. Он поставляется с инструментом для запроса базы данных из командной строки. https://github.com/barabo/advanced-shell-history

С помощью этой настройки у вас будет единое представление истории команд во всех сеансах. Вы также получаете такие вещи, как история команд для текущего рабочего каталога (или поддерева), код выхода команды, продолжительность команды и т.д.

Полное раскрытие: я написал и поддерживаю инструмент.

Ответ 5

Как уже отмечалось, вам нужно использовать shopt -s histappend. Проверьте, запустив shopt и убедившись, что histappend включен.

Чтобы каждая команда (для нескольких одновременных оболочек) появлялась в истории для каждой из этих оболочек, добавьте ее в конец файла .bashrc:

# Skip if not an interactive shell
if [ -z "${PS1}" ]; then return; fi
export PROMPT_COMMAND="history -a; history -c, history -r; ${PROMPT_COMMAND}

-a: добавляет новые строки истории (строки истории, введенные с начала текущего сеанса Bash) в файл истории.

-c: очищает список истории.

-r: читает текущий файл истории и добавляет его содержимое в список истории.

Запустите source.bashrc или создайте новые сеансы и в нескольких терминальных окнах введите комментарий #Tn в каждом. Затем на одном терминале введите history | tail -N history | tail -N чтобы увидеть последние N строк. Вы должны увидеть все комментарии, введенные на разных терминалах.

Может быть полезно добавить следующее в /etc/profile.d/bashrc.sh, чтобы получить отметку времени в каждой строке истории:

if [ -z "${PS1}" ]; then return; fi
export HISTTIMEFORMAT='%F %T '

Результат выглядит так:

 [[email protected] ~]$ history | tail -4
 3292  2019-01-22 12:41:27  # T1
 3293  2019-01-22 12:41:34  # T2
 3294  2019-01-22 12:41:42  # T3
 3295  2019-01-22 12:41:50  history | tail -4