Какая из нижеуказанных команд выведет файл на экран в обратном порядке

Обновлено: 07.07.2024

Немного обо всем и все о немногом, или практический опыт системного администратора.

Июль 2010
Пн Вт Ср Чт Пт Сб Вс
« Июнь Авг »
1234
567891011
12131415161718
19202122232425
262728293031

Команда tee - вывод stdin на экран и в файл

Calendar

5 июля 2010, 18:06

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


то мы вывод команды ping сохраним в файл ping.txt, но не будем видеть что команда выводит на экране монитора.

И вот на курсах Linux на одной лекции преподаватель показал как сделать такую вещь. В конспект я записал, но впоследствии забыл в какой теме, потом лень было искать, а сегодня наконец решил все таки найти эту запись. И нашел.

Так вот для того чтобы одновременно выводить stdout на экран и записывать его в файл можно воспользоваться командой tee. Команда tee свой входящий поток (stdin), выводит на экран монитора (в стандартный stdout) и параллельно записывает в указанный файл.

Записав такую конструкцию видим на экране вывод команды ping, и в это же время все что выводит ping записывается с помощью tee в файл pingigorka.txt.

1. Работа с файлами в Линукс является одним из базовых навыков. На этом занятии мы с вами узнаем способы вывода информации на экран из файлов. Оговорюсь сразу – сейчас я подразумеваю только обычные ( регулярные) файлы .

Информация внутри них может содержаться в 2 видах – текстовом ASCII или бинарном. Для каждого из этих типов информации существуют программы, способные ее выводить на экран.

Для текстовых файлов наиболее часто используются команды cat, tac , more, less, head и tail .

Рассмотрим их поподробнее:

cat filename – команда используется для вывода текстовой информации из файла на экран. Например:

Команда cat имеет несколько параметров. Опишем наиболее используемые из них:

-b (--number-nonblank) – пронумеровать все непустые строки;

-n (--number) – пронумеровать все строки;

-s (-- squeeze -blank) – отобразить несколько подряд идущих пустых строк в виде одной пустой строки;

-T (--show-tabs) – показать символы табуляции, отобразив их как "^|";

-E (--show-ends) – показать символы конца строки как $ .

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

tac filename – эта команда используется для вывода на экран информации из файла в обратном порядке.

По умолчанию разделителем записей для этой команды является символ конца строки ( \n ). Но такое положение дел можно изменить, используя параметр

more filename – эта команда позволяет просматривать длинные файлы по частям. Так например:

Команда more использует для прокрутки две клавиши – пробел (показать следующий экран) и Enter (показать следующую строку). Но у more есть один недостаток – она способна прокручивать текст только вперед. То есть если вы уже смотрите второй экран, то к первому никак вернуться будет нельзя. Эту проблему с легкостью решает команда less .

less filename – позволяет просматривать файлы любой длины, прокручивая их в любую сторону. Например:

Команда less понимает следующие комбинации клавиш:

Enter (стрелка вниз) – перейти на одну строку вниз;

Пробел (Page Down) – перейти на страницу вниз по тексту;

Page Up – перейти на страницу вверх по тексту;

стрелка вверх – перейти на строку вверх по тексту;

Home – перейти к началу текста;

End – перейти к концу текста;

q – выйти из программы less .

Но если нам не нужно отображать весь файл а только необходимо убедиться что это именно то, что мы ищем, то нам помогут команды head и tail .

head filename1 [filename2 . ] – по умолчанию выводит 10 первых строк файла. Команде head можно задавать параметры, вот самые используемые из них:

-n lines – вывести не 10, а lines строк от начала файла;

-c bytes – -вывести bytes байт с начала файла;

- q – не печатать заголовки файлов перед выводом (при выводе нескольких файлов сразу).

tail filename – по умолчанию выводит 10 последних строк файла. Вот наиболее используемые ее параметры:

-n lines – вывести не 10, а lines последних строк;

-c bytes – вывести bytes последних байт файла;

-f – войти в постоянный цикл по считыванию конца файла. Таким образом при поступлении в файл новой информации пользователь может вести мониторинг ее в реальном времени. Выход из этого режима осуществляется комбинацией клавиш <Ctrl>+<C> .

Вернемся к началу нашего занятия и вспомним что есть еще и второй тип содержимого файлов – бинарные данные. Для просмотра такого типа файлов нам не подойдут команды типа more или cat :


Но вот команда od предназначена как раз для просмотра файлов такого типа.

od filename – просматривать бинарные файлы в виде дампа байтов. Наиболее популярные параметры команды od :

-A radix – указать систему счисления, в которой будут указываться адреса. Параметр radix может принимать следующие значения:

