Перенаправление потоков и программные каналы
В ОС UNIX существует три стандартных потока: поток ввода, поток вывода и поток стандартного протокола (поток ошибок). Перенаправление потоков позволяет изменить стандартный ввод/вывод: < - изменение источника стандартного ввода; >, >> - изменение приемника стандартного вывода. Примеры:
cat > filename - перенаправление вывода программы cat в файл filename (если этот файл существует, то его прежнее содержимое будет утеряно);
cat >> filename - добавить содержимое вывода программы cat к содержимому файла filename;
cat < filename - сформировать стандартный ввод программы cat из содержимого файла filename.
Стандартные потоки - поток ввода, поток вывода и поток ошибок (поток протокола) имеют фиксированную нумерацию - 0, 1 и 2 соответственно. Эти номера (номера дескрипторов потоков) можно использовать в явном виде. Например, запись
prog 1>file
эквивалентна записи prog >file
Для того, чтобы отличить имя потока от имени файла, перед номером потока ставится символ ‘&’: prog >file 2>&1
Здесь происходит перенаправление стандартного потока вывода в файл file (>file). А кроме того, сообщения об ошибках также будут перенаправлены в файл file: запись 2>&1 означает перенаправление потока ошибок на стандартный поток вывода, который, в свою очередь, был перенаправлен в файл. Замечание: анализ команды осуществляется интерпретатором справа налево: сначала происходи слияние потоков (2>&1), а затем перенаправляется стандартный поток вывода (1) в файл file. Бывает полезно использование псевдоустройства /dev/null, удаляющего все введенные в него символы. Это используется тогда, когда необходимо полностью игнорировать (подавить) выходные потоки.
Канал - это программное средство, связывающее процессы ОС UNIX буфером ввода/вывода. Запуск процессов в виде $ процесс_1 | процесс_2 | ... | процесс_n
означает, что стандартный вывод процесса_1 будет замкнут на стандартный ввод процесса_2, стандартный вывод процесса_2 будет замкнут на стандартный ввод процесса_3 и т.д. При этом сначала создается канал, а потом на выполнение одновременно запускаются все процессы, и общее время их выполнения определяется более медленным процессом. Пример: ls | wc -l
Те же действия можно организовать так:
ls > buffer
wc -l < buffer
rm -f buffer
Команда ls выводит на экран (стандартный поток вывода) список файлов текущего каталога, а команда wc -l считает количество строк во входном потоке (в файле, а если файл не указан - в стандартном входном потоке). Таким образом, объединение этих двух команд программным каналом позволяет посчитать количество файлов в текущем каталоге.
Итоговая таблица:
> file | Перенаправление стандартного потока вывода в файл file |
>> file | Добавление в файл file данных из стандартного потока вывода |
< file | Получение стандартного потока ввода из файла file |
p1 | p2 | Передача стандартного потока вывода программы p1 в поток ввода программы p2 |
n > file | Переключение потока вывода из файла с дескриптором n в файл file |
n >> file | Добавление записей потока вывода из файла с дескриптором n в файл file |
n > &m | Слияние потоков с дескрипторами n и &m |
Набор имени команды производится с клавиатуры после появления промпта (приглашения), обычно, - $. Для облегчения работы с системой UNIX имеется возможность использовать шаблоны имен файлов (или метасимволв): ? - один любой символ;
* - произвольное количество любых символов.
Например: *.c - задает все файлы с расширением "c";
pr???.* - задает файлы, имена которых начинаются с "pr", содержат пять символов и имеют любое расширение.
Справочные команды
date - получение даты и времени.
who - получение списка пользователей, работающих в системе в данный момент.
Пример: $ who
petr tty4i Mar 11 18:46
ann tty12 Mar 11 16:29
Выводится имя пользователя, номер терминала, дата и время начала работы этого пользователя. Команда who am i выведет информацию о самом пользователе.
man - получение справочной информации: $ man [имя команды]
Альтернативой команды man в некоторых клонах UNIX является командаuse:
use [имя команды]
Дата добавления: 2021-09-25; просмотров: 365;