Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файлами и каталогами.doc
Скачиваний:
48
Добавлен:
20.05.2015
Размер:
258.56 Кб
Скачать

Работа с файлами и каталогами

Понятие файла и файловой системы

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

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

Информация на носителях информации может храниться только в виде файлов. Однажды созданный файл становится независимым от процесса, пользователя и системы, создавшей его.

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

  • Имя. Символьное имя файла является единственным атрибутом, хранимым в форме пригодной для чтения человеком.

  • Тип. Информация, необходимая для управления файлами.

  • Расположение. Указатель на внешнее устройство и на местонахождения файла на этом внешнем устройстве.

  • Размер. Текущий размер (в байтах, словах или блоках) и, возможно, максимально допустимый размер.

  • Защита. Информация управления доступом, управляющая уровнем доступа (чтение, запись, выполнение и т.д.)

  • Время, дата и идентификатор пользователя. Эта информация может характеризовать: создание, последнюю модификацию, последнее обращение.

Файловая система хранит информацию о каждом файле в структуре, называемой индексным дескриптором. Каждый индексный дескриптор содержит около 40 полей, в том числе имя файла, тип, размер, количество жестких ссылок, информацию о владельце файла, о правах доступа к нему, дату/время последней модификации файла и дату/время последнего доступа к нему. Именно с индексным дескриптором работает ОС при обращении к файлу.

Типы файлов

В операционной системе (ОС) Unix поддерживаются несколько типов файлов:

  • Обычные файлы. Это просто последовательность байтов; на структуру таких файлов не накладывается никаких ограничений – это могут быть текстовые документы, исполняемые программы, мультимедийные данные.

  • Каталоги. Каталог — это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию — метаданные, позволяющие операционной системе производить операции над этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку сам файл не содержит информации о своем местонахождении. Каталог, на который есть ссылка в данном каталоге, называется подкаталогом или вложенным каталогом. Родительским называется каталог, в котором содержится данный каталог. Для корневого каталога (см. ниже) родительским является он сам.

  • Ссылки. Делятся на 2 типа:

  1. «Жесткие»ссылки. На файл можно ссылаться из нескольких каталогов одновременно и даже из нескольких элементов одного и того же каталога, причем у всех ссылок могут быть разные имена. Это создает иллюзию того, что файл в одно и то же время находится в разных каталогах. Атрибуты файла при этом являются общими для всех ссылок.Unixподсчитывает количество ссылок, указывающих на каждый файл, и при удалении файла не освобождает блоки данных до тех пор, пока не будет удалена последняя ссылка на него. Ссылки такого рода называются «жесткими». Онине являются отдельным типом файлов. Жесткую ссылку в Unix невозможно отличить от имени файла – они идентичны.

  2. Символические ссылки («мягкие»). Этот вид ссылокявляется отдельным типом файлови обеспечивает возможность вместо путевого имени указывать псевдоним. Когда ядро ОС сталкивается с символической ссылкой при поиске файла, оно извлекает из нее хранящееся путевое имя. Различие между жесткими и мягкими ссылками состоит в том, что жесткая ссылка является прямой – то есть указывает непосредственно на индексный дескриптор файла, тогда как мягкая ссылка указывает на файл по имени. Файл, адресуемый символической ссылкой, и сама ссылка являются разными объектами файловой системы. Файл, на который создается символическая ссылка, не обязательно должен существовать. При удалении файла автоматически уничтожаются все связанные с ним символические ссылки.

  • Специальные файлы устройств. Файлы устройств позволяют Unix-программам взаимодействовать с аппаратными средствами и периферийными устройствами системы. За всю работу по управлению конкретным устройством отвечает специальная программа, называемая драйвером устройства. Драйверы устройств образуют стандартный коммуникационный интерфейс, который выглядит для пользователя как обычный файл. Когда ядро ОС получает запрос к файлу устройства, оно просто передает этот запрос соответствующему драйверу, то есть файлы устройств можно представить как шлюзы, через которые драйверам передаются запросы. В UNIX различают символьные и блочные файлы устройств. Символьные файлы устройств используются для небуферизированного обмена данными с устройством, в противоположность этому блочные файлы позволяют производить обмен данными в виде пакетов фиксированной длины — блоков. Доступ к некоторым устройствам может осуществляться как через символьные, так и через блочные специальные файлы.

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

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

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

Файловая система ОС Unix имеет иерархическую (древовидную) структуру, основанием которой является корневой каталог, который имеет имя /. Корневой каталог файловой системыUnixвсегда один. Расположение файлов в файловом дереве не определяется их расположением на том или ином физическом или логическом диске. Файловые структуры, находящиеся на различных дисках, в том числе на дисках других компьютеров, с помощью специальной команды (mount) монтируются на файловое деревоUnix, становясь частью единого файлового дерева. Все операции над файлами с точки зрения пользователя выполняются одинаковым образом, независимо от их физического месторасположения.

/

Kорневой каталог Unixобычно содержит такие каталоги, как:

bin

для наиболее используемых команд;

boot

