GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, den Inhalt der virtuellen Linux-Konsole zu speichern und in einer Datei zurückzuscrollen?

/dev/vcs[a]<n> erhalten Sie nur den letzten vollen Bildschirm, auch wenn Sie nach oben gescrollt haben, aber die Auswahl ioctl() s wie von gpm verwendet ermöglicht es Ihnen, den aktuell angezeigten Bildschirm zu verlassen, selbst wenn Sie nach oben gescrollt haben.

Sie können also Folgendes tun:

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

Passen Sie 80 und 25 an Ihre tatsächliche Bildschirmbreite und -höhe an.

Die sleep 3 gibt Ihnen Zeit, nach oben zu scrollen (mit Shift+PageUP ) zum eigentlichen Bildschirm, den Sie ausgeben möchten. cat > file leitet das Einfügen auf file um . Beenden Sie es mit Strg+D .

Siehe console_ioctl(4) für Details.

Wenn Sie gpm haben installiert und läuft, können Sie diese Auswahl mit der Maus vornehmen.

Das Scrollback und die Auswahl der virtuellen Linux-Konsole sind sehr begrenzt und ziemlich nervig (wenn Sie die Konsole wechseln, verlieren Sie das gesamte Scrollback). Für die Zukunft würde ich vorschlagen, dass Sie Dinge wie GNU screen verwenden oder tmux darin (ich persönlich verwende sie in noch leistungsfähigeren Terminals). Mit ihnen können Sie größere durchsuchbare Scrollbacks haben und sie einfach in Dateien ausgeben (und sogar die gesamte Terminalausgabe protokollieren, plus all die anderen Extras, die mit diesen Terminal-Multiplexern geliefert werden).

Das Automatisieren des Prozesses zum Sichern des gesamten Scrollback-Puffers sollte unter bestimmten Bedingungen möglich sein, aber ziemlich schwierig, da die API sehr begrenzt ist. Es gibt einen undokumentierten ioctl (TIOCLINUX, Subcode=13), um die aktuelle virtuelle Konsole um einen bestimmten Versatz zu scrollen (negativ zum Scrollen nach oben, positiv zum Scrollen nach unten).

Es gibt jedoch (soweit ich weiß) keine Möglichkeit, die aktuelle Größe des Scrollback-Puffers zu ermitteln. Es ist also schwer zu wissen, wann Sie die Spitze dieses Puffers erreicht haben. Wenn Sie versuchen, daran vorbei zu scrollen, wird der Bildschirm nicht so weit verschoben, und es gibt keine verlässliche Methode, um festzustellen, wie weit der Bildschirm tatsächlich gescrollt wurde.

Unregelmäßig finde ich auch das Verhalten des scrollenden ioctl (zumindest bei der VGA-Konsole), wo das Scrollen um weniger als 4 Zeilen nur gelegentlich funktioniert.

Das folgende Skript scheint für mich auf Frame-Buffer-Konsolen (und gelegentlich auf VGA-Konsolen) zu funktionieren, vorausgesetzt, der Scrollback-Puffer enthält keine Sequenzen identischer Zeilen, die länger als ein Bildschirm plus eine Zeile sind.

Es ist ziemlich langsam, weil es zeilenweise scrollt und beim Lesen jedes Bildschirmauszugs 10 ms auf eof warten muss.

Zu verwenden als that-script > file aus der virtuellen Konsole.

#! /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. Linux – Unix-Berechtigungen und Dateitypen verstehen?

  2. Komprimierungs- und Archivierungsmethoden in Linux

  3. Linux .htaccess Tipps und Tricks

  4. Pipes und Redirection in Linux - erklärt!

  5. So mounten und unmounten Sie ein Dateisystem unter Linux

Ls-Befehl in Linux (Dateien und Verzeichnisse auflisten)

Linux-Hostdatei:Wie wird sie bearbeitet und verwendet?

So sperren Sie virtuelle Konsolensitzungen unter Linux

Eine Einführung in Hashing und Prüfsummen in Linux

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

Sparen Sie Platz, indem Sie Dateien und Ordner unter Linux komprimieren