
К9-12В. Вопросы и ответы к ГОСам 2013 / Операционные системы / 02. Файловые системы современных ОС. Интерфейс пользователя для работы с ФС
.docx02. Файловые системы современных ОС. Интерфейс пользователя для работы с ФС.
Файловая система представлена в виде древовидной структуры.
Типы файлов:
Обычный файл - представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные данные, Исполняемые программы и т. п.
Каталог – с помощью каталогов формируется логическое дерево файловой системы. Каталог — это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию — метаданные, позволяющие операционной системе производить операции над этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку сам файл не содержит информации о своем местонахождении. Любая задача, имеющая право на чтение каталога, может прочесть его содержимое, но только ядро имеет право на запись в каталог.
На рисунке 1.1 в качестве примера приведена структура каталога. По существу каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер индексного дескриптора), а второе определяет имя файла.
Специальный файл устройства - обеспечивает доступ к физическому устройству. В UNIX различают символьные и блочные файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства.
Символьные файлы устройств используются для не буферизованного обмена данными с устройством. В противоположность этому блочные файлы позволяют производить обмен данными в виде пакетов фиксированной длины — блоков. Доступ к некоторым устройствам может осуществляться как через символьные, так и через блочные специальные файлы.
FIFO (First-In-First-Out) или именованный канал - файл, используемый для передачи данных между процессами. FIFO впервые появились в System V UNIX, но большинство современных систем поддерживают этот механизм. Создать FIFO можно командой mknod(l) или mkfifo(l):
Теперь свяжем ввод одного процесса с выводом другого, используя файл myfifo:
$ while : ; do date > my_fifo; sleep 5; done&
[1] 21607 !Номер запущенного процесса
$ while : ; do awk '{print $4)' my_fifo; done
16:07:56 16:08:01 16:08:06 16:08:11
Первый процесс, представляющий собой бесконечный цикл, каждые 5 секунд записывает результат команды date) в именованный канал; второй процесс (также бесконечный цикл) читает файл и печатает часть вывода (четвертое поле строки).
Связь - как уже говорилось, метаданные файла не содержат ни имени файла, ни указателя на это имя. Записи в каталогах жестко связывают имена файлов с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе.
Файлу "безразлично", какие имена он имеет в каталогах, но "небезразлично" число этих имен. Если ни одно из имен файловой системы не ссылается на файл, он должен быть удален (т. е. физически удалены его данные на диске).
Связь имени файла с его данными называется жесткой связью. Например, с Помощью команды ln(1) мы можем создать еще одно имя (second) файла, на который указывает имя first
$pwd -> /home/andrey
$ll fisrt /home/sergey/second
Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls (1), файлы first и second будут отличаться только именем. Все остальные атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя — это два разных файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они ссылаются на одни и те же данные. Вы можете переместить один из файлов в другой каталог — все равно эти имена будут связаны жесткой связью с данными файла. Легко проверить, что удаление одного из файлов (first иди second) не приведет к удалению самого файла, т. е. его метаданных и данных (если это не специальный файл устройства):
По определению жесткие связи указывают на один и тот же индексный дескриптор. Поэтому проверить, имеют ли два имени файла жесткую связь, можно, вызвав команду ls(i) с ключом -i:
$ Is -i /hcme/andrei/first /home/sergey/ second
12567 first 12567 second
Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями, можно получить, просмотрев подробный листинг файлов с помощью команды ls -l:
$ Is -l /home/sergey
-rw-r--r-- 2 andrei staff 7245 Jan 17 8:05 second
Во второй колонке листинга указано число жестких связей данного файла.
Сразу оговоримся, что жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файла. Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресует файл, который, в свою очередь, ссылается на другой файл, в результате, последний файл адресуется символической связью косвенно (рис. 1.3). Данные файла, являющегося символической связью, содержат только имя целевого файла.
Команда ln(1) с ключом -s позволяет создать символическую связь:
lrwxrwxrwx (жесткая связь – в пределах одной ФС, симв. – не имеет ограничений)
Сокеты - предназначены для взаимодействия между процессами, в том числе и процессами, выполняющимися на разных компьютерах.
Корневой каталог - "/" является основой любой файловой системы UNIX. остальные файлы и каталоги располагаются в рамках структуры, порожденной корневым каталогом, независимо от их физического местонахождения.
/bin -в каталоге /bin находятся наиболее часто употребляемые команды и утилиты системы, как правило, общего пользования.
/dev - содержит специальные файлы устройств, являющиеся интерфейсом доступа к периферийным устройствам. Каталог /dev может содержать несколько подкаталогов, группирующих специальные файлы устройств одного типа. Например, в классических реализациях System V каталог /dev/dsk содержит специальные файлы устройств для доступа к гибким и жестким дискам системы.
/etc - в этом каталоге находятся системные конфигурационные файлы, а в некоторых системах и многие утилиты администрирования. Среди наиболее важных файлов — скрипты инициализации системы.
/lib - находятся библиотечные файлы языка С и других языков программирования. Стандартные названия библиотечных файлов имеют вид lib.а (или libx.so), где х — это один или более символов, определяющих содержимое библиотеки.
lost+found - каталог "потерянных" файлов. Ошибки целостности файловой системы, возникающие при неправильном останове UNIX или аппаратных сбоях, могут привести к появлению так называемых "безымянных" файлов — структура и содержимое файла являются правильными, однако для него отсутствует имя в каком-либо из каталогов. Программы проверки и восстановления ФС помещают такие файлы в этот каталог.
/mnt - стандартный каталог для временного связывания (монтирования) физических файловых систем к корневой для получения единого дерева логической файловой системы. Обычно содержимое каталога /mnt пусто, поскольку при монтировании оно перекрывается монтируемой файловой системой. В некоторых версиях ОС UNIX можно обнаружить также пустые каталоги floppy и cdrom — точки монтирования файловых систем дискет и компакт-дисков.
/и или /home - общеупотребительный каталог для размещения домашних каталогов пользователей. Например, имя домашнего каталога пользователя andrei будет, скорее всего, /home/andrei или /u/andrei. В более ранних версиях ОС UNIX домашние каталоги пользователей размещались в каталоге /usr.
/tmp - каталог хранения временных файлов, необходимых для работы различных подсистем UNIX. Обычно этот каталог открыт на запись для всех пользователей системы.
Генерация имен файлов
Это одна из функций shell, позволяющая:
- сократить время набора имени файла или списка имен;
- выполнять однотипные операции(команды ОС) сразу над группой файлов.
При необходимости экономного перечисления в командной строке нескольких файлов, имеющих частично совпадающие имена, могут быть использованы так называемые метасимволы:
? — для замещения одного символа;
* — для замещения любой цепочки символов; исключение составляют имена файлов, начинающиеся с точки: шаблон, совпадающий с ними, должен обязательно иметь точку в начале;
[ ] — диапазон для замещения одного символа, совпадающего с одним из перечисленных в квадратных скобках, например:
file[357] — совпадает с каждым из имен: file3, file5, file7;
file[3-7] — совпадает с каждым из имен: file3, file4, file5, file6, file7.
В UNIX используется простой способ описания пути к файлу в иерархической системе каталогов:
* полное маршрутное имя файла (абсолютное маршрутное):
$ cat /home/user/lev/f1
* относительные маршрутные имена файлов
pwd — печать полного маршрутного имени текущего каталога
Для просмотра содержимого листинга каталога служит команда:
ls [-ключи] [имя_каталога]
Ключи используются для определения формата выдачи:
-l — полный(длинный) формат выдачи, перед ним суммарный
размер всех перечисленных файлов в килобайтах;
total 127
-а— вывод полного списка файлов, включая скрытые, т.е. име-на которых начинаются с точки(в том числе файлы. и..);
Для создания одного или нескольких подкаталогов применяется команда:
mkdir [-ключи] имя_нового_каталога1 [имя-кат2]— создание
каталогов.
-p — создается промежуточный подкаталог, до этого не существовавший(таким образом можно создавать сразу цепочку каталогов).
Вновь созданный каталог не будет абсолютно пустым. Он будет
содержать два элемента с символьными именами "." и"..".
Для исключения набора длинных маршрутных имен файлов любой каталог может быть объявлен текущим с помощью команды
cd [полное_имя_каталога]— смена текущего каталога на указаный
Интенсивная работа в системе требует периодической чистки поддерева каталогов пользователя. Для этих целей используются две команды:
rm список_файлов— удалить указанные файлы;
rmdir список_каталогов— удалить пустой подкаталог.
Процедура чистки требует некоторой обязательной последовательности действий:
- удалить все файлы в удаляемом каталоге командой rm;
- удалить сам подкаталог с помощью команды rmdir.
- ключ -f команды rm отменяет необходимость подтверждения для любого удаляемого файла;
- ключ -r задает режим рекурсивного удаления всех файлов и подкаталогов данного каталога, а затем и самого каталога, но лучше использовать ключ-i, иначе можно потерять все файлы.
find <список_каталогов>< условия_поиска>— определение полных имен файлов в поддереве каталогов, удовлетворяющих заданным условиям поиска.
-name – задает маску имени;
-type {f|d|b|c|p} — истинно для файлов указанного типа;
- user – задает имя владельца файла;
- exec <команда> {} \; — истинно, если команда возвращает ну-левой код завершения(true); выполняет<команда> для каждого найденного файла.
grep [-ключи] 'шаблон' <список_файлов>— поиск в файлах из списка_файлов строк, содержащих указанный шаблон(под-строка символов).
Ключи определяют режимы поиска и вывода:
c — выводятся имена всех просмотренных файлов и количество найденных строк, содержащих шаблон;
n — перед каждой строкой выводится ее относительный номер в файле и сама строка;
i — игнорируются регистры;
l — выводятся только имена файлов, содержащие найденные строки, и др.
sort — алфавитная и числовая сортировка файлов или строк
файлов; режим сортировки определяется ключами.
Команда многофункциональная, предусматривает много режимов сортировки. Неполные возможности команды:
$sort [-k номер-поля-в-строке] [список-файлов]
d — по алфавиту(или по умолчанию);
n — числовая;
u — исключает повторяющиеся строки и т.д.
touch— замена времени модификации на текущее, если файл не существует, то создается новый пустой файл.
touch [-k] имя-файла
Следующая команда позволяет выполнить подсчет количества строк(-l), слов(-w), или символов(-c) в указанных файлах:
wc [-lwc] список_файлов.
cat [-ключи] [входной_файл1[ входной_файл2 ...]] —слияние и вывод файлов на стандартное устройство вывода (конкатенация файлов).
Команда копирования файлов:
cp [-k] вх_файл_1 [вх_файл_2 [... вх_файл_n]] вых_файл.
mv [-k] вх_ф йл_1 [вх_ф йл_2 [... вх_ф йл_n]] вых_ф йл— перемещение или переименование файлов