나는 주어진 시간에 여러 세션을 실행하는 경우가 많습니다. 이는 역사를 사용하여 작품을 재구성하려고 할 때 때때로 문제를 일으킬 수 있습니다. 그래서 쉘별로 정렬한 다음 시간별로 정렬할 수 있도록 $BASHPID를 어떤 식으로든 포함시키는 것이 유용할 것이라고 생각했습니다. 이것에 대한 나의 순진한 시도는
export HISTTIMEFORMAT="$BASHPID %Y %m %d - %H:%M:%S| "
그러나 이것이 하는 일은 현재 쉘의 $BASHPID를 "history" 출력에 추가하는 것뿐입니다.
HISTTIMEFORMAT 및 $BASHPID를 검색하면 결과가 반환되지 않습니다. 이 동작을 구현하는 방법에 대한 제안 사항이 있습니까?
답변1
"bash 영원한 역사"와 같은 것이 필요합니다.
좋은 시간 보내세요여기에 설명작동하게 만들다.
이 솔루션에는 여전히 PID가 없으며 다음을 사용하여 작동합니다.여기에서 나온 아이디어.
주로:
export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"' \
echo $$ $USER "$(history 1)" >> ~/.bash_eternal_history'
이는 다음을 $PROMPT_COMMAND
사용하여 생성됩니다.
$PID $USER $LAST_COMMAND
실행된 각 명령의 출력입니다.
답변2
/etc/bash.bashrc
내 전략은 다음 줄 에 추가하는 것입니다 .
readonly PROMPT_COMMAND='history -a >(logger -t "cmdline $USER[$PWD] $SSH_TTY $SSH_CONNECTION")'
그런 다음 /etc/rsyslog.conf
:
*.* @syslogserver:514
나는 다음과 같이 단일 파일에 로깅하는 것보다 이 접근 방식을 선호합니다.
- 파일이 회전되었습니다(즉, 너무 많이 커지지 않음).
- 사용자는 자신의 "기록"을 삭제할 수 없습니다.
- 변조/해킹으로부터 서버를 보호하는 원격 로그 추적을 생성합니다.
- 원격 syslog 서버의 순환 로그를 변경하여 몇 달 간의 로깅을 유지할 수 있습니다.
- syslog-ng를 사용하면 기록된 각 IP 주소에 대해 별도의 파일 로그를 가질 수 있습니다.
- 모든 것이 하나의 중앙 지점에 있으므로 무슨 일이 일어나고 있는지 확인하기 위해 여러 서버에 들어갈 필요가 없습니다.
- 원격 bash 세션이 종료되면 로컬 기록이 손실되며 이 방법을 사용하면 손실되지 않습니다.
- 또한 동일한 사용자가 여러 세션을 열면 모든 명령이 기록에 포함되지 않으므로 이 방법으로 가져옵니다.