- •Файловая система (пользовательский аспект)
- •Файловая система (разные точки зрения):
- •Типы файлов в unix
- •Символические ссылки (ссылки) – это файлы, которые указывают на другие файлы.
- •Назначение системных каталогов
- •Правила именования каталогов и файлов
- •С труктура каталога
- •Команда ls - напечатать содержимое каталога
- •Команды доступа к файлу и работы с ним
Правила именования каталогов и файлов
Имени файла предшествует путь поиска, который описывает место расположения файла в иерархической структуре файловой системы. Компоненты пути разделены между собой наклонной чертой (/); каждая компонента представляет собой имя каталога. Полное имя пути поиска начинается с указания наклонной черты и идентифицирует файл (вершину), поиск которого ведется от корневой вершины дерева файловой системы с обходом тех ветвей дерева файлов, которые соответствуют именам отдельных компонент.
Имя пути поиска необязательно должно начинаться с корня, в нем можно указывать маршрут относительно текущего (для выполняемого процесса) каталога, при этом первый символ "наклонная черта" в имени пути опускается. При движении по иерархии используются специальные символы: либо символ точка, который обозначает текущий каталог, либо две точки, которые обозначают имя вышележащего каталога (Примеры: ./myfile1 ../../dir1/dir2/myfile2).
Пользователь может давать каталогам или файлам любые имена в соответствии со следующими правилами:
допустимы все символы, за исключением /;
некоторые имена лучше не использовать, такие как пробел, табуляция и следующие: ? " # $ ^ ( ) ; < > [ ] | \ * @ ' ~ &. Если вы воспользуетесь символами пробел или табуляция в имени файла или каталога, то вы должны заключить имя в двойные кавычки в командной строке;
избегайте использования знаков "+", "-" или "." в качестве первого символа в имени файла;
система UNIX различает большие и малые буквы. Например, система предполагает, что каталог (или файл) названный draft отличается от DRATF.
Пример. memo MEMO section2 raf:list DRAFT
file.d chap3+4 item1_10 outline draft
С труктура каталога
Каталог в UNIX – это особый файл, содержащий информацию о том, какие файлы и/или другие каталоги в него входят.
По существу каталог представляет собой таблицу, каждая запись который соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер inode), а второе определяет имя файла (рис. 1).
Заметим, что имя файла не является набора данных на диске, т.к. у одного и того же файла может быть множество разных имен. Имя файла является элементом файловой системы. Каждый файл имеет связанные с ним метаданные, хранящиеся в индексных дескрипторах. Метаданные хранят все характеристики файла и позволяют операционной системе выполнять операции, заказанные командой или прикладной задачей: открыть файл, прочитать/записать данные, создать/удалить файл, сменить права доступа или владельца. Метаданные содержат указатели (адреса) на дисковые блоки, в которых физически хранятся данные файла. Имя файла «является указателем» на метаданные (имен м.б. несколько!), а метаданные не содержат указателя на имя файла.
Индексы специальных файлов не связаны ни с какой метаинформацией. Вместо этого индекс содержит два номера – старший и младший номера устройства. Старший номер устройства указывает его тип, например, терминал или диск, а младший номер устройства - числовой код, идентифицирующий устройство в группе однородных устройств.
Команда ls –i показывает эту таблицу. А ls –l во втором столбце указывает число жестких связей файла.
Жесткие связи и символические ссылки
Как уже говорилось, каталог содержит имена файлов и указатели на их метаданные. Сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура позволяет одному файлу иметь несколько имен. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными называется жесткой связью (hard link). C помощью команды ln можно создать еще одно имя файла (second), на которое указывает имя first (рис. 2): ln first /home/ivan/second .
.
Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls, файлы first и second будут отличаться только именем. Номер inode у них будет один и тот же, а значит и метаданные одни и те же. Все остальные атрибуты будут абсолютно одинаковыми. С точки зрения пользователя – это два разных файла. Но изменения, внесенные в один, затронут и другой, поскольку эти имена ссылаются на одни и те же данные. Легко проверить, что удаление одного из файлов не приведет к удалению самого файла, т.е. его метаданных и данных (если это не специальный файл устройства). ОС сама проверяет, сколько жестких ссылок (имен) у файла и ведет их учет в метаданных каждого файла.
Файлу «безразлично», какие он имеет имена в разных каталогах, но не безразлично число этих имен. Если ни одно имя файловой системы не ссылается на файл, он должен быть удален.
Жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файлов.
Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. Команда ln с ключом –s позволяет создать такую связь:
(текущий каталог - /home/alla)
…>ln –s first /home/ivan/second
…>cd /home/ivan
…>ls –l
. . .
lrwxrwxrwx 1 ivan groupe1 13 feb 25 8:05 second ->../alla/first
Здесь файл first адресуется символической связью косвенно (рис. 3). Данные файла, являющегося символической связью, содержат только имя целевого файла (размер этого файла равет всего 13 байт, символ “l” в первой позиции говорит о том чт оэто связь, ограничений на доступ у него нет - rwxrwxrwx). При выводе на экран содержимого этого файла выведencz данные файла /home/alla/first.
Для чего нужны ссылки? Прежде всего, для удобства пользователя. Например, рабочий каталог Open Office – это ~/OpenOffice.org1.0/user/work. Представьте, что каждый раз при переходе в него нужно вводить cd ~/OpenOffice.org1.0/user/work. Намного удобнее создать ссылку work на этот каталог и тогда можно использовать cd work.
Основные команды файловой системы
Рассмотрим кратко основные команды, которые являются фундаментальными в использовании файловой системы.
Четыре системные команды, позволяющие организовывать и использовать структуру каталога:
mkdir создать новый каталог или подкаталог в вашем текущем каталоге;
ls напечатать список имен всех подкаталогов и файлов в каталоге;
cd изменить местоположение пользователя в файловой системе, т.е. перейти из одного каталога в другой;
rmdir удалить пустой каталог. Эти команды могут использовать либо полное имя пути, либо родственное. Две команды могут применяться без имени пути.
pwd