Loggare una sessione di shell con “script”

linux

Quante volte è capitato di eseguire un’operazione, magari per la prima volta, e dimenticarsi completamente di prendere appunti?

Lavorando in ambiente sistemistico, se questo avvenimento non è quotidiano, poco ci manca!

Ed in genere come risolviamo il problema? Le soluzioni sono due:

  1. Scrolling del buffer del terminale: Alt+Pag.Up permettono di rileggere cosa si è fatto; il problema è che il buffer dei terminali è limitato (specialmente se si lavora in ambiente non grafico), e spesso alcune cose si perdono comunque;
  2. Visione della history: I moderni terminali supportano la history, permettendo così di scorrere nei comandi lanciati e richiamarli velocemente; il problema è che anche visualizzando la history, non abbiamo l’output dei comandi che abbiamo lanciato.

Quello che servirebbe è un software che permetta di eseguire un logging completo (quindi sia dell’input che immettiamo che dell’output che viene generato).

Ci viene in aiuto script! Tanto semplice quanto funzionale.

Il modo più “pulito” per eseguire il comando è il seguente:

$ script
Script iniziato, il file è typescript
$

Come vedete pare che non sia successo nulla. Ed in effetti possiamo dimenticarci di aver lanciato il comando. Continuiamo pure con il nostro lavoro…

$ su -
Password:
# pwd
/root
# cd /etc/ssh/
# cat sshd_config | grep PermitRoot
PermitRootLogin yes
# sed -i -e "s/PermitRootLogin yes/PermitRootLogin no/" sshd_config
# cat sshd_config | grep PermitRoot
PermitRootLogin no
# /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd                           [ OK ]
# exit
logout
$

Semplicemente quando avremo finito la nostra sessione di lavoro, e lanceremo il consueto “exit“, avremo un output di questo tipo:

$ exit
exit
Script effettuato, il file è typescript

Ora, se dovessimo andare a rivedere la nostra sessione, magari per trasformarla in un howto od in un file da tenere sott’occhio quando tra 6 mesi ci verrà richiesto di fare la stessa cosa, possiamo vedere il contenuto del file “typescript” generato da script:

mcappadonna@laptop ~ $ cat typescript
Script iniziato su ven 16 gen 2009 12:08:38 CET
$ su -
Password:
# pwd
/root
# cd /etc/ssh/
# cat sshd_config | grep PermitRoot
PermitRootLogin yes
# sed -i -e "s/PermitRootLogin yes/PermitRootLogin no/" sshd_config
# cat sshd_config | grep PermitRoot
PermitRootLogin no
# /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd                          [ OK ]
# exit
logout
$ exit
exit
 
Script effettuato su ven 16 gen 2009 12:09:38 CET

Alcune opzioni comode di script sono le seguenti:

  • -a : Appende l’output ad un file già presente;
  • -q : Elimina dall’output i messaggi di script;
  • -t : Aggiunge all’output l’indicazione dell’ora (utile per tenere un timestamp del lavoro)

Ovviamente, potete aggiungere a script l’indicazione del nome del file da salvare:

$ script sessioneDiProva.txt
Script iniziato, il file è sessioneDiProva.txt
$

Un’ultima cosa: se si dovesse avere la necessità di seguire in due utenti (remoti) la stessa sessione di shell ma non fosse possibile installare “screen” sulla macchina, una soluzione elegante può essere la seguente:

$ mkfifo temp; script -f temp

Il comando sembrerà appeso, ma nel momento in cui l’altro utente va ad eseguire un cat sul file, la sessione di script ha inizio e tutti vedono “live” la sessione di shell:

$ cat temp
Script iniziato su ven 16 gen 2009 12:16:28 CET
$

Comodo no?

Buon lavoro.

Utente Linux/Unix da più di 20 anni, cerco sempre di condividere il mio know-how; occasionalmente, litigo con lo sviluppatore di Postfix e risolvo piccoli bug in GNOME. Adoro tutto ciò che può essere automatizzato e reso dinamico, l'HA e l'universo container. Autore dal 2011, provo a condividere quei piccoli tips&tricks che migliorano il lavoro e la giornata.

Tags: , ,