GNU/Linux >> Linux Esercitazione >  >> Linux

È possibile salvare il contenuto della console virtuale Linux e scorrere all'indietro in un file?

/dev/vcs[a]<n> otterrai solo l'ultimo schermo pieno anche se hai fatto scorrere verso l'alto, ma la selezione ioctl() s come usato da gpm ti permetterà di scaricare la schermata attualmente visualizzata anche quando hai fatto scorrere verso l'alto.

Quindi puoi fare:

sleep 3; perl -e '
  require "sys/ioctl.ph";
  # copy:
  ioctl(STDIN, &TIOCLINUX, $arg = pack("CS5", 2, 1, 1, 80, 25, 2));
  # paste:
  ioctl(STDIN, &TIOCLINUX, $arg = "\3")'; cat > file

Regola 80 e 25 in base alla larghezza e all'altezza effettive dello schermo.

Il sleep 3 ti dà il tempo di scorrere verso l'alto (con Maiusc+PagSU ) alla schermata effettiva che desideri scaricare. cat > file reindirizza l'incolla a file . Termina con Ctrl+D .

Vedi console_ioctl(4) per i dettagli.

Se hai gpm installato e funzionante, puoi effettuare la selezione con il mouse.

Lo scrollback e la selezione della console virtuale di Linux sono molto limitati e piuttosto fastidiosi (in quanto quando si cambia console, si perde l'intero scrollback). Andando avanti, ti suggerirei di usare cose come GNU screen o tmux al suo interno (io personalmente li uso in terminali ancora più capaci). Con loro, puoi avere scrollback ricercabili più grandi e scaricarli facilmente su file (e persino registrare tutto l'output del terminale, oltre a tutte le altre chicche fornite con quei multiplexer di terminale).

Per quanto riguarda l'automazione del processo per eseguire il dump dell'intero buffer di scrollback, dovrebbe essere possibile in alcune condizioni, ma piuttosto difficile in quanto l'API è molto limitata. C'è un ioctl non documentato (TIOCLINUX, subcode=13) per scorrere la console virtuale corrente di un certo offset (negativo per lo scorrimento verso l'alto, positivo per lo scorrimento verso il basso).

Tuttavia non c'è modo (che io conosca) di conoscere la dimensione corrente del buffer di scrollback. Quindi è difficile sapere quando hai raggiunto la cima di quel buffer. Se provi a superarlo, lo schermo non verrà spostato di tanto e non esiste un modo affidabile per sapere di quanto lo schermo è effettivamente passato.

Trovo anche irregolare il comportamento dello scorrimento ioctl (almeno con la console VGA), dove lo scorrimento di meno di 4 righe funziona solo occasionalmente.

Lo script seguente sembra funzionare per me su console con frame buffer (e occasionalmente su quelle VGA) a condizione che il buffer di scrollback non contenga sequenze di righe identiche più lunghe di uno schermo più una riga.

È piuttosto lento perché scorre una riga alla volta e deve attendere 10 ms per eof durante la lettura di ogni dump dello schermo.

Da usare come that-script > file dall'interno della console virtuale.

#! /usr/bin/perl
require "sys/ioctl.ph";
($rows,$cols) = split " ", `stty size`;
$stty = `stty -g`; chomp $stty;
system(qw(stty raw -echo icrnl min 0 time 1));

sub scroll {
  ioctl(STDIN, &TIOCLINUX, $arg = pack("Cx3l", 13, $_[0])) or die "scroll: $!";
}
sub grab {
  ioctl(STDIN, &TIOCLINUX, $arg = pack("CS5", 2, 1, 1, $cols, $rows, 2)) or die "copy: $!";
  ioctl(STDIN, &TIOCLINUX, $arg = "\3") or die "paste: $!";
  return <STDIN>;
}
for ($s = 0;;$s--) {
  scroll $s if $s;
  @lines = grab;
  if ($s) {
    last if "@lines" eq "@lastlines";
    unshift @output, $lines[0];
  } else {
    @output = @lines;
  }
  @lastlines = @lines;
}
print @output;
exec("stty", $stty);

Linux
  1. Cos'è NFS e come installarlo su Linux

  2. Come estrarre i file .gz e .tar.gz in Linux

  3. Trova un file con i comandi Trova e individua in Linux

  4. Metodi di compressione e archiviazione in Linux

  5. Come montare e smontare un file system in Linux

Comando Ls in Linux (Elenca file e directory)

File host Linux:come modificarlo e utilizzarlo?

Come bloccare le sessioni della console virtuale su Linux

Un'introduzione all'hashing e ai checksum in Linux

Come creare e utilizzare file di scambio su Linux

Risparmia spazio comprimendo file e cartelle in Linux