Hvordan ta opp og spille av Linux-terminaløkter på nytt ved å bruke script- og scriptreplay-kommandoer


I denne guiden skal vi se på hvordan du bruker et script og scriptreplay-kommandoer i Linux som kan hjelpe deg med å registrere kommandoer og deres utgang skrevet ut på terminalen din under en gitt økt.

Historiekommandoen er et flott kommandolinjeverktøy som hjelper brukere med å lagre tidligere brukte kommandoer, selv om den ikke lagrer utdataene fra en kommando.

Derfor kommer script-kommandoen godt med for å gi deg en kraftig funksjonalitet som hjelper deg med å registrere alt som skrives ut på terminalen din til en log_file. Du kan deretter referere til denne filen senere i tilfelle du vil se utdataene til en kommando i historien fra log_filen.

Du kan også spille av kommandoer som du har tatt opp med kommandoen scriptreplay ved å bruke tidsinformasjon.

Hvordan ta opp Linux-terminal ved hjelp av script Command

Skriptkommandoen lagrer terminalaktiviteter i en loggfil som kan navngis av en bruker, når et navn ikke er oppgitt av en bruker, brukes standard filnavn, typescript.

# script [options] - -timing=timing_file log_filename

For å starte opptak av Linux-terminal, skriv inn script og legg til loggfilnavnet som vist.

[email  ~ $ script history_log.txt

Script started, file is history_log.txt

For å stoppe skriptet, skriv exit og trykk [Enter].

[email  ~ $ exit

Script done, file is history_log.txt

Hvis skriptet ikke kan skrive til den navngitte loggfilen, viser det en feil.

For eksempel, i utdataene nedenfor, tillater ikke tillatelsene til filtypeskriptet lesing, skriving og kjøring av filen, ikke av noen bruker eller gruppe. Når du kjører script-kommandoen uten et loggfilnavn, prøver den å skrive til standardfilen, typescript viser derfor en feil.

[email  ~ $ ls -l typescript

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

[email  ~ $ script

script: open failed: typescript: Permission denied
Terminated

Jeg har kalt loggfilen min script.log i eksemplet nedenfor, du kan gi filen et annet navn.

[email  ~ $ script script.log

Prøv nå å utføre noen få kommandoer for å la skriptet registrere utførte kommandoer på terminalen.

[email  ~ $ 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           
                      
[email  ~ $ w

 14:49:40 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62
USER     TTY      FROM             [email    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

[email  ~ $ uptime

 14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62

[email  ~ $ whoami

tecmint

[email  ~ $ echo 'using script'

using script
[email  ~ $ exit
exit
Script done, file is script.log

Prøv nå å se loggfilen 'script.log' for alle innspilte kommandoer, mens du ser på loggen innser du at skriptet også lagrer linjefeed og backspaces.

[email  ~ $ vi script.log
^[[0m^[[255D^[[01;[email ^[[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;[email ^[[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             [email    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;[email ^[[01;34m ~ $^[[00m uptime^M
 14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62^M
^[[01;[email ^[[01;34m ~ $^[[00m whoami^M
tecmint^M
^[[01;[email ^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M
using script^M
^[[01;[email ^[[01;34m ~ $^[[00m exit^M
exit^M

Script done on Wednesday 16 September 2015 02:49:59 PM IST
~                                                              

Du kan bruke -a-alternativet for å legge til loggfilen eller typeskriptet, og beholde det tidligere innholdet.

[email  ~ $ script -a script.log
Script started, file is script.log

[email  ~ $ date
Wed Sep 16 14:59:36 IST 2015


[email  ~ $ pwd
/home/tecmint


[email  ~ $ whereis script
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz


[email  ~ $ whatis script
script (1)           - make typescript of terminal session

Se innholdet i skriptet, logg etter å ha brukt -et alternativ for å legge det til.

[email  ~ $ vi script.log
^[[0m^[[255D^[[01;[email ^[[01;34m ~ $^[[00m date^M
Wed Sep 16 14:59:36 IST 2015^M
^[[01;[email ^[[01;34m ~ $^[[00m pwd^M
/home/tecmint^M
^[[01;[email ^[[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;[email ^[[01;34m ~ $^[[00m whatis script^M
script (1)           - make typescript of terminal session^M
^[[01;[email ^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M
exit^M

For å logge resultater av en enkelt kommando annet enn en interaktiv skalløkt, bruk -c-alternativet.

[email  ~ $ script -c 'hostname' script.log

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

Hvis du vil at skriptet skal kjøre i en stille modus, kan du bruke alternativet -q. Du vil ikke se en melding som viser at skriptet starter eller avsluttes.

[email  ~ $ script -c 'who'  -q  script.log

tecmint  tty8         2015-09-16 10:45 (:0)
tecmint  pts/5        2015-09-16 13:42 (:0)

For å sette tidsinformasjon til standardfeil eller en fil, bruk –timing-alternativet. Tidsinformasjonen er nyttig når du vil vise utdataene som er lagret i log_filen på nytt.

La oss starte skriptet og kjøre følgende kommandoer w, oppetid og cal som skal registreres.

[email  ~ $ script --timing=time.txt script.log
Script started, file is script.log

[email  ~ $ w
 15:09:31 up  4:26,  2 users,  load average: 1.38, 1.39, 1.47
USER     TTY      FROM             [email    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

[email  ~ $ uptime
 15:09:36 up  4:26,  2 users,  load average: 1.43, 1.40, 1.48

[email  ~ $ 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    

Du kan se filen script.log og time.txt for timing-kommandoen ovenfor.

[email  ~ $ vi script.log
^[[0m^[[255D^[[01;[email ^[[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             [email    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;[email ^[[01;34m ~ $^[[00m uptime^M
 15:12:07 up  4:28,  2 users,  load average: 1.29, 1.36, 1.45^M
^[[01;[email ^[[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

Se nå time.txt-filen.

[email  ~ $ 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-filen har to kolonner, den første kolonnen viser hvor lang tid som har gått siden siste visning og den andre kolonnen viser antall tegn som har blitt vist denne gangen.

Bruk man-siden og –help for å søke etter flere alternativer og hjelp til å bruke skriptets kommandolinjeverktøy.

Bruke scriptreplay for å spille av skript på nytt ved å bruke tidsinformasjon

scriptreplay-kommandoen hjelper til med å spille av informasjon i log_filen din som er registrert av script-kommandoen.

Tidsinformasjonen er definert av alternativet -timing=file brukt med script-kommandoen og filen i dette tilfellet er file.txt som ble brukt med script-kommandoen.

Husk at du må spesifisere log_filen du brukte med script-kommandoen.

La oss nå spille av de tre siste kommandoene w, oppetid og cal som vi hadde kjørt som følger.

[email  ~ $ scriptreplay --timing=time.txt script.log

Når log_filen spilles på nytt ved å bruke tidsinformasjonen, kjøres kommandoene som er registrert, og utdataene deres vises samtidig som originalutdataene ble vist mens de ble registrert.

Sammendrag

Disse to kommandoene, script og scriptreplay, er enkle å bruke og hjelper mye når du trenger å kjøre samme batch med kommandoer flere ganger. De hjelper mye med å administrere servere som kun har kommandolinjegrensesnitt for interaksjon med systemet ditt. Håper denne veiledningen var nyttig, og hvis du har noe å legge til eller står overfor en utfordring mens du bruker dem, ikke nøl med å legge inn en kommentar.