[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]

Руководство пользователя: Операционная система и устройства


Стандартные устройства ввода, вывода и сообщений об ошибках

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

Дескриптор файла 0 Стандартный ввод
Дескриптор файла 1 Стандартный вывод
Дескриптор файла 2 Стандартный файл для сообщений об ошибках (диагностических сообщений)

Дочерний процесс обычно наследует эти файлы от родительского процесса. Первоначально эти три файла связываются с рабочей станцией (0 - с клавиатурой, 1 и 2 с дисплеем). Перед выполнением команды из командной оболочки стандартные потоки ввода/вывода можно перенаправить.

Если в команде не задано имя файла, то стандартный ввод связывается с клавиатурой (иногда он обозначается stdin). После выполнения команды результат ее работы выводится в окно терминала.

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

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

Значения по умолчанию для стандартного ввода и вывода могут быть переопределены. Входные данные могут быть получены из файла, а вывод команды также может быть записан в файл. Это называется перенаправлением ввода/вывода и представляет собой одно из наиболее мощных средств операционной системы UNIX.

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

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


Перенаправление стандартного вывода

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

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

Вывод любой команды может быть направлен не в окно терминала, а в файл.


Перенаправление вывода в файл

Например, для того чтобы записать вывод команды who в файл с именем users, введите:

who > users

Нажмите Enter.

Примечание: Содержимое файла users будет заменено, если он уже существует, а во встроенной команде set ksh оболочки Korn или csh оболочки C не задана опция noclobber.

Для просмотра содержимого файла users введите:

cat users

Нажмите Enter.

Появится приблизительно следующий список:

denise    lft/0 13 мая 08:05
marta     pts/1 13 мая 08:10
endrica   pts/2 13 мая 09:33

Например, для того чтобы записать список файлов текущего каталога в файл, введите:

ls > dirlist

Нажмите Enter.


Перенаправление и добавление вывода в файл

Когда в конце команды задается конструкция > > имя_файла, вывод команды добавляется к указанному файлу, и при этом содержимое файла не переписывается. Символ >> называется оператором перенаправления с добавлением.

Например, для того чтобы добавить содержимое файла file2 к файлу file1, введите:

cat file2 > > file1

Нажмите Enter.

Примечание: Файл file1 будет создан, если он не существует, а во встроенной команде set ksh оболочки Korn или csh оболочки C не задана опция noclobber.

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

Команда cat без параметров получает в качестве входных данных ввод с клавиатуры. Вы можете записать полученный ввод в файл. Введите в новой строке Ctrl-D, чтобы обозначить конец текста.

Введите в командной строке:

cat > имя_файла
Это тест.
^D

Конкатенация текстовых файлов

Конкатенацией называется объединение нескольких файлов в один.

Например, введите в командной строке:

cat file1 file2 file3 >  file4

Нажмите Enter.

В результате будет создан файл file4, содержащий данные из файлов file1, file2 и file3, записанные в указанном порядке.

В следующем примере демонстрируется типичная ошибка при конкатенации файлов:

cat file1 file2 file3 > file1

Внимание: Многие ожидают, что команда cat добавит содержимое файлов file1, file2 и file3 к файлу file1. Однако команда cat вначале создает файл вывода, в результате чего содержимое файла file1 будет удалено, а затем добавляет содержимое файлов file2 и file3.

Перенаправление стандартного ввода

Если в конец команды добавляется запись < имя_файла, то входные данные команды считываются из указанного файла. Символ < - это оператор перенаправления ввода.

Примечание: Операция перенаправления ввода применима только для тех команд, которые обычно получают в качестве входных данных ввод с клавиатуры.

Например, для того чтобы отправить файл letter1 в качестве сообщения пользователю denise с помощью команды mail, введите:

mail denise < letter1

Нажмите Enter.


Игнорирование вывода с помощью файла /dev/null

Файл /dev/null представляет собой специальный файл. У этого файла есть уникальная особенность - он всегда пустой. Все данные, которые записаны в файл /dev/null, отбрасываются. Этим свойством можно воспользоваться, если вы хотите проигнорировать вывод команды или программы.

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

myprog < myscript >/dev/null

