Dùng script để ghi lại nội dung phiên làm việc trên Gnome-terminal
script là một lệnh có trong gói util-linux mà hầu hết các bản linux hiện thời đều cài sẵn. Với script, người dùng có thể lưu lại các thao tác đã thực hiện trên gnome-terminal, hay giao diện dòng lệnh để sau này tham khảo lại.
Để chạy chương trình, gõ:
$> script
Chương trình sẽ ghi dữ liệu có trên màn hình gnome-terminal vào file tên là typescript trong thư mục hiện thời. Để chọn một file khác, nhập tên file vào sau câu lệnh, hoặc để ghi tiếp vào một file đã có, ta thêm tùy chọn -a:
$> script -a <filename>
Để kết thúc chương trình, gõ lệnh
$> exit
Chương trình sẽ kết thúc việc ghi log và ghi dữ liệu vào file.
Tuy nhiên, chương trình có một nhược điểm là, ngoài các ký tự thông thường, nó còn ghi lại toàn bộ các ký tự điều khiển, và các ký tự thoát (escape characters), nên nhìn nội dung file ghi lại trông sẽ rất lộn xộn. Để tránh điều này, ta nên gõ lệnh sau thay vì dùng lệnh script trực tiếp:
$ SHELL=/bin/sh PS1=”$ ” script
Một lưu ý nữa là khi dùng script, không nên sử dụng các lệnh tương tác như vi hay top, vì nội dung file in ra trông sẽ rất rối rắm.

[HOWTO] Ghi lại toàn bộ nội dung Gnome-terminal vào log file.
Mở hoặc tạo mới file ~/.bashrc và chèn thêm các dòng sau:
if [ -z "$UNDER_SCRIPT" ]; then
logdir=$HOME/terminal-logs
if [ ! -d $logdir ]; then
mkdir $logdir
fi
gzip -q $logdir/*.log
logfile=$logdir/$(date +%F_%T).$$.log
export UNDER_SCRIPT=$logfile
script -f -q $logfile
exit
fi
REVIEW:
File .bashrc ở thư mục home của người dùng chứa các lệnh sẽ được thực hiện mỗi khi người dùng đăng nhập vào hệ thống (cũng như mở terminal, trong trường hợp này). Khi chèn thêm các câu lệnh trên vào ~/.bashrc, mỗi khi người dùng mở gnome-terminal, chúng sẽ được thực hiện. Đoạn mã trên sẽ kiểm tra xem có thư mục nào tên là terminal-logs không. Nếu chưa có, tạo thư mục đó. Sau đó ghi lại nội dung session gnome-terminal vào file có đuôi là .log và tên là ngày giờ hiện thời, đặt trong thư mục terminal-logs.
Nguyên tắc của đoạn script trên là sử dụng lệnh script để ghi lại nội dung các lệnh đã chạy, kết hợp với lệnh date để lấy thời gian hiện thời làm tên file log. Ngoài ra, dùng export để xuất 1 biến môi trường là UNDER_SCRIPT, nhằm kiểm tra xem session hiện thời đã được ghi lại hay chưa.
leave a comment