Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

К9-12В. Вопросы и ответы к ГОСам 2013 / Операционные системы / 02. Файловые системы современных ОС. Интерфейс пользователя для работы с ФС

.docx
Скачиваний:
72
Добавлен:
10.05.2014
Размер:
225.26 Кб
Скачать

02. Файловые системы современных ОС. Интерфейс пользователя для работы с ФС.

Файловая система представлена в виде древовидной структуры.

Типы файлов:

Обычный файл - представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатываю­щей файл. К этим файлам относятся текстовые файлы, бинарные данные, Исполняемые программы и т. п.

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

На рисунке 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]] вых_ф йл— перемещение или переименование файлов