Trình hiển thị tệp nhật ký trong Terminal (UNIX) (phát lại nhật ký đầu cuối)


7

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):

Mockup giao diện người dùng: tìm kiếm, nút phát lại, thanh cuộn và dấu thời gian ở dưới cùng của tập lệnh

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!)


1
Chỉ cần một nhận xét: có rootshthể 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 gian dtgiữa các lệnh được ghi liên tiếp, đợi dtvà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.
dùng1146332

có ai khác không?
gasko peter

Câu trả lời:


3

AFAIK, không có công cụ nào thực hiện cả ghi nhật ký và trực quan hóa tốt như nhau.

rootshvà các công cụ tương tự là một phù hợp tốt cho đăng nhập truyền thống. Vì câu hỏi của bạn coi trực quan là quan trọng và bạn chỉ đơn giản là đăng nhập chính mình - đó là những gì câu trả lời của tôi tập trung vào.

TTYRec là một hệ thống ghi màn hình thiết bị đầu cuối. Nó chỉ đơn giản hoạt động như một thiết bị đầu cuối giả giữa bạn và ứng dụng hoặc trình bao.

Tất cả mọi thứ dưới đây đều hỗ trợ ttyrecđịnh dạng, vì vậy về lý thuyết bạn sẽ có thể kết hợp và kết hợp cho phù hợp.

Ghi âm thiết bị đầu cuối

  • ttyrec là một trình ghi màn hình (tức là logger) đã có từ rất lâu. Nó có thể dễ dàng khởi tạo lúc đăng nhập để bắt chước cách bạn đang forking scripttừ .bashrc.
  • Shelr là dự án tương đối trẻ cung cấp bản ghi, phát lại và chia sẻ. Nó được viết bằng ruby. Trình phát web bắt chước trình phát video web truyền thống (tạm dừng, tìm kiếm tiến / lùi). https://github.com/shelr
  • termrec , viết bằng C, ttyrec thay thế. Bao gồm một số công cụ thú vị (proxyrec) và tự động nén các bản ghi. Các vấn đề với kích thước thiết bị đầu cuối không 80x24.
  • máy ghi âm ascii.io viết bằng trăn. Một trang web loại và dịch vụ, tất cả các nguồn mở.

Người chơi khác

Phần mềm khác (định dạng không tương thích)

  • termdebug mở rộng trên ttyrec để hỗ trợ đăng nhập đầu vào .

1

Một cách tiếp cận khác là sử dụng màn hình GNU và báo cho shell của bạn biết màn hình sẽ ghi nhật ký đầu ra trước mỗi lệnh. Chẳng hạn, với zsh (sau khi đã bắt đầu một phiên màn hình):

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
}

Sau đó, trong ~ / log, bạn có các tệp được đánh số với các lệnh và đầu ra của chúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.