Часто возникает необходимость использовать вывод одной программы в качестве ввода другой. Вместо того, чтобы вводить каждую команду по отдельности и сохранять результаты в промежуточных файлах, свяжите последовательные команды с помощью канала (|). Название канал (конвейер) весьма точно отражает суть происходящего. Информация, выдаваемая программой слева от канала (вертикальной черты), передается через канал и поступает на вход программы справа. С помощью каналов можно связывать несколько процессов при этом следует учесть, что все программы запускаются одновременно. Если же для разделения команд между собой в одной строке вы используете как точку с запятой, так и символ конвейера, то перед каждой точкой с запятой shell будет останавливаться и ожидать, пока не выполнятся все предыдущие команды – как отдельные, так и объединённые в конвейер.
В качестве примера, рассмотрим часто используемый на практике приём постраничного вывода большого объёма текстовой информации на экран монитора:
#ps -uax | more
Вторая команда more – это программа, при помощи которой длинные файлы показываются постранично, а не целиком (формат команды more [-флаги] [файл1..]). Чтобы показать следующую страницу, следует нажать клавишу пробела, а для выхода – q.
При использовании конвейеров, бывает чрезвычайно полезна команда tee [-a] [файл], которая копирует стандартный ввод на стандартный вывод или, дополнительно, – в указанный файл. Если он уже существует, то его содержимое замещается, а при указании опции –a происходит дописывание в конец файла. Фактически, она позволяет снимать промежуточные результаты при «длинных» конвейерах и выводить их либо на терминал, либо в указанный файл (файлы).
Воспользовавшись только лишь рассмотренными командами можно уже, запрограммировать достаточно сложную последовательность действий, которую на практике, иногда, приходится многократно повторять. Так, например, следующие две команды формируют файл, состоящий из отсортированного файла sales.dat, трёх чисел задающих соответственно – число строк, слов и байтов отсортированного файла sales.dat, и в последней строке указана дата создания этого файла:
#sort sales.dat | tee sales.srt | wc >> sales.srt
date >> sales.srt
Используемая здесь команда wc имеет своим входом текстовую информацию, а выходом – три описанных выше числа.
Многозадачность
Linux – система многопользовательская и многозадачная. Поддержка многих пользователей означает, что одновременно работать с системой могут несколько человек (в отличие от однопользовательской операционной системы наподобие MS-DOS). Многозадачность означает, что Linux может выполнять несколько задач одновременно.
Обеспечение поддержки многих пользователей и многозадачности в целом лежит на операционной системе; каждому пользователю и каждой задаче предоставляется возможность доступа ко всем ресурсам системы, включая процессор, память, диски и периферийное оборудование. ОС создает иллюзию, что каждый пользователь единолично распоряжается всеми ее ресурсами.
Только за время нажатия вами клавиши <Enter> система способна обработать сотни запросов. Создается впечатление одновременного выполнения множества задач, хотя на самом деле Linux управляет списком задач (известным также как очередь задач) и выделяет каждой задаче ее часть времени. С точки зрения человека, это время крайне незначительно, однако для компьютера это достаточно длительный период, в течение которого выполняются тысячи команд процессора. Количество выделяемого каждой задаче времени зависит от ее относительного приоритета.
Linux работает с одной задачей (процессом) определенное время, затем откладывает ее и приступает к другой задаче – и так все время работы операционной системы. Так же, она отвечает за корректную работу нескольких пользователей и нескольких процессов, скрывая детали этой работы от пользователя. В качестве пользователя вы можете определять, какие программы и когда должны быть запущены, а также следить за их выполнением. В некоторых случаях, вы можете изменять их относительный приоритет, а также прекратить выполнение своего процесса. Будучи системным администратором, вы выполняете то же самое не только со своими, но и с системными процессами и процессами любого пользователя.
Существует ряд команд, позволяющих работать с многопользовательскими и многозадачными возможностями Linux. Некоторые из них мы рассмотрим в данной лабораторной работе (см. таблицу 2)
Таблица 2. Команды для работы с процессами
Команда | Назначение |
at | Выполняет команду в определенное время |
batch | Выполняет команду тогда, когда позволяет загрузка системы |
nohup | Позволяет работать процессу после вашего выхода из системы |
ps | Выводит информацию о процессах |
w | Показывает, кто в настоящий момент работает в системе и с чем |
who | Выводит список пользователей |
& | Запускает задачу в фоновом режиме |
bg | Переводит приостановленную задачу в фоновый режим |
fg | Переводит приостановленную задачу в приоритетный режим |
nice | Изменяет приоритет процесса при его запуске |
renice | Изменяет приоритет работающего процесса |
jobs | Отображает на экране исполняемые процессы |
kill | Прекращает выполнение процесса |