Файл: Debian Таненбаум Бос.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Операционные системы

Добавлен: 29.10.2018

Просмотров: 48093

Скачиваний: 190

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

796  

 Глава 10. Изучение конкретных примеров: Unix, Linux и Android 

Рис. 10.1. Уровни операционной системы Linux

команду эмулированного прерывания, то этим занимается библиотека, в которой есть 
по одной процедуре на системный вызов. Эти процедуры написаны на ассемблере, но 
они могут вызываться из языка C. Каждая такая процедура сначала помещает аргумен-
ты в нужное место, а затем выполняет команду эмулированного прерывания. Таким 
образом, чтобы обратиться к системному вызову read, программа на языке C должна 
вызвать библиотечную процедуру read. Кстати, в стандарте POSIX определен именно 
интерфейс библиотечных функций, а не интерфейс системных вызовов. Иначе говоря, 
стандарт POSIX определяет, какие библиотечные процедуры должна предоставлять 
соответствующая его требованиям система, каковы их параметры, что они должны 
делать и какие результаты возвращать. В стандарте даже не упоминаются реальные 
системные вызовы.

Помимо операционной системы и библиотеки системных вызовов все версии Linux 
предоставляют большое количество стандартных программ, некоторые из них указа-
ны в стандарте POSIX 1003.2, тогда как другие могут различаться в разных версиях 
системы Linux. К этим программам относятся командный процессор (оболочка), ком-
пиляторы, редакторы, программы обработки текста и утилиты для работы с файлами. 
Именно эти программы и запускает пользователь с клавиатуры. Таким образом, мы 
можем говорить о трех интерфейсах в операционной системе Linux: интерфейсе си-
стемных вызовов, интерфейсе библиотечных функций и интерфейсе, образованном 
набором стандартных служебных программ.

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

Графический интерфейс пользователя системы Linux похож на первые графические 
интерфейсы пользователя, разработанные для UNIX в 70-х годах прошлого века 
и ставшие популярными благодаря компьютерам Macintosh и впоследствии — системе 


background image

10.2. Обзор системы Linux   

797

Windows для персональных компьютеров. Графический интерфейс пользователя соз-
дает среду рабочего стола — знакомую нам метафору с окнами, значками, каталогами, 
панелями инструментов, а также возможностью перетаскивания. Полная среда рабо-
чего стола содержит администратор многооконного режима, который управляет раз-
мещением и видом окон, а также различными приложениями и создает согласованный 
графический интерфейс. Популярными средами рабочего стола для Linux являются 
GNOME (GNU Network Object Model Environment) и KDE (K Desktop Environment).

Графические интерфейсы пользователя в Linux поддерживает оконная система X 
Windowing System, которую обычно называют Х11 (или просто Х). Она определяет 
обмен и протоколы отображения для управления окнами на растровых дисплеях UNIX-
подобных систем. Х-сервер является главным компонентом, который управляет такими 
устройствами, как клавиатура, мышь и экран, и отвечает за перенаправление ввода 
или прием вывода от клиентских программ. Реальная среда графического интерфейса 
пользователя обычно построена поверх библиотеки низкого уровня (xlib), которая со-
держит функциональность для взаимодействия с Х-сервером. Графический интерфейс 
расширяет базовую функциональность Х11, улучшая вид окон, предоставляя кнопки, 
меню, значки и пр. Х-сервер можно запустить вручную из командной строки, но обычно 
он запускается во время загрузки диспетчером окон, который отображает графический 
экран входа в систему.

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

10.2.3. Оболочка

Несмотря на то что Linux имеет графический интерфейс пользователя, большинство 
программистов и продвинутые пользователи по-прежнему предпочитают интерфейс 
командной строки, называемый оболочкой   (shell). Они часто запускают одно или 
несколько окон с оболочками из графического интерфейса пользователя и работают 
в них. Интерфейс командной строки оболочки значительно быстрее в использовании, 
существенно мощнее, прост в расширении и не грозит пользователю туннельным 
синдромом запястья из-за необходимости постоянно пользоваться мышью. Далее мы 
кратко опишем оболочку bash. Она основана на оригинальной оболочке системы UNIX, 
которая называется оболочкой Бурна (Bourne shell, написана Стивом Бурном, а затем 
в Bell Labs.), и фактически даже ее название является сокращением от Bourne Again 
SHell. Используется и множество других оболочек (ksh, csh и т. д.), но bash является 
оболочкой по умолчанию в большинстве Linux-систем.

Когда оболочка запускается, она инициализируется, а затем выводит на экран символ 
приглашения к вводу  (обычно это знак процента или доллара) и ждет, когда пользо-
ватель введет командную строку.

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


background image

798  

 Глава 10. Изучение конкретных примеров: Unix, Linux и Android 

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

У команд могут быть аргументы, которые передаются запускаемой программе в виде 
текстовых строк. Например, командная строка

cp src dest

запускает программу cp с двумя аргументами, src и dest. Эта программа интерпретирует 
первый аргумент как имя существующего файла. Она копирует этот файл и называет 
эту копию 

dest

.

Не все аргументы являются именами файлов. В строке

head –20 file

первый аргумент –20 дает указание программе head напечатать первые 20 строк файла 

file

 (вместо принятых по умолчанию 10 строк). Управляющие работой команды или 

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

head 20 file

вполне законна. Она дает указание программе head вывести первые 10 строк файла 
с именем 

20

, а затем вывести первые 10 строк второго файла 

file

. Большинство команд 

Linux-систем могут принимать несколько флагов и аргументов.

