Свободные программы и системы в школе

Автор: Пользователь скрыл имя, 17 Ноября 2014 в 19:57, статья

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

Зачем программам быть свободными?
Право и экономика ПО.
Применимость СПО при реализации «Обязательного минимума.
Логика и последовательность освоения СПО.

Файлы: 1 файл

Отставнов Свободные программы и системы в школе.rtf

— 2.67 Мб (Скачать)

Вводя произвольные строки22 (Рис. 1-27), Алиса обнаруживает, что каждая введенная ею строка после нажатия Enter вновь выводится на терминал. Команда «cat», поданная без аргумента, копирует содержимое ввода в вывод построчно23.

Закончить ввод можно, введя в начале очередной строки символ конца файла Control-D. Ввод этого символа приводит к немедленному завершению ввода, т.е. символ завершения строки уже не ожидается, а сам символ не отображается при вводе.

 

Рис. 1-27

 

Говоря в главах выше о выводе, а сейчас и о вводе, мы подразумевали вывод на экран терминала и ввод с клавиатуры терминала. Это является умолчанием для всех стандартных команд. Однако одним из самых важных свойств открытых ОС является возможность перенаправления ввода-вывода .

В примере на Рис. 1-28 Алиса перенаправляет вывод  команды «cat», используя символ «>» со следующим за ним именем файла («Вечера»), в который перенаправляется вывод.

 

Рис. 1-28

 

В этом примере строки ввода уже не дублируются выводом на терминал, а поданная после завершения ввода команда «ls» показывает, что действительно появился файл с названием «Вечера» и размером 173 байта, что соответствует длине введенного текста24.

Перенаправляться может не только вывод, но и ввод, и Алиса может воспользоваться этим, чтобы вывести с помощью все той же команды «cat» содержимое созданного ею файла на терминал. Перенаправление ввода осуществляется указанием имени файла после символа «<» (Рис. 1-29).

 

Рис. 1-29

 

Эти два символа («>» для перенаправления вывода и «<» для перенаправления ввода) легко запомнить, поскольку они графически соответствуют «стрелкам», указывающим «в файл» или «из файла». Промежутки до и после символов «<» и «>» игнорируются.

Перенаправление ввода и вывода может использоваться и одновременно. Команда на Рис. 1-30 копирует построчно файл «Вечера» в файл «Вечера_2».

 

Рис. 1-30

 

Результат, в общем, совпадает с результатом простого копирования «cp Вечера Вечера_2», хотя и достигается другим способом. Порядок указания файлов перенаправления ввода и вывода значения не имеет.

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

Часто бывает желательно перенаправить вывод в файл, не уничтожая его содержимого, а дописывая  новые строки к уже существующим. Для этого оболочка поддерживает перенаправление вывода в конец существующего файла , обозначаемое «двойной стрелкой» «>>» (Рис. 1-31).

 

Рис. 1-31

 

Как и перенаправление вывода в файл, перенаправление вывода в конец файла может применяться совместно с переназначением ввода.

Важно понимать, что возможность переназначения ввода-вывода является свойством не отдельных программ, а системы в целом. Символы перенаправления и соответствующие имена файлов не  передаются самим командам в качестве аргументов. Оболочка самостоятельно назначает файлы ввода-вывода любой команды. В частности, можно переназначить вывод любой из рассматривавшихся выше команд, например, «ls» (Рис. 1-32).

 

Рис. 1-32

 

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

 

Рис. 1-33

 

В примере на Рис. 1-33 сообщение об отсутствии файла «Вечера_3» было выведено на терминал, хотя стандартный вывод был перенаправлен в файл «список».

Перенаправить вывод ошибок можно, использовав конструкцию «2>» со следующим за ней именем файла (Рис. 1-34).

 

Рис.1-34

 

