Как сохранить в файл вывод консоли — различия между версиями
PastorDi (обсуждение | вклад) |
Noname (обсуждение | вклад) м |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | Если вывод в (графическую) консоль не очень объёмный, можно просто | + | Если вывод в (графическую) консоль не очень объёмный, можно просто выделить мышкой кусок и вставить его в сообщение щелчком средней кнопки. В противном случае можно использовать перенаправление вывода в файл через "воронку", например так: |
+ | some_command parameters >logfile.txt | ||
− | + | Если файл существует он будет перезаписан. Чтобы дополнить его нужно вместо '''>''' использовать '''>>'''. | |
− | + | ---------- | |
+ | Чтобы видеть результат выполнения на экране, и одновременно писать в файл, можно воспользоваться командой {{Программа|tee}}: | ||
some_command parameters | tee -a logfile.txt | some_command parameters | tee -a logfile.txt | ||
+ | |||
+ | ---------- | ||
Команда {{cmd|setterm -dump}} создает "слепок" буфера текущей виртуальной консоли в виде простого текстового файла с именем по умолчанию - screen.dump. В качестве ее аргумента можно использовать номер консоли, для которой требуется сделать дамп. А добавление опции {{cmd|-file имя_файла}} перенаправит этот дамп в файл с указанным именем. Опция же {{cmd|-append}} присоединит новый дамп к уже существующему файлу - "умолчальному" screen.dump или поименованному опцией {{cmd|-file}}. | Команда {{cmd|setterm -dump}} создает "слепок" буфера текущей виртуальной консоли в виде простого текстового файла с именем по умолчанию - screen.dump. В качестве ее аргумента можно использовать номер консоли, для которой требуется сделать дамп. А добавление опции {{cmd|-file имя_файла}} перенаправит этот дамп в файл с указанным именем. Опция же {{cmd|-append}} присоединит новый дамп к уже существующему файлу - "умолчальному" screen.dump или поименованному опцией {{cmd|-file}}. | ||
Т.е. после использования команды, например | Т.е. после использования команды, например | ||
− | |||
setterm -dump -file /root/screenlog | setterm -dump -file /root/screenlog | ||
соответственно в файле {{Источник|/root/screenlog}} будет содержимое одной страницы консоли. | соответственно в файле {{Источник|/root/screenlog}} будет содержимое одной страницы консоли. | ||
− | + | ||
+ | ---------- | ||
+ | |||
+ | Также можно копировать текст из буфера прокрутки (т.е. всё что на экране и выше за экраном). Чтобы лучше разобраться, читайте о консольном менеджере окон {{Программа|screen}}. Также может пригодиться увеличить размер буфера прокрутки. | ||
1) Запускаем {{Программа|screen}} | 1) Запускаем {{Программа|screen}} | ||
Строка 36: | Строка 42: | ||
8) Ctrl+A, Ctrl+0 - вернуться обратно в нулевое окно. | 8) Ctrl+A, Ctrl+0 - вернуться обратно в нулевое окно. | ||
+ | |||
+ | |||
+ | ---------- | ||
+ | |||
+ | Можно заюзать {{Программа|script}}. | ||
+ | |||
+ | Делаем | ||
+ | script --timing=terminal-timing.log terminal.log | ||
+ | # в terminal.log запишется все что будет выполнено в терминале | ||
+ | # в terminal-timing.log запишется время когда и сколько команды выполнялись. Этот файл нужен чтобы потом была возможность воспроизвести лог с помощью scriptreplay. | ||
+ | |||
+ | когда все нужные команды выполнены | ||
+ | exit | ||
+ | |||
+ | Все записано в '''terminal.log''' | ||
+ | |||
+ | Чтобы воспроизвести лог выполняем | ||
+ | scriptreplay terminal-timing.log terminal.log 4 | ||
+ | # 4 в конце команды означает скорость воспроизведения. 1 - оригинальная (можно не указывать), 2 - в два раза быстрее и т.д. | ||
+ | |||
+ | |||
+ | ---------- | ||
+ | |||
+ | В {{Программа|konsole/yakuake}} вывод можно сохранить комбинацией '''ctrl+shift+s'''. Буфер этих программ можно изменить в настройках (по умолчанию, емнип, 1000 строк). | ||
+ | |||
+ | |||
+ | ---------- | ||
+ | |||
+ | В FreeBSD есть замечательная утилита watch, которая позволяет мониторить терминалы, но как оказалось, в Linux она выполняет совсем иные функции =\ Стоит погуглить на эту тему, чего-нть да найдется... | ||
Строка 63: | Строка 98: | ||
Кстати, 128 - это килобайт. Автор статьи утверждает, что больше установить нельзя. Я и не пробовал. | Кстати, 128 - это килобайт. Автор статьи утверждает, что больше установить нельзя. Я и не пробовал. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{Навигация|Разделы|[[Программы ROSA Linux]] - [[Рецепты/howto]]}} | {{Навигация|Разделы|[[Программы ROSA Linux]] - [[Рецепты/howto]]}} | ||
+ | [[Категория:HOWTO]] |
Текущая версия на 14:44, 12 ноября 2022
Если вывод в (графическую) консоль не очень объёмный, можно просто выделить мышкой кусок и вставить его в сообщение щелчком средней кнопки. В противном случае можно использовать перенаправление вывода в файл через "воронку", например так:
some_command parameters >logfile.txt
Если файл существует он будет перезаписан. Чтобы дополнить его нужно вместо > использовать >>.
Чтобы видеть результат выполнения на экране, и одновременно писать в файл, можно воспользоваться командой tee:
some_command parameters | tee -a logfile.txt
Команда setterm -dump создает "слепок" буфера текущей виртуальной консоли в виде простого текстового файла с именем по умолчанию - screen.dump. В качестве ее аргумента можно использовать номер консоли, для которой требуется сделать дамп. А добавление опции -file имя_файла перенаправит этот дамп в файл с указанным именем. Опция же -append присоединит новый дамп к уже существующему файлу - "умолчальному" screen.dump или поименованному опцией -file.
Т.е. после использования команды, например
setterm -dump -file /root/screenlog
соответственно в файле /root/screenlog будет содержимое одной страницы консоли.
Также можно копировать текст из буфера прокрутки (т.е. всё что на экране и выше за экраном). Чтобы лучше разобраться, читайте о консольном менеджере окон screen. Также может пригодиться увеличить размер буфера прокрутки.
1) Запускаем screen
screen
2) Нажимаем Enter. Всё. Мы находимся в нулевом окне консоли.
3) Выполняем нужные команды, вывод которых необходимо скопировать.
4) Ctrl+A, Ctrl+[ - мы в режиме копирования. Ставим курсор на начало выделения, жмём пробел, потом ставим курсор на конец выделения, жмём пробел. Текст скопирован в буфер.
5) Ctrl+A, с - мы создали новое 1-е окно.
6) Ctrl+A, 1 - мы перешли на 1-е окно.
7) Открываем любой (?) текстовый редактор (я пробовал в mc), и жмём Ctrl+A, Ctrl+] - текст вставлен. Сохраняем.
8) Ctrl+A, Ctrl+0 - вернуться обратно в нулевое окно.
Можно заюзать script.
Делаем
script --timing=terminal-timing.log terminal.log # в terminal.log запишется все что будет выполнено в терминале # в terminal-timing.log запишется время когда и сколько команды выполнялись. Этот файл нужен чтобы потом была возможность воспроизвести лог с помощью scriptreplay.
когда все нужные команды выполнены
exit
Все записано в terminal.log
Чтобы воспроизвести лог выполняем
scriptreplay terminal-timing.log terminal.log 4 # 4 в конце команды означает скорость воспроизведения. 1 - оригинальная (можно не указывать), 2 - в два раза быстрее и т.д.
В konsole/yakuake вывод можно сохранить комбинацией ctrl+shift+s. Буфер этих программ можно изменить в настройках (по умолчанию, емнип, 1000 строк).
В FreeBSD есть замечательная утилита watch, которая позволяет мониторить терминалы, но как оказалось, в Linux она выполняет совсем иные функции =\ Стоит погуглить на эту тему, чего-нть да найдется...
Как увеличить буфер обратной прокрутки?
Первым решением будет увеличить дефолтный (умолчальный) размер буфера в исходниках ядра и перекомпилировать его. Позвольте предположить, что вы столь же не склонны заниматься этим, как и я, и поискать средство более гибкое.
И такое средство есть, а называется оно framebuffer console, для краткости fbcon. Это устройство имеет файл документации fbcon.txt; если вы устанавливали документацию к ядру, то он у вас есть. Выискивайте его где-то в районе /usr/share ветви (я не могу указать точный путь из-за разницы в дистрибутивах).
На этом месте прошу прощения: мы должны сделать небольшое отступление и немного поговорить о видеобуфере (framebuffer).
Видеобуфер - это буфер между дисплеем и видеоадаптером. Его прелесть в том, что им можно манипулировать: он позволяет трюки, которые не прошли бы, будь адаптер связан напрямую с дисплеем.
Один из таких трюков связан с буфером прокрутки; оказывается, вы можете "попросить" видеобуфер выделить больше памяти буферу прокрутки. Достигается это через загрузочные параметры ядра. Сначала вы требуете framebuffer (видеобуфер); Затем запрашиваете больший буфер прокрутки.
Нижеследующий пример касается GRUB, но может быть легко адаптирован к LILO. В файле настройки GRUB - menu.lst- найдите соответствующую ядру строчку, и затем: Удалите опцию vga=xxx, если таковая присутствует. Добавьте опцию video=vesabf или то, что соответствует вашему "железу". Добавьте опцию fbcon=scrollback:128. После этой процедуры, строка параметров ядра должна выглядеть приблизительно так:
kernel /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128
Спрашивается, зачем удалять опцию vga=xxx? Из-за возможных конфликтов с видео-опцией. На своем ATI адаптере, я не могу изменить буфер прокрутки, если vga=xxx присутствует в списке. Возможно в вашем случае это не так. Если вышеперечисленные опции работают - хорошо; но что, если вы хотите увеличить число строк, или установить более мелкий шрифт на экране? Вы всегда делали это при помощи опции vga=xxx - а она-то и исчезла. Не переживайте - то же самое может быть достигнуто изменением параметров fbcon, как описано в файле fbcon.txt (но не описано в данной статье).
С опцией fbcon=scrollback:128 у меня буфер прокрутки увеличился до 17 экранов (35 раз Shift+PgUp по полэкрана). Кстати, 128 - это килобайт. Автор статьи утверждает, что больше установить нельзя. Я и не пробовал.