GNU/Linux >> Tutoriels Linux >  >> Linux

Est-il possible de sauvegarder le contenu de la console virtuelle Linux et de revenir en arrière dans un fichier ?

/dev/vcs[a]<n> ne vous donnera que le dernier plein écran même si vous avez fait défiler vers le haut, mais la sélection ioctl() s tel qu'utilisé par gpm vous permettra de vider l'écran actuellement affiché même lorsque vous avez fait défiler vers le haut.

Vous pouvez donc :

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

Ajustez les 80 et 25 à la largeur et à la hauteur réelles de votre écran.

Le sleep 3 vous donne le temps de faire défiler vers le haut (avec Shift+PageUP ) à l'écran réel que vous souhaitez vider. cat > file redirige le coller vers file . Terminez avec Ctrl+D .

Voir console_ioctl(4) pour plus de détails.

Si vous avez gpm installé et en cours d'exécution, vous pouvez faire cette sélection avec la souris.

Le défilement et la sélection de la console virtuelle Linux sont très limités et assez ennuyeux (en ce sens que lorsque vous changez de console, vous perdez tout le défilement). À l'avenir, je vous suggérerais d'utiliser des choses comme GNU screen ou tmux en son sein (je les utilise personnellement dans des terminaux encore plus performants). Avec eux, vous pouvez avoir de plus grands défilements interrogeables et les vider facilement dans des fichiers (et même enregistrer toute la sortie du terminal, ainsi que tous les autres avantages fournis avec ces multiplexeurs de terminaux).

Quant à l'automatisation du processus pour vider l'intégralité du tampon de défilement, cela devrait être possible sous certaines conditions, mais assez difficile car l'API est très limitée. Il existe un ioctl non documenté (TIOCLINUX, subcode=13) pour faire défiler la console virtuelle actuelle d'un certain décalage (négatif pour le défilement vers le haut, positif pour le défilement vers le bas).

Il n'y a cependant aucun moyen (à ma connaissance) de connaître la taille actuelle du tampon de défilement. Il est donc difficile de savoir quand vous avez atteint le sommet de ce tampon. Si vous essayez de le dépasser, l'écran ne sera pas décalé d'autant et il n'existe aucun moyen fiable de savoir de combien l'écran a réellement défilé.

Je trouve également le comportement de l'ioctl de défilement erratique (du moins avec la console VGA), où le défilement de moins de 4 lignes ne fonctionne qu'occasionnellement.

Le script ci-dessous semble fonctionner pour moi sur les consoles de mémoire de trame (et parfois sur les consoles VGA) à condition que la mémoire tampon de défilement ne contienne pas de séquences de lignes identiques plus longues qu'un écran plus une ligne.

Il est assez lent car il fait défiler une ligne à la fois et doit attendre 10 ms pendant eof lors de la lecture de chaque capture d'écran.

A utiliser comme that-script > file depuis la console virtuelle.

#! /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. Comment enregistrer la sortie de la commande dans un fichier sous Linux

  2. Comment rediriger la sortie vers un fichier et Stdout sous Linux

  3. Comment extraire les fichiers .gz et .tar.gz sous Linux

  4. Linux - Comprendre les autorisations Unix et les types de fichiers ?

  5. Rechercher un fichier avec les commandes Rechercher et Localiser sous Linux

Commande Ls sous Linux (liste des fichiers et des répertoires)

Fichier hôte Linux :comment le modifier et l'utiliser ?

Comment verrouiller les sessions de la console virtuelle sous Linux

Une introduction au hachage et aux sommes de contrôle sous Linux

Comment créer et utiliser un fichier d'échange sous Linux

Économisez de l'espace en compressant les fichiers et les dossiers sous Linux