Двойка перед символом перенаправления в этой конструкции означает порядковый номер (дескриптор) канала ввода-вывода; стандартный ввод и стандартный вывод имеют дескрипторы 0 и 1, соответственно25, а запись «<», «>», «>>» является сокращением от «0<», «1>», «1>>», соответственно26.

Так же, как и стандартный вывод, вывод ошибок может быть переназначен в конец существующего файла конструкцией «2>>». Если же необходимо переназначить и стандартный вывод, и вывод ошибок в один файл, в командную строку следует, помимо переназначения стандартного вывода включить еще и конструкцию «2>&1», означающую «переназначить второй канал туда же, куда и первый» (Рис. 1-35).

 

Рис. 1-35

 

Стандартные файлы-устройства

Бывает желательно подавить стандартный вывод или вывод ошибок вообще. Некоторые команды предусматривают для этого особые ключи, но в общем случае можно воспользоваться все той же возможностью переназначения вывода. Для этого в любой стандартной системе существует специальный файл, представляющий собою фиктивное «нуль-устройство». Его полное имя «/dev/null». Запись в него любых данных не приводит к какому-либо результату, они как бы «бесследно исчезают»27. В «/dev/null» можно переназначить как стандартный вывод, так и вывод ошибок.

На «/dev/null» можно также переназначить и стандартный ввод; из него всегда читается пустой файл: подача команды «cat </dev/null >пустой_файл» приведет к появлению в текущем каталоге пустого файла «пустой_файл» (или опустошению существующего файла с таким именем).

Еще один интересный специальный файл-устройство – «/dev/tty». Это весьма абстрактное устройство, соответствующее терминалу, с которого запущена оболочка. Перенаправление вывода в или ввода из этого устройства не дает никакого видимого эффекта, поскольку совпадает с умолчанием (можно считать, что, если в команде явным образом не присутствуют перенаправления, ввод-вывод неявным образом направлен так: «</dev/tty >/dev/tty 2>/dev/tty»), но его указание может пригодиться для команд, вводящих текст из файла, указанного в качестве операнда, или выводящих текст в такой файл.

Если Алиса взглянет на перечисленные файлы с помощью команды «ls -l» (Рис. 1-36), она обнаружит, что в поле «тип» присутствует не встречавшийся до сих пор символ «c».

 

Рис. 1-36

 

Символ «c» означает «устройство с посимвольным вводом-выводом»28.

Эти файлы устройств должны присутствовать в любой стандартной открытой системе, так же, как и содержащий их каталог «/dev/». Кроме них, в большинстве реализаций этот каталог содержит множество (сотни или даже тысячи) файлов (иногда организованных в подкаталоги), представляющих различные физические или виртуальные устройства. Любое устройство в открытой ОС представлено в виде файла . Некоторые из них (например, терминалы) представляют собой устройства с посимвольным вводом-выводом, некоторые (например, магнитные диски) – с поблочным. Тип файла-устройства с поблочным вводом-выводом обозначается буквой «b».

Оболочка как команда

Пожалуй, наиболее убедительной демонстрацией единства принципов открытых систем является следующий пример. Запишем в файл «сценарий» строки, соответствующие каким-либо уже известным нам командам (например, «date», «cal») и дадим команду «sh <сценарий» (Рис. 1-37).

 

Рис. 1-37

 

Команда «sh» является ни чем иным, как запуском еще одной оболочки, такой же29, как та, с которой Алиса работает, вводя команды с терминала. Поскольку ввод перенаправлен, команды читаются не с терминала, а из файла.

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

«Владение» файлом и «права» на него

Рассмотрим следующий пример (Рис. 1-38).

 

Рис. 1-38

 

Алиса известными нам уже командами «touch» и «ls» создает файл «файл» и убеждается в том, что он на самом деле создан. Затем она выполняет команду «chmod u-w файл» и обнаруживает, что поле «тип и права доступа» в выдаче «длинного» списка файлов претерпело некоторые изменения. Попытка перенаправить в этот файл ввод порождает сообщение оболочки «В доступе отказано».

