Τρόπος εγγραφής και επανάληψης συνεδριών τερματικού Linux χρησιμοποιώντας εντολές "script" και "scriptreplay"


Σε αυτόν τον οδηγό θα εξετάσουμε πώς να χρησιμοποιήσετε εντολές script και scriptreplay στο Linux που μπορούν να σας βοηθήσουν να καταγράψετε εντολές και την έξοδο τους που εκτυπώνεται στο τερματικό σας κατά τη διάρκεια μιας δεδομένης συνεδρία.

Η εντολή ιστορικού είναι ένα εξαιρετικό βοηθητικό πρόγραμμα γραμμής εντολών που βοηθά τους χρήστες να αποθηκεύουν προηγούμενες εντολές που χρησιμοποιήθηκαν, αν και δεν αποθηκεύει την έξοδο μιας εντολής.

Μην χάσετε: Showterm.io – Εργαλείο εγγραφής τερματικού Linux

Μην χάσετε: 8 καλύτερες συσκευές εγγραφής οθόνης επιτραπέζιου υπολογιστή για Linux

Επομένως, η εντολή script είναι χρήσιμη για να σας παρέχει μια ισχυρή λειτουργία που σας βοηθά να καταγράψετε οτιδήποτε εκτυπώνεται στο τερματικό σας σε ένα αρχείο_καταγραφής. Στη συνέχεια, μπορείτε να ανατρέξετε σε αυτό το αρχείο αργότερα σε περίπτωση που θέλετε να προβάλετε την έξοδο μιας εντολής στο ιστορικό από το log_file.

Μπορείτε επίσης να αναπαράγετε εντολές που ηχογραφήσατε χρησιμοποιώντας την εντολή scriptreplay χρησιμοποιώντας πληροφορίες χρονισμού.

Πώς να εγγράψετε το τερματικό Linux χρησιμοποιώντας την εντολή script

Η εντολή script αποθηκεύει τις δραστηριότητες τερματικού σε ένα αρχείο καταγραφής που μπορεί να ονομαστεί από έναν χρήστη, όταν ένα όνομα δεν παρέχεται από έναν χρήστη, χρησιμοποιείται το προεπιλεγμένο όνομα αρχείου, typescript .

Βασική Σύνταξη Εντολή σεναρίου

script [options] - -timing=timing_file log_filename

Για να ξεκινήσετε την εγγραφή τερματικού Linux, πληκτρολογήστε script και προσθέστε το αρχείο καταγραφής όνομα αρχείου όπως φαίνεται.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Για να σταματήσετε το script, πληκτρολογήστε exit και πατήστε [Enter].


tecmint@tecmint ~ $ exit

Script done, file is history_log.txt

Εάν το σενάριο δεν μπορεί να γράψει στο ονομαζόμενο αρχείο καταγραφής, τότε εμφανίζεται ένα σφάλμα.

Για παράδειγμα, στην παρακάτω έξοδο, τα δικαιώματα του αρχείου typescript δεν επιτρέπουν την ανάγνωση, την εγγραφή και την εκτέλεση του αρχείου από κανέναν χρήστη ή ομάδα. Όταν εκτελείτε την εντολή δέσμης ενεργειών χωρίς όνομα αρχείου καταγραφής, επιχειρεί να γράψει στο προεπιλεγμένο αρχείο, typescript επομένως εμφανίζει ένα σφάλμα.


tecmint@tecmint ~ $ ls -l typescript

--------- 1 ubuntu ubuntu 144 Sep 15 00:00 typescript

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Παραδείγματα χρήσης της εντολής script

Ονόμασα το αρχείο καταγραφής μου script.log στο παρακάτω παράδειγμα, μπορείτε να δώσετε στο αρχείο σας διαφορετικό όνομα.


tecmint@tecmint ~ $ script script.log

Τώρα προσπαθήστε να εκτελέσετε μερικές εντολές για να επιτρέψετε στο σενάριο να καταγράφει εκτελεσμένες εντολές στο τερματικό.


tecmint@tecmint ~ $ cal

   September 2015     
Su Mo Tu We Th Fr Sa  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30           
                      
tecmint@tecmint ~ $ w

 14:49:40 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tecmint  tty8     :0               10:45    4:06m  7:40   0.36s x-session-manager
