Come salvare l'output del terminale in un file in Linux

Il terminale è il cuore di un sistema Linux. Ogni programma che viene eseguito in Linux viene eseguito sotto una riga di comando del terminale. Questo include programmi massicci, come i browser web e anche programmi semplici come gli editor di testo. Pertanto, saper utilizzare correttamente il terminale è un passo importante se si desidera comprendere come funziona il sistema operativo.
Con ciò, mentre si lavora nel terminale Linux, potrebbe essere necessario salvare l’output del terminale di un comando in un file. Questo file può essere utilizzato come informazione per un’altra operazione o semplicemente per registrare l’attività del terminale. Questo articolo insegna cinque modi per salvare l’output del terminale in un file.
Indice
- Utilizzare terminali specifici
- Reindirizzamento dell’output
- Tee
- Script
- Cattura del terminale framebuffer
- Domande frequenti
Leggi anche: Come utilizzare il comando dd in Linux
1. Utilizzare terminali specifici
Il primo modo per affrontare questo problema è utilizzare un terminale che supporti il salvataggio dell’output in un file. Ad esempio, il terminale Konsole che viene fornito con un’installazione standard di KDE include un’opzione per scrivere l’output in un file.
Per farlo, premi il pulsante “File” nella barra dei menu e fai clic su “Salva output come … “

Questo aprirà una finestra di dialogo in cui puoi salvare l’output del terminale. Da lì, puoi scegliere dove vuoi salvare il file.
Puoi anche salvare l’output di un comando nel terminale GNOME. Basta fare clic con il tasto destro del mouse sul terminale e premere “Copia output come HTML.” Questo caricherà quindi il testo del terminale negli appunti. Da lì, puoi incollarlo in qualsiasi editor di testo.

Leggi anche: Come utilizzare il comando Rm in Linux
2. Reindirizzamento dell’output
Un altro modo per affrontare questo problema è utilizzare gli operatori integrati della shell UNIX. Queste sono funzioni predefinite in Linux e possono reindirizzare l’output di testo di un programma in un file. Ci sono tre operatori che possono farlo:
- L’operatore
>creerà o sostituirà il contenuto di un file con l’output del tuo programma. Questo è utile se vuoi scaricare e visualizzare il risultato attuale del tuo programma nello stesso file. - L’operatore
>>creerà anche un file con l’output del tuo programma. Tuttavia, questo operatore aggiungerà solo l’output invece di sostituirlo. Questo è utile se vuoi scaricare continuamente il risultato del tuo programma in un unico file. - Infine, l’operatore
2>è un tipo speciale di operatore che stamperà gli errori che verranno segnalati. Questo è molto utile durante il debug, poiché mostra il problema che il programma ha incontrato prima di bloccarsi.

Sapendo ciò, il modo in cui utilizzi questi operatori è aggiungendoli alla fine del tuo programma. Considera il seguente esempio:
echo"maketecheasier"> hello.txtHo istruito il programma echo a produrre la parola “maketecheasier”, quindi ho aggiunto l’operatore > e un nome di file. Questo ha detto alla shell UNIX di scrivere l’output nel file “hello.txt” invece di stamparlo sullo schermo.