d – десятичная, o – восьмеричная ( по умолчанию),

x – шестнадцатиричная, n – не выводить адресов.

-t radix – указать систему счисления, в которой будут указываться данные. Параметр -t radix может принимать следующие значения: d – десятичная, o – восьмеричная ( по умолчанию), x – шестнадцатиричная, n – не выводить адресов.

-j bytes – пропустить bytes байт от начала файла.

-v – включить вывод последовательных одинаковых строк. По умолчанию такой вывод отключён.

od выводит только первую строку из множества , а вместо остальных – символ "*" .

2. Если вам понадобилось в Линукс получить справку по какой либо команде, то стоит воспользоваться справочной системой man . В Линукс при выводе справки man ведет себя аналогично less .

man поддерживает несколько параметров. Наиболее часто используются следующие:

-k keyword – показывает все страницы руководства, на которых встречается слово keyword;

<число> - указывает брать руководство из раздела с номером <число>

Имеются следующие разделы man :

Подробное руководство по команде man можно получить используя команду man man .

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

В работе с командной строкой Linux есть понятия стандартных устройств ввода, вывода и вывода ошибок.

stdin – стандартное устройство ввода. Имеет файловый указатель №0. Автоматически открывается всеми процессами.

stdout – стандартное устройство вывода. Имеет файловый указатель №1. Автоматически открывается всеми процессами.

По умолчанию практически все команды Linux используют для ввода информации stdin , а для вывода stdout и stderr ,если их параметрами не указано обратное.

Операторы перенаправления способны изменять направление вывода и ввода информации. Так оператор:

> - перенаправляет стандартный поток в файл (другой поток ). При этом если файл существует, то он перезаписывается, если не существует – создается.

>> - перенаправляет стандартный поток в файл . При этом если файл существует, то информация добавляется в конец, если не существует – файл создается.

< - перенаправляет содержимое указанного файла на стандартный ввод программы.

>& - перенаправляет стандартные потоки вывода и ошибок друг в друга.

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

Организацией канала занимается shell . Для управления каналом существует оператор | . Приведу пример:

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

  • Команда cat прочитала файл lesson7_1.txt и передала его содержание на стандартный ввод команды tail
  • Команда tail исходя из заданных ей параметров взяла 3 последние строки стандартного потока ввода и передала их на стандартный ввод команде less
  • Команда less вывела информацию со стандартного ввода на экран и стала ожидать действий пользователя.

Таким образом одна команда передавала по каналу информацию другой команде.

4. Иногда необходимо вывести информацию, содержание которой вы знаете, а вот расположение – нет. Именно для таких случаев существуют регулярные выражения. Перечислю наиболее используемые из них, хотя оговорюсь сразу, что на самом деле регулярных выражений намного больше.

Регулярное выражение – средство указания шаблона для поиска его в тексте.

[] - любой символ из заключённых в скобки. Поддерживает диапазоны, 3 – цифры, [a-zA-Z] -все буквы латинского алфавита

[^] - любой символ за исключением заключенных в скобки

\ - отменяет действие любого метасимвола. Например

\$ - обозначает символ $ , а не \ в конце строки, а \\$ - символ \ в конце строки

.- любой один символ.

* - 0 или более раз в тексте встречается предыдущий шаблон . Так например выражение .* означает любой набор символов.

Регулярные выражения поддерживаются практически всеми текстовыми редакторами Linux. Существует также программа фильтрации текста grep . Она также использует регулярные выражения. Её мы с Вами и рассмотрим.

grep regexp file – утилита фильтрации текста. Ищет в файле file строки, в которых встречается выражение , соответствующее шаблону regexp и выводит их на стандартный вывод .

Как правило, утилиту grep используют не только для фильтрации текстовых файлов, но и, например, для фильтрации вывода каких-либо команд.

В примере ниже мы с вами попытаемся найти все файлы, начинающиеся на букву f в каталогe bin :

Подробнее о команде grep можно узнать из страницы справочного руководства man (man grep) .

5. Как известно, при работе в любой операционной системе часто возникает необходимость создавать резервные копии важной информации. Для такой работы необходимы программы-архиваторы и программы сжатия.

В комплект поставки ОС Linux входят как правило сразу несколько программ архивирования и/или сжатия. Но стандартом de facto для unix-like ОС стали архиватор tar и программа сжатия gzip ( GNU zip ).

tar (GNU tar – GNU tape archiver ) – программа для создания архивов. Современный tar поддерживает сжатие, но для обеспечения совместимости с более ранними версиями Linux и Unix советуется использовать несжатый архив tar , либо сжимать его после создания одной из утилит сжатия.