tecmint  pts/5    :0               13:42    4.00s  0.07s  0.00s script script.log

tecmint@tecmint ~ $ uptime

 14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62

tecmint@tecmint ~ $ whoami

tecmint

tecmint@tecmint ~ $ echo 'using script'

using script
tecmint@tecmint ~ $ exit
exit
Script done, file is script.log

Τώρα προσπαθήστε να προβάλετε το αρχείο καταγραφής "script.log" για όλες τις εγγεγραμμένες εντολές, ενώ προβάλλετε το αρχείο καταγραφής συνειδητοποιείτε ότι το σενάριο αποθηκεύει επίσης τροφοδοσίες γραμμής και backspace.


tecmint@tecmint ~ $ vi script.log
Δείγμα εξόδου

^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m cal^M
   September 2015     ^M
Su Mo Tu We Th Fr Sa  ^M
       1  2  3  4  5  ^M
 6  7  8  9 10 11 12  ^M
13 14 15 ^[[7m16^[[27m 17 18 19  ^M
20 21 22 23 24 25 26  ^M
27 28 29 30           ^M
                      ^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m w^M
 14:49:40 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62^M
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT^M
tecmint  tty8     :0               10:45    4:06m  7:40   0.36s x-session-manager^M
tecmint  pts/5    :0               13:42    4.00s  0.07s  0.00s script script.log^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m uptime^M
 14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whoami^M
tecmint^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M
using script^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m exit^M
exit^M

Script done on Wednesday 16 September 2015 02:49:59 PM IST
~                                                              

Μπορείτε να χρησιμοποιήσετε την επιλογή -a για να προσαρτήσετε το αρχείο καταγραφής ή τη γραφή, διατηρώντας τα προηγούμενα περιεχόμενα.


tecmint@tecmint ~ $ script -a script.log
Script started, file is script.log

tecmint@tecmint ~ $ date
Wed Sep 16 14:59:36 IST 2015


tecmint@tecmint ~ $ pwd
/home/tecmint


tecmint@tecmint ~ $ whereis script
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz


tecmint@tecmint ~ $ whatis script
script (1)           - make typescript of terminal session

Δείτε τα περιεχόμενα του σεναρίου, συνδεθείτε αφού χρησιμοποιήσετε την επιλογή -a για να το προσαρτήσετε.


tecmint@tecmint ~ $ vi script.log
Δείγμα εξόδου

^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m date^M
Wed Sep 16 14:59:36 IST 2015^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m pwd^M
/home/tecmint^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whre^H^[[K^H^[[Kereis script^M
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whatis script^M
script (1)           - make typescript of terminal session^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M
exit^M

Για να καταγράψετε τα αποτελέσματα μιας μεμονωμένης εντολής εκτός από μια διαδραστική περίοδο λειτουργίας φλοιού, χρησιμοποιήστε την επιλογή -c.


tecmint@tecmint ~ $ script -c 'hostname' script.log

Script started, file is script.log
linux-console.net
Script done, file is script.log

Εάν θέλετε το σενάριο να εκτελείται σε αθόρυβη λειτουργία, μπορείτε να χρησιμοποιήσετε την επιλογή -q. Δεν θα δείτε μήνυμα που δείχνει ότι το σενάριο ξεκινά ή εξέρχεται.


tecmint@tecmint ~ $ script -c 'who'  -q  script.log

tecmint  tty8         2015-09-16 10:45 (:0)
tecmint  pts/5        2015-09-16 13:42 (:0)

Για να ορίσετε τις πληροφορίες χρονισμού σε τυπικό σφάλμα ή αρχείο, χρησιμοποιήστε την επιλογή –timing. Οι πληροφορίες χρονισμού είναι χρήσιμες όταν θέλετε να εμφανίσετε ξανά την έξοδο που είναι αποθηκευμένη στο αρχείο καταγραφής.

Ας ξεκινήσουμε το σενάριο και ας εκτελέσουμε τις ακόλουθες εντολές w, uptime και cal για εγγραφή.


tecmint@tecmint ~ $ script --timing=time.txt script.log
Script started, file is script.log

tecmint@tecmint ~ $ w
 15:09:31 up  4:26,  2 users,  load average: 1.38, 1.39, 1.47
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tecmint  tty8     :0               10:45    4:26m  8:15   0.38s x-session-manager
tecmint  pts/5    :0               13:42    3.00s  0.09s  0.00s script --timing=time.txt script.log

tecmint@tecmint ~ $ uptime
 15:09:36 up  4:26,  2 users,  load average: 1.43, 1.40, 1.48

tecmint@tecmint ~ $ cal
   September 2015     
Su Mo Tu We Th Fr Sa  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30    

Μπορείτε να προβάλετε το αρχείο script.log και time.txt για την παραπάνω εντολή χρονισμού.


tecmint@tecmint ~ $ vi script.log
Δείγμα εξόδου

^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m w^M
 15:12:05 up  4:28,  2 users,  load average: 1.31, 1.37, 1.45^M
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT^M
tecmint  tty8     :0               10:45    4:28m  8:20   0.38s x-session-manager^M
tecmint  pts/5    :0               13:42    5.00s  0.09s  0.00s script --timing=time.txt script.log^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m uptime^M
 15:12:07 up  4:28,  2 users,  load average: 1.29, 1.36, 1.45^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m cal^M
   September 2015     ^M
Su Mo Tu We Th Fr Sa  ^M
       1  2  3  4  5  ^M
 6  7  8  9 10 11 12  ^M
13 14 15 ^[[7m16^[[27m 17 18 19  ^M
20 21 22 23 24 25 26  ^M
27 28 29 30           ^M
                      ^M

Τώρα δείτε το αρχείο time.txt.


tecmint@tecmint ~ $ vi time.txt
Δείγμα εξόδου

0.259669 306
0.037680 829
0.000006 2
0.000002 100
0.000002 2
0.000002 102
0.000019 202
0.000004 2
0.000002 102
0.000015 100
0.000002 2
0.000003 2
0.000002 99
0.000011 2
0.000003 82
...

Το αρχείο time.txt έχει δύο στήλες, η πρώτη στήλη δείχνει πόσος χρόνος έχει περάσει από την τελευταία εμφάνιση και η δεύτερη στήλη δείχνει τον αριθμό των χαρακτήρων που έχουν εμφανιστεί αυτή τη φορά.

Χρησιμοποιήστε τη σελίδα man και –βοήθεια για να αναζητήσετε περισσότερες επιλογές και βοήθεια στη χρήση του βοηθητικού προγράμματος γραμμής εντολών σεναρίου.

Χρήση scriptreplay για επανάληψη σεναρίων χρησιμοποιώντας πληροφορίες χρονισμού

Η εντολή scriptreplay βοηθά στην επανάληψη των πληροφοριών στο log_file σας που καταγράφονται από την εντολή script.

Οι πληροφορίες χρονισμού ορίζονται από την επιλογή -timing=file που χρησιμοποιείται με την εντολή script και το αρχείο σε αυτήν την περίπτωση είναι file.txt που χρησιμοποιήθηκε με την εντολή script .

Θυμηθείτε ότι πρέπει να καθορίσετε το log_file που χρησιμοποιήσατε με την εντολή script.

Ας επαναλάβουμε τώρα τις τρεις τελευταίες εντολές w, uptime και cal που είχαμε εκτελέσει ως εξής.


tecmint@tecmint ~ $ scriptreplay --timing=time.txt script.log

Όταν το αρχείο_καταγραφής αναπαράγεται ξανά χρησιμοποιώντας τις πληροφορίες χρονισμού, οι εντολές που έχουν εγγραφεί εκτελούνται και η έξοδος τους εμφανίζεται την ίδια στιγμή που εμφανιζόταν η αρχική έξοδος κατά την εγγραφή.

Περίληψη

Αυτές οι δύο εντολές, script και scriptreplay είναι εύχρηστες και βοηθούν πολύ όταν χρειάζεται να εκτελέσετε την ίδια παρτίδα εντολών πολλές φορές. Βοηθούν πολύ στη διαχείριση διακομιστών που έχουν μόνο διεπαφή γραμμής εντολών για αλληλεπίδραση με το σύστημά σας. Ελπίζουμε ότι αυτός ο οδηγός ήταν χρήσιμος και εάν έχετε κάτι να προσθέσετε ή να αντιμετωπίσετε μια πρόκληση κατά τη χρήση τους, μη διστάσετε να δημοσιεύσετε ένα σχόλιο.