Logo    
Деловая газета CitCity.ru CITKIT.ru - все об Open Source Форумы Все публикации Учебный центр Курилка
CitForum    CITForum на CD    Подписка на новости портала Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Saturday, 21-Nov-2009 21:22:31 EET

Google
WWW CITForum.ru
2004 г.

Linux для пользователя

Виктор Костромин, http://rus-linux.net/

Глава 5. Оболочка bash

Предыдущий разделОглавлениеСледующий раздел

5.5. Перенаправление ввода/вывода, каналы и фильтры

Хотя обычно, как было сказано, ввод/вывод программы связаны со стандартными потоками, в оболочке существуют специальные средства для перенаправления ввода/вывода.

5.5.1 Операторы >, < и >>

Для обозначения перенаправления используются символы ">", "<" и ">>". Чаще всего используется перенаправление вывода команды в файл. Вот соответствующий пример:

[user]$ ls -l > /home/jim/dir.txt

По этой команде в файле /home/jim/dir.txt будет сохранен перечень файлов и подкаталогов того каталога, который был текущим на момент выполнения команды ls; при этом если указанного файла не существовало, то он будет создан; если он существовал, то будет перезаписан; если же вы хотите, чтобы вывод команды был дописан в конец существующего файла, то надо вместо символа > использовать >>. При этом наличие пробелов до или после символов > или >> несущественно и служит только для удобства пользователя.

Вы можете направить вывод не только в файл, но и на вход другой команды или на устройство (например, принтер). Так, для подсчета числа слов в файле /home/jim/report.txt можно использовать следующую команду:

[user]$ cat /home/jim/report.txt > wc -w

а для вывода файла на печать — команду:

[user]$ cat /home/jim/report.txt > lpr

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

[user]$ wc -w < /home/jim/report.txt

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

В силу того, что символы <, > и >> действуют на стандартные потоки, их можно использовать не только тем привычным образом, как это делается обычно, но и несколько по-другому. Так, следующие команды эквивалентны:

[user]$ cat > file

[user]$ cat>file

[user]$ >file cat

[user]$ > file cat

Однако сам по себе (без какой-либо команды, для которой определены стандартные потоки) символ перенаправления не может использоваться, так что нельзя, например, введя в командной строке

[user]$ file1 > file2

получить копию какого-то файла. Но это не уменьшает значения данного механизма, ведь стандартные потоки определены для любой команды. При этом перенаправить можно не только стандартный ввод и вывод, но и другие потоки. Для этого надо указать перед символом перенаправления номер перенаправляемого потока. Стандартный ввод stdin имеет номер 0, стандартный вывод stdout — номер 1, стандартный поток сообщений об ошибках stderr — номер 2. То есть полный формат команды перенаправления имеет вид (напомним, что пробелы возле > не обязательны):

command N > M

где N и M — номера стандартных потоков (0,1,2) или имена файлов. Употребление в некоторых случаях символов <, > и >> без указания номера канала или имени файла возможно только потому, что вместо отсутствующего номера по умолчанию подставляется 1, т. е. стандартный вывод. Так, оператор > без указания номера интерпретируется как 1 >.

Кроме простого перенаправления стандартных потоков существует еще возможность не просто перенаправить поток в тот или иной канал, а сделать копию содержимого стандартного потока. Для этого служит специальный символ &, который ставится перед номером канала, на который перенаправляется поток:

command N > &M

Такая команда означает, что выход канала с номером N направляется как на стандартный вывод, так и дублируется в канал с номером M. Например, для того, чтобы сообщения об ошибках дублировались на стандартный вывод, надо дать команду 2>&1, в то время как 1>&2 дублирует stdout в stderr. Такая возможность особенно полезна при перенаправлении вывода в файл, так как мы тогда одновременно и видим сообщения на экране, и сохраняем их в файле.

5.5.2 Оператор |

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

[user]$ cat myfile | grep Linux | wc -l

Эта строка означает, что вывод команды cat, т. е. текст из файла myfile, будет направлен на вход команды grep, которая выделит только строки, содержащие слово "Linux". Вывод команды grep будет, в свою очередь, направлен на вход команды wc -l, которая подсчитает число таких строк.

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

