나는 기록 명령의 출력에 타임스탬프를 찍는 방법에 대한 많은 문서를 보았습니다. 하지만 저장된 기록 파일에 타임스탬프를 어떻게 추가하시겠습니까? 예를 들어, 각 사용자의 bash 기록을 /root/history/.bash_history-$USER에 저장하는 서버 설정이 있습니다. 이는 /root/.bash_profile에서 한 줄로 수행됩니다.
export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
다음 줄을 추가했습니다.
export HISTTIMEFORMAT="%d/%m/%y %T "
/root/.bash_profile로 이동하여 가져옵니다. 그러나 타임스탬프는 파일에 저장되지 않으며 기록 명령을 실행할 때만 볼 수 있습니다. 동시에 두 가지 작업을 수행하도록 설정하려면 어떻게 해야 합니까?
편집하다:
제안된 대로 .bashrc 파일에 다음 줄을 추가했습니다.
export HISTSIZE=3000
export HISTFILESIZE=5000
export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
format_history () {
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9] {10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' /root/history/.bash_hist-$(who -m | awk '{print $1}')
}
export HISTTIMEFORMAT="%d/%m/%y %T "
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"
이제 vim, cat 또는 그 이하를 사용하여 기록 파일을 열려고 하면 다음이 표시됩니다.
command I ran
#Thu Mar Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec 31 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 14:26:02 2016
편집 3:
최신 변경을 수행한 후:
# Fri Apr 1 15:26:35 2016#
# Fri Apr 1 15:26:35 2016#
# Fri Apr 1 15:26:35 2016#
# Fri Apr 1 15:26:35 2016#
# Fri Apr 1 15:26:35 2016#
# Fri Apr 1 15:26:35 2016#
# Fri Apr 1 15:26:35 2016#
#1459542395
command
답변1
당신은 다음과 같은 것을 할 수 있습니다
perl -Mposix -pe 's/^#([0-9]{10})/POSIX::strftime( "%d\/%m\/%y %T", gmtime($1))/eg' .bash_history > readable_history
파일의 에포크 타임스탬프를 형식이 지정된 타임스탬프로 바꿉니다. 이 작업을 내부에서 수행하려면 형식이 지정된 시간을 각 줄 위에 주석으로 삽입하도록 수정할 수 있지만 bash가 기록 타임스탬프 파일을 읽을 때 해석을 시도하지 않도록 첫 번째 숫자 앞에 공백을 넣어야 합니다. 자신을 위해.
편집: 기록 파일을 손상시키지 않고 내부에서 수행하는 라인은 다음과 같습니다.
perl -Mposix -i -pe 's/^#([0-9]{10})(.*)/"# ".POSIX::strftime( "%d\/%m\/%y %T", gmtime($1))."\n#$1$2"/ge' .bash_history
그러면 다음과 같은 파일이 생성됩니다.
#1356431101 command arg arg
#1356531101 command2 arg2
다음과 같습니다.
# 25/12/12 10:25:01
#1356431101 command arg arg
# 26/12/12 14:11:41
#1356531101 command2 arg2
Edit2: 이것을 내 bashrc에 넣는 것이 나에게 도움이 되었습니다:
format_history () {
perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]{10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' ~/.bash_history
}
export HISTTIMEFORMAT="%d/%m/%y %T "
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"
최종 편집 - 다음은 아무것도 반복하지 않아야 하는 더 나은 정규식 버전입니다.
perl -i -e '$/=undef;my $string=<>;$string=~s/(#\s[^\n]*\n)?#(\d{10}\n)/"# ".localtime($+)."\n#$+"/ge;print $string;' your_history_file_name_here