Posso salvare l'output da un precedente comando del terminale usando solo la tastiera?


12

Ho appena trascorso le ultime due ore eseguendo un ddcomando (o immaginando uno scenario simile "difficile da ripetere") da un CD live senza una GUI; tutto ciò che ho è il mio fidato CTRL+ALT+F#terminale Bash "multi-window" ( ).

Ahimè, durante il comando ha ddlanciato diversi cattivi messaggi di errore e un po 'più di informazioni che vorrei conservare. Ho collegato un'unità USB in cui posso scrivere i dati, ma come posso salvare l'output precedente come file di testo dopo che il comando è già stato eseguito?

Se questo fosse stato un emulatore di terminale all'interno di una bella interfaccia grafica, avrei semplicemente usato il mouse per selezionare il testo, copiarlo e incollarlo in un documento. E se avessi saputo che il comando avrebbe prodotto errori, lo avrei indirizzato su un file per cominciare, ma purtroppo l'output aggiuntivo è stato una sorpresa.

Come posso salvare l'output di testo dal mio comando precedente in un file senza rieseguire il comando? È possibile?


Ho cercato modi per selezionare il testo sullo schermo, ma finora ho trovato solo modi per farlo usando il testo che hai inserito nel prompt.
IQAndreas

Hai provato a utilizzare il reindirizzamento dell'output ??
eyoung100,

2
@ eyoung100 È un'altra parola per "tubazioni"? Come in dd if=/dev/sda of=/backups/sda.img > result.txt. In tal caso, il problema è che ho già eseguito il ddcomando . A tutti i costi, voglio evitare di eseguire nuovamente il comando, che in alcune situazioni è impossibile.
IQAndreas

2
Supponendo che questo sia Linux: installa gpm . (Avviarlo se necessario, ad es service start gpm.). Spazza via una regione tenendo premuto il pulsante sinistro del mouse. Digita cat > outputfilee fai clic con il pulsante destro del mouse per incollare la regione appena selezionata.
Mark Plotnick,

1
Se l'obiettivo è solo "mantenere ... [le] informazioni", l'ultima risorsa è quella di prendere una macchina fotografica e scattare una foto dello schermo. (E, in teoria, si potrebbe quindi eseguire OCR su questo.)
Scott

Risposte:


15

Un kernel linux dovrebbe archiviare un registro su schermo per i tuoi vts nel /dev/vcsa*[ttynum]dispositivo corrispondente .

Ecco perché funziona quanto segue:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... che stampa ...

hey       

Il /dev/vcsa[ttynum]dispositivo corrispondente memorizzerà sullo schermo una versione codificata del testo formattato, mentre /dev/vcs[ttynum]sarà un semplice dump. I vcsa[ttynum]dispositivi codificheranno una coppia di byte che descrivono ciascun carattere su schermo e i relativi attributi, nonché una stringa in testa a ciascuna pagina logica che indica le linee della tty di riferimento , il conteggio delle colonne .

Come sottolinea @kasperd, in precedenza avevo sbagliato supponendo che la \aBEL fosse codificata tra tutti i personaggi, quando in realtà: la combinazione di colori predefinita coincide con il carattere della campana.

Ai tuoi scopi, usare /dev/vcs[ttynum]probabilmente è il più semplice. Ecco un lassaggio delle differenze:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

... stampe ...

hey       $

...e...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

... stampe ...

0\200\000\004h\ae\ay\a$

1
vcsanon inserisce lo stesso personaggio tra tutti i personaggi. Ti dà coppie di byte che ti dicono quale personaggio è sullo schermo e di che colore ha. La combinazione di colori predefinita coincide con il carattere della campana.
Kasperd,

@kasperd - grazie. È meglio?
Mikeserv,

Va meglio. 👍
kasperd,

2

Vai a (/ accedi) un altro terminale ed esegui sudo screendump N > screenoutput.txt, dove si Ntrova il numero del terminale desiderato.

Nessun arretrato, temo. Se quelle console virtuali ne mantengono una, non l'ho mai vista. Ma ti dà tutto ciò che puoi vedere su quel terminale.


se funziona, probabilmente è perché lo prende /dev/vcsa*[1-9]*- (che è ciò per cui indovino i permessi del superutente) . Le console Linux hanno supportato un backlog anche per la maggior parte delle serie 3. *, credo. Non sono sicuro di come si possa afferrarlo (invece di usare i /dev/vcsa*[1-9]*dispositivi) ma forse c'è un modo.
Mikeserv,

È meglio non passare a una console diversa, poiché la commutazione cancella il backlog, mantenendo solo ciò che è attualmente visibile sullo schermo.
Gilles 'SO-smetti di essere malvagio' il

@mikeserv Sì. Bene, la pagina man sembra dire che usa entrambi /dev/vcs$i e /dev/vcsa$i. Dà comunque un risultato leggibile. ;-)
The Sidhekin

@Gilles Ah, quindi c'è un arretrato? Ma screendumpnon ci riesco, anche se rimango nella stessa console.
Sidhekin,

1
Puoi vedere lo scrollback digitando Shift-PageUp una o più volte. Non conosco un modo per snarf il testo nello scrollback diverso dall'uso del mouse tramite gpm.
Mark Plotnick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.