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.