Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет_указ_по_СПО ч 1 Знакомство с Linux.doc
Скачиваний:
18
Добавлен:
11.04.2015
Размер:
325.12 Кб
Скачать

Перенаправление ввода и вывода и конвейеризация

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

Все преимущества возможности перенаправления ввода/вывода становятся ясны при использовании еще одного мощного инструмента UNIX – конвейеров (программных каналов). Конвейером называется использование стандартного вывода одной команды в качестве стандартного ввода другой. Синтаксис перенаправления ввода/вывода:

команда >file перенаправление стандартного потока вывода в файл file

команда>>file добавление (дозапись) в файл file данных из стандартного потока вывода

<file получение стандартного потока ввода из файла file

p1|p2 передача стандартного потока вывода программы р1 в потов ввода p2

n>file переключение потока вывода из файла с дескриптором n в file

n>>file то же, но записи добавляются в file

n>&m слияние потоков с дескрипторами n и m

Пример:

sort textfile | lp

содержимое файла textfile сортируется командой sort, а затем этот файл (выход команды sort) передается на печать.

cat *.994 ¦ grep profits | lp

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

my_prog 2>/dev/null

при запуске программы my_prog вывод ошибок (стандартный поток с дескриптором 2) перенаправляется в нулевое устройство /dev/null, т.е. подавляется.

my_prog >/dev/null 2>&1

сначала будет осуществлено слияние потоков 2 и 1 (оба будут указывать на терминал пользователя), а потом стандартный поток вывода будет перенаправлен в файл /dev/null

Запуск команд

Если необходимо запустить несколько команд, это можно сделать в одной строке, разделив команды символом ‘;’.Команды будут выполнены последовательно. Например:

…~>pwd; date

Программу можно запустить в фоновом режиме, для этого строку команду следует завершить символом ‘&”. В этом случае shell не будет ожидать завершения выполнения программы, а сразу выведет приглашение и работу можно продолжить:

…~>find –name myfile.txt.1 –print >/tmp/myfile.list 2>/dev/null &

Условный запуск команд подразумевает запуск второй команды в том случае, если предыдущая команда завершилась успешно (&&) или неудачно (||)/ Пример:

…~>grep alla /etc/passwd && grep alla /etc/group

поиск пользователя alla в файле групп произойдет только в том случае, если он присутствует в файле паролей.

…~>grep alla /etc/passwd || echo alla is not present

если пользователя alla нет в файле паролей, выдается соответствующее сообщение.

Текстовый редактор VI

В Linux имеются многотекстовых редакторов, включая vi, ex, pico, jove, также как GNU Emacs и его вариации, вроде Lucid Emacs (который содержит расширение для использования под X Windows) и joe. Многие пользователи UNIX до сих пор используют "простые" редакторы вроде vi, которые требуют минимальных ресурсов (по причине своего «преклонного возраста»). Для освоения текстового редактора vi ознакомьтесь с документом Начала_vi.doc .