Записать bash_history в личную базу данных для всех пользователей?

Я хочу иметь возможность настроить базу данных 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, есть проект, который пытается это сделать: http://code.google.com/p/advanced-shell-history/. Его отвратительная система сборки (прочитайте Makefile, прежде чем переходить все make install) может быть причиной того, что он не был включен в дистрибутивы - я работаю над этим и буду продвигать апстрим, а затем сообщать:)

Если вам нужна история для простой оболочки mysql cli, то может пригодиться rlwrap:

Этот пакет предоставляет небольшую утилиту, которая использует библиотеку GNU readline, чтобы разрешить редактирование ввода с клавиатуры для любой другой команды. История ввода запоминается при каждом вызове, отдельно для каждой команды; Завершение истории и поиск работы, как в списках слов bash и завершение, можно указать в командной строке.

Другие вопросы по тегам