Wyszukiwanie w witrynie

Jak nagrywać i odtwarzać sesje terminala Linux za pomocą poleceń „script” i „scriptreplay”.


W tym przewodniku przyjrzymy się, jak używać poleceń script i scriptreplay w systemie Linux, które mogą pomóc w nagrywaniu poleceń i ich danych wyjściowych drukowanych na terminalu w danym momencie sesja.

Polecenie historii to świetne narzędzie wiersza poleceń, które pomaga użytkownikom przechowywać poprzednio użyte polecenia, chociaż nie przechowuje danych wyjściowych polecenia.

Nie przegap: Showterm.io – narzędzie do nagrywania z terminala systemu Linux

Nie przegap: 8 najlepszych rejestratorów ekranu na komputer stacjonarny dla systemu Linux

Dlatego przydaje się polecenie script, które zapewnia potężną funkcjonalność, która pomaga rejestrować wszystko, co jest drukowane na terminalu, w pliku_loga. Możesz później odwołać się do tego pliku, jeśli chcesz wyświetlić wynik polecenia w historii z pliku_loga.

Możesz także odtworzyć polecenia nagrane za pomocą polecenia scriptreplay, korzystając z informacji o czasie.

Jak nagrać terminal Linux za pomocą polecenia skryptu

Komenda skrypt przechowuje działania terminala w pliku dziennika, którego nazwa może zostać nazwana przez użytkownika. Jeśli nazwa nie zostanie podana przez użytkownika, używana jest domyślna nazwa pliku, maszynopis .

Podstawowa składnia polecenia skryptowego

script [options] - -timing=timing_file log_filename

Aby rozpocząć nagrywanie terminala Linux, wpisz skrypt i dodaj nazwę pliku dziennika, jak pokazano.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Aby zatrzymać skrypt, wpisz exit i naciśnij [Enter].


tecmint@tecmint ~ $ exit

Script done, file is history_log.txt

Jeśli skrypt nie może zapisać do nazwanego pliku dziennika, wyświetli się błąd.

Na przykład w wynikach poniżej uprawnienia do pliku Maszynopis nie pozwalają na odczyt, zapis i wykonanie pliku żadnemu użytkownikowi ani grupie. Gdy uruchomisz polecenie skryptowe bez nazwy pliku dziennika, spróbuje ono zapisać do pliku domyślnego, maszynopisu, co spowoduje wyświetlenie błędu.


tecmint@tecmint ~ $ ls -l typescript

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

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Przykłady użycia polecenia skryptu

W poniższym przykładzie nazwałem mój plik dziennika script.log, możesz nadać swojemu plikowi inną nazwę.


tecmint@tecmint ~ $ script script.log

Teraz spróbuj wykonać kilka poleceń, aby umożliwić skryptowi rejestrowanie wykonanych poleceń na terminalu.


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

Teraz spróbuj wyświetlić plik dziennika „script.log” dla wszystkich zarejestrowanych poleceń. Przeglądając dziennik, zorientujesz się, że skrypt przechowuje także znaki nowego wiersza i znaki Backspace.


tecmint@tecmint ~ $ vi script.log
Przykładowe wyjście

^[[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
~                                                              

Możesz użyć opcji -a, aby dołączyć plik dziennika lub maszynopis, zachowując poprzednią zawartość.


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

Wyświetl zawartość skryptu, zaloguj się po użyciu opcji -a w celu jego dołączenia.


tecmint@tecmint ~ $ vi script.log
Przykładowe wyjście

^[[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

Aby rejestrować wyniki pojedynczego polecenia innego niż interaktywna sesja powłoki, użyj opcji -c.


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

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

Jeśli chcesz, aby skrypt działał w trybie cichym, możesz użyć opcji -q. Nie zobaczysz komunikatu informującego, że skrypt się uruchamia lub kończy.


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)

Aby ustawić informacje o taktowaniu na błąd standardowy lub plik, użyj opcji –timing. Informacje o taktowaniu są przydatne, gdy chcesz ponownie wyświetlić dane wyjściowe przechowywane w pliku dziennika.

Uruchommy skrypt i uruchommy następujące polecenia w, uptime i cal, aby je zarejestrować.


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    

Możesz wyświetlić pliki script.log i time.txt dla powyższego polecenia synchronizacji.


tecmint@tecmint ~ $ vi script.log
Przykładowe wyjście

^[[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

Teraz wyświetl plik time.txt.


tecmint@tecmint ~ $ vi time.txt
Przykładowe wyjście

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
...

Plik time.txt ma dwie kolumny, pierwsza kolumna pokazuje, ile czasu minęło od ostatniego wyświetlenia, a druga kolumna pokazuje liczbę znaków, które tym razem zostały wyświetlone.

Użyj strony podręcznika i –help, aby znaleźć więcej opcji i pomocy w korzystaniu ze skryptowego narzędzia wiersza poleceń.

Używanie skryptu do odtwarzania skryptów z wykorzystaniem informacji o czasie

Polecenie scriptreplay pomaga odtworzyć informacje z pliku_loga zapisanego za pomocą polecenia script.

Informacje o czasie są definiowane przez opcję -timing=file używaną z poleceniem script, a file w tym przypadku to file.txt , który był używany z poleceniem skryptu.

Pamiętaj, że musisz określić plik_loga użyty w poleceniu skryptu.

Odtwórzmy teraz trzy ostatnie polecenia w, uptime i cal, które wykonaliśmy w następujący sposób.


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

Kiedy plik_dziennika jest odtwarzany ponownie przy użyciu informacji o taktowaniu, zarejestrowane polecenia są uruchamiane, a ich dane wyjściowe są wyświetlane w tym samym czasie, w którym wyświetlane były oryginalne dane wyjściowe podczas nagrywania.

Streszczenie

Te dwa polecenia, script i scriptreplay, są łatwe w użyciu i bardzo pomocne, gdy trzeba kilkakrotnie uruchomić tę samą grupę poleceń. Bardzo pomagają w zarządzaniu serwerami, które mają jedynie interfejs wiersza poleceń do interakcji z twoim systemem. Mam nadzieję, że ten przewodnik był przydatny. Jeśli masz coś do dodania lub napotkasz trudności podczas korzystania z nich, nie wahaj się opublikować komentarza.