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

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

Комментирование приветствуется.

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

  1. Терминал Linux. Команды навигации в терминале.
  2. Терминал Linux. Создание, удаление, копирование, перемещение, переименование файлов и директорий.
  3. Терминал Linux. Как сохранить в файл вывод терминала.
  4. Терминал Linux. Команды поиска файлов и директорий.
  5. Терминал Linux. Команды просмотра текстовых файлов.
  6. Терминал Linux. Права доступа к каталогам и файлам в Linux, команды chmod и chown.

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

apt list --upgradable

Намного удобнее перенаправить вывод данной команды в текстовый файл и уже просмотреть его с помощью удобного текстового редактора.

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

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

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

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

Стандартные_потоки

Если по существу, то в Linux есть 3 стандартных потока:

  • stdin - поток номер 0, стандартный поток ввода.
  • stdout - поток номер 1, стандартный поток вывода.
  • stderr - поток номер 2, стандартный поток ошибок, диагностических и отладочных сообщений.

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

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

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

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

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

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

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

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

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

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

apt list --upgradable > output.txt

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

Если указать одинарный символ ">", то файл будет постоянно перезаписываться при повторном выполнении команды.

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

apt list --upgradable >> output.txt

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

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

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

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

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

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

command > output.txt

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

command >> output.txt

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

command 2> output.txt

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

command 2>> output.txt

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

command &> output.txt

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

command &>> output.txt

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

command | tee output.txt

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

command | tee -a output.txt

Как вывести полную информацию о компьютере и сохранить эту информацию в html, pdf.

В Linux есть команда, которая выводит всю информацию о компьютере в терминал lshw (от англ. list hardware).
Её нужно запускать с правами суперпользователя sudo:

sudo lshw

Но не совсем удобно читать эту информацию в терминале.

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

sudo lshw -html > system_info.html

В текущем каталоге создастся html файл, который можно открыть любым, установленным у вас в системе, браузером:

И теперь, если мы хотим сохранить в pdf эту информацию, то выбираем печать (CTRL-P), формат pdf и нажимаем "Печать".

  • https://plus.google.com/118166993767960656676 Did Mazay

    отлично, довольно просто о командах, ждем продолжения

  • https://plus.google.com/118324711792472731855 Олег Ехлаков

    Под название статьи подходит неупомянутая утилита script, которая как раз записывает весь вывод консоли (даже от нескольких команд) в файл. Вот в документации — http://man7.org/linux/man-pages/man1/script.1.html А вот на русском нашлось — http://pingvinus.ru/note/terminal-script-command

  • https://plus.google.com/117106744351354168234 neyjos jos

    good.

  • https://ok.ru/profile/556413203584 Валерий Денисов

    В обоих способах 7 и 8 запись в конец файла?

    • Edward Kobylyanets

      Спасибо, что нашли недочет. Исправил в тексте статьи.