Как записывать и воспроизводить сеансы терминала 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, просты в использовании и очень помогают, когда вам нужно выполнить один и тот же пакет команд несколько раз. Они очень помогают в управлении серверами, имеющими только интерфейс командной строки для взаимодействия с вашей системой. Надеюсь, это руководство было полезным, и если у вас есть что добавить или вы столкнулись с трудностями при его использовании, не стесняйтесь оставлять комментарии.