Я хотел бы иметь журнал всех команд, которые набираются на терминале.
У меня есть проверка «скрипт», но это создает файл с командами и отвечает все вместе. Есть ли способ иметь только команды?
Все, что пользователь вводит в терминал вручную, сохраняется в ~/.bash_history
, где ~
является сокращением для текущего зарегистрированного в домашнем каталоге пользователя. Также обратите внимание, что файлы, начинающиеся с .
, являются скрытыми; в Nautilus вы можете показать их, нажав Ctrl kbd> + H kbd>.
Взгляните на это, набрав
cat .bash_history
Чтобы просмотреть свою историю, снабженную последовательными номерами, введите
history
Вы можете снова выполнить команды, которые видите там, набрав [ 115], например, который будет выполнять команду номер 2129, как показано командой history
.
Обратите внимание, что команда history
показывает вам до второго журнала, где .bash_history
сохраняется только после выхода из терминала.
Небольшая часть интересной информации:
.bash_history
. Если вы запускаете команду, подобную rm -R mydir/
, вы можете поставить перед ней пробел, чтобы предотвратить ее случайный запуск, нажав стрелку вверх. Как говорит Жоао, размер сохраненной истории можно контролировать с помощью export HISTFILESIZE=5000
.
Если вы используете оболочки defaullt, все команды уже записаны в $ HOME / .bash_history. Существует несколько переменных среды, которые влияют на сохранение истории, вы можете прочитать о них с помощью:
info bash
Type: / HIST
Если вы хотите применить настройку ко всем пользователям, отредактируйте /etc/profile.
Пример:
export HISTFILESIZE=5000
Если вы хотите получить журнал всех команд, которые вы запускаете в интерактивной оболочке, см. BashFAQ 88 - Как избежать потери строк истории?
Вы также можете использовать CTRL kbd> + R kbd> в терминале для поиска своей истории.
Я записал функцию для этого:
function begin_install_log() {
if [ $# -eq 0 ]
then
echo "No arguments supplied"
HIST_NUM=""
else
HIST_NUM=$(history|tail -n 1|awk '{ print $1 }')
HIST_NUM=$((HIST_NUM + 2))
OUTPUT_FILE=$HOME/environment/ansible/.install_cache/${1}
fi
}
function capture_install_log() {
if [ ! $HIST_NUM ]
then
echo "run 'begin_install_log' first"
else
history|grep -A999 $HIST_NUM|awk '{$1=""; print $0}' >> $OUTPUT_FILE
HIST_NUM=""
fi
Использование:
$ begin_install_log some_file_name
$ blah
$ blah
$ blah
$ capture_install_log
Необходимо будет, конечно, заменить переменную OUTPUT_FILE для удовлетворения потребностям.
Удачи!