Поиск по сайту:

Как записывать и воспроизводить сеансы терминала Linux с помощью команд «script» и «scriptreplay»


В этом руководстве мы рассмотрим, как использовать команды script и scriptreplay в Linux, которые могут помочь вам записывать команды и их вывод, выводимые на ваш терминал в течение определенного времени. сессия.

Команда истории — отличная утилита командной строки, которая помогает пользователям сохранять предыдущую использованную команду, но не сохраняет выходные данные команды.

Не пропустите: Showterm.io – инструмент записи терминала Linux

Не пропустите: 8 лучших программ для записи экрана рабочего стола для Linux

Поэтому команда script пригодится, поскольку предоставит вам мощную функциональность, которая поможет вам записывать все, что печатается на вашем терминале, в log_file. Позже вы сможете обратиться к этому файлу, если захотите просмотреть результаты выполнения команды в истории из log_file.

Вы также можете воспроизводить команды, записанные с помощью команды scriptreplay, используя информацию о времени.

Как записать терминал Linux с помощью команды сценария

Команда script сохраняет действия терминала в файле журнала, которому может быть присвоено имя пользователем. Если имя не предоставлено пользователем, используется имя файла по умолчанию, typescript. .

Основной синтаксис команды сценария

script [options] - -timing=timing_file log_filename

Чтобы начать запись терминала Linux, введите script и добавьте имя файла журнала, как показано.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Чтобы остановить скрипт, введите 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.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» для всех записанных команд. Просматривая журнал, вы понимаете, что сценарий также сохраняет переводы строк и пробелы.


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 имеет два столбца: первый столбец показывает, сколько времени прошло с момента последнего отображения, а второй столбец показывает количество символов, отображавшихся на этот раз.

Используйте справочную страницу и –help, чтобы найти дополнительные параметры и помощь в использовании утилиты командной строки сценария.

Использование scriptreplay для воспроизведения сценариев с использованием информации о времени.

Команда scriptreplay помогает воспроизвести информацию в вашем log_file, записанную командой script.

Информация о времени определяется опцией -timing=file, используемой с командой script, а file в данном случае — file.txt. , который использовался с командой сценария.

Помните, что вам необходимо указать log_file, который вы использовали с командой сценария.

Давайте теперь воспроизведем последние три команды w, uptime и cal, которые мы выполнили, следующим образом.


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

Когда log_file воспроизводится с использованием информации о времени, записанные команды выполняются, и их выходные данные отображаются одновременно с исходным выводом, отображаемым во время записи.

Краткое содержание

Эти две команды, script и scriptreplay, просты в использовании и очень помогают, когда вам нужно выполнить один и тот же пакет команд несколько раз. Они очень помогают в управлении серверами, имеющими только интерфейс командной строки для взаимодействия с вашей системой. Надеюсь, это руководство было полезным, и если у вас есть что добавить или вы столкнулись с трудностями при его использовании, не стесняйтесь оставлять комментарии.