Ricerca nel sito web

Come registrare e riprodurre sessioni di terminale Linux utilizzando i comandi "script" e "scriptreplay".


In questa guida vedremo come utilizzare uno script e i comandi scriptreplay in Linux che possono aiutarti a registrare i comandi e il loro output stampato sul tuo terminale durante un dato sessione.

Il comando History è un'ottima utility da riga di comando che aiuta gli utenti a memorizzare il comando utilizzato in precedenza, sebbene non memorizzi l'output di un comando.

Da non perdere: Showterm.io – Uno strumento di registrazione del terminale Linux

Da non perdere: 8 migliori registratori di schermi desktop per Linux

Pertanto il comando script torna utile per fornirti una potente funzionalità che ti aiuta a registrare tutto ciò che è stampato sul tuo terminale in un log_file. Potrai quindi fare riferimento a questo file in seguito nel caso in cui desideri visualizzare l'output di un comando nella cronologia dal log_file.

Puoi anche riprodurre i comandi che hai registrato utilizzando il comando scriptreplay utilizzando informazioni sulla temporizzazione.

Come registrare il terminale Linux utilizzando il comando script

Il comando script memorizza le attività del terminale in un file di registro che può essere nominato da un utente, quando un utente non fornisce un nome, viene utilizzato il nome file predefinito, typescript .

Sintassi di base dello script Comando

script [options] - -timing=timing_file log_filename

Per avviare la registrazione del terminale Linux, digita script e aggiungi il nome file di registro come mostrato.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Per interrompere lo script, digita esci e premi [Invio].


tecmint@tecmint ~ $ exit

Script done, file is history_log.txt

Se lo script non riesce a scrivere nel file di registro indicato, mostra un errore.

Ad esempio, nell'output seguente, le autorizzazioni del file typescript non consentono la lettura, la scrittura e l'esecuzione del file da parte di nessun utente o gruppo. Quando esegui il comando script senza un nome di file di registro, tenta di scrivere nel file predefinito, typescript mostrando quindi un errore.


tecmint@tecmint ~ $ ls -l typescript

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

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Esempi di utilizzo del comando script

Nell'esempio seguente ho denominato il mio file di registro script.log, puoi assegnare al file un nome diverso.


tecmint@tecmint ~ $ script script.log

Ora prova a eseguire alcuni comandi per consentire allo script di registrare i comandi eseguiti sul terminale.


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

Ora prova a visualizzare il file di registro "script.log" per tutti i comandi registrati, mentre visualizzi il registro ti rendi conto che lo script memorizza anche avanzamenti di riga e backspace.


tecmint@tecmint ~ $ vi script.log
Uscita del campione

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

Puoi utilizzare l'opzione -a per aggiungere il file di registro o il dattiloscritto, mantenendo il contenuto precedente.


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

Visualizza il contenuto dello script, accedi dopo aver utilizzato l'opzione -a per aggiungerlo.


tecmint@tecmint ~ $ vi script.log
Uscita del campione

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

Per registrare i risultati di un singolo comando diverso da una sessione di shell interattiva, utilizzare l'opzione -c.


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

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

Se vuoi che lo script venga eseguito in modalità silenziosa, puoi utilizzare l'opzione -q. Non vedrai un messaggio che mostra che lo script si sta avviando o chiudendo.


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)

Per impostare le informazioni temporali sull'errore standard o su un file, utilizza l'opzione –timing. Le informazioni sulla tempistica sono utili quando si desidera visualizzare nuovamente l'output archiviato nel log_file.

Avviamo lo script ed eseguiamo i seguenti comandi w, uptime e cal per essere registrati.


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    

Puoi visualizzare i file script.log e time.txt per il comando timing riportato sopra.


tecmint@tecmint ~ $ vi script.log
Uscita del campione

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

Ora visualizza il file time.txt.


tecmint@tecmint ~ $ vi time.txt
Uscita del campione

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

Il file time.txt ha due colonne, la prima colonna mostra quanto tempo è trascorso dall'ultima visualizzazione e la seconda colonna mostra il numero di caratteri che sono stati visualizzati questa volta.

Utilizza la pagina man e –help per cercare ulteriori opzioni e aiuto nell'utilizzo dell'utilità della riga di comando dello script.

Utilizzo di scriptreplay per riprodurre gli script utilizzando le informazioni sui tempi

Il comando scriptreplay aiuta a riprodurre le informazioni nel tuo log_file registrato dal comando script.

Le informazioni sui tempi sono definite dall'opzione -timing=file utilizzata con il comando script e file in questo caso è file.txt utilizzato con il comando script .

Ricorda che devi specificare il log_file che hai utilizzato con il comando script.

Ripetiamo ora gli ultimi tre comandi w, uptime e cal che abbiamo eseguito come segue.


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

Quando il log_file viene riprodotto utilizzando le informazioni di temporizzazione, i comandi registrati vengono eseguiti e il loro output viene visualizzato nello stesso momento in cui veniva visualizzato l'output originale durante la registrazione.

Riepilogo

Questi due comandi, script e scriptreplay sono facili da usare e aiutano molto quando è necessario eseguire più volte lo stesso batch di comandi. Aiutano molto nella gestione dei server che hanno solo un'interfaccia a riga di comando per l'interazione con il tuo sistema. Spero che questa guida ti sia stata utile e se hai qualcosa da aggiungere o affronti una sfida durante l'utilizzo, non esitare a pubblicare un commento.