SSH를 통해 다양한 서버에 로그인해야 하며 터미널에 로그인하는 것이 훌륭하게 작동합니다(정확하고 정확한 날짜/시간이 있는 smitty 메뉴/AIX의 항목도 포함). 이미 해결책이 있습니다.
0)
# with root:
apt-get install bsdutils
# with the given user:
mkdir ~/logs
1)
# append this to you're "~/.bashrc" - this must be the last line!!
STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`; script -q -t 2> /home/USERNAMEHERE/logs/$STARTTIME-timing.txt -c 'bash --rcfile /home/USERNAMEHERE/.bashrc-cp' -f /home/USERNAMEHERE/logs/$STARTTIME-log.txt; exit 0
2)
# make sure the 1) is the last line of bashrc, then [this is needed to avoid "fork bomb"..]:
sed -e '$d' /home/USERNAMEHERE/.bashrc > /home/USERNAMEHERE/.bashrc-cp
정말 좋아요!
이제 문제는 이러한 터미널 로그 기록을 어떻게 재생하느냐 하는 것입니다. 이를 수행하는 기본 방법은 다음과 같습니다.
REPLAY:
# rename the filenames to you're needs! - you can only play 1 file at one time..
scriptreplay "/home/USERNAMEHERE/logs/$STARTTIME-timing.txt" "/home/USERNAMEHERE/logs/$STARTTIME-log.txt"
좋아요 효과가있다. 하지만 그것만으로는 충분하지 않습니다...: 녹음 재생만 시작할 수 있습니다. 하지만 특정 시간 동안만 로깅이 필요하거나 명령의 정확한 실행 시간을 알아야 하는 경우(터미널 로그 파일 + "스크립트"에 의해 생성된 타이밍 파일에서 확인할 수 있음)? 또는 더 나은 방법은 교육 목적으로 터미널 로깅이 필요하다는 것입니다(따라서 녹음 내용을 기록하려면 녹음 재생을 중지해야 합니다).
나는 이러한 재생 문제에 대한 좋은 해결책을 찾지 못했습니다. 그래서 나는 이것을 위해 내 자신의 프로그램을 작성해야 한다고 생각했습니다(그러나 나는 bash 스크립팅 경험만 있습니다).
내 생각에 이 작업을 위한 가장 좋은 방법은 ncurses를 사용하는 것입니다(재생 솔루션은 OpenBSD, Ubuntu, Redhat 등 여러 운영 체제에 필요함). - 터미널 로깅은 SSH를 통해 사용자가 수행하는 작업을 추적하기 위한 "감사 도구"가 될 수 있습니다.
그래서 저는 이것에 대해 생각하고 있습니다(이것은 터미널 창입니다, 예: gnome-terminal):
묻다: unix.stackexchange에 대해 어떻게 생각하시나요? 이 재생 솔루션을 사용할 수 있습니다저주(아니면 프로그래머가 아닌 사람들에게 더 나은 이식성/더 쉬운 것이 있습니까?) 이를 수행하는 방법에 대한 몇 가지 팁/URL을 제공할 수 있습니까? (ncurses가 이것을 할 수 있나요?)
ps: 터미널 로그 파일의 예(터미널을 열고 "echo hi"를 입력한 다음 터미널을 닫습니다):
[USER@HOST ~/logs] cat -vte 2012-09-14-12h-46m-27s-509330863-log.txt
Script started on Fri 14 Sep 2012 12:46:27 PM CEST$
^[[0;32m[USER@HOST ~]^[[m echo hi^M$
hi^M$
^[[0;32m[USER@HOST ~]^[[m [USER@HOST ~/logs]
[USER@HOST ~/logs]
[USER@HOST ~/logs] cat -vte 2012-09-14-12h-46m-27s-509330863-timing.txt
0.512822 29$
0.179438 1$
0.925494 1$
0.254477 1$
0.065499 1$
0.075037 1$
0.139497 1$
0.136499 1$
0.039944 35$
[USER@HOST ~/logs]
업데이트: 이 문제에 대해 현상금을 설정했습니다. :) (아니면 잘 재생될 수 있는 더 나은 로깅 솔루션이 있습니까? - ty!)
답변1
AFAIK, 어떤 도구도 로깅과 시각화를 똑같이 잘 수행하지 않습니다.
rootsh
유사한 도구는 기존 로깅에 적합합니다. 귀하의 질문은 시각화가 중요하다고 생각하고 단순히 자신을 문서화하는 것이므로 이것이 내 대답의 요점입니다.
TTY 레코드단말기 화면 녹화 시스템입니다. 그것은 단지 다음과 같이 작동합니다.의사 터미널귀하와 애플리케이션 또는 셸 사이.
아래의 모든 항목은 형식을 지원하므로 ttyrec
이론적으로는 적합하게 혼합하여 사용할 수 있어야 합니다.
터미널 녹화
- 티렉오랫동안 사용되어 온 스크린 레코더(예: 레코더)입니다.
script
에서 포크하는 방법을 모방하기 위해 로그인 시 쉽게 인스턴스화할 수 있습니다.bashrc
. - 셰르녹음, 재생 및 공유를 제공하는 비교적 젊은 프로젝트입니다. 루비로 쓰여 있습니다. 웹 플레이어는 기존 웹 비디오 플레이어(일시 중지, 앞으로/뒤로 검색)를 모방합니다.
https://github.com/shelr
- 템렉, C로 작성되었으며 ttyrec을 대체합니다. 몇 가지 흥미로운 도구(proxyrec)가 포함되어 있으며 녹음 내용을 자동으로 압축합니다. 80x24가 아닌 터미널 크기 관련 문제.
- ascii.ioPython으로 작성된 로거. 쉘러형 웹사이트와 서비스, 모두 오픈소스입니다.
다른 플레이어
- 재생시간이에요(IPBT)는 훌륭합니다티렉콘솔(ncurses) 플레이어. 프레임별 앞으로 및 뒤로, 로그 시간 압축 및 검색과 같은 기능을 지원합니다! 누군가가 패치를 했다는 얘기도 나오더군요.비디오로 변환.
- jsttyplay그리고키보드 연주자(jquery 필요) 예티렉자바스크립트로 작성된 플레이어.
기타 소프트웨어(호환되지 않는 형식)
- 용어 디버깅로깅을 지원하도록 ttyrec 확장입력하다반품.
답변2
또 다른 접근 방식은 GNU 스크린을 사용하고 각 명령 앞에 쉘에 출력을 기록할 위치를 스크린에 알려주는 것입니다. 예를 들어, zsh를 사용하면(screen 세션을 시작한 후):
preexec() {
((cmd++))
{
date +%F-%T
print -r -- "$3"
} > ~/logs/$cmd
screen -X msgminwait 0
screen -X log off
screen -X logfile ~/logs/$cmd
screen -X log on
screen -X msgminwait 3
}
그런 다음 ~/logs에서 명령과 출력을 사용하여 파일 번호를 매겼습니다.