Надо отметить, что оболочка одновременно вызывает на выполнение все команды, включенные в конвейер, запуская для каждой из команд отдельный экземпляр оболочки, так что как только первая программа начинает что-либо выдавать в свой выходной поток, следующая команда начинает его обрабатывать. Точно так же каждая следующая команда выполняет свою операцию, ожидая данных от предыдущей команды и выдавая свои результаты на вход последующей. Если вы хотите, чтобы какая-то команда полностью завершилась до начала выполнения последующей, вы можете использовать в одной строке как символ конвейера |, так и точку с запятой ;. Перед каждой точкой с запятой оболочка будет останавливаться и ожидать, пока завершится выполнение всех предыдущих команд, включенных в конвейер.

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

5.5.3 Фильтры

Последний из приведенных выше примеров (с командой grep) можно использовать для иллюстрации еще одного важного понятия, а именно, программы-фильтра. Фильтры — это команды (или программы), которые воспринимают входной поток данных, производят над ним некоторые преобразования и выдают результат на стандартный вывод (откуда его можно перенаправить куда-то еще по желанию пользователя). К числу команд-фильтров относятся уже упоминавшиеся выше команды cat, more, less, wc, cmp, diff, а также следующие команды.

Таблица 5.1. Команды-фильтры

Команда

Краткое описание

grep, fgrep, egrep

Ищут во входном файле или данных со стандартного ввода строки, содержащие указанный шаблон, и выдают их на стандартный вывод

tr

Заменяет во входном потоке все встречающиеся символы, перечисленные в заданном перечне, на соответствующие символы из второго заданного перечня

comm

Сравнивает два файла по строкам и выдает на стандартный вывод 3 колонки: в одной — строки, которые встречаются только в 1 файле, во второй — строки, которые встречаются только во 2-ом файле: и в третьей — строки, имеющиеся в обоих файлах

pr

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

sed

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

Особым фильтром является команда tee, которая "раздваивает" входной поток, с одной стороны направляя его на стандартный вывод, а с другой — в файл (имя которого вы должны задать). Легко видеть, что по своему действию команда tee аналогична оператору перенаправления 1>&file.

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

О перенаправлении и фильтрах можно было бы говорить очень много. Но этот материал имеется в большинстве книг по UNIX и Linux, например у Петерсена [П1.4] и Келли-Бутла [П1.8]. Поэтому ограничимся сказанным, и перейдем к рассмотрению так называемой среды или окружения, создаваемого оболочкой.
Предыдущий разделОглавлениеСледующий раздел

 

Размещение рекламы - pr@citforum.ru, ICQ 232284597

Подписка на новости IT-портала CITForum.ru
(библиотека, CITKIT.ru, CitCity)

Новые публикации:

1 ноября

