Вывод команды в файл linux

Обновлено: 21.11.2024

Когда вы запускаете команду или сценарий в терминале Linux, вывод выводится на экран для немедленного просмотра.

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

Способ 1. Используйте перенаправление для сохранения вывода команды в файл в Linux

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

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

Используйте оператор перенаправления STDOUT > для перенаправления вывода в файл следующим образом:

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

Пример ниже демонстрирует это лучше. Сначала он сохраняет вывод команды ls -l. А позже он заменяет содержимое файла выводом команды ls *.c.

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

Этот пример демонстрирует это лучше:

Даже здесь, если файл не существует, он создается автоматически.

Дополнительный совет: сохраните выходные данные команды Linux, а также ошибку в файл

Если ваша команда Linux возвращает ошибку, она не сохраняется в файле. Вы можете сохранить вывод команды и ошибку команды в одном файле, используя 2>&1 следующим образом:

команда > файл.txt 2>&1

В основном 0 означает стандартный ввод, 1 — стандартный вывод и 2 — стандартную ошибку. Здесь вы перенаправляете (>) стандартную ошибку (2) на тот же адрес (&), что и стандартный вывод (1).

Метод 2: используйте команду tee для отображения вывода и сохранения его в файл

Кстати, вы заметили, что когда вы отправляете вывод команды в файл, вы больше не видите его на дисплее? Команда tee в Linux решает эту проблему за вас.

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

Опять же, файл будет создан автоматически, если он еще не существует.

Вы также можете использовать команду tee в режиме добавления с опцией -a следующим образом:

Позвольте мне продемонстрировать это на нескольких простых примерах:

В своих примерах я использовал простые команды Linux. Но будьте уверены, вы можете использовать эти методы и для сохранения вывода скриптов bash.

Примечание. Избегайте ловушек конвейера при сохранении вывода команды в файл

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

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

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

Есть ли способ без использования какого-либо программного обеспечения? Я хотел бы знать, как это сделать.

10 ответов 10

Да, это возможно, просто перенаправьте вывод (AKA stdout ) в файл:

Или, если вы хотите добавить данные:

Если вы хотите использовать stderr, используйте это:

или это добавить:

если вы хотите, чтобы и stderr, и вывод отображались на консоли и в файле, используйте это:

(Если вам нужен только вывод, отбросьте 2 выше)

Обратите внимание, что someCommand 2> someFile.txt и someCommand 2>> someFile.txt также перенаправляют stterr в someFile.txt

Я пытаюсь сделать это с помощью команды gcc, но это не работает. Он работает с другими командами, но не с этой. Он просто создает выходной файл, в котором ничего нет.

@Nik-Lz Часто это происходит из-за того, что команда отправляет все свои выходные данные на стандартный вывод. Если gcc генерирует сообщения об ошибках, это кажется вероятным. См. комментарий Slothworks о том, как захватить stderr вместо stdout.

Для записи вывода команды в файл существует 10 наиболее часто используемых способов.

Обзор:

Обратите внимание, что нет. в колонке синтаксиса означает "не существует".
Существует способ, но он слишком сложен, чтобы поместиться в колонку. Вы можете найти полезную ссылку об этом в разделе «Список».

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

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

команда 2> output.txt

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

команда 2>> output.txt

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

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

И стандартный вывод, и стандартный поток ошибок будут перенаправлены только в файл, в терминале ничего не будет видно. Если файл уже существует, новые данные будут добавлены в конец файла..

команда | файл output.txt

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

команда | тройник -a output.txt

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

Bash не имеет сокращенного синтаксиса, позволяющего передавать только StdErr во вторую команду, которая здесь потребуется в сочетании с tee снова для завершения таблицы. Если вам действительно нужно что-то подобное, посмотрите «Как передать stderr, а не stdout?» о переполнении стека, чтобы узнать, как это можно сделать, например. путем замены потоков или использования подстановки процессов.

команда |& tee output.txt

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

команда |& tee -a output.txt

Как стандартный вывод, так и стандартные потоки ошибок будут скопированы в файл, оставаясь при этом видимыми в терминале. Если файл уже существует, новые данные будут добавлены в конец файла.

Крис Хоффман

Крис Хоффман
Главный редактор

Крис Хоффман – главный редактор How-To Geek. Он писал о технологиях более десяти лет и два года был обозревателем PCWorld. Крис писал для The New York Times, давал интервью в качестве эксперта по технологиям на телевизионных станциях, таких как NBC 6 в Майами, и освещал свою работу в таких новостных агентствах, как BBC. С 2011 года Крис написал более 2000 статей, которые были прочитаны почти миллиард раз — и это только здесь, в How-To Geek. Подробнее.

Когда вы запускаете команду в командной строке bash, она обычно выводит вывод этой команды прямо на терминал, чтобы вы могли сразу его прочитать. Но bash также позволяет вам «перенаправлять» вывод любой команды, сохраняя его в текстовый файл, чтобы вы могли просмотреть вывод позже.

