Терминал 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
Стандартный поток вывода будет скопирован в файл, в терминале будет по-прежнему виден.  Новая информация будет записана в конец существующего файла.


Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

3 коммент. :

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

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

    ОтветитьУдалить
  3. Спасибо за цикл статей посвященных терминалу

    ОтветитьУдалить