CitCity:

  • Глобализация мира технологий
  • Шаг леопарда
  • Куда ведут окна

    CITForum:

  • DMR - новый стандарт радиосвязи

    Обзор журнала Computer:

  • Планшетные ПК на службе образования

    30 октября

  • Универсальность и специализация: время разбивать камни?
  • Конец архитектурной эпохи, или Наступило время полностью переписывать системы управления данными

    CITKIT.ru:

  • FreeBSD 7.0 и ZFS

    25 октября

  • Антипаттерны руководства командами разработки ПО
  • Мониторинг загрузки канала интернет-шлюза на FreeBSD
  • Преобразование программ на языке Scheme для облегчения компиляции в язык C

    CitCity:

  • ИнфоКом-2007 и аналогичный ИнфоЛинукс

    23 октября

    CitCity:

  • Третья сенсация осени
  • Тайны Linux-скандала: суды, кражи и самоубийства

    CITKIT.ru:

  • Ubuntu 7.10 Gutsy Gibbon: родословная Бесстрашного Гиббона
  • Блеск и нищета Ajax

    18 октября

  • PostgreSQL 8.3

    CITKIT.ru:

  • И снова о массовом Linux'е
  • ОСТОРОЖНО: ВИНДОФИЛИЯ!

    16 октября

    CitCity:

  • FAQ по ноутбукам
  • Что наша жизнь? Игра!

    CITKIT.ru:

  • Еще раз про Zenwalk
  • Взгляд из башни из слоновой кости, или нужен ли массовый Linux?

    11 октября

    CitCity:

  • Операционные BI-технологии. Основные понятия
  • Операционные BI-средства. Проблемы и их решения
  • Хранилище данных в реальном времени. Инструменты интеграции с OLTP-системами

    CITKIT.ru:

  • Ба, знакомые все лица, или снова Linuxland

    9 октября

  • Пригоден ли один размер для всех? Часть 2: результаты тестовых испытаний

    CitCity:

  • Обзор "бюджетных ноутбуков" стоимостью 600-700 у.е.
  • Выбор персонального компьютера разных "весовых" категорий
  • Нанотехнологии - Клондайк или панацея?

    2 октября

    CITKIT.ru:

  • Nexenta OS - гибрид Linux'а и OpenSolaris'а
  • Изучаем ZFS
  • Восстановление данных под Linux

    27 сентября

    CitCity:

  • Модели построения отношений между службами информационной безопасности и IT
  • Брешь в конфиденциальности (Практика использования сети Интернет в конкурентной разведке)
  • Как защитить сеть: 5 советов

    CITKIT.ru:

  • А.Федорчук: Ум хорошо. А два лучше?

    25 сентября

  • «Один размер пригоден для всех»: идея, время которой пришло и ушло

    CitCity:

  • Что нужно знать о домашнем кинотеатре
  • Организация качественного звука на компьютере
  • Собираем музыкально-кинотеатральный компьютер (системный блок)

    20 сентября

  • За пределами реляционных баз данных: доступ к базам данных не ограничивается возможностями SQL

    CITKIT.ru:

  • Графический инсталлятор для FreeBSD
  • ZFS и FreeBSD. Переводы документации

    18 сентября

    CitCity:

  • Урожай сенсаций:

    CITForum:

  • QNX: очень краткие заметки

    13 сентября

  • Первые шаги к управлению всемирной информацией. Беседа с Патрицией Селинджер (Перевод: Сергей Кузнецов)
  • Принципы организации IP-телефонии на базе решений Cisco Systems

    CitCity:

  • Корпоративная культура: построение эффективного IT-отдела. 12 простых правил для руководителя
  • Cтили работы в компании

    11 сентября

  • Решения "растут" на деревьях
  • Знакомство с PDL (Portable Dynamic Loader)

    Обзоры журнала Computer:

  • В поисках новых механизмов поиска во Всемирной Паутине
  • Что реально в виртуальной реальности?

    6 сентября

    CitCity:

  • ITIL и ITIL3
  • Построение отчетности в рамках ITSM или
    Взгляд ITSM-консультанта на основные проблемы реализации проектов по построению отчетности на примере процесса управления инцидентами
  • Основные характеристики современного Хранилища данных
  • Единое представление клиентов в Хранилище и его использование для решения управленческих задач
  • Этапы реализации прогнозной аналитики. Роль Хранилищ данных
  • Мобильная перспектива. Какими станут ноутбуки в ближайшее время?

    4 сентября

  • Designing for FAILURE - ключ к успеху? Беседа с Брюсом Линдсеем
  • Интерфейс Siebel => Oracle Server => Express Server
  • Глубинный анализ данных в режиме реального времени: Oracle Real Time Decisions

    30 августа

  • Сергей Кузнецов: Серебряные пули компьютерной индустрии и учение Экклезиаста
  • Восход и закат CORBA
  • Corba: ушла, но (будем надеяться) не забыта
  • Стандарт профессиональной радиосвязи TETRA. Преимущества и возможности
  • JavaScript: создаем Человека

    28 августа

  • Oracle: работать с текстовыми документами очень просто
  • Текстовые документы в Oracle: разнообразие источников, форматов, запросов
  • Как работать с картотекой (набором данных с краткими описаниями)
  • Как классифицировать текстовые документы в Oracle

    22 августа

    CitCity:

  • Oracle достигла возраста зрелости (Сергей Кузнецов)
  • Интеграция приложений такая, как она есть (Глеб Ладыженский)
  • "Большая восьмерка" для оператора

    CITForum:

  • 64 бита: расставим точки над большим "I"

    15 августа

  • Когда счет идет на микросекунды
  • Тип данных TIME
  • Новая версия СУБД Oracle - Oracle 11g
  • Закись азота для ПК: Intel Turbo Memory
  • Доступные сетевые принтеры

    8 августа

  • Серверы в масштабе российского предприятия
  • Хранение данных: задачи, решения, перспективы
  • И снова терминалы

    CITKIT.ru:

  • Debian vs Ubuntu: еще один великолепный миф?
  • Сказ про TeXmacs, или как прикручивали шрифты TeX к графическому режиму, и что из этого получилось
  • Мультизагрузочный CD с использованием GRUB

    1 августа

    CitCity:

  • Информационная безопасность ERP-систем
  • Корнями - в древность, кроной - в современный бизнес (о рынке информационной безопасности)

    Обзор журнала Computer:

  • Open Source и проприетарная архитектурная революция

    CITKIT.ru:

  • hwreport: 1 к 84-м в пользу "source based"
  • Начал ли звонить колокол? (дискуссия Windows vs Linux)

    25 июля

    CitCity:

  • Беседа Марго Зельцер с Майклом Стоунбрейкером. Перевод: Сергей Кузнецов
  • SideShow: Windows с изнанки
  • Перспективы развития стандартов третьего поколения в России и в мире
  • От SMB к Enterprise. Плох тот солдат, который не хочет стать генералом
  • Лучше выпить, чем говорить по телефону?

    18 июля

  • Влияние исследований на технологию промежуточного программного обеспечения

  • Семантическая реконсиляция прикладных данных на основе моделей

  • Демоны (из серии "Программирование для Linux")

    11 июля

  • Почему формальную реляционную модель данных можно рассматривать как основу безимпедансных систем
  • Адаптивное управление по прецедентам, основанное на классификации состояний управляемых объектов
  • Методы композиции и декомпозиции исполняемых UML моделей

    CITKIT.ru:

  • Windows. Господа критикисты, стыдитесь!

    4 июля

    Лекции из курса А.Марченко "Введение в программирование на C# 2.0":

  • GDI+
  • Основы ADO .NET

  • К статье OFSA. Основные принципы добавлена
  • Часть 5. FDM как хранилище данных финансовой информации

    CITKIT.ru:

  • Чем удобна Вынь-да?

    28 июня

  • Особенности применения технологии UniTESK для тестирования функций мобильности в протоколе IPv6
  • Разработка ОС реального времени для цифрового сигнального процессора

    CitCity:

  • Карьера! Как много в этом слове... О планировании карьеры, плане профессионального развития и не только...

    CITKIT.ru:

  • Памятка начинающему снобу

    26 июня

  • Win32 в машинных кодах

  • Верификация компиляторов - систематический подход
  • Использование контрактных спецификаций для автоматизации функционального тестирования моделей аппаратного обеспечения
  • Тестирование трансляторов: проблема построения оракула для генератора

    21 июня

  • Тестирование компонентов, взаимодействующих посредством удаленного вызова методов

    CITKIT.ru:

  • Открытые стандарты и новые формы международного сотрудничества
  • Zenwalk: хроника последнего обновления
  • Заметки сноба, или Беру свои слова обратно (дискуссия про анонимусов)

    19 июня

  • Текущее состояние и перспективы развития инфраструктуры LSB

  • Об одном методе сокращения набора тестов

  • Методика автоматизированной проверки возвращаемых кодов ошибок при тестировании программных интерфейсов

    CITKIT.ru:

  • Zenwalk: управление пакетами
  • Linux - должен? (дискуссионный клуб)

    14 июня

  • Пересекая границы: специфика разработки ПО распределенной командой
  • Групповая разработка и организация коллектива. Лекция из курса "Введение в технологию программирования"
  • Компьютерные технологии на благо каждого человека. Обзор майского номера журнала Computer

    CITKIT.ru:

  • 5 лет спустя (дискуссия Windows vs Linux)

    Все публикации >>>




  • IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы - pr@citforum.ru, тел. +7 495 4119920, ICQ 232284597 Пресс-релизы - pr@citcity.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2007 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...