Основы операционных систем
Изучение теорий операционных систем. Исследование принципов построения и особенностей проектирования современных ОС. Сущность виртуальной памяти и алгоритма синхронизации. Рассмотрение операционной и файловой системы, система управления вводом-выводом.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | книга |
Язык | русский |
Дата добавления | 12.01.2010 |
Размер файла | 2,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Windows NT отслеживает и контролирует доступ как к объектам, которые пользователь может видеть посредством интерфейса (такие, как файлы и принтеры), так и к объектам, которые пользователь не может видеть (например, процессы и именованные каналы). Любопытно, что, помимо разрешающих записей, списки прав доступа содержат и запрещающие записи, чтобы пользователь, которому доступ к какому-либо объекту запрещен, не смог получить его как член какой-либо группы, которой этот доступ предоставлен.
Система защиты ОС Windows NT состоит из следующих компонентов:
Процедуры регистрации (Logon Processes), которые обрабатывают запросы пользователей на вход в систему. Они включают в себя начальную интерактивную процедуру, отображающую начальный диалоге пользователем на экране и удаленные процедуры входа, которые позволяют удаленным пользователям получить доступ с рабочей станции сети к серверным процессам Windows NT.
Подсистемы локальной авторизации (Local Security Authority, LSA), которая гарантирует, что пользователь имеет разрешение на доступ в систему. Этот компонент -- центральный для системы защиты Windows NT. Он порождает маркеры доступа, управляет локальной политикой безопасности и предоставляет интерактивным пользователям аутентификационные услуги. LSA также контролирует политику аудита и ведет журнал, в котором сохраняются сообщения, порождаемые диспетчером доступа.
Менеджера учета (Security Account Manager, SAM), который управляет базой данных учета пользователей. Эта база данных содержит информацию обо всех пользователях и группах пользователей. SAM предоставляет услуги по легализации пользователей, применяющиеся в LSA.
Диспетчера доступа (Security Reference Monitor, SRM), который проверяет, имеет ли пользователь право на доступ к объекту и на выполнение тех действий, которые он пытается совершить. Этот компонент обеспечивает легализацию доступа и политику аудита, определяемые LSA. Он предоставляет услуги для программ супервизорного и пользовательского режимов, для того чтобы гарантировать, что пользователи и процессы, осуществляющие попытки доступа к объекту, имеют необходимые права. Данный компонент также порождает сообщения службы аудита, когда это необходимо.
Microsoft Windows NT -- относительно новая ОС, которая была спроектирована для поддержки разнообразных защитных механизмов, от минимальных до С2, и безопасность которой наиболее продумана. Дефолт-ный уровень называется минимальным, но он легко может быть доведен системным администратором до желаемого уровня.
Заключение
Решение вопросов безопасности операционных систем обусловлено их архитектурными особенностями и связано с правильной организацией идентификации и аутентификации, авторизации и аудита.
Наиболее простой подход к аутентификации -- применение пользовательского пароля. Пароли уязвимы, значительная часть попыток несанкционированного доступа в систему связана с компрометацией паролей.
Авторизация связана со специфицированием совокупности аппаратных и программных объектов, нуждающихся в защите. Для защиты объекта устанавливаются права доступа к нему. Набор прав доступа определяет домен безопасности. Формальное описание модели защиты осуществляется с помощью матрицы доступа, которая может храниться в виде списков прав доступа или перечней возможностей.
Аудит системы заключается в регистрации специальных данных о различных событиях, происходящих в системе и так или иначе влияющих на состояние безопасности компьютерной системы.
Среди современных ОС вопросы безопасности лучше всего продуманы в ОС Windows NT.
Семинары
Семинары 1-2. Введение в курс практических занятий. Знакомство с операционной системой UNIX
Введение в курс практических занятий. Краткая история операционной системы UNIX, ее структура. Системные вызовы и библиотека libc. Понятия login и password. Упрощенное понятие об устройстве файловой системы в UNIX. Полные имена файлов. Понятие о текущей директории. Команда pwd. Относительные имена файлов. Домашняя директория пользователя и ее определение. Команда man -- универсальный справочник. Команды cd -- смены текущей директории и Is -- просмотра состава директории. Команда cat и создание файла. Перенаправление ввода и вывода. Простейшие команды для работы с файлами -- ср, rm, mkdir, mv. История редактирования файлов -- ed, vi. Система Midnight Commander -- mc. Встроенный mc редактор и редактор joe. Пользователь и группа. Команды chown и chgrp. Права доступа к файлу. Команда Is с опциями -al. Использование команд chmod и umask. Системные вызовы getuid и getgid. Компиляция программ на языке С в UNIX и запуск их на счет.
Ключевые слова: системный вызов, переменная errno, функция perror, login, password, полное имя файла, относительное имя файла, домашняя директория, текущая директория, команды man, cd, Is, ср, mv, rm, mkdir, cat, chown, chgrp, chmod, umask, маска создания файлов текущего процесса, идентификатор пользователя, UID, идентификатор группы пользователей, GID, системные вызовы getuid, getgid.
Введение в курс практических занятий
Настоящий курс практических занятий является одной из первых известных авторам попыток систематически проиллюстрировать лекционный курс «Основы операционных систем» на примере конкретной операционной системы, а именно -- операционной системы UNIX.
Необходимость связывания систематического изложения материала семинарских и практических занятий с материалом лекций возникла в процессе становления базового четырехсеместрового набора курсов по информатике в МФТИ. Новизна излагаемого материала для многих преподавателей заставила лекторов для соблюдения некоторого стандарта обучения готовить по каждой теме методические указания для участников семинаров, и эти указания, как показал опыт, могут с успехом использоваться и студентами, в том числе для самостоятельного обучения. Обкатанная версия этих методических указаний -- расширенная, дополненная и модифицированная по результатам многочисленных обсуждений -- предлагается сейчас вашему вниманию.
Семестровый курс «Основы операционных систем» является третьим по счету курсом цикла «Информатика», которому предшествуют курсы «Алгоритмы и алгоритмические языки» и «Архитектура ЭВМ и язык Ассемблера». Предполагается, что к началу практических занятий студенты умеют программировать на языке С (с использованием функций стандартной библиотеки для работы с файлами и строками) и имеют представление о внутреннем устройстве ЭВМ.
Переход от обучения студентов информатике с использованием мэйнфреймов к обучению с использованием сетевых классов персональных компьютеров, свершившийся за последние двадцать лет, неизбежно наложил свой отпечаток на форму проведения практических занятий. Вместо раздельного проведения семинаров и практикума (лабораторных работ) появилось нечто смешанное -- семинарский практикум или практический семинар, когда изложение нового материала в течение одного занятия чередуется с короткими практическими программными работами. Именно в виде таких семинаров-практикумов и построен наш курс. Ввиду достаточно высокой сложности используемых программных конструкций мы решили приводить готовые примеры программ для иллюстрации рассматриваемых понятий с последующей их модификацией студентами. Это позволило увеличить насыщенность занятий и за семестровый курс охватить большее количество материала.
Для иллюстрации лекций была выбрана операционная система UNIX, как наиболее открытая, изящная и простая для понимания, хотя создание подобного практического курса возможно и для других операционных систем, например для Windows NT.
В целом практический курс включает в себя 16 занятий, одно из которых в середине семестра -- между семинарами 9 и 10-11 -- посвящено проведению контрольной работы по материалам лекций. Некоторым темам выделено по два занятия, и соответствующие семинары имеют сдвоенные номера. Естественно, разбиение тем на занятия является достаточно условным; желательно лишь, чтобы они непосредственно следовали за лекциями, на которых основываются.
Далее мы переходим к изложению материала семинарско-практиче-ского курса.
По своему содержанию материал текущих семинаров 1--2 является наиболее критичным по отношению к используемому виду операционной системы и политике администрирования. Поэтому многие вопросы будут содержать ссылку «узнайте у своего системного администратора».
Прежде чем приступать к занятиям, необходимо обеспечить наличие пользовательских аккаунтов для обучающихся. «Узнайте у своего системного администратора», как это сделать.
В тексте семинаров программные конструкции, включая имена системных вызовов, стандартных функций и команды оболочки операционной системы, выделены другим шрифтом. В UNIX системные вызовы и команды оболочки инициируют сложные последовательности действий, затрагивая различные аспекты функционирования операционной системы. Как правило, в рамках одного семинара полное объяснение всех нюансов их поведения является невозможным. Поэтому подробные описания большинства используемых системных вызовов, системных функций и некоторых команд оболочки операционной системы при первой встрече с ними вынесены из основного текста на серый фон и обведены рамочкой, а в основном тексте рассматриваются только те детали их описания, для понимания которых хватает накопленных знаний.
Если какой-либо параметр у команды оболочки является необязательным, он будет указываться в квадратных скобках, например, [who]. В случае, когда возможен выбор только одного из нескольких возможных вариантов параметров, варианты будут перечисляться в фигурных скобках и разделяться вертикальной чертой, например, {+ I - I =}.
Краткая история операционной системы UNIX, ее структура
На первой лекции мы разобрали содержание понятия «операционная система», обсудили функции операционных систем и способы их построения. Все материалы первой и последующих лекций мы будем иллюстрировать практическими примерами, связанными с использованием одной из разновидностей операционной системы UNIX -- операционной системы Linux, хотя постараемся не связывать свой рассказ именно с ее особенностями.
Ядро операционной системы Linux представляет собой монолитную систему. При компиляции ядра Linux можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра -- так называемых модулей. В момент загрузки модуля его код загружается для исполнения в привилегированном режиме и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
Свой нынешний вид эта операционная система обрела в результате длительной эволюции UNIX-образных операционных систем. История развития UNIX подробно освещена практически во всей литературе, посвященной вычислительной технике. Как правило, это во многом один и тот же текст, с небольшими изменениями кочующий из одного издания в другое, и нам не хотелось бы повторяться. Мы просто сошлемся на достаточно подробное изложение в книге [Олифер, 2001] или на оригинальную работу одного из родоначальников UNIX [Ritchie, 1984]. Для нас наиболее важным во всей этой истории является существование двух стержневых линий эволюции -- линии System V и линии BSD, поскольку в процессе обучения мы будем сталкиваться с различиями в их реализации.
Системные вызовы и библиотека libc
Основной постоянно функционирующей частью операционной системы UNIX является ее ядро. Другие программы (системные или пользовательские) могут общаться с ядром посредством системных вызовов, которые по сути дела являются прямыми точками входа программ в ядро. При исполнении системного вызова программа пользователя временно переходит в привилегированный режим, получая доступ к данным или устройствам, которые недоступны при работе в режиме пользователя.
Реальные машинные команды, необходмые для активизации системных вызовов, естественно, отличаются от машины к машине, наряду со способом передачи параметров и результатов между вызывающей программой и ядром. Однако с точки зрения программиста на языке С использование системных вызовов ничем внешне не отличается от использования других функций стандартной ANSI библиотеки языка С, таких как функции работы со строками strlen () , strcpy () и т. д. Стандартная библиотека UNIX - libc -обеспечивает С-интерфейс к каждому системному вызову. Это приводит к тому, что системный вызов выглядит как функция на языке С для программиста. Более того, многие из уже известных вам стандартных функций, например функции для работы с файлами: f open () , f read () , fwrite () при реализации в операционной системе UNIX будут применять различные системные вызовы. По ходу курса нам придется познакомиться с большим количеством разнообразных системных вызовов и их С-интерфейсами.
Большинство системных вызовов, возвращающих целое значение, использует значение - 1 для оповещения о возникновении ошибки и значение большее или равное 0 -- при нормальном завершении. Системные вызовы, возвращающие указатели, обычно для идентификации ошибочной ситуации пользуются значением NULL. Для точного определения причины ошибки С-интерфейс предоставляет глобальную переменную errno, описанную в файле <errno .h> вместе с ее возможными значениями и их краткими определениями. Заметим, что анализировать значение переменной errno необходимо сразу после возникновения ошибочной ситуации, так как успешно завершившиеся системные вызовы не изменяют ее значения. Для получения символьной информации об ошибке на стандартном выводе программы для ошибок (по умолчанию экран терминала) может применяться стандартная иг-ЛХ-функция реггог ().
Функция
Прототип функции
#include <stdio.h> void реггог(char *str);
Описание функции
Функция реггог предназначена для вывода сообщения об ошибке, соответствующего значению системной переменной еггпо на стандартный поток вывода ошибок. Функция печатает содержимое строки st г (если параметр str не равен NULL), двоеточие, пробел и текст сообщения, соответствующий возникшей ошибке, с последующим символом перевода строки
('\п').
Понятия login и password
Операционная система UNIX является многопользовательской операционной системой. Для обеспечения безопасной работы пользователей и целостности системы доступ к ней должен быть санкционирован. Для каждого пользователя, которому разрешен вход в систему, заводится специальное регистрационное имя - username или login и сохраняется специальный пароль -- password, соответствующий этому имени. Как правило, при заведении нового пользователя начальное значение пароля для него задает системный администратор. После первого входа в систему пользователь должен изменить начальное значение пароля с помощью специальной команды. В дальнейшем он может в любой момент изменить пароль по своему желанию.
«Узнайте у своего системного администратора» регистрационные имена и пароли, установленные для обучающихся.
Вход в систему и смена пароля
Настало время первый раз войти в систему. Если в системе установлена графическая оболочка наряду с обычными алфавитно-цифровыми терминалами, лучше всего это сделать с алфавитно-цифрового терминала или его эмулятора. На экране появляется надпись, предлагающая ввести регистрационное имя, как правило, это «login:». Набрав свое регистрационное имя, нажмите клавишу <Enter>. Система запросит у вас пароль, соответствующий введенному имени, выдав специальное приглашение -- обычно «Password:». Внимательно наберите пароль, установленный для вас системным администратором, и нажмите клавишу <Enter>. Вводимый пароль на экране не отображается, поэтому набирайте его аккуратно! Если все было сделано правильно, у вас на экране появится приглашение к вводу команд операционной системы.
Пароль, установленный системным администратором, необходимо сменить. «Узнайте у своего системного администратора», какая команда для этого используется на вашей вычислительной системе (чаще всего это команда passwd или yppasswd). В большинстве UNIX-образных систем требуется, чтобы новый пароль имел не менее шести символов и содержал, по крайней мере, две не буквы и две не цифры. «Узнайте у своего системного администратора», какие ограничения на новый пароль существуют в вашей операционной системе.
Придумайте новый пароль и хорошенько его запомните, а лучше запишите. Пароли в операционной системе хранятся в закодированном виде, и если вы его забыли, никто не сможет помочь вам его вспомнить. Единственное, что может сделать системный администратор, так это установить вам новый пароль. «Узнайте у своего системного администратора», что нужно предпринять, если вы забыли пароль.
Введите команду для смены пароля. Обычно система просит сначала набрать старый пароль, затем ввести новый и подтвердить правильность его набора повторным введением. После смены пароля уже никто посторонний не сможет войти в систему под вашим регистрационным именем.
Congratulations!!! Теперь вы полноценный пользователь операционной системы UNIX.
Упрощенное понятие об устройстве файловой системы в UNIX. Полные и относительные имена файлов
В операционной системе UNIX существует три базовых понятия: «процесс», «файл» и «пользователь». С понятием «пользователь» мы только что уже столкнулись и будем сталкиваться в дальнейшем при изучении работы операционной системы UNIX. Понятие «процесс» характеризует динамическую сторону происходящего в вычислительной системе, оно будет подробно обсуждаться в лекции 2 и в описании последующих семинаров. Понятие «файл» характеризует статическую сторону вычислительной системы.
Из предыдущего опыта работы с вычислительной техникой вы уже имеете некоторое представление о файле как об именованном наборе данных, хранящемся где-нибудь на магнитных дисках или лентах. Для нашего сегодняшнего обсуждения нам достаточно такого понимания, чтобы разобраться в том, как организована работа с файлами в операционной системе UNIX. Более подробное рассмотрение понятия «файл» и организации файловых систем для операционных систем в целом будет приведено в лекциях 11 -- 12, а также на семинарах 11 -- 12, посвященных организации файловых систем в UNIX.
Все файлы, доступные в операционной системе UNIX, как и в уже известных вам операционных системах, объединяются в древовидную логическую структуру. Файлы могут объединяться в каталоги или директории. Не существует файлов, которые не входили бы в состав какой-либо директории. Директории в свою очередь могут входить в состав других директорий. Допускается существование пустых директорий, в которые не входит ни один файл и ни одна другая директория (см. рис. 1--2.1). Среди всех директорий существует только одна директория, которая не входит в состав других директорий -- ее принято называть корневой. На настоящем уровне нашего незнания UNIX мы можем заключить, что в файловой системе UNIX присутствует, по крайней мере, два типа файлов: обычные файлы, которые могут содержать тексты программ, исполняемый код, данные и т. д. -- их принято называть регулярными файлами, и директории.
Каждому файлу (регулярному или директории) должно быть присвоено имя. В различных версиях операционной системы UNIX существуют те или иные ограничения на построение имени файла. В стандарте POSIX на интерфейс системных вызовов для операционной системы UNIX содержится лишь три явных ограничения:
* Нельзя создавать имена большей длины, чем это предусмотрено операционной системой (для Linux -- 255 символов).
Директория
/
Директория
usr
Директория
d
Файл
my file
Директория
b
Файл
ааа. с
Директория
mydir
Файл
ааа. с
Рис. 1--2.1. Пример структуры файловой системы
Нельзя использовать символ NUL (не путать с указателем NULL!) -- он же символ с нулевым кодом, он же признак конца строки в языке С.
Нельзя использовать символ '/'.
От себя добавим, что также нежелательно применять символы «звездочка» - «*», «знак вопроса» -- «?», «кавычка» - «\"», «апостроф» -- «\'», «пробел» -- « » и «обратный слэш» -- «\\» (символы записаны в нотации символьных констант языка С).
Единственным исключением является корневая директория, которая всегда имеет имя «/». Эта же директория по вполне понятным причинам представляет собой единственный файл, который должен иметь уникальное имя во всей файловой системе. Для всех остальных файлов имена должны быть уникальными только в рамках той директории, в которую они непосредственно входят. Каким же образом отличить два файла с именами "ааа.с", входящими в директории "Ь" и "с" на рисунке 1--2.1, чтобы было понятно, о каком из них идет речь? Здесь на помощь приходит понятие полного имени файла.
Давайте мысленно построим путь от корневой вершины дерева файлов к интересующему нас файлу и выпишем все имена файлов (т. е. узлов дерева), встречающиеся на нашем пути, например, " / usr b ааа. с"». В этой последовательности первым будет всегда стоять имя корневой директории, а последним -- имя интересующего нас файла. Отделим имена узлов друг от друга в этой записи не пробелами, а символами «/», за исключением имени корневой директории и следующего за ним имени ("/usr/b/ааа.с")* Полученная запись однозначно идентифицирует файл во всей логической конструкции файловой системы. Такая запись и получила название полного имени файла.
Понятие о текущей директории. Команда pwd. Относительные имена файлов
Полные имена файлов могут включать в себя достаточно много имен директорий и быть очень длинными, с ними не всегда удобно работать. В то же время, существуют такие понятия как текущая или рабочая директория и относительное имя файла.
Для каждой работающей программы в операционной системе, включая командный интерпретатор (shell), который обрабатывает вводимые команды и высвечивает приглашение к их вводу, одна из директорий вло-гической структуре файловой системы назначается текущей или рабочей для данной программы. Узнать, какая директория является текущей для вашего командного интерпретатора, можно с помощью команды операционной системы pwd.
Команда ржі
Синтаксис команды
рисі
Описание команды
Команда ригсі выводит полное имя текущей директории для работающего командного интерпретатора.
Зная текущую директорию, мы можем проложить путь по графу файлов от текущей директории к интересующему нас файлу. Запишем последовательность узлов, которые встретятся на этом пути, следующим образом. Узел, соответствующий текущей директории, в запись не включаем. При движении по направлению к корневому каталогу каждый узел будем обозначать двумя символами «точка» -- «..», а при движении по направлению от корневого каталога будем записывать имя встретившегося узла. Разделим обозначения, относящиеся к разным узлам в этой записи, символами «/». Полученную строку принято называть относительным именем файла. Относительные имена файлов меняются при смене рабочего каталога. Так, в нашем примере, если рабочий каталог -- это директория "/о1", то для файла "/иБг/Ь/ааа. с" относительным именем будет ". . /иБг/Ь/ааа. с", а если рабочий каталог -- это директория " /мбг/Ъ", то его относительное имя -- " ааа. с".
Для полноты картины имя текущего каталога можно вставлять в относительное имя файла, обозначая текущий каталог одиночным символом «точка» -- «.». Тогда наши относительные имена будут выглядеть как ". / . . /иэг/Ь/ааа. с" и ". /ааа. с" соответственно.
Программы, запущенные с помощью командного интерпретатора, будут иметь в качестве рабочей директории его рабочую директорию, если внутри этих программ не изменить ее расположение с помощью специального системного вызова.
Домашняя директория пользователя и ее определение
Для каждого нового пользователя в системе заводится специальная директория, которая становится текущей сразу после его входа в систему. Эта директория получила название домашней директории пользователя. Воспользуйтесь командой рмо1 для определения своей домашней директории.
Команда man - универсальный справочник
По ходу изучения операционной системы UNIX вам часто будет требоваться информация о том, что делает та или иная команда или системный вызов, какие у них параметры и опции, для чего предназначены некоторые системные файлы, каков их формат и т. д. Мы постарались, по мере возможности, включить описания большинства используемых в курсе команд и системных вызовов в наш текст. Однако иногда для получения более полной информации мы отсылаем читателей к UNIX Manual -- руководству пооперационной системе UNIX. К счастью, большая часть информации в UNIX Manual доступна в интерактивном режиме с помощью утилиты man.
Пользоваться утилитой man достаточно просто -- наберите команду
man имя
где имя -- это имя интересующей вас команды, утилиты, системного вызова, библиотечной функции или файла. Попробуйте с ее помощью посмотреть информацию о команде pwd.
Чтобы пролистать страницу полученного описания, если оно не поместилось на экране полностью, следует нажать клавишу <пробел>. Для прокрутки одной строки воспользуйтесь клавишей <Enter>. Вернуться на страницу назад позволит одновременное нажатие клавиш <Ctrl> и <Ь>. Выйти из режима просмотра информации можно с помощью клавиши <q>.
Иногда имена команд интерпретатора и системных вызовов или какие-либо еще имена совпадают. Тогда чтобы найти интересующую вас информацию, необходимо задать утилите man категорию, к которой относится эта информация (номер раздела). Деление информации по категориям может слегка отличаться от одной версии UNIX к другой. В Linux, например, принято следующее разделение:
Исполняемые файлы или команды интерпретатора.
Системные вызовы.
Библиотечные функции.
Специальные файлы (обычно файлы устройств) -- что это такое, вы узнаете на семинарах 13--14.
Формат системных файлов и принятые соглашения.
Игры (обычно отсутствуют).
Макропакеты и утилиты -- такие как сам man.
Команды системного администратора.
Подпрограммы ядра (нестандартный раздел).
Если вы знаете раздел, к которому относится информация, то утилиту man можно вызвать в Linux с дополнительным параметром man номер_раздела имя
В других операционных системах этот вызов может выглядеть иначе. Для получения точной информации о разбиении на разделы, форме указания номера раздела и дополнительных возможностях утилиты man наберите команду
man man
Команды cd - для смены текущей директории и Is - для просмотра состава директории
Для смены текущей директории командного интерпретатора можно воспользоваться командой cd (change directory). Для этого необходимо набрать команду в виде
cd имя_директории
где имя_директории -- полное или относительное имя директории, которую вы хотите сделать текущей. Команда cd без параметров сделает текущей директорией вашу домашнюю директорию.
Просмотреть содержимое текущей или любой другой директории можно, воспользовавшись командой Is (от list). Если ввести ее без параметров, эта команда распечатает вам список файлов, находящихся в текущей директории. Если же в качестве параметра задать полное или относительное имя директории
Is имя_директории
то она распечатает список файлов в указанной директории. Надо отметить, что в полученный список не войдут файлы, имена которых начинаются с символа «точка» -- «.». Такие файлы обычно создаются различными системными программами для своих целей (например, для настройки). Посмотреть полный список файлов можно, дополнительно указав команде Is опцию -а, т.е. набрав ее в виде
Is -а
или
Is -а имя_директории
У команды Is существует и много других опций, часть из которых мы еще рассмотрим на семинарах. Для получения полной информации о команде Is воспользуйтесь утилитой man.
Путешествие по структуре файловой системы
Пользуясь командами cd, Is и pwd, попутешествуйте по структуре файловой системы и просмотрите ее содержимое. Возможно, зайти в некоторые директории или посмотреть их содержимое вам не удастся. Это связано с работой механизма защиты файлов и директорий, о котором мы поговорим позже. Не забудьте в конце путешествия вернуться в свою домашнюю директорию.
Команда cat и создание файла. Перенаправление ввода и вывода
Мы умеем перемещаться по логической структуре файловой системы и рассматривать ее содержимое. Хотелось бы уметь еще и просматривать содержимое файлов, и создавать их. Для просмотра содержимого небольшого текстового файла на экране можно воспользоваться командой cat. Если набрать ее в виде
cat имя_файла
то на экран выплеснется все его содержимое.
Внимание! Не пытайтесь рассматривать на экране содержимое директорий -- все равно не получится! Не пытайтесь просматривать содержимое неизвестных файлов, особенно если вы не знаете, текстовый он или бинарный. Вывод на экран бинарного файла может привести к непредсказуемому поведению вашего терминала.
Если даже ваш файл и текстовый, но большой, то все равно вы увидите только его последнюю страницу. Большой текстовый файл удобнее рассматривать с помощью утилиты more (описание ее использования вы найдете в UNIX Manual). Команда cat будет нам интересна с другой точки зрения.
Если мы в качестве параметров для команды cat зададим не одно имя, а имена нескольких файлов
cat файл1 файл2 ... файлы
то система выдаст на экран их содержимое в указанном порядке. Вывод команды cat можно перенаправить с экрана терминала в какой-нибудь файл, воспользовавшись символом перенаправления выходного потока данных -- знаком «больше» -- «>». Команда
cat файл1 файл2 ... файлы > файл_результата
сольет содержимое всех файлов, чьи имена стоят перед знаком «>», воедино в файл_результата -- конкатенирует их (от слова concatenate и произошло ее название). Прием перенаправления выходных данных со стандартного потока вывода (экрана) в файл является стандартным для всех команд, выполняемых командным интерпретатором. Вы можете получить файл, содержащий список всех файлов текущей директории, если выполните команду Is -ас перенаправлением выходных данных:
Is -а > новый_файл
Если имена входных файлов для команды cat не заданы, то она будет использовать в качестве входных данных информацию, которая вводится с клавиатуры, до тех пор, пока вы не наберете признак окончания ввода -- комбинацию клавиш <CTRL> и <d>.
Таким образом, команда
cat > новый_файл
позволяет создать новый текстовый файл с именем новый_файл и содержимым, которое пользователь введет с клавиатуры. У команды cat существует множество различных опций. Посмотреть ее полное описание можно в UNIX Manual.
Заметим, что наряду с перенаправлением выходных данных существует способ перенаправить входные данные. Если во время выполнения некоторой команды требуется ввести данные с клавиатуры, можно положить их заранее в файл, а затем перенаправить стандартный ввод этой команды с помощью знака «меньше» -- «<» и следующего за ним имени файла с входными данными. Другие варианты перенаправления потоков данных можно посмотреть в UNIX Manual для командного интерпретатора.
Создание файла с помощью команды cat
Убедитесь, что вы находитесь в своей домашней директории, и создайте с помощью команды cat новый текстовый файл. Просмотрите его содержимое.
Простейшие команды работы с файлами -ср, ГШ, mkdir, mv
Для нормальной работы с файлами необходимо не только уметь создавать файлы, просматривать их содержимое и перемещаться по логическому дереву файловой системы. Нужно уметь создавать собственные поддиректории, копировать и удалять файлы, переименовывать их. Это минимальный набор операций, не владея которым нельзя чувствовать себя уверенно при работе с компьютером.
Для создания новой поддиректории используется команда mkdir (сокращение от make directory). В простейшем виде команда выглядит следующим образом:
mkdir имя_директории
где имя_директории -- полное или относительное имя создаваемой директории. У команды mkdir имеется набор опций, описание которых можно просмотреть с помощью утилиты man.
Команда ср
Синтаксис команды
ср файл_источник файл_назначения
ср файл! файл2 ... файлИ дир_назначения
ср -г дир_источник дир_назначения
ср -г дир1 дир2 ... ffipN дир_назначения
Описание команды
Настоящее описание является не полным описанием команды ср, а кратким введением в ее использование. Для получения полного описания команды обратитесь к UNIX Manual. Команда ср в форме
ср файл_источник файл_назначения
служит для копирования одного файла с именем файл_источник в файл с именем
файл_назначения. Команда ср в форме
ср файл1 файл2 ... файлы дир_назначения
служит для копирования файла или файлов с именами файл1, файл2, ... <J>ararN в уже существующую директорию с именем дир_назначения под своими именами. Вместо имен копируемых файлов могут использоваться их шаблоны.
Команда ср в форме
ср -г дир_источник дир_назначения
служит для рекурсивного копирования одной директории с именем дир_источник в новую директорию с именем дир_назначения. Если директория дир_назначения уже существует, то мы получаем команду ср в следующей форме:
ср -г дир1 дир2 ... щрН дир_назначения
Такая команда служит для рекурсивного копирования директории или директорий с именами дир1,дир2, ... дирК в уже ехидствующую директорию с именем дир_назначения под свои-ш собственными именами. Вместо имен копируемых директорий могут использоваться их шаблоны.
Для копирования файлов может использоваться команда ср (сокращение от сору). Команда ср умеет копировать не только отдельный файл, но и набор файлов, и даже директорию целиком вместе со всеми входящими в нее поддиректориями (рекурсивное копирование). Для задания набора файлов могут использоваться шаблоны имен файлов. Точно так же шаблон имени может быть использован и в командах переименования файлов и их удаления, которые мы рассмотрим ниже.
Шаблоны имен файлов
Шаблоны имен файлов могут применяться в качестве параметра для задания набора имен файлов во многих командах операционной системы. При использовании шаблона просматривается вся совокупность имен файлов, находящихся в файловой системе, и те имена, которые удовлетворяют шаблону, включаются в набор. В общем случае шаблоны могут задаваться с использованием следующих метасимволов:
* - соответствует всем цепочкам литер, включая пустую;
? - соответствует всем одиночным литерам;
[... ] - соответствует любой литере, заключенной в скобки. Пара литер, разделенных знаком минус, задает диапазон литер.
Так, например, шаблону *. с удовлетворяют все файлы текущей директории, чьи имена заканчиваются на .с. Шаблону [а-с! * удовлетворяют все файлы текущей директории, чьи имена начинаются с букв а, Ь, с, & Существует лишь ограничение на использование метасимвола * в начале имени файла, например, в случае шаблона *с. Для таких шаблонов имена файлов, начинающиеся с символа точка, считаются не удовлетворяющими шаблону.
Для удаления файлов или директорий применяется команда rm (сокращение от remove). Если вы хотите удалить один или несколько регулярных файлов, то простейший вид команды rm будет выглядеть следующим образом: rm файл! файл2 . . . файлК
где файл!, файл2, . . . файлы -- полные или относительные имена регулярных файлов, которые требуется удалить. Вместо имен файлов могут использоваться их шаблоны. Если вы хотите удалить одну или несколько директорий вместе с их содержимым (рекурсивное удаление), то к команде добавляется опция-г:
rm -г дир! дир2 ... дирК
где дир1, дир2, . . . дирЫ -- полные или относительные имена директорий, которые нужно удалить. Вместо непосредственно имен директорий также могут использоваться их шаблоны. У команды rm есть еще набор полезных опций, которые описаны в UNIX Manual. На самом деле процесс удаления файлов не так прост, как кажется на первый взгляд. Более подробно он будет рассмотрен нами на семинарах 11-12, когда мы будем обсуждать операции над файлами в операционной системе UNIX.
Команда mv
Синтаксис команды
mv имя_источника имя_назначения
mv имя! имя2 ... имяЯ дир_назначения
Описание команды
Настоящее описание не является полным описанием команды mv, а служит кратким введением в ее использование. Для получения полного описания команды обращайтесь к UNIX Manual. Команда mv в форме
mv имя_источника имя_назначения
служит для переименования или перемещения одного файла (неважно, регулярного или директории) с именем имя_источника в файл с именем имя_назначения. При этом перед выполнением команды файла с именем имя_на значения существовать не должно. Команда mv в форме
mv имя! имя2 ... имяЯ дир_назначения
служит для перемещения файла или файлов (неважно, регулярных файлов или директорий) с именами имя1, имя2, ... имяИ в уже существующую директорию с именем дир_назначения под собственными именами. Вместо имен перемещаемых файлов могут использоваться их шаблоны.
Командой удаления файлов и директорий следует пользоваться с осторожностью. Удаленную информацию восстановить невозможно. Если вы системный администратор и ваша текущая директория -- это корневая директория, пожалуйста, не выполняйте команду rm -г *!
Для переименования файла или его перемещения в другой каталог применяется команда mv (сокращение от move). Для задания имен перемещаемых файлов в ней тоже можно использовать их шаблоны.
История редактирования файлов - ed, vi
Полученные знания уже позволяют нам достаточно свободно оперировать файлами. Но что нам делать, если потребуется изменить содержимое файла,отредактировать его?
Когда появились первые варианты операционной системы UNIX, устройства ввода и отображения информации существенно отличались от существующих сегодня. На клавиатурах присутствовали только алфавитно-цифровые клавиши (не было даже клавиш курсоров), а дисплеи не предполагали экранного редактирования. Поэтому первый редактор операционной системы UNIX -- редактор ed -- требовал от пользователя строгого указания того, что и как будет редактироваться с помощью специальных команд. Так, например, для замены первого сочетания символов «га» на «ru» в одиннадцатой строке редактируемого файла потребовалось бы ввести команду
11 s/ra/ru
Редактор ed Описание редактора ed можно найти, например, в [Баурн, 1986). В электронном виде описание есть в документе http://cs.mipt.nj/docs/comp/rus/os/unix/user_guide/unixuser/gl6_l.htm. , по существу, являлся построчечным редактором. Впоследствии появился экранный редактор -- vi Описание редактора vi а также можно найти в [Баурн, 1986]. В электронном виде описание есть в документе http://cs.mipt.ru/docs/comp/rus/os/unix/user_guide/unixuser/gl7_l .htm, однако и он требовал строгого указания того, что и как в текущей позиции на экране мы должны сделать, или каким образом изменить текущую позицию, с помощью специальных команд, соответствующих алфавитно-цифровым клавишам. Эти редакторы могут показаться нам сейчас анахронизмами, но они до сих пор входят в состав всех вариантов UNIX и иногда (например, при работе с удаленной машиной по медленному каналу связи) являются единственным средством, позволяющим удаленно редактировать файл.
Система Midnight Commander - mc. Встроенный mc редактор и редактор joe
Наверное, вы уже убедились в том, что работа в UNIX исключительно на уровне командного интерпретатора и встроенных редакторов далека от уже привычных для нас удобств. Но не все так плохо. Существуют разнообразные пакеты, облегчающие задачу пользователя в UNIX. К таким пакетам следует отнести Midnight Commander -- аналог программ Norton Commander для DOS и FAR для Windows 9х и NT -- со своим встроенным редактором, запускаемый командой тс, и экранный редактор joe. Информацию о них можно найти в UNIX Manual. Большими возможностями обладают многофункциональные текстовые редакторы, например, emacs*.
Войдите в тс и попробуйте перемещаться по директориям, создавать и редактировать файлы.
Пользователь и группа. Команды chown и chgrp. Права доступа к файлу
Как уже говорилось, для входа в операционную систему UNIX каждый пользователь должен быть зарегистрирован в ней под определенным именем. Вычислительные системы не умеют оперировать именами, поэтому каждому имени пользователя в системе соответствует некоторое числовое значение -- его идентификатор -- UID (User IDentificator).
Все пользователи в системе делятся на группы. Например, студенты одной учебной группы могут составлять отдельную группу пользователей. Группы пользователей также получают свои имена и соответствующие идентификационные номера -- GID (Group IDentificator). В одних версиях UNIX каждый пользователь может входить только в одну группу, в других -- в несколько групп.
Команда chown
Синтаксис команды
chown owner файлі файл2 ... файлЫ
Описание команды
* В электронном виде описание редактора emacs см. в документе http://cs.mipt.ru/docs/comp/rus/os/unix/userjjuide/emacs/index.html.
Команда chown предназначена для изменения собственника (хозяина) файлов. Настоящее описание не является полным описанием команды, а адаптировано применительно к данному курсу. Для получения полного описания обращайтесь к UNIX Manual. Нового собственника файла могут назначить только предыдущий собственник файла или системный администратор.
Параметр owner задает нового собственника файла в символьном виде, как его username, или в числовом виде, как его UID.
Параметры файл1, файл2, ... файлы - это имена файлов, для которых производится изменение собственника. Вместо имен могут использоваться их шаблоны.
Для каждого файла, созданного в файловой системе, запоминаются имена его хозяина и группы хозяев. Заметим, что группа хозяев не обязательно должна быть группой, в которую входит хозяин. Упрощенно можно считать, что в операционной системе Linux при создании файла его хозяином становится пользователь, создавший файл, а его группой хозяев -- группа, к которой этот пользователь принадлежит. Впоследствии хозяин файла или системный администратор могут передать его в собственность другому пользователю или изменить его группу хозяев с помощью команд chown и chgrp, описание которых можно найти в UNIX Manual.
Команда chgrp
Синтаксис команды
chgrp group файлі файл2 ... файлЫ
Описание команды
Команда chgrp предназначена для изменения группы собственников (хозяев) файлов. Настоящее описание не является полным описанием команды, а адаптировано применительно к данному курсу. Для получения полного описания обращайтесь к UNIX Manual. Новую группу собственников файла могут назначить только собственник файла или системный администратор.
Параметр group задает новую группу собственников файла в символьном виде, как имя группы, или в числовом виде, как ее GID.
Параметры файлі, файл2, ... файлы - это имена файлов, для которых производится изменение группы собственников. Вместо имен могут использоваться их шаблоны.
Как мы видим, для каждого файла выделяется три категории пользователей:
Пользователь, являющийся хозяином файла.
Пользователи, относящиеся к группе хозяев файла.
Все остальные пользователи.
Для каждой из этих категорий хозяин файла может определить различные права доступа к файлу. Различают три вида прав доступа: право на чтение файла -- г (от слова read), право на модификацию файла -- w (от слова write) и право на исполнение файла -- х (от слова execute). Для регулярных файлов смысл этих прав совпадает с указанным выше. Для директорий он несколько иной. Право чтения для каталогов позволяет читать имена файлов, находящихся в этом каталоге (и только имена). Поскольку «исполнять» директорию бессмысленно (как, впрочем, и неисполняемый регулярный файл), право доступа на исполнение для директорий меняет смысл: наличие этого права позволяет получить дополнительную информацию о файлах, входящих в каталог (их размер, кто их хозяин, дата создания и т. д.). Без этого права вы не сможете ни читать содержимое файлов, лежащих в директории, ни модифицировать их, ни исполнять. Право на исполнение также требуется для директории, чтобы сделать ее текущей, а также для всех директорий на пути к ней. Право записи для директории позволяет изменять ее содержимое: создавать и удалять в ней файлы, переименовывать их. Отметим, что для удаления файла достаточно иметь права записи и исполнения для директории, в которую входит данный файл, независимо от прав доступа к самому файлу.
Команда 1в с опциями -а1. Использование команд сптоо' и итавк
Получить подробную информацию о файлах в некоторой директории, включая имена хозяина, группы хозяев и права доступа, можно с помощью уже известной нам команды 1б с опциями -а1. В выдаче этой команды третья колонка слева содержит имена пользователей хозяев файлов, а четвертая колонка слева -- имена групп хозяев файла. Самая левая колонка содержит типы файлов и права доступа к ним. Тип файла определяет первый символ в наборе символов. Если это символ 'сГ, то тип файла -- директория, если там стоит символ то это -- регулярный файл. Следующие три символа определяют права доступа для хозяина файла, следующие три -- для пользователей, входящих в группу хозяев файла, и последние три -- для всех остальных пользователей. Наличие символа (г, ю или х), соответствующего праву, для некоторой категории пользователей означает, что данная категория пользователей обладает этим правом.
Вызовите команду 1б -а1 для своей домашней директории и проанализируйте ее выдачу.
Описание команды
Команда chmod предназначена для изменения прав доступа к одному или нескольким файлам. Настоящее описание не является полным описанием команды, а адаптировано применительно к данному курсу. Для получения полного описания обращайтесь к UNIX Manual. Права доступа к файлу могут менять только собственник (хозяин) файла или системный администратор.
Параметр who определяет, для каких категорий пользователей устанавливаются права доступа. Он может представлять собой один или несколько символов:
а - установка прав доступа для всех категорий пользователей. Если параметр who не задан, то по умолчанию применяется а. При определении прав доступа с этим значением заданные права устанавливаются с учетом значения маски создания файлов;
и - установка прав доступа для собственника файла;
g - установка прав доступа для пользователей, входящих в группу собственников файла; О - установка прав доступа для всех остальных пользователей. Операция, выполняемая над правами доступа для заданной категории пользователей, определяется одним из следующих символов: + - добавление прав доступа; -- отмена прав доступа;
= - замена прав доступа, т.е. отмена всех существовавших и добавление перечисленных. Если параметр perm не определен, то все существовавшие права доступа отменяются.
Параметр perm определяет права доступа, которые будут добавлены, отменены или установлены взамен соответствующей командой. Он представляет собой комбинацию следующих символов или один из них:
г - право на чтение;
w - право на модификацию;
х - право на исполнение.
Параметры файлі, файл2, ... файлы - это имена файлов, для которых производится изменение прав доступа. Вместо имен могут использоваться их шаблоны.
Хозяин файла может изменять права доступа к нему, пользуясь командой сптосЗ.
Создайте новый файл и посмотрите на права доступа к нему, установленные системой при его создании. Чем руководствуется операционная система при назначении этих прав? Она использует для этого маску создания файлов для программы, которая файл создает. Изначально для программы-оболочки она имеет некоторое значение по умолчанию.
Маска создания файлов текущего процесса
Маска создания файлов текущего процесса (umask) используется системными вызовами open () и mknod () при установке начальных прав доступа для вновь создаваемых файлов или FIFO. Младшие 9 бит маски создания файлов соответствуют правам доступа пользователя, создающего файл, группы, к которой он принадлежит, и всех остальных пользователей так, как записано ниже с применением восьмеричных значений:
Подобные документы
Основные понятия об операционных системах. Виды современных операционных систем. История развития операционных систем семейства Windows. Характеристики операционных систем семейства Windows. Новые функциональные возможности операционной системы Windows 7.
курсовая работа [60,1 K], добавлен 18.02.2012Понятие виртуальной памяти, ее реализация. Особенности страничной организации по требованию. Этапы обработки ситуации отсутствия страницы в памяти. Стратегии (алгоритмы) замещения страниц. Особенности некоторых операционных систем: Windows NT и Solaris.
презентация [2,2 M], добавлен 24.01.2014Изучение особенностей операционной системы, набора программ, контролирующих работу прикладных программ и системных приложений. Описания архитектуры и программного обеспечения современных операционных систем. Достоинства языка программирования Ассемблер.
презентация [1,3 M], добавлен 22.04.2014Общая характеристика преимуществ взаимодействующих процессов: модульность, ускорение вычислений. Знакомство с основами современных операционных систем. Анализ особенностей использования общего почтового ящика, рассмотрение способов создания и удаления.
презентация [1,6 M], добавлен 24.01.2014Характеристика сущности, назначения, функций операционных систем. Отличительные черты их эволюции. Особенности алгоритмов управления ресурсами. Современные концепции и технологии проектирования операционных систем, требования, предъявляемые к ОС XXI века.
курсовая работа [36,4 K], добавлен 08.01.2011Операционная система - программа, которая загружается при включении компьютера. Способы реализации интерфейса и классификация операционных систем. Организация файловой системы, типы файлов и их наименования. Понятие каталога, атрибуты файловой системы.
реферат [16,6 K], добавлен 25.02.2011Важность операционной системы для мобильных устройств. Популярность операционных систем. Доля LINUX на рынке операционных систем. История OS Symbian, BlackBerry OS, Palm OS. Отличия смартфона от обычного мобильного телефона. Учет ограничений по памяти.
презентация [477,3 K], добавлен 01.12.2015Основные понятия операционных систем. Современное оборудование компьютера. Преимущества и недостатки операционной системы Linux. Функциональные возможности операционной системы Knoppix. Сравнительная характеристика операционных систем Linux и Knoppix.
реферат [1,5 M], добавлен 17.12.2014Основные понятия операционных систем. Синхронизация и критические области. Сигналы и взаимодействие между процессами. Управление памятью. Драйверы устройств. Особенности современных операционных систем. Центральный процессор, микросхемы часов и таймеров.
учебное пособие [1,2 M], добавлен 24.01.2014Использование операционных систем Microsoft Windows. Разработка операционной системы Windows 1.0. Возможности и характеристика последующих версий. Выпуск пользовательских операционных систем компании, доработки и нововведения, версии Windows XP и Vista.
реферат [23,3 K], добавлен 10.01.2012