BSD 시스템은 간단합니다.보다다른 tty를 듣기 위한 도구:
사용자가 귀하의 상자에 로그인한 후 도움을 요청하는 상황에 처해본 적이 있습니까? 아니면 사용자가 시스템에서 무엇을 하고 있는지 궁금한 적이 있습니까? watch(8) 유틸리티를 사용하면 다른 tty를 감시하여 다른 사용자가 무엇을 하고 있는지 확인하고 상호 작용할 수도 있습니다. 모든 네트워크 관리자에게 꼭 필요한 유틸리티입니다.
불행히도 watch
Linux에서는 상황이 다릅니다.
지금까지 나는 다음을 가지고 있습니다 :
ttysnoop
고통스러운 /etc/inittab을 수정해야 합니다.conspy
지금까지는 작동하지 않습니다.peekfd
작동하지만 단방향으로만 가능합니다(사용자 입력은 볼 수 있지만 출력은 볼 수 없음).screen
물론 괜찮습니다만, 사용자가 화면을 사용해야 하는데...
Linux에 상응하는 좋은 도구가 없나요?
답변1
SystemTap의 ptysnoop
#!/usr/bin/stap
probe kernel.function("pty_write") {
if (kernel_string($tty->name) == @1) {
printf("%s", kernel_string_n($buf, $c))
}
}
실행 가능하게 만드세요. 지금 /dev/pts/6
당신을 바라보는 것만으로도sudo ptysnoop pts6
티퍼드
티퍼드동기화된 재생을 지원하는 다중 OS 커널 수준 tty 레코더(tty 키 입력 및 화면 레코더)입니다. vc, bsd 및 unix98 스타일 ptys(xterm/ssh), serial, isdn 등을 포함한 대부분의 tty 유형을 지원합니다. 커널에 구현되어 있기 때문에 기본 사용자에게는 피할 수 없는 일이다. 로그 데몬이 활성화되지 않은 경우 오버헤드 없이 실행됩니다.
그러나 커널 모듈이 필요합니다.
터미널 로거
나끝났어strace를 기반으로 작은 프로그램 작성을 시작하세요.터미널 로거내 요구에 아주 좋은 도구입니다. 필요한 것은 Perl과 strace뿐입니다 sudo ttylogger pid
. 그게 전부입니다.
모든 후속 명령의 출력을 덤프하려면 사용자 쉘의 pid와 함께 이를 사용하십시오.
답변2
에 여러 파일 설명자를 지정할 수 있습니다 peekfd
.
예를 들어
peekfd -n -8 -d -c 24184 0 1 2
pid 24184의 stdin, stdout 및 stderr을 듣습니다.
이 -c
옵션은 모든 하위 프로세스에도 추가됩니다. 이는 출력을 보려면 필요합니다(예: ls
청취 셸에서 실행 중인 셸 프로세스의 출력을 보려면).
이상하게도 항상 하위 프로세스에 성공적으로 연결되지만( 내장 프로세스가 아닌 ls
청취 tty - 에서 실행하는 하위 프로세스 에 관계없이 ) 항상 오류 메시지 ("pid"와 함께)를 인쇄합니다.uname
/bin/echo
echo
Error attaching to pid -38
언제나-38).
man peekfd
설명하다:
진단
stderr에서 다음 진단 메시지가 나타날 수 있습니다.
Error attaching to pid ...
프로세스에 연결하는 동안 알 수 없는 오류가 발생했습니다. 루트가 필요할 수도 있습니다.
peekfd
나에게는 버그인 것 같습니다. 루트로 실행 중인데언제나항상 동일한 가짜( -38
) PID를 사용하여 오류 메시지를 인쇄합니다.
참고: 매뉴얼 페이지에는 다음과 같은 내용도 나와 있습니다.
실수
아마 많이. 모니터링 중인 프로세스가 종료되더라도 놀라지 마십시오.