I use this on my unix/linux boxes for eternal bash history for all users (place in /etc/bashrc)
if [ "$BASH" ]; then
export HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo "`date +'%y.%m.%d-%H:%M:%S:'`" $USER "("$ORIGINAL_USER")" "COMMAND: " "$(history 1 | cut -c8-)" >> /var/log/bash_eternal_history'
alias ehistory='cat /var/log/bash_eternal_history'
readonly PROMPT_COMMAND
readonly HISTSIZE
readonly HISTFILE
readonly HOME
readonly HISTIGNORE
readonly HISTCONTROL
fi
Then as root run the commands:
touch /var/log/bash_eternal_history chmod 777 /var/log/bash_eternal_history chattr +a /var/log/bash_eternal_history
on BSD freebsd the last command won’t work, use this instead:
# find /var/log -type f -name 'bash_eternal_history' -exec chflags uappnd {} \;
Linux Eternal Bash History One-Liner
Here is a one liner setup for eternal bash history (run as root):
sudo cat <<'EOF' > /etc/profile.d/eternal_bash_history.sh
# eternal_bash_history.sh
# Not running bash?
[ -n "$BASH_VERSION" ] || return 0
# Not an interactive shell?
[[ $- == *i* ]] || return 0
if [ "$BASH" ]; then
export HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo "`date +'%y.%m.%d-%H:%M%S:'`" $USER "("$ORIGINAL_USER")" "COMMAND: " "$(history 1 | cut -c8-)" >> /var/log/bash_eternal_history'
alias ehistory='cat /var/log/bash_eternal_history'
readonly PROMPT_COMMAND
readonly HISTSIZE
readonly HISTFILE
readonly HOME
readonly HISTIGNORE
readonly HISTCONTROL
fi
# Set up eternal log file and allow all users to write to it
# Do not allow anyone (even root) to modify eternal log or this script
if [ "$EUID" -eq 0 ]; then
touch /var/log/bash_eternal_history 2>/dev/null
chmod 777 /var/log/bash_eternal_history 2>/dev/null
chattr +a /var/log/bash_eternal_history 2>/dev/null
chattr +a /etc/profile.d/eternal_bash_history.sh 2>/dev/null
fi
EOF

export PROMPT_COMMAND=”${PROMPT_COMMAND:+$PROMPT_COMMAND ; }”‘echo “`date +’%y.%m.%d-%H:M:%S:’`” $USER “(“$ORIGINAL_USER”)” “COMMAND: ” “$(history 1 | cut -c8-)” >> /var/log/bash_eternal_history’
should be
export PROMPT_COMMAND=”${PROMPT_COMMAND:+$PROMPT_COMMAND ; }”‘echo “`date +’%y.%m.%d-%H:%M:%S:’`” $USER “(“$ORIGINAL_USER”)” “COMMAND: ” “$(history 1 | cut -c8-)” >> /var/log/bash_eternal_history’
You’re missing a % before the M after “`date” which puts an M in the entry instead of the minute.
Who’s got your back? This guy.
You da man! Thank you! Updated!
Another alternative with syslog (only for root user):
http://jablonskis.org/2011/howto-log-bash-history-to-syslog/