답변:
getent
홈 디렉토리를 열거하는 데 사용하십시오 .
getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern"
홈 디렉토리가 잘 알려진 위치에 있으면 다음과 같이 간단 할 수 있습니다.
grep -e "$pattern" /home/*/.bash_history
물론 사용자가 다른 쉘이나 다른 값을 사용하는 경우 HISTFILE
많은 것을 알려주지 않습니다. 또한 쉘을 통해 실행되지 않은 명령이나 별칭 및 함수 및 사용자의 초기 일부 사용자 디렉토리에 있던 제거 된 외부 명령에 대해서도 설명하지 않습니다 $PATH
. 알고 싶은 것이 사용자가 실행 한 명령 인 경우 프로세스 회계 또는 일부 감사 감사 시스템이 필요합니다. 내 컴퓨터의 활동 모니터링을 참조하십시오 . , 프로세스가 완료된 후 시간이 얼마나 걸 렸는지 확인하는 방법은 무엇입니까? .
getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern"
{}
이와 같이 사용 하는 것이 매우 위험하므로 실제로는 작동해야합니다 . 파일 이름은 스크립트에서 직접 보간됩니다. say $(rm -rf /)
또는 say를 포함하는 파일 이름 (여기서는 사용자 이름) ;rm -rf /;
이 있으면 명령이 실행됩니다. 항상 파일 이름을 셸 스크립트에 인수로 전달하고 find 또는 xargs의 {}
메커니즘을 사용하지 마십시오 .