загрузчик операционной системы;

dev

для специальных файлов, представляющих устройства (дисплеи, диски, CD-ROM, принтеры и т.п.);

etc

для хранения большинства конфигурационных файлов системы;

home

для хранения домашних каталогов пользователей;

lib

важнейшие библиотеки;

mnt

для подключения новых файловых систем;

tmp

для хранения временных файлов;

usr

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

var

содержит буферные каталоги, файлы регистрации, учетную информацию, базы данных и другие данные, которые быстро разрастаются и изменяются.

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

Например, каталог /usr, кроме прочего, содержит такие каталоги, как:

bin

хранит дополнительные команды;

include

хранит фрагменты системных программ;

lib

хранит дополнительные библиотеки.

Полные имена этих каталогов будут такими: /usr/bin, /usr/include и /usr/lib

Если в каталоге /usr/binсодержится файлperl, то полное имя файлаperlбудет таким:/usr/bin/perl

Если же пользователь в данный момент находится в каталоге /usr файловой системы и ему необходимо открыть файл /usr/include/sys/conf, то он может обратиться к этому же файлу по относительному имени:include/sys/conf

Существует два специальных имени:

.

это имя текущего каталога;

..

это имя родительского каталога (т.е. каталога, находящегося на уровень выше данного на пути к корневому каталогу).

В качестве имен файлов, как правило, может использоваться любая последовательность из букв, цифр и спецсимволов, кроме символа «/». Причина этого ограничения очевидна: данный символ используется как разделитель имен в составе пути, поэтому не должен встречаться в самих именах. Длина имени ограничивается 256 символами. Прописные и строчные буквы в именах файлов различаются. Например, файл myfileи файлmyFile– это разные файлы. Имя файла может включать в себя расширение, обычно используемое для указания на тип файла. Расширение определяется как часть имени файла, располагающаяся после последней точки. Файлы, имена которых начинаются с точки, являются скрытыми.

Есть несколько символов, допустимых в именах файлов и каталогов, которые нужно использовать с осторожностью. Это так называемые спецсимволы: «*», «\», «&», «<», «>», «;», «(«, «)», «|», а также символы пробела и табуляции. Дело в том, что эти символы имеют специальное значение, поэтому нужно будет специально позаботиться о том, чтобы эти символы воспринимались как часть имени файла или каталога. Для этого необходимо предварить спецсимвол символом «\» (обратный слэш).

Шаблоны подстановки

Используя специальные символы, можно формировать шаблоны имен файлов.

*

соответствует любой (возможно, пустой) последовательности символов

?

соответствует точно одному любому символу

[ ]

используются для группирования символов в наборы. Наборы могут задаваться:

  • явным перечислением символов, без указания разделителей между ними, например [atz56,=] – символ соответствует либо одной из трех буквa,tиz, либо одной из цифр 5 и 6, либо одному из спецсимволов запятая и знак равенства

  • путем указания диапазона, например [a-z] – символ соответствует строчной букве от а доz

  • комбинацией этих способов, например [0-9ij] – символ соответствует либо цифре, либо одной из буквiилиj

!

используется для отрицания набора символов, то есть имя файла не должно содержать указанных символов

Примеры:

f*

соответствует файлам с именами, начинающимися с буквы f

*f*

соответствует файлам с именами, содержащими букву f

program.?

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

??[a-d]*

соответствует файлам с именами, в которых третьей буквой является a, b, c или d

[!A-Z]*[2468]

соответствует файлам с именами, не начинающимися с большой буквы и заканчивающимися на цифру 2, 4, 6 или 8

Если в имя файла должен входить какой-либо спецсимвол, то при указании шаблона этот спецсимвол необходимо предварять с помощью обратного слэша («\»), или экранировать, например:

[AEIOUYaeiouy]\*???

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

При использовании диапазонов символов следует учитывать, что они могут зависеть от выбранных настроек локализации. Например, диапазон [b-e] означает символы отbдо е включительно. В английском языке, где сортировка букв идет по порядку (ABC…XYZabc…xyz), указанному набору соответствует набор символовb,c,d,e. Согласно правилам русского языка, сортировка тех же символов идет в другом порядке (аАбБвВ…эЭюЮяЯaAbBcC…xXyYzZ) и тому же диапазону соответствуют символыb,B,c,C,d,D, е. Для решения таких проблем имеются объявления некоторых классов и категорий символов:

[:upper:]

Латинские буквы верхнего регистра

[:lower:]

Латинские буквы нижнего регистра

[:alpha:]

Латинские буквы верхнего и нижнего регистров

[:alnum:]

Латинские буквы верхнего и нижнего регистров, цифры

[:digit:]

Цифры

[:xdigit:]

Шестнадцатеричные цифры

[:punct:]

Знаки пунктуации

[:blank:]

Пробел и табуляция

[:space:]

Символы пропуска (пробел, табуляция, перевод каретки, перевод строки и т.п.)

[:cntrl:]

Управляющие символы (клавиша [Ctrl]+символ)

[:graph:]

Символы печати