Это работает в bash в любой операционной системе, от Linux и macOS до среды bash на основе Ubuntu в Windows 10.

Первый вариант: перенаправить вывод только в файл

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

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

Технически это перенаправляет «stdout» — стандартный вывод, то есть экран, — в файл.

Вот простой пример. Команда ls выводит список файлов и папок в текущем каталоге. Так. когда вы запустите следующую команду, ls выведет список файлов и папок в текущем каталоге. Но он не выведет их на экран — он сохранит их в указанный вами файл.

Вам не нужно указывать путь к существующему файлу. Укажите любой допустимый путь, и bash создаст файл в этом месте.

Если вы просмотрите содержимое файла, вы увидите вывод команды ls. Например, команда cat выводит содержимое файла на терминал:

Помните, что оператор > заменяет существующее содержимое файла выводом команды. Если вы хотите сохранить вывод нескольких команд в один файл, вместо этого используйте оператор >>. Например, следующая команда добавит системную информацию к указанному вами файлу:

Если файл еще не существует, bash создаст его. В противном случае bash оставит существующее содержимое файла в покое и добавит вывод в конец файла.

Когда вы просмотрите содержимое файла, вы увидите, что результаты вашей второй команды были добавлены в конец файла:

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

Вариант второй: распечатать вывод в обычном режиме и перенаправить его в файл

Возможно, вам не понравится перенаправление вывода с помощью операторов > или >>, так как вы не увидите вывод команды в терминале. Вот для чего нужна команда tee. Команда tee выводит полученные данные на экран и одновременно сохраняет их в файл.

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

Это заменит все в файле выводом команды, как и оператор >.

Чтобы направить вывод команды в tee , вывести его на экран и сохранить в файл, но добавить в конец файла:

Это добавит вывод в конец файла, как оператор >>.

Оболочка bash включает несколько дополнительных расширенных операторов, выполняющих аналогичные функции. Они будут особенно полезны, если вы пишете bash-скрипты. Дополнительную информацию см. в главе «Перенаправление ввода-вывода» в Advanced Bash-Scripting Guide.

  • › Командные строки: почему люди до сих пор беспокоятся о них?
  • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
  • › Что означает XD и как вы его используете?
  • › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
  • › Как восстановить метки панели задач в Windows 11
  • › Как установить Google Play Маркет в Windows 11
  • › Почему прозрачные чехлы для телефонов желтеют?

Команды, упомянутые в этой статье, были выполнены в системе Ubuntu 18.04 LTS.

Сохранение вывода команды в файл

Мы запустим несколько примеров, в которых выходные данные команд будут сохранены в указанном нами имени файла.

Создать новый файл/Заменить существующий файл

Если вы хотите сохранить вывод команды в новый файл или заменить содержимое уже существующего файла выводом команды, используйте следующий синтаксис:

Например, я воспользуюсь командой lscpu (которая отображает информацию о системе), а затем распечатаю ее содержимое в файл с именем systeminformation.txt. Этот файл еще не существует в моей системе.

Когда я получаю доступ к этому файлу через файловый менеджер, он выглядит так:

Добавить вывод к существующему файлу

Если вы хотите сохранить вывод команды Linux в файл, не затрагивая его уже существующее содержимое, вы можете использовать следующий синтаксис:

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

Следующий файл, который когда-то содержал только мою системную информацию, теперь также содержит вывод моей команды ls:

Распечатка вывода на терминале и сохранение в файл

Возможно, вы заметили, что упомянутые выше команды только сохраняют вывод в файл, не печатая их на самом Терминале. Используйте следующий синтаксис, если вы хотите также просмотреть вывод команды в Терминале:

Например, текст, который мы хотим отобразить на следующем изображении, теперь будет отображаться в Терминале, а также печататься в файл myfile.txt.

Это содержимое файла, созданного с помощью команды:

Если вы хотите добавить вывод команды в уже существующий файл. Пожалуйста, следуйте этому синтаксису:

Например, на следующем изображении показано, как будет отображен еще один текст, а затем добавлен в мой уже существующий файл:

Вот как сейчас выглядит файл:

Эти ориентированные на вывод текстовые файлы, которые мы создали в этой статье, в некоторых случаях могут быть гораздо полезнее, чем обычная печать вывода на терминале. Вот насколько мощен Ubuntu bash!

Похожие сообщения:

Карим Буздар

Об авторе: Карим Буздар имеет степень инженера в области телекоммуникаций и несколько сертификатов системного администратора. Как ИТ-инженер и технический автор, он пишет для различных веб-сайтов. Вы можете связаться с Каримом в LinkedIn

Поиск

Об этом сайте

Последние руководства

сообщить об этом объявлении

Читайте также: