Я хочу иметь возможность настроить базу данных MySQL и записать все команды, введенные на моем сервере, по имени пользователя и команде. Возможно ли это, и если да, то как бы я это настроил?
2 ответа
Вы могли бы
поиграйте с
PROMPT_COMMAND
если вы хотите это в режиме реального времени (каждая строка), это может быть что-то вроде:PROMPT_COMMAND='echo mysql -c "INSERT $(history 1|sed "s/^ *[0-9]* *//")"'
это может быть сохранено в вашем
$HOME/.bashrc
.Играйте с
$HOME/.bash_logout
если вы предпочитаете дайджест при каждомlogout
. это может позволить вам начать свой собственный скрипт, попробуйте добавить что-то вроде этого в ваш.profile
if [ "$HISTFILE" ] ;then export OHISTFILE="$HISTFILE" export HISTFILE=$(mktemp $HOME/.bash_history_XXXXXXXX) touch $HISTFILE history -a cat >>"$OHISTFILE" "$HISTFILE" HISTFILE="$OHISTFILE" HISTFILESIZE=$HISTFILESIZE mysql -c "INSERT ... $(<$HISTFILE).." rm $HISTFILE fi
Если вы используете bash или zsh, есть проект, который пытается это сделать: advanced-shell-history .. Его отвратительная система сборки (прочитайте Makefile до того, как вы все make install
) может быть причиной того, что она не была включена в дистрибутивы - я работаю над ней и отправлю в апстрим, а затем сообщу :)
Если вам нужна история для простой оболочки mysql cli, то может пригодиться rlwrap :
Этот пакет предоставляет небольшую утилиту, которая использует библиотеку чтения строки GNU, чтобы разрешить редактирование ввода с клавиатуры для любой другой команды. История ввода запоминается при каждом вызове, отдельно для каждой команды; Завершение истории и поиск работы, как в списках bash и завершение слов, могут быть указаны в командной строке.