Структура файловой системы UNIX.
Итак, файловая система UNIX имеет иерархическую древовидную структуру, корневой каталог которой содержит по крайней мере 5 основных каталогов.
/BIN – в этом каталоге находится большинство наиболее часто употребляемых команд и утилиты системы.
/dev – содержит специальные файлы устройств, являющихся интерфейсом доступа к ПУ. Этот каталог может содержать несколько подкаталогов, группирующих специальные файлы устройств одного типа. Например, каталог /dev/d$v содержит специальные файлы устройств для доступа к гибким и жестким дискам.
/etc – в этом каталоге находятся системные конфигурационные файлы и многие утилиты администрирования.
/tmp – временные файлы, необходимые для работы различных подсистем UNIX.
/u$r – в этом каталоге находятся подкаталоги различных сервисных подсистем – системы печати, электронной почты и др. /u$r/spool, исполняемые файлы утилит UNIX (/u$r/bin), дополнительные программы, используемые на данном ПК (/u$r/local), файлы заголовков (/u$r/include), электронные справочники (/u$r/man) и т. д.
Кроме того могут быть подстроки
(это зависит от версии системы)
/lib – библиотечные файлы языка С или других языков программирования.
Часть библиотечных файлов также находится в каталоге /usr/lib
/last+found – каталог «потерянных файлов». Ошибки целостности файловой системы, возникающие при неправильной остановке UNIX или аппаратных сбоях, могут привести к появлению так называемых «безымянных» файлов – т.е. структура и содержимое файла являются правильными, но для него отсутствует имя в каком—либо из каталогов. Программы проверки и восстановления файловой системы помещают такие файлы в каталог /lost+found.
/и или /home – общеупотребительный каталог для размещения каталогов пользователей. Например: имя домашнего каталога пользователя andrei будет /home/andrei.
Именование файлов
Имена файлов бывают простыми и составными. Простое имя файла может быть комбинацией от 1 до 14 символов, кроме символов *,?,”,[,],/. Поиск файла с простым именем начинается с текущего каталога. Составное имя может начинаться с простого имени, и тогда это имя считается относительным, так как имя файла в этом случае задается относительно текущего каталога.
Принято использовать следующие расширения:
.с – программы на языке С
.f – программы на языке Фортран.
.p – программы на языке Паскаль.
.о – объектный код полученный транслятором с любого языка.
.а – библиотечный файл.
Полное составное имя файла образуется из последовательности имен каталогов, разделенных косой чертой; имя начинается со знака /, например /usr/klever/file 1. Полное составное имя файла – это путь по дереву до файла из текущего каталога.
Создание связи с файлом.
В системе UNIX файл можно сделать принадлежащим нескольким каталогам. Для этого используется команда ln(link – связывать):
ln sourse_name target_name
sourse_name – полное составное имя файла, с которым устанавливается связь
target_name – имя файла в новом каталоге; новое имя может не отличаться от старого.
$ pwd – где мы находимся?
жесткая связь
/home/andrei
$ ln first /home/sergey/second
$ pwd
/home/andrei символическая связь
$ ln – s first /home/sergey/symfirst
Как уже упоминалось каталог содержит имена файлов и указатели на их метаданные (индексные дескрипторы). В то же время сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными называется жесткой связью. Например:
$ pwd
/home/andrei
$ ln first /home/sergey/second
Здесь с помощью команды ln создается еще одно имя (second), на который указывает имя first. Файл first и second будут отличаться только именем. Изменения, внесенные в один из этих файлов, затронут и другой, поскольку оба ссылаются на одни и те же данные файла. Удаление одного из файлов (first или second) не приведет к удалению самого файла.
Проверить, имеют ли два имени файла жесткую связь, можно, вызвав команду
ls – i
$ ls – i /home/andrei/first/home/sergey/second
12567 first
12567 second
Команда ls – l во второй позиции дает количество жестких связей у данного файла.
Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличии от жесткой связи, символическая связь адресует файл, который, в свою очередь ссылается на другой файл. В результате, последний файл адресуется символической связью косвенно. Данные файла, являющего символической связью, создает только имя целевого файла.
Команда ln с аргументом –s позволяет создать символическую связь
$ pwd
/home/andrei
$ ln – s first/home/sergey/symfirst
$ cd /home/sergey
$ ls – s
lrwxrwxrwx 1 andrei 15-(размер) дата symfirst> … /andrei/first.
Символическая связь файл symfirst существенно отличается от файла second(жесткая связь). Во-первых, фактическое содержание файла symfirst – это имя файла, на которое символическая связь ссылается - /andrei/first. Об этом говорит размер файла – 15 байт. Во-вторых, файл symfirst не содержит никаких ограничений на доступ.
Символическая связь является особым типом файла (символ l в первой позиции) и ОС работает с таким файлом не так, как с обычным. Например, при выводе на экран содержимого файла symfirst появляются данные файла /home/andrei/first.