tar имеет множество параметров и опций. Мы с вами рассмотрим наиболее употребительные из них:

-c – создать архив

-r – добавить файлы в архив

-A – добавить содержимое tar-файлов в архив

--delete – удалить файлы из архива (невозможно использование на архивных лентах)

$ programma 2>> programma.errors [Enter]

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

Как работает перенаправление ввода вывода

Все команды, которые мы выполняем, возвращают нам три вида данных:

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

top -bn 5 > top.log

Linux вывод ошибок в файл

Linux вывод ошибок в файл

top -bn 5 >> top.log

По умолчанию для перенаправления используется дескриптор файла стандартного вывода. Но вы можете указать это явно. Эта команда даст тот же результат:

top -bn 5 1>top.log

Linux вывод ошибок в файл

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Linux вывод ошибок в файл

Чтобы добавить данные в конец файла используйте тот же символ:

ls -l /root/ 2>>ls-error.log

Linux вывод ошибок в файл

ls -l /root/ >ls-error.log 2>&1

Linux вывод ошибок в файл

Сначала будет отправлен вывод команды ls в файл ls-error.log c помощью первого символа перенаправления. Дальше в тот же самый файл будут направлены все ошибки. Второй метод проще:

ls -l /root/ &> ls-error.log

Также можно использовать добавление вместо перезаписи:

ls -l /root/ &>> ls-error.log

Стандартный ввод из файла

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

Linux вывод ошибок в файл

Linux вывод ошибок в файл

Таким образом, мы в одной команде перенаправляем ввод вывод linux.

Использование тоннелей

Можно работать не только с файлами, но и перенаправлять вывод одной команды в качестве ввода другой. Это очень полезно для выполнения сложных операций. Например, выведем пять недавно измененных файлов:

ls -lt | head -n 5

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

echo test/ tmp/ | xargs -n 1 cp -v testfile.sh

Linux вывод ошибок в файл

echo "Тест работы tee" | tee file1

Linux вывод ошибок в файл

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

Выводы

Linux вывод ошибок в файл

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

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

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

Стандартный вывод и стандартная ошибка отображаются на дисплее терминала пользователя в виде текста.

Ввод и вывод распределяется между тремя стандартными потоками:

Потоки также пронумерованы:

Из стандартного ввода команда может только считывать данные, а два других потока могут использоваться только для записи. Данные выводятся на экран и считываются с клавиатуры, так как стандартные потоки по умолчанию ассоциированы с терминалом пользователя. Потоки можно подключать к чему угодно: к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением:

Стандартный ввод

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

EOF вводится нажатием сочетания клавиш Ctrl+D.

Рассмотрим работу со стандартным выводом на примере команды cat (от CONCATENATE, в переводе “связать” или “объединить что-то”).

Cat обычно используется для объединения содержимого двух файлов.

Cat отправляет полученные входные данные на дисплей терминала в качестве стандартного вывода и останавливается после того как получает EOF.

Пример

Введите команду cat без аргументов:

В открывшейся строке введите, например, “1” и нажмите клавишу Enter. На дисплей выводится “1”. Введите “a” и нажмите клавишу Enter. На дисплей выводится “a”.

Дисплей терминала выглядит следующим образом:

Для завершения ввода данных следует нажать сочетание клавиш Ctrl + D.

Стандартный вывод

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

При использовании без каких-либо дополнительных опций, команда echo выводит на экран любой аргумент, который передается ему в командной строке:

Аргументом является то, что получено программой, в результате на дисплей терминала будет выведено:

При выполнении echo без каких-либо аргументов, возвращается пустая строка.

Пример

Команда объединяет три файла: file1, file2 и file3 в один файл bigfile:

Команда cat по очереди выводит содержимое файлов, перечисленных в качестве параметров на стандартный поток вывода. Стандартный поток вывода перенаправлен в файл bigfile.

Стандартная ошибка

Стандартная ошибка записывает ошибки, возникающие в ходе исполнения программы. Как и в случае стандартного вывода, по умолчанию этот поток выводится на терминал дисплея.

Пример

Рассмотрим пример стандартной ошибки с помощью команды ls, которая выводит список содержимого каталогов.

При запуске без аргументов ls выводит содержимое в пределах текущего каталога.

Введем команду ls с каталогом % в качестве аргумента:

В результате должно выводиться содержимое соответствующей папки. Но так как каталога % не существует, на дисплей терминала будет выведен следующий текст стандартной ошибки:

Linux включает в себя команды перенаправления для каждого потока.

Пример

В приведенном примере команда cat используется для записи в файл file1, который создается в результате цикла:

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

