bash에서 입력된 모든 명령과 모든 파일 작업을 기록하는 방법

bash에서 입력된 모든 명령과 모든 파일 작업을 기록하는 방법

bash에 입력한 모든 명령(루트 또는 사용자)과 모든 파일 작업을 기록하고 싶습니다.

내 생각은 이 로그 파일을 쿼리하고 매우 유용한 정보를 제공할 수 있는 도구를 작성할 수 있다는 것입니다.

예를 들어, "- - -"를 사용하여 8~24시간 간격을 나타내고 "= = =(예: 2014년 6월 24일 = = =")을 사용하여 입력한 모든 명령을 한 줄에 하나씩 나열하는 것이 가장 좋습니다. >24시간 간격을 나타냅니다. "= = =..." 세션에서도 중복을 제거하면 더욱 좋습니다!

즉, 특정 작업(예: "Flask/mod_wsgi/apache를 Python 3.x로 업그레이드")을 완료할 때마다 6개월 후에 동일한 작업을 수행해야 하는지 찾을 수 있는 기록이 남습니다.

같은 목적으로 특정 패키지를 설치한 후 파일 시스템에 어떤 일이 일어나는지 살펴보는 것도 좋을 것 같습니다. 그러면 구성 파일이 어디에 있는지 알 수 있습니다.

PS 저는 우분투 14.04를 사용하고 있습니다

답변1

이는 실제 회계만큼 포괄적이지 않으며 사용자가 쉽게 실행 취소할 수 있지만 실제 회계 시스템일 필요는 없고 BASH와 rsyslog가 모두 사용된다고 가정하면 시스템 전체 BASH RC 파일을 편집합니다.

sudo -e /etc/bash.bashrc

파일 끝에 추가합니다.

export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RET_VAL]"'

logger시간, 사용자, 명령, 명령 반환 값은 위에 기록되어 있습니다. 새 파일을 사용하여 "local6"에 대한 로깅을 설정합니다.

sudo -e /etc/rsyslog.d/bash.conf

내용도 있고...

local6.*    /var/log/bash_commands.log

rsyslog를 다시 시작하십시오.

sudo service rsyslog restart

로그아웃하세요. 로그인. 로그 회전:

sudo -e /etc/logrotate.d/rsyslog

같은 방식으로 회전할 수 있는 로그 파일 목록이 있습니다...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

목록에 새 bash 명령 로그 파일을 추가합니다.

/var/log/bash_commands.log

rsyslog를 저장하고 다시 시작/다시 로드합니다. (회전은 결국 로그 파일을 덮어쓰게 되므로 더 많은 생각이나 구성이 필요할 수 있습니다.)

패키지로 설치된 모든 파일을 보려면 다음을 수행하십시오.

dpkg-query -L [package_name]

따라서 소프트웨어를 설치할 때 비슷한 작업을 수행할 수 있습니다.

dpkg-query -L abc-package > /var/log/files_abc-package.log

관련 정보