Во время выполнения команды обычно
предполагается, что три файла уже открыты: стандартный ввод, стандартный
вывод и стандартный файл ошибок (для сообщений об ошибках или диагностических
сообщений). С каждым из этих файлов связан следующий дескриптор
файла (число):
Дескриптор файла 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, отбрасываются. Этим свойством можно воспользоваться, если вы хотите проигнорировать вывод команды или программы.
Например, пусть программа 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 применяется в конвейере. Она читает данные из стандартного ввода, затем записывает вывод программы в стандартный поток вывода и одновременно копирует его в указанный файл или файлы. В результате вывод программы можно немедленно просмотреть в окне терминала и одновременно сохранить для использования в будущем.
Например, для того чтобы одновременно просмотреть и сохранить вывод команды, введите:
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
Нажмите Enter.
Экран очистится и появится командная строка.
Полный синтаксис приведен в описании команды clear в книге AIX 5L Version 5.1 Commands Reference.
Команда echo предназначена для просмотра сообщений в окне терминала.
Например, для записи сообщения в стандартный поток вывода введите в командной строке:
echo Вставьте дискету
Нажмите Enter.
Вставьте дискету
Ниже приведен пример применения команды echo с шаблоном, содержащим символы подстановки:
echo Файлы резервной копии: *.bak
Нажмите Enter.
Появится сообщение Файлы резервной копии: , за которым будет указан список файлов с расширением .bak.
Полный синтаксис приведен в описании команды echo в книге AIX 5L Version 5.1 Commands Reference.
Вы можете добавить к файлу одну строку текста, указав в команде echo символ перенаправления с добавлением.
Например, введите в командной строке:
echo Не забудьте в конце недели создать резервную копию файлов.> >notes
Нажмите Enter.
В результате сообщение Не забудьте в конце недели создать резервную копию файлов. будет добавлено в конец файла notes.
Полный синтаксис приведен в описании команды echo в книге AIX 5L Version 5.1 Commands Reference.
Точный синтаксис и описание команды echo приведены в книге AIX 5L Version 5.1 Commands Reference.
Всю информацию, выводимую в окно терминала, можно скопировать в файл, указав этот файл в команде 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 выводит в окно терминала заданный текст в формате ASCII большими буквами. Каждая строка вывода может содержать не более 10 цифр или букв в верхнем или нижнем регистре.
Например, введите в командной строке:
banner GOODBYE!
Нажмите Enter.
На экране появится слово GOODBYE! большими буквами.
Полный синтаксис приведен в описании команды banner в книге AIX 5L Version 5.1 Commands Reference.
Специальный файл null