Как я могу просмотреть всю историю 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? Кто-нибудь знает, как взломать?
Спасибо вам заблаговременно!
Ответы
Ответ 1
Вы должны посмотреть в оболочку histappend
и флаг -a
на history
:
histappend
Если установлено, список истории добавляется к файлу, названному значением переменной HISTFILE
, когда оболочка завершается, а не перезаписывает файл.
history
-a
Добавьте в файл истории "новые" строки истории (строки истории, введенные с начала текущего сеанса bash).
Если вы поместите history -a
в свой PROMPT_COMMAND
, вы получите всегда обновляемый файл .bash_history
.
Ответ 2
cat ~/.bash_history
также будет работать, хотя я обычно использую
vim ~/.bash_history
а затем используйте /
для поиска
Ответ 3
попробуйте следующее:
Отредактируйте свой .bashrc и добавьте его в конец:
shopt -s histappend
PROMPT_COMMAND="history -n; history -a"
unset HISTFILESIZE
HISTSIZE=2000
источник: http://subbass.blogspot.com.br/2009/10/howto-sync-bash-history-between.html
Ответ 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