- Как сохранить вывод команды терминала (Bash) в текстовый файл
- Вариант 1: только перенаправляем вывод терминала в файл
- Вариант 2: перенаправляем вывод в файл и отображаем его на экране
- Как сохранить весь вывод терминала Linux в файл
- Как сохранить весь вывод терминала в файл
- Похожие записи:
- Как сохранить в файл вывод консоли (терминала) в Linux
- Описание
- Примеры
- Сохранение вывода команды из терминала Linux в файл
- Сохранение вывода команд в файл
- Добавление вывода в уже существующий файл
- Печать вывода на терминале и сохранение его в файл
- Похожие записи:
- Save all the terminal output to a file
- 4 Answers 4
Как сохранить вывод команды терминала (Bash) в текстовый файл
Когда вы работаете в терминале, весь вывод команд, естественно, вы видите в реальном времени прямо в окне терминала. Но бывают случаи когда вывод нужно сохранить, дабы поработать с ним позже (проанализировать его, сравнить, и т.п). Так вот, работая в Bash у вас есть возможность перенаправлять отображаемую информацию с окна терминала в текстовый файл. Рассмотрим как это делается.
Вариант 1: только перенаправляем вывод терминала в файл
В этом случае весь результат работы любой команды будет записан в текстовый файл, без отображения его на экране. То есть, мы в прямом смысле перенаправим информацию с экрана в файл. Для осуществления этого нужно использовать операторы > и >> и путь к файлу в который нужно писать, в конце выполняемой команды.
Оператор > сохранит результат работы команды в указанный файл и, если в нем уже будет находиться какая-либо информация, перезапишет ее.
Оператор >> перенаправит вывод команды в файл, и если в нем также будет находиться информация, новые данные будут добавлены в конец файла.
Рассмотрим на примере команды ls, которая отображает список файлов и папок в указанной директории. Давайте запишем результат ее работы в текстовый файл. Нам нужно написать команду, поставить оператор и указать путь к файлу:
Теперь посмотрим, все ли сработало. Для этого можно воспользоваться любым текстовым редактором, какой у вас есть. Также это можно сделать прямо в терминале при помощи команды cat:
Помните, что “>” перезапишет все данные, которые были до этого в файле, поэтому, если вам нужно дописать что-либо в файл используйте оператор “>>“
Допустим, что после того, как мы перенаправили вывод команды ls в файл “пример” мы решили узнать версию ядра системы и также сохранить вывод в тот же файл. Чтобы узнать версию ядра воспользуемся командой uname и параметром -a, затем говорим Bash как и куда нужно сохранить результат ее выполнения:
uname -a >> /home/ruslan/пример
Как видим, у нас сохранились результаты работы и ls, и uname.
Вариант 2: перенаправляем вывод в файл и отображаем его на экране
Не всем и не всегда удобно пользоваться операторами > и >>, так как все же лучше когда волнение команд можно наблюдать в реальном времени в окне терминала. В таком случае мы можем воспользоваться командой tee, которая и отобразит выполнение команд на экране, и сохранит его в файл. Синтаксис ее такой:
Этот вариант подобен оператору > из предыдущего пункта, то есть при записи в файл, все старые данные будут удалены. Если вам нужно дописать в файл, в конструкцию нужно добавить параметр -a:
команда | tee -a /путь/к/файлу
В Bash есть еще несколько операторов и команд, выполняющих идентичные задачи, их часто используют во время написания различных скриптов, но для обычного пользователя, которому нужно сохранить вывод команды чтобы запостить его на форуме, вполне достаточно и этих вариантов. Надеюсь, что помог вам, до новых постов!
Как сохранить весь вывод терминала Linux в файл
Иногда вам может понадобиться сохранить весь вывод терминала в файл. Это основное требование, но многие новички могут не знать, что большинство систем Linux уже предоставляют простой инструмент под названием ‘script’, который позволяет записывать все выходы терминала. В этой статье мы узнаем, как сохранить весь вывод терминала в файл.
Как сохранить весь вывод терминала в файл
Утилита сценария в основном сохраняет все, что выводится на терминал во время сессии сценария. Он поставляется предустановленным в большинстве систем Linux. Вы можете получить более подробную информацию о команде script с помощью man.
Вы можете начать сеанс работы со скриптом, введя команду script, а затем имя файла, в который вы хотите сохранить последующие выводы терминала. Вот пример запуска сеанса скрипта.
Все команды и их терминальные выводы после ввода вышеприведенной команды будут сохранены в файле out.txt. Если вы не укажете никакого имени файла после команды script, то все команды и их терминальные выводы будут сохранены в файле с именем typescript.
Теперь допустим, что после запуска сессии скрипта вы вводите следующую команду и получаете вывод, показанный ниже.
Чтобы выйти из сессии сценариев, введите команду exit.
Теперь, если вы просмотрите содержимое файла out.txt, вы увидите команду ls, а также ее вывод.
Как видите, сохраняются все команды и вывод терминала после вызова команды script, включая команду exit и ее вывод.
Команда script предлагает много полезных опций, таких как -q для тихого режима. В этом случае она не будет показывать никаких сообщений программы.
Вы можете использовать команду man script для получения более подробной информации о ней. script — это полезная команда для сохранения истории терминала.
Похожие записи:
Как сохранить в файл вывод консоли (терминала) в Linux
Очень часто при работе в терминале возникает необходимость в сохранении результата работы команд (или же какого-либо консольного приложения) в текстовый файл или проще говоря лог. В ОС Linux есть множество способов для реализации этой идеи и в этой статье мы рассмотрим некоторые из них.
Стандартный поток вывода данных (StdOut) — Это вся информация, которая выводится в результате исполнения команды, за исключением ошибок.
Стандартный поток вывода ошибок (StdErr) — Это информация об ошибке, если она была.
Описание
Стандартный поток вывода данных (StdOut) будет перенаправлен в файл и отображаться в терминале не будет. Если файл уже существует, то он будет перезаписан.
Стандартный поток вывода данных (StdOut) будет перенаправлен в файл и отображаться в терминале не будет. Если файл уже существует, то новые данные будут дописаны в конец файла.
Стандартный поток вывода ошибок (StdErr) будет перенаправлен в файл и отображаться в терминале не будет. Если файл уже существует, то он будет перезаписан.
Стандартный поток вывода ошибок (StdErr) будет перенаправлен в файл и отображаться в терминале не будет. Если файл уже существует, то новые данные будут дописаны в конец файла.
Стандартный поток вывода данных (StdOut) И Стандартный поток вывода ошибок (StdErr) будут перенаправлены в файл и отображаться в терминале не будут. Если файл уже существует, то он будет перезаписан.
Стандартный поток вывода данных (StdOut) И Стандартный поток вывода ошибок (StdErr) будут перенаправлены в файл и отображаться в терминале не будут. Если файл уже существует, то новые данные будут дописаны в конец файла.
Стандартный поток вывода данных (StdOut) будет перенаправлен в файл и одновременно будет отображен в терминале. Если файл уже существует, то он будет перезаписан.
команда | tee -a logfile.txt
Стандартный поток вывода данных (StdOut) будет перенаправлен в файл и одновременно будет отображен в терминале. Если файл уже существует, то новые данные будут дописаны в конец файла.
Примеры
Сохранение вывода команды из терминала Linux в файл
Мы все знаем, что выполнение команды в командной строке Linux приводит к выполнению команды и печати результатов в самом Терминале. Иногда этого немедленного вывода недостаточно, особенно если мы хотим сохранить вывод для последующего использования. К счастью, Linux bash и все операционные системы bash, если на то пошло, оснащены возможностью печати вывода команды в указанный файл.
Сохранение вывода команд в файл
Мы выполним несколько примеров, в которых вывод команд будет сохранен в указанном нами имени файла.
Если вы хотите сохранить вывод команды в новый файл или заменить содержимое уже существующего файла выводом команды, используйте следующий синтаксис:
[команда] > [/file/location/filename]
Например, я использую команду lscpu (которая отображает системную информацию) и затем выведу ее содержимое в файл с именем systeminf.txt. Этот файл еще не существует в моей системе.
lscpu > /home/user/systeminfo.txt
Когда я обращаюсь к этому файлу через файловый менеджер, он выглядит следующим образом:
Добавление вывода в уже существующий файл
Если вы хотите сохранить вывод команды Linux в файл, не изменяя его уже существующего содержимого, вы можете использовать следующий синтаксис:
[команда] >> [/file/location/filename]
Например, следующая команда добавит результат команды ls в конец уже существующего файла systeminformation.txt.
ls >> /home/user/systeminfo.txt
Следующий файл, который раньше содержал только информацию о моей системе, теперь также содержит результат моей команды ls:
Печать вывода на терминале и сохранение его в файл
Вы могли заметить, что команды, о которых мы говорили выше, только сохраняют вывод в файл, не печатая его на Терминале. Если вы хотите просмотреть вывод команды на Терминале, используйте следующий синтаксис:
[команда] | tee [/file/location/filename]
Например, текст, который мы хотим передать эхом на следующем рисунке, теперь будет передан эхом на Терминале, а также распечатан в файл myfile.txt.
echo "print text to file" | tee /home/user/myfile.txt
Если вы хотите добавить вывод команды в уже существующий файл. Пожалуйста, следуйте следующему синтаксису:
[команда] | tee -a [/file/location/filename].
Например, на следующем рисунке показано, как будет выведено еще несколько текстов, а затем добавлено в уже существующий файл:
echo "some more text" | tee -a /home/sana/myfile.txt
Используйте pipe для сохранения вывода команды в файл.
Похожие записи:
Save all the terminal output to a file
Many GUI terminal emulators allow to save the scroll buffer, but this is not accessible to commands (leaving aside xdotool and this sort of black art).
4 Answers 4
You can use script . It will basically save everything printed on the terminal in that script session.
script makes a typescript of everything printed on your terminal. It is useful for students who need a hardcopy record of an interactive session as proof of an assignment, as the typescript file can be printed out later with lpr(1).
You can start a script session by just typing script in the terminal, all the subsequent commands and their outputs will all be saved in a file named typescript in the current directory. You can save the result to a different file too by just starting script like:
To logout of the script session (stop saving the contents), just type exit .
$ script output.txt Script started, file is output.txt $ ls output.txt testfile.txt foo.txt $ exit exit Script done, file is output.txt
$ cat output.txt Script started on Mon 20 Apr 2015 08:00:14 AM BDT $ ls output.txt testfile.txt foo.txt $ exit exit Script done on Mon 20 Apr 2015 08:00:21 AM BDT
script also has many options e.g. running quietly -q ( —quiet ) without showing/saving program messages, it can also run a specific command -c ( —command ) rather than a session, it also has many other options. Check man script to get more ideas.
Can it be invoked after the fact? (i.e. At the end of a session) Or does it have to be invoked before the content you want logged?
To export it retroactively, try Terminal menu -> Shell -> Export text as, like here: mactricksandtips.com/2013/04/save-terminals-text-output.html
@Magne you should note in your comment that it is specific to the terminal utility in Mac. gnome-terminal, for one, does not have that menu, so we should assume that other linux terminal windows won’t have it either.
I too faced the same problem and after some search came up with this solution:
Add to your .bash_aliases this:
# Execute "script" command just once smart_script() < # if there's no SCRIPT_LOG_FILE exported yet if [ -z "$SCRIPT_LOG_FILE" ]; then # make folder paths logdirparent=~/Terminal_typescripts logdirraw=raw/$(date +%F) logdir=$logdirparent/$logdirraw logfile=$logdir/$(date +%F_%T).$$.rawlog # if no folder exist - make one if [ ! -d $logdir ]; then mkdir -p $logdir fi export SCRIPT_LOG_FILE=$logfile export SCRIPT_LOG_PARENT_FOLDER=$logdirparent # quiet output if no args are passed if [ ! -z "$1" ]; then script -f $logfile else script -f -q $logfile fi exit fi ># Start logging into new file alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v' # Manually saves current log file: $ savelog logname savelog() < # make folder path manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual # if no folder exists - make one if [ ! -d $manualdir ]; then mkdir -p $manualdir fi # make log name logname=$logname=$ # add user logname if passed as argument if [ ! -z $1 ]; then logname=$logname'_'$1 fi # make filepaths txtfile=$manualdir/$logname'.txt' rawfile=$manualdir/$logname'.rawlog' # make .rawlog readable and save it to .txt file cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile # copy corresponding .rawfile cp $SCRIPT_LOG_FILE $rawfile printf 'Saved logs:\n '$txtfile'\n '$rawfile'\n' >
And to the end of your .bashrc file add this:
After you’ve done this, «script» command will be executed once in every terminal session, logging everything to ~/Terminal_typescripts/raw .
If you want, you can save current session log after the fact (in the end of the session) by typing savelog or savelog logname – this will copy current raw log to ~/Terminal_typescripts/manual and also create readable .txt log in this folder. (If you forget to do so, raw log files will still be in their folder; you’ll just have to find them.) Also you may start recording to a new log file by typing startnewlog .
There will be a lot of junk log files, but you can clean old ones from time to time, so it’s not a big problem.