Если файла file1 не существует, то в текущем каталоге создается новый файл с таким именем.

Для просмотра содержимого файла file1 введите команду:

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

Для перезаписи содержимого файла введите следующее:

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

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

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

Для добавления нового текста к уже существующему в файле с помощью двойных скобок >> выполните команду:

Для завершения цикла нажмите сочетание клавиш Ctrl + D.

Откройте file1 снова и в результате на дисплее монитора должно быть отражено следующее:

Каналы

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

Пример

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

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

Пример

Для сохранения имен файлов, содержащих строку «LOG», используется следующая команда:

Вывод команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле loglist в виде списка (например, Config.log, Logdat.svd и Mylog.bat).

При использовании нескольких фильтров в одной команде рекомендуется разделять их с помощью знака канала |.

Фильтры

Фильтры представляют собой стандартные команды Linux, которые могут быть использованы без каналов:

Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):

Если в качестве аргумента передаётся файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).

Пример

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

Пример

Допускается перенаправление нескольких потоков в один файл:

Для просмотра содержимого файла file3 введите команду cat:

В результате на дисплее терминала отобразиться следующее:

Мы рассмотрели возможности работы с перенаправлениями потоков >, >> и |, использование которых позволяет лучше работать с bash скриптами.

Операции сравнения бывают следующие:


Думаю, интуитивно понятно, что обозначает каждая из операций.
Читается, например, так:

Обращаю ваше внимание, что перечисленные три примера логических
выражений принимают значение Истина, так как все они верны.

СЛОЖНЫЕ ЛОГИЧЕСКИЕ ВЫРАЖЕНИЯ В ЯЗЫКЕ 1С

В пятом юните мы познакомились с логическим типом данных, который может принимать одно из двух значений Истина или Ложь. Также мы узнали о существовании простейших логических выражений. Они состоят из двух данных (число, строка или дата) и операции сравнения между ними. Результатом логического выражения является Истина или Ложь.

Из простых логических выражений можно составлять сложные логические выражения.

Для этого существуют специальные логические операции: И, Или, Не.

Правила работы логической операции И

А (левая часть) Б (правая часть) АИБ Пример
Истина Истина Истина (2 < 3) И (10= 10)
Истина Ложь Ложь (2< 3) И (10 О 10)
Ложь Истина Ложь (10 <> 10) И (2 < 3)
Ложь Ложь Ложь (1 = 2) И (3 = 5)

Таким образом, логическое выражение, составленное при помощи операции И, верно тогда и только тогда, когда верны оба выражения, стоящие слева и справа от этой операции.

Для лучшего понимания представьте, что значение Истина это 1, Ложь это 0, а логическая операция И это умножение:

В пятом юните мы познакомились с логическим типом данных, который может принимать одно из двух значений Истина или Ложь. Также мы узнали о существовании простейших логических выражений. Они состоят из двух данных (число, строка или дата) и операции сравнения между ними. Результатом логического выражения является Истина или Ложь.

Из простых логических выражений можно составлять сложные логические выражения.

Для этого существуют специальные логические операции: И, Или, Не.

Правила работы логической операции И

А (левая часть) Б (правая часть) АИБ Пример
Истина Истина Истина (2 < 3) И (10= 10)
Истина Ложь Ложь (2< 3) И (10 О 10)
Ложь Истина Ложь (10 <> 10) И (2 < 3)
Ложь Ложь Ложь (1 = 2) И (3 = 5)

Таким образом, логическое выражение, составленное при помощи операции И, верно тогда и только тогда, когда верны оба выражения, стоящие слева и справа от этой операции.

Для лучшего понимания представьте, что значение Истина это 1, Ложь это 0, а логическая операция И это умножение:

5. (10 <> 5) Или (5 = 5)

10 0 5, это Истина 5 = 5, это Истина

значит (10 <> 5) Или (5 = 5) равнозначно (Истина) Или (Истина)

6. (Истина) Или (Ложь)

Выражение уже упрощено.

Выражение уже упрощено.

8. (Ложь) И (Истина)

Выражение уже упрощено.

9. (Ложь) Или (Истина)

Выражение уже упрощено.

Задание №3. Вычислите все примеры логических выражений из предыдущего задания на компьютере.

Сообщить(( 1 = 1) И (2 = 2)); // Да Сообщить(Не (10 > 5)); // Нет

Сообщить((10 <> 5) Или (5 = 5)); //Да Сообщить((Истина) Или (Ложь)); //Да Сообщить(Не (Истина)); // Нет Сообщить((Ложь) И (Истина)); // Нет Сообщить((Ложь) Или (Истина)); //Да

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