Как сохранить вывод терминала в файл в Linux

Файл вывода терминала 00 Изображение

Терминал — это сердце системы Linux. Каждая программа, которая работает в Linux, выполняется под командной строкой терминала. Это включает в себя большие программы, такие как веб-браузеры, и даже простые, такие как текстовые редакторы. Таким образом, умение правильно использовать терминал является важным шагом, если вы хотите понять, как работает операционная система.

При этом, работая в терминале Linux, вы можете захотеть сохранить вывод терминала команды в файл. Этот файл может быть использован как информация для другой операции или просто для ведения журнала активности терминала. Эта статья обучает пяти способам сохранить вывод терминала в файл.

Содержание

    1. Используйте специальные терминалы
    1. Перенаправление вывода
    1. Tee
    1. Script
    1. Захват терминала framebuffer
  • Часто задаваемые вопросы

Также читайте: Как использовать команду dd в Linux

1. Используйте специальные терминалы

Первый способ решения этой задачи — использовать терминал, который поддерживает сохранение вывода в файл. Например, терминал Konsole, который идет с стандартной установкой KDE, включает опцию записи вывода в файл.

Для этого нажмите кнопку “Файл” в строке меню и выберите “Сохранить вывод как …”

Файл вывода терминала 05 Konsole Сохранить вывод как

Это откроет диалоговое окно, где вы можете сохранить вывод терминала. Оттуда вы можете выбрать, где хотите сохранить файл.

Вы также можете сохранить вывод команды в терминале GNOME. Просто щелкните правой кнопкой мыши на терминале и нажмите “Копировать вывод как HTML.” Это загрузит текст терминала в ваш буфер обмена. Оттуда вы можете вставить его в любой текстовый редактор.

Файл вывода терминала 06 Gnome Копировать вывод Html

Также читайте: Как использовать команду rm в Linux

2. Перенаправление вывода

Другой способ решения этой задачи — использовать встроенные операторы оболочки UNIX. Это стандартные функции в Linux и могут перенаправить текстовый вывод программы в файл. Существует три оператора, которые могут это сделать:

  • Оператор > либо создаст, либо заменит содержимое файла выводом вашей программы. Это полезно, если вы хотите сбросить и просмотреть текущий результат вашей программы в тот же файл.
  • Оператор >> также создаст файл с выводом вашей программы. Однако этот оператор только добавит вывод вместо замены. Это полезно, если вы хотите непрерывно сбрасывать результат вашей программы в один файл.
  • Наконец, оператор 2> — это специальный тип оператора, который будет выводить ошибки, которые будут сообщены обратно. Это очень полезно во время отладки, так как показывает проблему, с которой столкнулась программа перед тем, как она завершилась с ошибкой.

Файл вывода терминала 07 Пример перенаправления

Зная это, вы можете использовать эти операторы, добавляя их в конце вашей программы. Рассмотрим следующий пример:

echo "maketecheasier" > hello.txt

Я указал программе echo вывести слово “maketecheasier”, затем добавил оператор > и имя файла. Это сказало оболочке UNIX записать вывод в файл “hello.txt” вместо того, чтобы печатать его на экране.

Файл вывода терминала 08 Hello Txt

3. Tee

Помимо перенаправления вывода, вы также можете сохранить вывод команды терминала, используя программу под названием tee. Это программа GNU, которая позволяет вам читать из стандартного ввода и записывать в него. Используйте эту программу с трубами UNIX, чтобы записать вывод команды в файл.

Рассмотрим следующий пример:

echo "maketecheasier" | tee hello.txt

Файл вывода терминала 09 Пример Tee

Здесь, вместо использования перенаправления вывода, я передал ( |) вывод в tee.

Примечание: Труба берет вывод одной программы и передает его на ввод другой. Это позволяет вам соединять несколько программ вместе, пока они все используют стандартные вводы и выводы.

Также читайте: Как исправить проблему “Не удается вводить в терминале” в Linux

4. Script

Другой способ получения вывода из терминала — это использование script, встроенной программы Linux, которая записывает все, что вы вводите в терминале, а также его вывод.

Вы можете использовать script для записи журнала вашей сессии терминала в текстовом формате, который можно разобрать. Это очень полезно, если вы хотите отправить журнал ошибок в интернет, чтобы получить поддержку от других людей.

Чтобы использовать его, выполните следующую команду:

script filename.txt

Файл вывода терминала 11 Пример запуска Script

Это запустит среду скрипта, где вы можете просто начать выполнять команды. Однако важно отметить, что script захватывает все, что вы делаете в этой сессии. Рассмотрим следующий пример:

