Московский физико-технический институт
Опубликован: 16.09.2004 | Доступ: свободный | Студентов: 7773 / 1592 | Оценка: 4.44 / 4.28 | Длительность: 15:33:00
Лекция 1:

Введение в курс практических занятий. Знакомство с операционной системой UNIX

Лекция 1: 1234567 || Лекция 2 >

Упрощенное понятие об устройстве файловой системы в UNIX. Полные и относительные имена файлов

В операционной системе UNIX существуют три базовых понятия: "процесс", "файл" и "пользователь". С понятием "пользователь" мы только что уже столкнулись и будем сталкиваться в дальнейшем при изучении работы операционной системы UNIX. Понятие "процесс" характеризует динамическую сторону происходящего в вычислительной системе, оно будет подробно обсуждаться в лекции 2 и в описании последующих семинаров. Понятие "файл" характеризует статическую сторону вычислительной системы.

Из предыдущего опыта работы с вычислительной техникой вы уже имеете некоторое представление о файле, как об именованном наборе данных, хранящемся где-нибудь на магнитных дисках или лентах. Для нашего сегодняшнего обсуждения нам достаточно такого понимания, чтобы разобраться в том, как организована работа с файлами в операционной системе UNIX. Более подробное рассмотрение понятия "файл" и организации файловых систем для операционных систем в целом будет приведено в лекции 11 и лекции 12, а также на семинарах 11–12, посвященных организации файловых систем в UNIX.

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

Пример структуры файловой системы

Рис. 1-2.1. Пример структуры файловой системы

Каждому файлу (регулярному или директории) должно быть присвоено имя. В различных версиях операционной системы UNIX существуют те или иные ограничения на построение имени файла. В стандарте POSIX на интерфейс системных вызовов для операционной системы UNIX содержится лишь три явных ограничения:

  • Нельзя создавать имена большей длины, чем это предусмотрено операционной системой (для Linux – 255 символов).
  • Нельзя использовать символ NUL (не путать с указателем NULL!) – он же символ с нулевым кодом, он же признак конца строки в языке C.
  • Нельзя использовать символ '/'.

От себя добавим, что также нежелательно применять символы "звездочка" – "*", "знак вопроса" – "?", "кавычка" – "\"", "апостроф" – "\`", "пробел" – " " и "обратный слэш" – "\\" (символы записаны в нотации символьных констант языка C).

Единственным исключением является корневая директория, которая всегда имеет имя "/". Эта же директория по вполне понятным причинам представляет собой единственный файл, который должен иметь уникальное имя во всей файловой системе. Для всех остальных файлов имена должны быть уникальными только в рамках той директории, в которую они непосредственно входят. Каким же образом отличить два файла с именами "aaa.c", входящими в директории "b" и "d" на рисунке 1–2.1, чтобы было понятно о каком из них идет речь? Здесь на помощь приходит понятие полного имени файла.

Давайте мысленно построим путь от корневой вершины дерева файлов к интересующему нас файлу и выпишем все имена файлов (т.е. узлов дерева), встречающиеся на нашем пути, например, "/ usr b aaa.c". В этой последовательности первым будет всегда стоять имя корневой директории, а последним – имя интересующего нас файла. Отделим имена узлов друг от друга в этой записи не пробелами, а символами "/", за исключением имени корневой директории и следующего за ним имени ( "/usr/b/aaa.c" ). Полученная запись однозначно идентифицирует файл во всей логической конструкции файловой системы. Такая запись и получила название полного имени файла.

Понятие о текущей директории. Команда pwd. Относительные имена файлов

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

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

Команда pwd

Синтаксис команды

pwd

Описание команды

Команда pwd выводит полное имя текущей директории для работающего командного интерпретатора.

Зная текущую директорию, мы можем проложить путь по графу файлов от текущей директории к интересующему нас файлу. Запишем последовательность узлов, которые встретятся на этом пути, следующим образом. Узел, соответствующий текущей директории, в запись не включаем. При движении по направлению к корневому каталогу каждый узел будем обозначать двумя символами "точка" – "..", а при движении по направлению от корневого каталога будем записывать имя встретившегося узла. Разделим обозначения, относящиеся к разным узлам в этой записи, символами "/". Полученную строку принято называть относительным именем файла . Относительные имена файлов меняются при смене рабочего каталога. Так, в нашем примере, если рабочий каталог – это директория "/d" , то для файла "/usr/b/aaa.c" относительным именем будет "../usr/b/aaa.c", а если рабочий каталог – это директория "/usr/b", то его относительное имя"ааа.с".

Для полноты картины имя текущего каталога можно вставлять в относительное имя файла, обозначая текущий каталог одиночным символом "точка" – ".". Тогда наши относительные имена будут выглядеть как "./../usr/b/aaa.c" и "./aaa.c" соответственно.

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

Домашняя директория пользователя и ее определение

Для каждого нового пользователя в системе заводится специальная директория, которая становится текущей сразу после его входа в систему. Эта директория получила название домашней директории пользователя. Воспользуйтесь командой pwd для определения своей домашней директории.

Лекция 1: 1234567 || Лекция 2 >
лия логовина
лия логовина

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

Макар Оганесов
Макар Оганесов