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

В данной статье пойдет речь о том, как перенаправить вывод любой команды терминала (консоли) Linux в текстовый файл.

Цикл статей о терминале:

  1. Терминал Linux. 1 статья — команды навигации в терминале.
  2. Терминал Linux. 2 статья — команда поиска файлов и директорий в терминале
  3. Терминал Linux. 3 статья — команды поиска файлов (продолжение)
  4. Терминал Linux. 4 статья — создание, удаление, форматирование, монтирование разделов жесткого диска
  5. Терминал Linux. 5 статья — cоздание aliases (псевдонимов) в Ubuntu
  6. Терминал Linux. 6 статья — права доступа к каталогам и файлам в Linux, команды chmod и chown.
  7. Терминал Linux. 7 статья — доступ к sudo без ввода пароля.
  8. Терминал Linux 8. Пакетные менеджеры: apt vs apt-get. В чем разница?

Порой, вывод некоторых терминальных команд может быть огромным. К примеру, список программ, которые могут быть обновлены:

apt list —upgradable

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

Прежде чем перейти к обсуждению сохранения вывод команд  терминала в файл, немножко теории о стандартных потоках вывода Linux.

Стандартный потоки вывода Linux.

Подробнее о стандартных потоках можно прочитать в Википедии:

Если по существу, то в Linux есть 3 стандартных потока:
— stdin — поток номер 0, стандартный поток ввода.
— stdout — поток номер 1, стандартный поток вывода.
— stderr — поток номер 2, стандартный поток ошибок, диагностических и отладочных сообщений.

Когда мы выполняем какую-либо команду в терминале:

Вывод всех выполненных команд на скриншоте это stdout стандартный поток вывода.

А вот вывод стандартного потока ошибок stderr:

Как видно на скриншоте, строки с ошибками начинаются с буквы «E:» (error), а также предупреждающая информация W: (warning).

С определениями/названиями стандартных потоков разобрались. Теперь можно перейти к способам сохранения вывода терминала в файл.

Базовый способ сохранения в файл вывода терминала (консоли) Linux. 

Стандартный поток вывода перенаправляется с помощью символа «>», то есть самый простой вариант перенаправления вывода терминала в файл будет выглядеть следующем образом:

какая_либо_команда > название_файла.txt

то есть, после команды ставим > , в результате чего, вывод команды будет сохранен в файл «название_файла.txt»

Реальный пример команды:

apt list —upgradable > output.txt

После выполнения этой команды в том каталоге, в котором вы находитесь в терминале (по умолчанию это домашний каталог), создастся файл, в котором мы удобно сможем просмотреть вывод этой команды:

Если указать одинарный символ «>», то файл будет постоянно перезаписываться при повторном выполнении команды. Чтобы в файл добавлялась новая информация в конец файла, а не перезаписывалась, нужно использоваться двойной символ «>>».
Команда будет выглядеть следующим образом:

apt list —upgradable >> output.txt

Мы перенаправили стандартный поток вывода в файл, но ошибки у нас отображаются в терминале, а в файле текст ошибки добавлен не будет.

Сейчас я описал самый стандартный способ перенаправления стандартного потока вывода stdout в текстовый файл.

Теперь разберем другие способы.

8 базовых способов сохранения вывода терминала в файл.

Для большой наглядности я нарисовал табличку:

Список способов:

command > output.txt

Стандартный поток вывода будет перенаправлен в файл, в терминале виден не будет. Если файл существует, то будет перезаписан.

command >> output.txt

Стандартный поток вывода будет перенаправлен в файл, в терминале виден не будет. Новая информация будет записана в конец существующего файла.

command 2> output.txt

Стандартный поток ошибок будет перенаправлен в файл, в терминале виден не будет. Если файл существует, то будет перезаписан.

command 2>> output.txt

Стандартный поток ошибок будет перенаправлен в файл, в терминале виден не будет. Новая информация будет записана в конец существующего файла.

command &> output.txt

Стандартный поток вывода и стандартный поток ошибок вместе будут перенаправлены в файл, в терминале видны не будет. Если файл существует, то будет перезаписан.

command &>> output.txt

Стандартный поток вывода и стандартный поток ошибок вместе будут перенаправлены в файл, в терминале видны не будет. Новая информация будет записана в конец существующего файла.

command | tee output.txt

Стандартный поток вывода будет скопирован в файл, в терминале будет по-прежнему виден. Новая информация будет записана в конец существующего файла.

command | tee -a output.txt

Стандартный поток вывода будет скопирован в файл, в терминале будет по-прежнему виден.  Новая информация будет записана в конец существующего файла.

  • https://www.blogger.com/profile/10458800783714738778 Den Frost

    спасибо! весьма полезная статья как для начинающих так и для опытных пользователей! и с возвращением!

  • https://www.blogger.com/profile/02167753460206096609 barmental’

    Я тоже рад новостям и сообщениям. За статью спасибо!

  • https://www.blogger.com/profile/17653174355096530597 Did Mazay

    Спасибо за цикл статей посвященных терминалу