현재 각 사용자의 Bash 기록을 해당 홈 폴더에 즉시 저장하는 서버가 설정되어 있으며 현재 사용자를 전환하고 "history"Order를 실행하는 설정된 간격으로 실행되는 스크립트를 만들고 싶습니다.
명령줄에서 su 및 sudo의 모든 변형을 시도했지만 스크립트에서 다른 사용자에 대해 "history" 명령을 실행하거나 su /do를 사용할 때마다 어떤 출력도 얻지 못합니다.
스크립트에서는 다음과 같이 su와 sudo의 모든 변형을 시도했습니다.
su <user>
history
그러나 그것이 하는 일은 해당 사용자로 쉘을 여는 것 뿐이며 "기록"의 출력을 반환하지 않습니다.
현재 RHEL6.9 및 Bash 4.1.2를 사용하고 있습니다.
편집하다:
현재 모든 .bash_history 파일을 모니터링하는 로그 수집기가 있지만 필드를 할당하고 각 명령의 정확한 실행 시간을 기록할 수 있도록 타임스탬프와 사용자를 추가하도록 /etc/bashrc를 구성했습니다. .bash_history에 명령줄 기록을 저장하기 위한 Bash의 내부 형식은 단지 에포크 시간을 추가하는 것이므로 각 개별 사용자에 대해 "기록"을 수행할 수 있어야 합니다.
명령줄과 스크립트(별도)에서 다음을 시도했습니다.
su -c "history" <user>
sudo -i -u <user> history
sudo -S -u <user> -i /bin/bash -l -c 'history'
나는 스크립트에서 이 작업을 수행하려고 합니다.
su -i <user>
history
그러나 그들은 어떤 결과도 반환하지 않습니다.
답변1
스크립트를 생성하고 모든 사용자가 사용할 수 있는 PATH 어딘가에 저장합니다. 예를 들어 /bin
또는/usr/bin
스크립트
#!/usr/bin/env bash
HISTFILE=$HOME/.bash_history
history -r
unset HISTFILE
history
와 같은 이름으로 저장하세요.print_history
지금 시도해 보세요
su - user_name -c 'print_history'
시간 형식이 있다고 하셨기 때문에 해당 스크립트에서 설정을 해제 /etc/bashrc
하지 않았습니다 . HISTTIMEFORMAT
이 스크립트에 대한 아이디어는 내 것이 아닙니다. 저는 개인적으로 이 PROMPT_COMMAND
변수를 사용하여 대화형 세션 중에 입력/실행되는 모든 명령(그리고 내 시스템의 모든 사용자에 대해)을 캡처하므로 스크립트를 사용하지 않습니다. 따라서 스크립트는 다음과 같습니다. 그것은 말할 수 있습니다. 물론 모든 사용자는 로그인 쉘로 bash를 사용해야 합니다.