명령을 실행하는 동안 다른 셸에서 어떤 명령이 실행되고 있는지 관찰할 수 있는 방법이 있습니까? 두 쉘 모두 bash이며 중요한 경우 루트 액세스 권한이 있습니다. 추가 소프트웨어를 설치할 수 없으며 다른 셸에서 화면 실행과 같은 특별한 작업을 수행하는 것을 원하지 않습니다.
상황: 저는 Linux 컴퓨터에 원격으로 로그인하고 동료도 로그인합니다. 그녀가 셸에서 실행한 명령을 보고 싶습니다. 실행하는 데 1초 이상 걸리는 명령을 보려면 watch
및 의 조합을 사용할 수 있다는 것을 알고 있지만 이것이 매우 짧은 명령에는 도움이 되지 않을 것이라고 생각합니다.ps
답변1
당신은 루트이기 때문에 항상 strace -f -e execve -p her_bash_pid
. 이는 -f
쉘이 미리 새로운 프로세스를 포크하기 때문에 필요 exec
하지만, 이는 또한 하위 프로세스가 실행하는 모든 것을 볼 수 있다는 의미이기도 합니다.
답변2
동료가 bash 쉘의 기록 설정 중 일부를 수정할 수 있는 경우 tail -f /home/user/.bash_history에서 이 정보를 얻을 수 있습니다. 셸이 종료될 때가 아닌 각 명령 후에 .bash_history를 작성하는 데 필요한 설정은 다음과 같습니다.
export PROMPT_COMMAND="history -a"
shopt -s histappend
하지만 저는 스크린 세션이 "이상적인" 솔루션이라고 생각합니다.
답변3
몇 가지 빠른 조사와 숙고 끝에 다음과 같은 가능한 옵션 목록을 제공할 수 있습니다.
- 그녀의 bash_history를 읽어보세요. 하지만 일반적으로 로그아웃할 때만 작성됩니다.askubuntu.com이 동작을 변경하는 방법에 대한 게시물이 있습니다(편집하다:@조던분명히 같은 생각을 가지고 있었고 더 빨리 게시되었습니다...).
- 그녀가 물리적 터미널(/dev/ttyX)에 있다면 이 프로그램을 사용할 수 있습니다
conspy
. - 그녀가 이점을 활용하도록 하세요
screen
. 당신이 그녀를 염탐하기보다는 단지 돕고 싶다면 그녀는 화면 내에서 세션을 실행하려고 할 것입니다. 그런 다음 간단히 그녀의 세션에 연결할 수 있습니다.sudo -u herUsername screen -x
- 선택한 로그 파일에 명령을 기록하는 쉘 래퍼 스크립트를 작성할 수 있습니다. 그녀의 쉘을 해당 스크립트로 설정해야 합니다(이것은 단지 아이디어일 뿐이며 작동할 수도 있고 작동하지 않을 수도 있습니다).
- 사용이
cat /dev/pts/X | tee /dev/pts/X
가장 먼저 떠오릅니다. 그러나 시도해 본 후에는 실제로 작동하지 않으며 매우 지저분한 솔루션입니다. 각 문자는 연결된 하나의 터미널에만 인쇄됩니다(이것이 바로tee
이 터미널이라고 불리는 이유입니다). 시도하면 모든 캐릭터를 모니터링할 수 있습니다. 조금만 상상해 보면 그녀가 무엇을 하고 있는지 짐작할 수 있을 것입니다...
답변4
완료하다@조던의대답...둘 다 동일한 사용자 계정을 사용하는 경우, 즉 출력
echo $HOSTNAME
echo $USER
당신과 당신의 동료도 마찬가지입니다. 그러면 우리는 재미있게 놀 수 있습니다.
다른 터미널에서 즉시 사용할 수 있도록 한 터미널에서 호출된 명령을 볼 수 있습니다.
history
터미널에서 호출 하면 이전 명령이 표시됩니다. 기본적으로 bash는 각 세션이 끝날 때 기록을 작성하여 ~/.bash_history file
기존 파일을 최신 버전으로 덮어씁니다. 즉, 여러 bash 세션으로 로그인하면 종료된 마지막 세션에만 기록이 저장됩니다.
------------------------------------- -----
편집 ~/.bashrc
하고 추가하세요
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
어디
history -a
~/.bash_history
세션이 끝나지 않고 즉시 파일에 추가
history -c
현재 세션 기록 지우기
history -r
~/.bash_history
첨부한 파일을 세션 기록으로 다시 읽어보세요.
노트: 매개변수에는 PROMPT_COMMAND
실행할 명령이 포함됩니다.앞으로모든 새로운 명령 프롬프트. 그래서명령 1다음과 같은 경우에만 기록에 저장됩니다.명령 2처형당하다
기록을 더 쉽게 볼 수 있도록 각 명령 옆에 타임스탬프를 추가할 수도 있습니다. 다시 편집 ~/.bashrc
하고 추가하세요.
export HISTTIMEFORMAT="%d/%m/%y %T "
여러 터미널을 사용하고 사용 가능한 명령 기록을 갖고 싶은 경우에도 좋은 방법입니다. :)