Puis-je enregistrer la sortie d'une commande de terminal précédente en utilisant uniquement le clavier?

12

Je viens de passer les deux dernières heures à exécuter une ddcommande (ou à imaginer un scénario similaire "difficile à refaire") à partir d'un CD live sans interface graphique; tout ce que j'ai, c'est mon fidèle CTRL+ALT+F#terminal "multi-fenêtre" ( ) Bash.

Hélas, lors de la commande a ddjeté plusieurs messages d'erreur désagréables et un peu plus d'informations que je voudrais conserver. J'ai un lecteur USB branché sur lequel je peux écrire des données, mais comment puis-je obtenir la sortie précédente enregistrée sous forme de fichier texte après que la commande a déjà été exécutée?

Si cela avait été un émulateur de terminal dans une belle interface graphique, j'aurais simplement utilisé ma souris pour sélectionner le texte, le copier et le coller dans un document. Et si j'avais su que la commande aurait produit des erreurs, je l'aurais dirigée vers un fichier pour commencer, mais hélas, la sortie supplémentaire était une surprise.

Comment enregistrer la sortie texte de ma commande précédente dans un fichier sans réexécuter la commande? Est-ce seulement possible?

IQAndreas
la source
J'ai cherché des moyens de sélectionner du texte à l'écran, mais jusqu'à présent, je ne trouve que des moyens de le faire en utilisant le texte que vous avez entré dans l'invite.
IQAndreas
Avez-vous essayé d'utiliser la redirection de sortie ??
eyoung100
2
@ eyoung100 Est-ce un autre mot pour "tuyauterie"? Comme dans dd if=/dev/sda of=/backups/sda.img > result.txt. Si c'est le cas, le problème est que j'ai déjà exécuté la ddcommande . À tout prix, je veux éviter d'exécuter à nouveau la commande, ce qui est impossible dans certaines situations.
IQAndreas
2
En supposant que c'est Linux: installez gpm . (Démarrez-le si nécessaire, par exemple service start gpm). Balayez une région tout en maintenant le bouton gauche de la souris enfoncé. Tapez cat > outputfileet cliquez sur le bouton droit de la souris pour coller la région que vous venez de sélectionner.
Mark Plotnick
1
Si l'objectif est uniquement de "conserver ... [les] informations", un dernier recours est de saisir un appareil photo et de prendre une photo de l'écran. (Et, théoriquement, vous pouvez ensuite exécuter l'OCR à ce sujet.)
Scott

Réponses:

15

Un noyau Linux devrait stocker un journal à l'écran pour vos vts dans le /dev/vcsa*[ttynum]périphérique correspondant .

C'est pourquoi les travaux suivants fonctionnent:

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

... qui imprime ...

hey       

Le /dev/vcsa[ttynum]périphérique correspondant stockera une version codée du texte formaté à l'écran, tandis que le /dev/vcs[ttynum]sera un simple vidage. Les vcsa[ttynum]périphériques coderont une paire d'octets qui décrivent chaque caractère à l'écran et ses attributs, ainsi qu'une chaîne en tête de chaque page logique qui indique les lignes du tty référencé , le nombre de colonnes .

Comme le souligne @kasperd, je me suis trompé auparavant en supposant que le \aBEL était codé entre chaque caractère, alors qu'en fait: la combinaison de couleurs par défaut coïncide avec le caractère de la cloche.

Pour vos besoins, utiliser le /dev/vcs[ttynum]est probablement le plus simple. Voici un laperçu des différences:

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

... impressions ...

hey       $

...et...

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

... impressions ...

0\200\000\004h\ae\ay\a$
mikeserv
la source
1
vcsane met pas le même caractère entre tous les caractères. Il vous donne des paires d'octets vous indiquant quel caractère est à l'écran et quelle couleur il a. La combinaison de couleurs par défaut coïncide avec le caractère de la cloche.
kasperd
@kasperd - merci. Est-ce mieux?
mikeserv
C'est mieux. 👍
kasperd
2

Accédez à (/ connectez-vous) à un autre terminal et exécutez sudo screendump N > screenoutput.txt, où Nest le numéro du terminal souhaité.

Pas d'arriéré, je le crains. Si ces consoles virtuelles en gardent une, je ne l'ai jamais vue. Mais vous obtenez tout ce que vous pouvez voir sur ce terminal.

Le Sidhekin
la source
si cela fonctionne, c'est probablement parce qu'il le saisit à partir de /dev/vcsa*[1-9]*- (ce à quoi je suppose que les autorisations de superutilisateur sont destinées) . Les consoles Linux ont également pris en charge un backlog pour la plupart des séries 3. *, je pense. Je ne sais pas comment on pourrait l'attraper (contrairement à l'utilisation des /dev/vcsa*[1-9]*appareils) mais peut-être qu'il y a un moyen.
mikeserv
Il est préférable de ne pas passer à une autre console, car la commutation efface le backlog, ne conservant que ce qui est actuellement visible à l'écran.
Gilles 'SO- arrête d'être méchant'
@mikeserv Oui. Eh bien, la page de manuel semble dire qu'elle utilise les deux /dev/vcs$i et /dev/vcsa$i. Il donne cependant un résultat lisible. ;-)
Le Sidhekin
@Gilles Ah, donc il y a un arriéré? Mais screendumpje n'y arrive pas, même si je reste dans la même console.
Le Sidhekin
1
Vous pouvez voir le défilement en tapant Shift-PageUp une ou plusieurs fois. Je ne connais pas de moyen de gronder le texte dans le scrollback autre que d'utiliser la souris via gpm.
Mark Plotnick