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

Терминал — это сердце системы Linux. Каждая программа, которая работает в Linux, выполняется под командной строкой терминала. Это включает в себя большие программы, такие как веб-браузеры, и даже простые, такие как текстовые редакторы. Таким образом, умение правильно использовать терминал является важным шагом, если вы хотите понять, как работает операционная система.
При этом, работая в терминале Linux, вы можете захотеть сохранить вывод терминала команды в файл. Этот файл может быть использован как информация для другой операции или просто для ведения журнала активности терминала. Эта статья обучает пяти способам сохранить вывод терминала в файл.
Содержание
- Используйте специальные терминалы
- Перенаправление вывода
- Tee
- Script
- Захват терминала framebuffer
- Часто задаваемые вопросы
Также читайте: Как использовать команду dd в Linux
1. Используйте специальные терминалы
Первый способ решения этой задачи — использовать терминал, который поддерживает сохранение вывода в файл. Например, терминал Konsole, который идет с стандартной установкой KDE, включает опцию записи вывода в файл.
Для этого нажмите кнопку “Файл” в строке меню и выберите “Сохранить вывод как …”

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

Также читайте: Как использовать команду rm в Linux
2. Перенаправление вывода
Другой способ решения этой задачи — использовать встроенные операторы оболочки UNIX. Это стандартные функции в Linux и могут перенаправить текстовый вывод программы в файл. Существует три оператора, которые могут это сделать:
- Оператор
>либо создаст, либо заменит содержимое файла выводом вашей программы. Это полезно, если вы хотите сбросить и просмотреть текущий результат вашей программы в тот же файл. - Оператор
>>также создаст файл с выводом вашей программы. Однако этот оператор только добавит вывод вместо замены. Это полезно, если вы хотите непрерывно сбрасывать результат вашей программы в один файл. - Наконец, оператор
2>— это специальный тип оператора, который будет выводить ошибки, которые будут сообщены обратно. Это очень полезно во время отладки, так как показывает проблему, с которой столкнулась программа перед тем, как она завершилась с ошибкой.

Зная это, вы можете использовать эти операторы, добавляя их в конце вашей программы. Рассмотрим следующий пример:
echo "maketecheasier" > hello.txtЯ указал программе echo вывести слово “maketecheasier”, затем добавил оператор > и имя файла. Это сказало оболочке UNIX записать вывод в файл “hello.txt” вместо того, чтобы печатать его на экране.

3. Tee
Помимо перенаправления вывода, вы также можете сохранить вывод команды терминала, используя программу под названием tee. Это программа GNU, которая позволяет вам читать из стандартного ввода и записывать в него. Используйте эту программу с трубами UNIX, чтобы записать вывод команды в файл.
Рассмотрим следующий пример:
echo "maketecheasier" | tee hello.txt
Здесь, вместо использования перенаправления вывода, я передал ( |) вывод в tee.
Примечание: Труба берет вывод одной программы и передает его на ввод другой. Это позволяет вам соединять несколько программ вместе, пока они все используют стандартные вводы и выводы.
Также читайте: Как исправить проблему “Не удается вводить в терминале” в Linux
4. Script
Другой способ получения вывода из терминала — это использование script, встроенной программы Linux, которая записывает все, что вы вводите в терминале, а также его вывод.
Вы можете использовать script для записи журнала вашей сессии терминала в текстовом формате, который можно разобрать. Это очень полезно, если вы хотите отправить журнал ошибок в интернет, чтобы получить поддержку от других людей.
Чтобы использовать его, выполните следующую команду:
script filename.txt
Это запустит среду скрипта, где вы можете просто начать выполнять команды. Однако важно отметить, что 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 и запишет весь журнал в файл, который вы указали.

Также читайте: Как использовать команду lp в Linux для печати файлов из терминала
5. Захват терминала framebuffer
Наконец, вы также можете получить вывод терминала, извлекая его из framebuffer Linux. Это полезно, если вы работаете непосредственно на телетайпе и хотите захватить вывод программы.
Чтобы захватить устройство framebuffer, выполните следующую команду, находясь в телетайпе:
cat /dev/fb0 > capture.raw
Важно отметить, что захват устройства framebuffer таким образом означает, что вы сбрасываете необработанные байты framebuffer в файл. Чтобы просмотреть этот файл, вам нужно загрузить его в редакторе изображений и вручную настроить цвет и глубину цвета. Этот процесс не только занимает много времени, но и легко сделать неправильно.
Таким образом, одним из способов решения этой проблемы является использование сторонней программы, такой как fbgrab. Эта программа захватит текущий экран телетайпа из устройства framebuffer и сбросит его либо в файл PPM, либо в PNG.
Установка fbgrab также относительно проста. В дистрибутивах на базе Debian и Ubuntu вы можете использовать apt:
sudo apt install fbgrabДля Arch Linux выполните pacman:
sudo pacman -S fbgrab
Использование fbgrab для захвата вывода терминала
После установки перейдите в телетайп, нажав Control + Shift + Alt + F3, затем выполните либо fbcat, либо fbgrab.
Fbcat — это более простая программа, которая захватывает текущий экран framebuffer и сохраняет его в изображение PPM. Это формат необработанного изображения низкого уровня, который вы можете загрузить в редактор изображений, чтобы преобразовать в PNG. Fbcat в первую очередь полезен, если вы пытаетесь захватить дисплей с низкой глубиной цвета, который требует формата необработанного изображения для правильного захвата.
Чтобы захватить с помощью программы fbcat, выполните следующую команду:
fbcapture > capture.ppm
Это захватит текущий отображаемый экран и сбросит содержимое в файл capture.ppm.
Fbgrab, с другой стороны, является более сложной программой, предназначенной для захвата дисплеев с более высокой глубиной цвета. В большинстве случаев вы будете использовать его для захвата экрана вашего телетайпа. Он поддерживает сохранение в PNG по умолчанию и имеет возможность выбрать другой телетайп для захвата.
Чтобы захватить с помощью программы fbgrab, выполните следующую команду:
sudo fbgrab -c3 capture.png
Это захватит третий экран телетайпа и сохранит его в файл 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.png2. Можно ли захватить содержимое файла, который я написал в качестве ввода для программы?
Да! Помимо трех операторов, обсужденных выше, вы также можете использовать оператор <, чтобы извлечь данные из файла. Оболочка будет рассматривать это как ввод для программы.
Делая это таким образом, вы также убираете необходимость полагаться на другие программы для печати текста за вас. Рассмотрим следующие примеры:
[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