GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin untuk menyimpan konten konsol virtual Linux dan scrollback dalam sebuah file?

/dev/vcs[a]<n> hanya akan membuat Anda layar penuh terakhir meskipun Anda telah menggulir ke atas, tetapi pilihan ioctl() s seperti yang digunakan oleh gpm akan memungkinkan Anda membuang layar yang saat ini ditampilkan bahkan saat Anda menggulir ke atas.

Sehingga Anda dapat melakukan:

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

Sesuaikan 80 dan 25 dengan lebar dan tinggi layar sebenarnya.

sleep 3 memberi Anda waktu untuk menggulir ke atas (dengan Shift+PageUP ) ke layar sebenarnya yang ingin Anda buang. cat > file mengalihkan tempel ke file . Selesaikan dengan Ctrl+D .

Lihat console_ioctl(4) untuk detailnya.

Jika Anda memiliki gpm terinstal dan berjalan, Anda dapat melakukan pemilihan itu dengan mouse.

Scrollback dan pemilihan konsol virtual Linux sangat terbatas dan cukup mengganggu (saat Anda beralih konsol, Anda kehilangan seluruh scrollback). Ke depan, saya sarankan Anda menggunakan hal-hal seperti GNU screen atau tmux di dalamnya (saya pribadi menggunakannya di terminal yang lebih mampu). Dengan mereka, Anda dapat memiliki scrollback lebih besar yang dapat ditelusuri dan dengan mudah membuangnya ke file (dan bahkan mencatat semua output terminal, ditambah semua barang lain yang disertakan dengan multiplexer terminal tersebut).

Untuk mengotomatiskan proses untuk membuang seluruh buffer scrollback, seharusnya dimungkinkan dalam beberapa kondisi, tetapi cukup sulit karena API sangat terbatas. Ada ioctl yang tidak berdokumen (TIOCLINUX, subcode=13) untuk menggulir konsol virtual saat ini dengan beberapa offset (negatif untuk menggulir ke atas, positif untuk menggulir ke bawah).

Namun tidak ada cara (yang saya tahu) untuk mengetahui ukuran buffer scrollback saat ini. Jadi sulit untuk mengetahui kapan Anda telah mencapai puncak penyangga itu. Jika Anda mencoba men-scroll melewatinya, layar tidak akan terlalu banyak digeser dan tidak ada cara yang dapat diandalkan untuk mengetahui seberapa banyak sebenarnya layar telah di-scroll.

Saya juga menemukan perilaku pengguliran ioctl tidak menentu (setidaknya dengan konsol VGA), di mana pengguliran kurang dari 4 baris hanya berfungsi sesekali.

Skrip di bawah tampaknya berfungsi untuk saya di konsol buffer bingkai (dan kadang-kadang di konsol VGA) asalkan buffer scrollback tidak berisi urutan garis identik yang lebih panjang dari satu layar ditambah satu baris.

Ini cukup lambat karena menggulir satu baris pada satu waktu, dan perlu menunggu 10 md selama beberapa saat saat membaca setiap screen dump.

Untuk digunakan sebagai that-script > file dari dalam konsol 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. Cara Menyimpan Output Perintah ke File di Linux

  2. Cara Mengarahkan Output ke File dan Stdout di Linux

  3. Cara memasang dan memasang sistem file di Linux

  1. Linux – Memahami Izin Unix Dan Jenis File?

  2. Temukan File dengan Perintah Temukan dan Temukan di Linux

  3. Metode kompresi dan arsip di Linux

  1. Tip dan trik .htaccess Linux

  2. Pipes dan Redirection di Linux - Dijelaskan!

  3. Sistem File yang Didukung dan Direkomendasikan di Linux