Чтобы было легче указывать группы файлов, оболочка принимает так называемые 
волшебные символы

 (magic charecters) , иногда называемые также групповыми (wild 

cards). Например, символ «звездочка» означает все возможные текстовые строки, так 
что строка

ls *.c

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

.c

. Если существуют файлы 

x.c

y.c

 и 

z.c

, то данная команда эквивалентна команде

ls x.c y.c z.c

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

ls [ape]*

выводит все файлы, имя которых начинается с символов «a», «p» или «e».

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

 (standard input), а для записи — к файлу, называемому 

стандартным устройством вывода 

 (standard output), и к файлу, называемому стандарт-

ным устройством для вывода сообщений об ошибках

 ( standard error). По умолчанию 

всем этим трем устройствам соответствует терминал, то есть чтение со стандартного 
ввода производится с клавиатуры, а запись в стандартный вывод (или в вывод для 


background image

10.2. Обзор системы Linux   

799

ошибок) попадает на экран. Многие Linux-программы читают данные со стандартного 
устройства ввода и пишут на стандартное устройство вывода. Например, команда

sort

запускает программу sort, читающую строки с терминала (пока пользователь не на-
жмет комбинацию клавиш 

Ctrl+D

, чтобы обозначить конец файла), а затем сортирует 

их в алфавитном порядке и выводит результат на экран.

Стандартные ввод и вывод можно перенаправить, что является очень полезным свой-
ством. Для этого используются символы «<» и «>» соответственно. Разрешается их 
одновременное использование в одной командной строке. Например, команда

sort <in >out

заставляет программу sort взять в качестве входного файл 

in

 и направить вывод 

в файл 

out

. Поскольку стандартный вывод сообщений об ошибках не был перенаправ-

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

Рассмотрим следующую командную строку, состоящую из трех отдельных команд:

sort <in >temp; head –30 <temp; rm temp

Сначала запускается программа sort, которая принимает данные из файла 

in

 и запи-

сывает результат в файл 

temp

. Когда она завершает свою работу, оболочка запускает 

программу head, дав ей указание вывести первые 30 строк из файла 

temp

 на стандартное 

устройство вывода, которым по умолчанию является терминал. Наконец, временный 
файл 

temp

 удаляется. При этом он удаляется безвозвратно и уже не может быть вос-

становлен.

Часто используются командные строки, в которых первая программа в командной 
строке формирует вывод, используемый второй программой в качестве входа. В приве-
денном ранее примере для этого использовался временный файл 

temp

. Однако система 

Linux предоставляет для этого более простой способ. В командной строке

sort <in | head –30

используется вертикальная черта, называемая символом канала (pipe symbol), она 
означает, что вывод программы sort должен использоваться в качестве входа для про-
граммы head, что позволяет обойтись без создания, использования и удаления времен-
ного файла. Набор команд, соединенных символом канала, называется конвейером 
(pipeline)  и может содержать произвольное количество команд. Пример четырехком-
понентного конвейера показан в следующей строке:

grep ter * .t | sort | head –20 | tail –5 >foo

Здесь в стандартное устройство вывода записываются все строки, содержащие стро-
ку «ter» во всех файлах, оканчивающихся на 

.t

, после чего они сортируются. Первые 

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

foo

. Вот пример того, как операционная система Linux обеспечивает основные 

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


background image

800  

 Глава 10. Изучение конкретных примеров: Unix, Linux и Android 

Linux является универсальной многозадачной системой. Один пользователь может 
одновременно запустить несколько программ, каждую в виде отдельного процесса. 
Синтаксис оболочки для запуска фонового процесса состоит в использовании ампер-
санда в конце строки. Таким образом, строка

wc –l <a >b &

запустит программу подсчета количества слов wc, которая сосчитает число строк 
(флаг –l) во входном файле 

a

 и запишет результат в файл 

b

, но будет делать это в фо-

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

sort <x | head &

Можно одновременно запустить в фоновом режиме несколько конвейеров.

Список команд оболочки может быть помещен в файл, а затем можно будет запустить 
оболочку с этим файлом в качестве стандартного входа. Вторая программа оболочки 
просто выполнит перечисленные в этом файле команды одну за другой — точно так 
же, как если бы эти команды вводились с клавиатуры. Файлы, содержащие команды 
оболочки, называются сценариями оболочки (shell scripts) . Сценарии оболочки могут 
присваивать значения переменным оболочки и затем считывать их. Они также могут 
иметь параметры и использовать конструкции ifforwhile и case. Таким образом, 
сценарии оболочки представляют собой настоящие программы, написанные на языке 
оболочки. Существует альтернативная оболочка Berkley C, разработанная таким об-
разом, чтобы сценарии оболочки (и язык команд вообще) выглядели как можно более 
похожими на программы на языке C. Поскольку оболочка представляет собой всего 
лишь пользовательскую программу, было написано много различных оболочек. Поль-
зователи могут подобрать ту из них, которая им больше нравится.

10.2.4. Утилиты Linux

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

1.  Команды управления файлами и каталогами.

2. Фильтры.

3.  Средства разработки программ, такие как текстовые редакторы и компиляторы.

4. Текстовые процессоры.

5. Системное администрирование.

6. Разное.

Стандарт POSIX 1003.1-2008 определяет синтаксис и семантику около 150 этих про-
грамм, в основном относящихся к первым трем категориям. Идея стандартизации 
данных программ заключается в том, чтобы можно было писать сценарии оболочки, 
которые работали бы на всех системах Linux.

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