Главная > Операционные системы > UNIX
Описание: Кандидат BSDA должен уметь перенаправлять стандартный вывод, ввод или поток ошибок программы, использовать pipe чтобы послать вывод одной программы в другую программу или в файл. Использовать tee(1) чтобы копировать стандартный ввод на стандартный вывод. Практика:
Комментарий
За каждой программой запущенной в UNIX (и не
только UNIX) закреплено минимум три файловых
дескриптора: стандартный ввод (
Напрмер, запустим программу grep следующим образом:
В этом случае программа grep будет искать строки содержащие
букву r в потоке
Ниже приведён листинг такого примера. Знаком < помечены
строки котороые набрал пользователь (
В нашем листинге
Пусть у нас есть файл
Применим grep для того, чтобы выяснить какие системы BSD
содержат в своём названии букву r. Для этого мы переопределим
А что если нам надо сохранить вывод программы grep в файл? Тогда
мы должны переопределить ещё и
Теперь у нас появился файл с названием
Но а что если нам надо узнать сколько систем BSD имеют в своём
имени букву r? Для этого мы можем воспользоваться программой
wc(1) с аргументом
Но это неудобно: мы зачем-то создавали временный файл,
передавали копеечную информацию и для этого обращались к диску,
а это медленная операция. А если бы у нас было много информации,
то наши действия тоже были бы нерациональны: Весь
Напрашивается естественный вывод: надо переопределить
Стандартный вывод wc(1) (число 2) тоже можно передать на стандартный ввод другой программы, таким образом длину конвейера или трубы (pile-line) можно сделать сколь угодно длинной. В следующем примере количество систем BSD содержащих в своём названии букву r будет распечатано на принтере:
А чтоже делать, если мы хотим и список систем получить и
посчитать их количество? Можно как и прежде выполнить 2 действия
поочереди: сперва создать файл
tee можно использовать как здесь — для сохранения
промежуточных результатов, а можно использовать для того, чтобы
протоколировать в файл то, что администратор видит на экране.
Напрмер, ниже программа make будет писать что-то на экран, но
впоследствии мы сможем прочитать что она там писала из файла
В этом примере мы добились развоения стандартного вывода программы make: этот поток информации одновременно пишется в файл make-log и печатается в окне терминала обычным образом.
Теперь поговорим про
Мы видим, что на экране присуствует как список файлов с
расширением sh так и сообщение об ошибке связанное с тем, что в
текущем каталоге отсутствуют файлы с расширением gz. Обе эти
строки напечатаны в окне терминала, но это два разных потока.
Сообщение об ошибке было напечатано в стандартный вывод
ошибок —
В приведённом примере мы в первом случае перенаправили
Файловые дескрипторы соответствующие
Вы можете объединить файловые дескрипторы, если вам надо,
например, писать сообщения выводящиеся на
Здесь мы направили стандартный вывод в файл
приведёт к тому, что в файл
Синтаксис перенаправления в csh(1) отличается от синтакиса в sh(1). Ниже приведены эквивалентные команды на sh(1) и на csh(1): sh:
В последней строке продемонстрировано досадное ограничение
csh(1): для того, чтобы перенаправить
Главная > Операционные системы > UNIX |