Нажмите Enter.

В данном примере программа myprog получает на входе файл myscript, а весь стандартный вывод отбрасывается.


Перенаправление стандартного вывода сообщений об ошибках и других данных

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

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

Дескриптор файла - это число, связанное с каждым из файлов ввода-вывода, которые обычно применяет команда. Со стандартным вводом, выводом и выводом сообщений об ошибках связаны следующие дескрипторы файлов:

0 Стандартный ввод (клавиатура)
1 Стандартный вывод (дисплей)
2 Стандартный вывод сообщений об ошибках (дисплей)

Для перенаправления стандартного вывода сообщений об ошибках введите значение 2 перед оператором перенаправления вывода или оператором перенаправления вывода путем добавления ( > или > >), а затем укажите имя файла. Например, для добавления стандартного вывода сообщений об ошибках команды cc, которая компилирует файл testfile.c, в конец файла ERRORS, введите:

cc testfile.c 2 > > ERRORS

Другой вывод можно перенаправить аналогичным образом, указав соответствующий дескриптор файла из диапазона от 0 до 9. Например, если команда cmd записывает вывод в файл с дескриптором 9, вы можете перенаправить вывод в файл savedata с помощью следующей команды:

cmd 9> savedata

Если во время выполнения команды данные записываются в несколько потоков вывода, то каждый из них можно перенаправить независимо от остальных. Предположим, что стандартный вывод команды записывается в файл с дескриптором 1, стандартный вывод сообщений об ошибках - в файл с дескриптором 2, а некоторые данные - в файл с дескриптором 9. Вы можете перенаправить каждый из этих потоков вывода в другие файлы с помощью следующей команды:

command > standard 2> error 9> data

Ввод данных с консоли

Если вы введете команду вида:

command << конец_ввода

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

Оболочка создает временный файл, содержащий документ ввода с консоли, подставляет в тексте документа необходимые значения вместо переменных и команд, и только затем передает его на вход команде. Вместо шаблонов, указанных в командной строке вместе с командой, подставляются реальные имена файлов. Для того чтобы запретить все подстановки, укажите конец_ввода следующим образом:

команда << \конец_ввода

Документ ввода с консоли удобно применять тогда, когда входные данные занимают небольшой объем. В этом случае удобнее ввести эти данные с помощью процедуры оболочки, а не сохранять в отдельном файле (например, с помощью редактора). Например, введите:

cat <<- abc   
   Это сообщение будет показано на 
   экране без начальных пробелов.
   abc

Нажмите Enter.

Наиболее эффективно это средство работает для процедур оболочки.


Конвейеры и фильтры

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

С помощью конвейера вывод одной команды можно отправить на вход другой команде. Команды соединяются символом конвейера (|).

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

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

ls | pg

В этом примере вывод команды ls  отправляется на вход команды pg. Для перехода к следующей странице текста нажмите клавишу Enter.

Команды конвейера выполняются только в одном направлении (слева направо). Каждая команда конвейера выполняется как отдельный процесс, причем все процессы могут выполняться одновременно. Если нет входных данных или канал вывода переполнен, то процесс ожидает.

Ниже приведен другой пример применения конвейеров вместе с командой grep. grep выполняет поиск строк в текстовом файле по указанному шаблону. Для получения списка файлов, которые были созданы или изменены в июле, введите:

ls -l | grep Июль

Нажмите Enter.

В этом примере вывод команды ls  отправляется на вход команды grep.


Дублирование вывода программы в файл (команда tee)

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

Например, для того чтобы одновременно просмотреть и сохранить вывод команды, введите:

ps -ef | tee program.ps

Нажмите Enter.

В результате вывод команды ps -ef будет показан в окне терминала и одновременно сохранен в файле program.ps. Содержимое файла program.ps  будет заменено, если он уже существует, а во встроенной команде set не задана опция noclobber.

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

ls -l | tee -a program.ls

Стандартный вывод команды ls -l появится в окне терминала и одновременно будет добавлен в конец файла program.ls.. Файл program.ls будет создан, если он не существует, а во встроенной команде set не задана опция noclobber.

В окно терминала и файл program.ls будет выведена примерно следующая информация:

