Vyhledávání na webu

Jak nahrávat a přehrávat linuxové terminálové relace pomocí příkazů 'script' a 'scriptreplay'


V této příručce se podíváme na to, jak používat příkazy script a scriptreplay v Linuxu, které vám mohou pomoci zaznamenat příkazy a jejich výstup vytištěný na vašem terminálu během daného zasedání.

Příkaz historie je skvělý nástroj příkazového řádku, který pomáhá uživatelům uložit předchozí použitý příkaz, i když neukládá výstup příkazu.

Nepřehlédněte: Showterm.io – nástroj pro nahrávání terminálu pro Linux

Nepřehlédněte: 8 nejlepších stolních rekordérů obrazovky pro Linux

Proto se hodí příkaz script, který vám poskytne výkonnou funkci, která vám pomůže zaznamenat vše, co je vytištěno na vašem terminálu, do souboru_protokolu. Na tento soubor se pak můžete podívat později v případě, že budete chtít zobrazit výstup příkazu v historii ze souboru log_file.

Příkazy, které jste zaznamenali pomocí příkazu scriptreplay, můžete také přehrát pomocí informací o časování.

Jak zaznamenat linuxový terminál pomocí příkazu skriptu

Příkaz script ukládá aktivity terminálu do souboru protokolu, který může pojmenovat uživatel, pokud uživatel nezadá jméno, použije se výchozí název souboru, typescript .

Základní syntaxe příkazu skriptu

script [options] - -timing=timing_file log_filename

Chcete-li zahájit nahrávání linuxového terminálu, zadejte script a přidejte název souboru protokolu, jak je znázorněno.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Chcete-li zastavit script, napište exit a stiskněte [Enter].


tecmint@tecmint ~ $ exit

Script done, file is history_log.txt

Pokud skript nemůže zapisovat do pojmenovaného souboru protokolu, zobrazí chybu.

Například ve výstupu níže oprávnění souboru typescript neumožňují čtení, zápis a spouštění souboru žádnému uživateli nebo skupině. Když spustíte příkaz script bez názvu souboru protokolu, pokusí se zapsat do výchozího souboru, typescript, a proto se zobrazí chyba.


tecmint@tecmint ~ $ ls -l typescript

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

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Příklady použití příkazu script

V níže uvedeném příkladu jsem svůj soubor protokolu pojmenoval script.log, soubor můžete pojmenovat jinak.


tecmint@tecmint ~ $ script script.log

Nyní zkuste provést několik příkazů, aby skript mohl zaznamenat provedené příkazy na terminálu.


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

Nyní se pokuste zobrazit soubor protokolu „script.log“ pro všechny zaznamenané příkazy, přičemž při prohlížení protokolu si uvědomíte, že skript také ukládá posuny řádků a mezery.


tecmint@tecmint ~ $ vi script.log
Ukázkový výstup

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

Můžete použít možnost -a k připojení souboru protokolu nebo strojopisu a zachovat předchozí obsah.


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

Zobrazte obsah skriptu a přihlaste se pomocí možnosti -a pro jeho připojení.


tecmint@tecmint ~ $ vi script.log
Ukázkový výstup

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

Chcete-li zaprotokolovat výsledky jednoho příkazu jiného než interaktivního shellu, použijte volbu -c.


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

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

Pokud chcete, aby skript běžel v tichém režimu, můžete použít volbu -q. Neuvidíte zprávu, která by ukazovala, že se skript spouští nebo ukončuje.


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)

Chcete-li nastavit informace o časování na standardní chybu nebo soubor, použijte možnost –časování. Informace o časování jsou užitečné, když chcete znovu zobrazit výstup uložený v souboru log_file.

Spusťte skript a spusťte následující příkazy w, uptime a cal, které budou zaznamenány.


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    

Pro příkaz časování výše si můžete prohlédnout soubory script.log a time.txt.


tecmint@tecmint ~ $ vi script.log
Ukázkový výstup

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

Nyní zobrazte soubor time.txt.


tecmint@tecmint ~ $ vi time.txt
Ukázkový výstup

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

Soubor time.txt má dva sloupce, první sloupec ukazuje, kolik času uplynulo od posledního zobrazení a druhý sloupec ukazuje počet znaků, které byly tentokrát zobrazeny.

Pomocí manuálové stránky a –help vyhledejte další možnosti a pomoc při používání nástroje příkazového řádku skriptu.

Použití scriptreplay k přehrání skriptů pomocí informací o načasování

Příkaz scriptreplay pomáhá přehrát informace ve vašem log_file zaznamenané příkazem script.

Informace o časování jsou definovány volbou -timing=soubor používanou s příkazem script a soubor je v tomto případě soubor.txt který byl použit s příkazem script .

Nezapomeňte, že musíte zadat soubor_protokolu, který jste použili s příkazem script.

Přehrajte si nyní poslední tři příkazy w, uptime a cal, které jsme spustili následovně.


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

Když je soubor_logu přehrán pomocí informací o časování, zaznamenané příkazy se spustí a jejich výstup se zobrazí ve stejnou dobu, kdy byl během nahrávání zobrazen původní výstup.

souhrn

Tyto dva příkazy, script a scriptreplay, se snadno používají a hodně pomáhají, když potřebujete spustit stejnou dávku příkazů několikrát. Hodně pomáhají při správě serverů, které mají pouze rozhraní příkazového řádku pro interakci s vaším systémem. Doufám, že tato příručka byla užitečná, a pokud máte co přidat nebo čelit výzvě při jejich používání, neváhejte napsat komentář.