Script started on 2022-03-27 18:02:29 +08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"]  
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls  
[?2004l  
[0m[01;34mDesktop[0m    [01;34mDownloads[0m  [01;34mmail[0m  [01;34mNews[0m  [01;34mpods[0m  [01;34mdocuments[0m  [00;32mhello.txt[0m  [01;34mMail[0m  [01;34mpics[0m  [01;34mtmp[0m   [01;34mvids[0m  
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit  
[?2004l  
exit  
  
Script done on 2022-03-27 18:03:19 +08:00 [COMMAND_EXIT_CODE="0"]

Script включает все нажатия клавиш и управляющие символы, которые вы нажимаете. В моем случае он включал все “невидимые” клавиши, которые я нажал, включая нажатия клавиш Tab и Backspace.

Когда вы закончите сессии, введите exit. Это завершит программу Script и запишет весь журнал в файл, который вы указали.

Файл вывода терминала 12 Script Cat

Также читайте: Как использовать команду lp в Linux для печати файлов из терминала

5. Захват терминала framebuffer

Наконец, вы также можете получить вывод терминала, извлекая его из framebuffer Linux. Это полезно, если вы работаете непосредственно на телетайпе и хотите захватить вывод программы.

Чтобы захватить устройство framebuffer, выполните следующую команду, находясь в телетайпе:

cat /dev/fb0 > capture.raw

Файл вывода терминала 13 Захват Framebuffer Raw

Важно отметить, что захват устройства framebuffer таким образом означает, что вы сбрасываете необработанные байты framebuffer в файл. Чтобы просмотреть этот файл, вам нужно загрузить его в редакторе изображений и вручную настроить цвет и глубину цвета. Этот процесс не только занимает много времени, но и легко сделать неправильно.

Таким образом, одним из способов решения этой проблемы является использование сторонней программы, такой как fbgrab. Эта программа захватит текущий экран телетайпа из устройства framebuffer и сбросит его либо в файл PPM, либо в PNG.

Установка fbgrab также относительно проста. В дистрибутивах на базе Debian и Ubuntu вы можете использовать apt:

sudo apt install fbgrab

Для Arch Linux выполните pacman:

sudo pacman -S fbgrab

Файл вывода терминала 14 Установка Fbcat

Использование fbgrab для захвата вывода терминала

После установки перейдите в телетайп, нажав Control + Shift + Alt + F3, затем выполните либо fbcat, либо fbgrab.

Fbcat — это более простая программа, которая захватывает текущий экран framebuffer и сохраняет его в изображение PPM. Это формат необработанного изображения низкого уровня, который вы можете загрузить в редактор изображений, чтобы преобразовать в PNG. Fbcat в первую очередь полезен, если вы пытаетесь захватить дисплей с низкой глубиной цвета, который требует формата необработанного изображения для правильного захвата.

Чтобы захватить с помощью программы fbcat, выполните следующую команду:

fbcapture > capture.ppm

Файл вывода терминала 15 Захват Ppm

Это захватит текущий отображаемый экран и сбросит содержимое в файл capture.ppm.

Fbgrab, с другой стороны, является более сложной программой, предназначенной для захвата дисплеев с более высокой глубиной цвета. В большинстве случаев вы будете использовать его для захвата экрана вашего телетайпа. Он поддерживает сохранение в PNG по умолчанию и имеет возможность выбрать другой телетайп для захвата.

Чтобы захватить с помощью программы fbgrab, выполните следующую команду:

sudo fbgrab -c3 capture.png

Файл вывода терминала 16 Пример Fbgrab

Это захватит третий экран телетайпа и сохранит его в файл capture.png.

Если вы ищете больше руководств по терминалу Linux, ознакомьтесь с тем, который обсуждает отправку электронной почты из командной строки.

Часто задаваемые вопросы

1. Помогите! Fbgrab не работает; изображение просто черное или пустое.

Это, вероятно, потому, что fbgrab использует другое устройство framebuffer для захвата вывода терминала. Проверьте текущее устройство framebuffer, которое использует система, перечислив папку “/dev”.

ls /dev

Оттуда найдите устройство “/dev/fbX”. Обычно Linux использует “/dev/fb0” для своего framebuffer. Однако, если ваша система использует другое устройство framebuffer, например “/dev/fb1”, вы можете передать следующую команду, чтобы сказать fbgrab захватить из этого framebuffer:

fgrab -d1 capture.png

2. Можно ли захватить содержимое файла, который я написал в качестве ввода для программы?

Да! Помимо трех операторов, обсужденных выше, вы также можете использовать оператор <, чтобы извлечь данные из файла. Оболочка будет рассматривать это как ввод для программы.

Делая это таким образом, вы также убираете необходимость полагаться на другие программы для печати текста за вас. Рассмотрим следующие примеры:

[1] cat test.txt | program  
[2] program < test.txt
  • Первый пример вызывает программу cat, чтобы загрузить текст, затем загружает оператор трубы с выводом cat и передает его в вашу программу.
  • С другой стороны, второй пример сразу вызывает вашу программу, затем выбирает оператор <, который рассматривает следующий аргумент как его ввод.

3. Есть ли способ заставить script захватывать только вывод команды?

Да, возможно, чтобы script захватывал только для одной команды. Это очень полезно во время устранения неполадок, когда вы просто хотите захватить вывод одной программы. Сделайте это, выполнив следующую команду:

script -c "your-command" test.txt

Флаг -c говорит программе script запускать только программу: your-command. Оттуда он затем запишет свой вывод в текстовый файл с именем test.txt.

Кредит изображения: Unsplash