Tôi cần phải đăng nhập vào các máy chủ khác nhau thông qua ssh, và đó là một điều hữu ích để đăng nhập thiết bị đầu cuối (ngay cả những thứ trong menu đơn giản / AIX và với ngày / giờ chính xác / chính xác). Tôi đã có một giải pháp cho việc này:
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
Và điều này hoạt động TUYỆT VỜI!
Bây giờ, câu hỏi là: làm thế nào để phát lại các loggings thiết bị đầu cuối này? Đây là cách mặc định để làm điều này:
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"
Đồng ý. Nó hoạt động. Nhưng nó không đủ ..: bạn chỉ có thể bắt đầu phát bản ghi. Nhưng điều gì sẽ xảy ra nếu bạn chỉ cần ghi âm từ thời gian nhất định hoặc bạn cần biết chính xác khi nào lệnh bị loại bỏ (bạn có thể thấy điều này trong tệp logfiles + tệp thời gian mà "script" tạo ra). Hoặc tốt hơn: bạn cần ghi nhật ký đầu cuối cho mục đích giáo dục (vì vậy bạn cần dừng phát lại bản ghi để viết một cái gì đó từ nó, v.v.).
Đối với những vấn đề phát lại này, tôi vẫn chưa tìm thấy và các chương trình tốt. Vì vậy, mặc dù tôi nên viết chương trình của riêng mình về điều này (nhưng tôi chỉ có kinh nghiệm viết kịch bản bash).
Tôi nghĩ rằng điều tốt nhất sẽ là cho nhiệm vụ này là sử dụng ncurses (giải pháp phát lại cần được sử dụng trên một số HĐH khác nhau, như: OpenBSD, Ubuntu, Redhat). - ghi nhật ký thiết bị đầu cuối có thể là một "công cụ kiểm toán" để theo dõi những gì người dùng đã thực hiện thông qua SSH.
Vì vậy, tôi đang suy nghĩ về điều này (đây là một cửa sổ đầu cuối, ví dụ: gnome-terminal):
Q : unix.stackexchange nghĩ gì? Giải pháp phát lại này có thể được thực hiện với ncurses (hoặc có tốt hơn -> dễ mang theo hơn / dễ dàng hơn cho một người lập trình không?)? Bạn có thể cung cấp một số gợi ý / URL để làm điều này không? (ncurses có thể làm điều này?)
ps: một mẫu cho các tệp nhật ký thiết bị đầu cuối (Tôi đã mở một thiết bị đầu cuối, gõ "echo hi", sau đó đóng thiết bị đầu cuối):
[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]
CẬP NHẬT: Tôi đặt tiền thưởng cho câu hỏi này. :) (hoặc có giải pháp ghi nhật ký nào tốt hơn có thể được phát lại tốt không? - ty!)
rootsh
thể có thể giúp bạn đạt được mục tiêu của mình. Nó chỉ là hoàn hảo để ghi nhật ký phiên cuối và tôi nghĩ rằng nó cũng có thể giúp bạn phát lại phiên (thêm dấu đánh dấu / thời gian vào tệp nhật ký của bạn). Chỉ cần tính khoảng thời giandt
giữa các lệnh được ghi liên tiếp, đợidt
vài giây và đặt stdin và stdout của phiên đã ghi vào stdout. Và tất nhiên bạn có thể nhúng cái này vào giao diện người dùng, nhưng tôi không biết gì về điều đó :). Chỉ hai xu của tôi.