GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es posible guardar el contenido de la consola virtual de Linux y retroceder en un archivo?

/dev/vcs[a]<n> solo obtendrá la última pantalla completa incluso si se ha desplazado hacia arriba, pero la selección ioctl() s tal como lo usa gpm le permitirá volcar la pantalla que se muestra actualmente incluso cuando se haya desplazado hacia arriba.

Entonces puedes hacer:

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

Ajuste el 80 y el 25 al ancho y alto reales de su pantalla.

El sleep 3 le da tiempo para desplazarse hacia arriba (con Shift+PageUP ) a la pantalla real que desea volcar. cat > file redirige el pegado a file . Termine con Ctrl+D .

Ver console_ioctl(4) para más detalles.

Si tienes gpm instalado y funcionando, puede hacer esa selección con el mouse.

El desplazamiento hacia atrás y la selección de la consola virtual de Linux son muy limitados y bastante molestos (cuando cambias de consola, pierdes todo el desplazamiento hacia atrás). En el futuro, te sugiero que uses cosas como GNU screen o tmux dentro de él (yo personalmente los uso en terminales aún más capaces). Con ellos, puede tener scrollbacks de búsqueda más grandes y volcarlos fácilmente en archivos (e incluso registrar toda la salida del terminal, además de todas las demás ventajas que vienen con esos multiplexores de terminal).

En cuanto a la automatización del proceso para volcar todo el búfer de desplazamiento hacia atrás, debería ser posible bajo algunas condiciones, pero bastante difícil ya que la API es muy limitada. Hay un ioctl sin documentar (TIOCLINUX, subcódigo=13) para desplazar la consola virtual actual por algún desplazamiento (negativo para desplazarse hacia arriba, positivo para desplazarse hacia abajo).

Sin embargo, no hay forma (que yo sepa) de saber el tamaño actual del búfer de desplazamiento hacia atrás. Por lo tanto, es difícil saber cuándo ha llegado a la parte superior de ese búfer. Si intenta desplazarse más allá, la pantalla no se desplazará tanto y no hay una forma fiable de saber cuánto se ha desplazado realmente la pantalla.

También encuentro errático el comportamiento del ioctl de desplazamiento (al menos con la consola VGA), donde el desplazamiento de menos de 4 líneas solo funciona ocasionalmente.

La siguiente secuencia de comandos parece funcionar para mí en consolas con búfer de cuadros (y ocasionalmente en consolas VGA) siempre que el búfer de desplazamiento hacia atrás no contenga secuencias de líneas idénticas de más de una pantalla más una línea.

Es bastante lento porque se desplaza una línea a la vez y necesita esperar 10 ms para eof al leer cada volcado de pantalla.

Para ser usado como that-script > file desde dentro de la consola virtual.

#! /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. Cómo guardar la salida del comando en un archivo en Linux

  2. Cómo redirigir la salida a un archivo y salida estándar en Linux

  3. Cómo extraer archivos .gz y .tar.gz en Linux

  4. Linux:¿comprensión de los permisos y tipos de archivos de Unix?

  5. Consejos y trucos de Linux .htaccess

Comando Ls en Linux (Lista de archivos y directorios)

Archivo host de Linux:¿Cómo editarlo y usarlo?

Cómo bloquear sesiones de consola virtual en Linux

Una introducción al hashing y las sumas de verificación en Linux

Cómo crear y usar un archivo de intercambio en Linux

Ahorre espacio comprimiendo archivos y carpetas en Linux