Вспомним еще раз значения полей в «длинном» формате списка файлов, получаемого по команде «ls -l» (Рис. 1-39).

 

Рис. 1-39

 

Вот как устроено поле «тип и права» (Рис. 1-40).

 

Рис. 1-40

 

Оно всегда содержит десять символов. Значение первого символа нам уже известно: это «тип файла», которому могут соответствовать «-» (обычный файл), «d» (каталог) и некоторые другие символы, соответствующие специальным файлам (таким, как файлы устройств).

Остальные девять символов составляют три триады, выражающие права на файл  в так называемой «rwx»-нотации. Они соответствуют трем категориям пользователей, определяемым относительно каждого файла.

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

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

В примере имя группы совпадает с именем пользователя31, но это разные сущности.

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

Для каждой категории определяются отдельные «правомочия» доступа к файлу.

Правомочие чтения разрешает чтение содержимого файла. Значение этого символа может быть «-» (запрещено) или «r» (разрешено; от англ. «read» («читать»)).

Правомочие записи разрешает модификацию файла, его значение может быть «-» (запрещено) или «w» (разрешено; от англ. «write» («писать»)).

Правомочие исполнения разрешает выполнение программы, содержащейся в файле, путем указания ее имени. Значение этого бита может быть «-» (запрещено) или «х» (разрешено; от англ. «eXecute» («исполнять»))32. Зачем нужно правомочие исполнения, мы рассмотрим ниже.

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

Изменять права доступа к файлу может лишь его владелец (или главный пользователь системы). Для этого служит команда «chmod» (от англ. «change mode» («изменить режим» доступа к файлу), уже встретившаяся нам в примере выше. Синтаксис этой команды поддерживает две нотации – символическую и числовую. Мы рассмотрим лишь символическую.

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

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

«u» – владелец файла; от англ. «user» («пользователь»));

«g» – группа-владелец файла; от англ. «group» («группа»));

«o» – остальные пользователи; от англ. «other» («прочие»)).

«a» – все пользователи (от англ. «all» («все»)), это сокращенная запись для «ugo».

Вид назначения прав может быть трояким:

«+» – добавить правомочия;

«-» – отнять правомочия;

«=» – установить права, в точности соответствующие назначаемым.

Назначаемые правомочия обозначаются последовательностями уже известных нам букв «rwx»-нотации «r», «w», «x», соответствующим правам на чтение, запись и исполнение.

Таким образом,

«chmod u-w файл» отнимет правомочие записи у владельца;

«chmod g+rw файл» добавит правомочия чтения и записи группе-владельцу;

«chmod go=r» установит правомочия группы-владельца и прочих пользователей в точности равными «только чтению»;

«chmod a+x» добавит правомочие исполнения всем пользователям;

«chmod u=rwx,g=rw,o=r» установит правомочия чтения, записи и исполнения для пользователя, чтения и записи для группы и чтения для всех остальных.

Маска прав по умолчанию

Когда пользователь создает файл (командой «touch» или перенаправлением вывода другой команды), права доступа к нему устанавливаются равными маске прав по умолчанию , за исключением того, что правомочие исполнения обычному файлу не присваиваются. Права по умолчанию задаются командой «umask».

Команда «umask -S» без параметров выводит в символическом виде маску прав по умолчанию. Команда «umask» с параметром в «ugo»-нотации (такой же, как у команды «chmod») добавляет, отнимает или устанавливает права в маске прав.

 

Рис. 1-41

 

В примере на Рис. 1-41 Алиса выводит маску, создает файл «файл_1», убеждается в том, что права на вновь созданный файл соответствуют маске, отнимает у прочих пользователей вновь создаваемых файлов правомочие чтения, создает файл «файл_2» и убеждается в том, что права на него соответствуют новому значению маски.

Информация о работе Свободные программы и системы в школе