-rw-rw-rw-   1 jones   staff   2301   19 сент.    08:53 161414
-rw-rw-rw-   1 jones   staff   6317   31 авг.   13:17 def.rpt
-rw-rw-rw-   1 jones   staff   5550   10 сент.   14:13 try.doc

Полный синтаксис приведен в описании команды tee в книге AIX 5L Version 5.1 Commands Reference.


Очистка экрана (команда clear)

Команда clear очищает окно терминала от сообщений и ввода с клавиатуры.

Введите в командной строке:

clear

Нажмите Enter.

Экран очистится и появится командная строка.

Полный синтаксис приведен в описании команды clear в книге AIX 5L Version 5.1 Commands Reference.


Отправка сообщений в стандартный поток вывода (команда echo)

Команда echo предназначена для просмотра сообщений в окне терминала.

Например, для записи сообщения в стандартный поток вывода введите в командной строке:

echo Вставьте дискету

Нажмите Enter.

Появится следующее сообщение:

Вставьте дискету

Ниже приведен пример применения команды echo с шаблоном, содержащим символы подстановки:

echo Файлы резервной копии: *.bak

Нажмите Enter.

Появится сообщение Файлы резервной копии: , за которым будет указан список файлов с расширением .bak.

Полный синтаксис приведен в описании команды echo в книге AIX 5L Version 5.1 Commands Reference.


Добавление к файлу одной строки текста (команда echo)

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

Например, введите в командной строке:

echo Не забудьте в конце недели создать резервную копию файлов.>
 
>notes

Нажмите Enter.

В результате сообщение Не забудьте в конце недели создать резервную копию файлов. будет добавлено в конец файла notes.

Полный синтаксис приведен в описании команды echo в книге AIX 5L Version 5.1 Commands Reference.

Точный синтаксис и описание команды echo приведены в книге AIX 5L Version 5.1 Commands Reference.


Копирование содержимого окна в файл (команды capture и script)

Всю информацию, выводимую в окно терминала, можно скопировать в файл, указав этот файл в команде capture, эмулирующей терминал VT100.

Команда script позволяет скопировать содержимое окна терминала в файл без эмуляции терминала VT100.

Обе команды применяются для создания печатных копий диалога в сеансе связи.

Например, для копирования содержимого окна терминала VT100 введите в командной строке:

capture screen.01

Нажмите Enter.

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

Команда capture запущена. Данные будут
записываться в файл screen.01.
Для копирования содержимого окна в файл screen.01 введите ^P.
Начат сеанс эмуляции терминала vt100.
Для продолжения нажмите любую клавишу.

После ввода данных и копирования содержимого окна завершите работу команды capture, нажав клавиши Ctrl-D или введя exit и нажав Enter. Появится приблизительно следующая информация:

Команда capture выполнена. Данные
записаны в файл screen.01.
Сеанс эмуляции терминала vt100 завершен.

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

Например, для копирования содержимого окна терминала введите в командной строке:

script

Нажмите Enter.

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

Команда script запущена. Данные будут
записываться в файл typescript.

Все содержимое окна терминала копируется в файл typescript.

Для завершения команды script нажмите клавиши Ctrl-D или введите exit и нажмите Enter. Появится приблизительно следующая информация:

Команда script выполнена. Данные
записаны в файл typescript.

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

Полный синтаксис приведен в справке по командам capture и script в книге AIX 5L Version 5.1 Commands Reference.


Вывод текста на экран большими буквами (команда banner)

Команда banner выводит в окно терминала заданный текст в формате ASCII большими буквами. Каждая строка вывода может содержать не более 10 цифр или букв в верхнем или нижнем регистре.

Например, введите в командной строке:

banner GOODBYE!

Нажмите Enter.

На экране появится слово GOODBYE! большими буквами.

Полный синтаксис приведен в описании команды banner в книге AIX 5L Version 5.1 Commands Reference.

Связанная информация

Обзор команд

Обзор процессов

Глава 11, Оболочки

Команды оболочки Korn (POSIX)

Оболочка Bourne

Оболочка C

Глава 6, Файлы

Специальный файл null


[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]