3. Tee
Oltre al reindirizzamento dell’output, puoi anche salvare l’output di un comando del terminale utilizzando un programma chiamato tee. Questo è un programma GNU che ti consente di leggere da e scrivere su input standard. Usa questo programma con i pipe UNIX per scrivere l’output di un comando in un file.
Considera il seguente esempio:
echo"maketecheasier"|tee hello.txt
Qui, invece di utilizzare il reindirizzamento dell’output, ho pipato ( |) l’output a tee.
Nota: Un pipe prende l’output di un programma e lo alimenta nell’input di un altro. Questo ti consente di incollare più programmi insieme, purché utilizzino tutti input e output standard.
Leggi anche: Come risolvere il problema di non poter digitare nel terminale in Linux
4. Script
Un altro modo per estrarre l’output dal terminale è attraverso script, un programma Linux integrato che registra tutto ciò che digiti nel terminale e il suo output.
Puoi utilizzare script per registrare il log della tua sessione terminale in un formato di testo analizzabile. Questo è molto utile se desideri inviare un log di errore online per ricevere supporto da altre persone.
Per usarlo, esegui il seguente comando:
script filename.txt
Questo avvierà un ambiente di script in cui puoi semplicemente iniziare a eseguire comandi. Una cosa importante da notare, tuttavia, è che lo script cattura tutto ciò che fai in quella sessione. Considera il seguente esempio:
Script started on 2022-03-2718:02:29+08:00 [TERM="rxvt-unicode-256color"TTY="/dev/pts/2"COLUMNS="77"LINES="22"]
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls
[?2004l
[0m[01;34mDesktop[0m [01;34mDownloads[0m [01;34mmail[0m [01;34mNews[0m [01;34mpods[0m [01;34mdocuments[0m [00;32mhello.txt[0m [01;34mMail[0m [01;34mpics[0m [01;34mtmp[0m [01;34mvids[0m
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit
[?2004l
exit
Script done on 2022-03-2718:03:19+08:00 [COMMAND_EXIT_CODE="0"]Lo script include tutti i tasti premuti e i caratteri di controllo che premi. Nel mio caso, ha incluso tutti i tasti “invisibili” che ho premuto, inclusi i tasti Tab e Backspace.
Una volta terminata la sessione, digita exit. Questo terminerà il programma Script e scriverà l’intero log nel file che hai specificato.

Leggi anche: Come utilizzare il comando lp in Linux per stampare file dal terminale
5. Cattura del terminale framebuffer
Infine, puoi anche ottenere l’output del terminale estraendolo dal framebuffer di Linux. Questo è utile se stai lavorando direttamente su un teletype e desideri catturare l’output di un programma.
Per catturare il dispositivo framebuffer, esegui il seguente comando mentre sei nel teletype:
cat/dev/fb0 > capture.raw
Una cosa importante da notare è che catturare il dispositivo framebuffer in questo modo significa che stai scaricando i byte grezzi del framebuffer in un file. Per visualizzare quel file, devi caricarlo in un editor di immagini e regolare manualmente il colore e la profondità di bit. Non solo questo processo richiede tempo, ma è anche facile farlo in modo errato.
Pertanto, un modo per affrontare questo problema è utilizzare un programma di terze parti, come fbgrab. Questo catturerà l’attuale schermo del teletype dal dispositivo framebuffer e lo scaricherà in un file PPM o PNG.
Installare fbgrab è anche relativamente semplice. Nelle distribuzioni basate su Debian e Ubuntu, puoi usare apt:
sudo apt install fbgrabPer Arch Linux, esegui pacman:
sudo pacman -S fbgrab
Utilizzare fbgrab per catturare l’output del terminale
Una volta installato, accedi al teletype premendo Control + Shift + Alt + F3, quindi esegui fbcat o fbgrab.
Fbcat è un programma più semplice che cattura l’attuale schermo del framebuffer e lo salva in un’immagine PPM. Questo è un formato di immagine grezzo a basso livello che puoi caricare in un editor di immagini per convertirlo in PNG. Fbcat è principalmente utile se stai cercando di catturare un display a bassa profondità di bit che richiede un formato di immagine grezzo per essere catturato correttamente.
Per catturare utilizzando il programma fbcat, esegui il seguente comando:
fbcat > capture.ppm
Fbgrab, d’altra parte, è un programma più complesso progettato per catturare display a profondità di bit più elevate. Per la maggior parte, lo utilizzerai per catturare il tuo schermo del teletype. Supporta il salvataggio in PNG per impostazione predefinita e ha l’opzione di selezionare un teletype diverso da catturare.
Per catturare utilizzando il programma fbgrab, esegui il seguente comando:
sudo fbgrab -c3 capture.png
Questo catturerà il terzo schermo del teletype e lo salverà in un file capture.png.
Se stai cercando ulteriori guide per il terminale Linux, controlla quella che discute l’invio di un’email dalla riga di comando.
Domande frequenti
1. Aiuto! Fbgrab non funziona; l’immagine è solo nera o vuota.
Questo è probabilmente perché fbgrab sta utilizzando un dispositivo framebuffer diverso per catturare l’output del terminale. Controlla il dispositivo framebuffer attuale che il sistema sta utilizzando elencando la cartella “/dev”.
ls/devDa lì, cerca un dispositivo “/dev/fbX”. Normalmente, Linux utilizza “/dev/fb0” per il suo framebuffer. Tuttavia, se il tuo sistema sta utilizzando un framebuffer diverso, come “/dev/fb1”, puoi passare il seguente comando per dire a fbgrab di estrarre da quel framebuffer invece:
fbgrab -d1 capture.png2. È possibile catturare il contenuto di un file che ho scritto come input per un programma?
Sì! Oltre ai tre operatori discussi sopra, puoi anche utilizzare l’operatore < per estrarre dati da un file. La shell tratterà quindi questo come un input per un programma.
Farà in questo modo anche rimuovere la necessità di fare affidamento su altri programmi per stampare il testo per te. Considera i seguenti esempi:
[1]cat test.txt | program
[2] program < test.txt- Il primo esempio chiama il programma cat per caricare il testo, quindi carica un operatore pipe con l’output di cat e lo pipetta nel tuo programma.
- D’altra parte, il secondo esempio chiama immediatamente il tuo programma, quindi utilizza l’operatore
<, che tratta il successivo argomento come il suo input.
3. Esiste un modo per forzare lo script a catturare solo l’output di un comando?
Sì, è possibile utilizzare lo script solo per un singolo comando. Questo è molto utile durante la risoluzione dei problemi quando vuoi solo catturare l’output di un singolo programma. Fai questo eseguendo il seguente comando:
script -c"your-command" test.txtIl flag -c dice al programma script di eseguire solo il programma: your-command. Da lì, scriverà quindi il suo output in un file di testo chiamato test.txt.
Crediti immagine: Unsplash