Лекция 2

 

Лекция 2. 1

Работа в ОС UNIX. 2

Разделы диска на IBM-совместимых ЭВМ. 2

Файловая система UNIX. 3

Виды файловых систем, используемых в LINUX. 4

ext2. 4

ext3. 4

ext4. 5

RaiserFS. 5

UFS1. 5

UFS2. 6

JFS. 7

XFS. 8

DevFS. 8

tmpFS. 9

NFS. 9

Типы файлов. Команды ls, chmod . 9

Файлы устройств. Команда dd. 11

Понятие монтировки. 11

Загрузка UNIX. Завершение работы.. 12

Поиск файлов. 13

 


 

Работа в ОС UNIX.

 

 

Джеймс Армстронг (мл.). Секреты UNIX. Диалектика. Киев 96.

 

Сергей Дунаев. UNIX. System V. Release 4.2. Диалог МИФИ, Москва 95г.

 

Вильям Столлингс. Операционные системы. Москва. Издательский дом ``Вильямс’’. 2002.

 

Б.В.Кениган, Р.Пайк. UNIX --- универсальная среда программирования.

Финансы и статистика. Москва 92.

 

Михаэль Кофлер. Весь Linux.  Установка, конфигурирование, использование.

7-ое издание. Бином 2007г.

 

UNIX. X Window. Motif. Основы программирования (части I, II)

АО Аналитик. Москва 94.

 

 

Разделы диска на IBM-совместимых ЭВМ.

Старое представление дисков

Первый блок (сектор) диска принято называть MBR Master Boot Record. На самом деле, Master Boot Record это – кусок кода, на который BIOS передает управление при старте машины. Как правило, этот кусок умещается в первом блоке диска, поэтому понятия первого блока (Master Block Sector) и MBR, как правило, совпадают. Вообще говоря, существуют нетривиальные загрузчики для которых это не так. Поэтому понятия MBR и MBS стоит различать.

Жесткий диск разбит на разделы (partitions). В MBS содержится информация о четырех разделах диска и начальная программа загрузки операционной системы.

В последних 2 байтах MBS содержится идентификатор MBS – сигнатура 55h AAh. Если эти значения изменить, то BIOS не опознает этот блок как MBS и откажется использовать его для целей загрузки. В зависимости от установок BIOS для загрузки будет использован другой диск, дискета, CDROM и т.д.

Перед сигнатурой непосредственно расположены 4 блока по 16 байт с описанием, соответственно, не более 4 разделов на жестком диске. Эти разделы называются таблицей разделов (Partition Table).

В каждом блоке таблицы разделов помещается следующая информация:

·        Признак активности раздела (на активный раздел будет передано дальнейшее управление при загрузке)

·        Номер первого сектора раздела (в формате CHS: Cylinder-Head-Sector)

·        Тип раздела (если = 0, то считается, что раздела нет)

·        Номер последнего сектора раздела (в формате CHS: Cylinder-Head-Sector)

·        Смещение первого сектора раздела

·        Количество секторов в разделе

В секторе раздела, смещение к которому указано в блоке таблицы разделов, лежит в свою очередь– Boot Record – код на который передается управление после выполнения кода из MBR.

Для увеличения возможного количества разделов введено понятие Extended Partition (Расширенный раздел) (раздел с кодом 0x05). Особенностью этого раздела является то, что в первом секторе раздела вместо BR лежит еще одна таблица разделов. В этой таблице нет кода, который мог бы выполняться. В ней должно быть не долее двух записей в блоках таблицы разделов, первая из которых указывает на обычные подраздел в данном расширенном разделе, а если после него еще остается место, то вторая запись может указывать на еще один расширенный раздел, занимающий это свободное место.

В MBR должна присутствовать ссылка только на один расширенный раздел. Если это не так, то некоторые ОС (например MS DOS 6.2) могут не видеть все остальные расширенные разделы.

Некоторые ОС вставляют в MBR свою программку выбора раздела, с которого следует продолжать загрузку. Например, одной из таких программ для Linux является lilo.

Новое представление дисков. GPT-диски.

Существующие на данный момент жесткие диски имеют размеры, при которых разбиение диска на основе приведенного выше принципа невозможно. Поэтому появилось понятие Таблицы разделов (Partition table) сменилось понятием Таблицы разделов на основе GUID (GUID Partition table, GPT). Понятие GUID (Globally Unique Identifier) подразумевает под собой 128-битный идентификатор, назначаемый статистически. В ветке Windows GPT-дики понимает лишь Windows-Vista.

GPT использует современную линейную адресацию блоков (LBA). В нулевом блоке (LBA 0) для совместимости со старыми утилитами содержится MBR. В первом блоке (LBA 1) содержится оглавление таблицы разделов. Далее следует сама таблица разделов.

В оглавлении таблицы разделов хранится GUID диска, размер, местоположение и CRC32 данного оглавления таблицы разделов (LBA 1) и таблицы разделов, а также их резервной копии. Т.о. если заменить какие-то данные в таблице разделов, то при загрузке  CRC не сойдется и таблица разделов будет заменена резервной.

В самой таблице разделов для каждого раздела хранится  GUID типа раздела (по стандарту для каждого типа раздела каждой ОС назначен свой номер), GUID раздела, 64-битный номер первого и последнего LBA-блока раздела и некоторая дополнительная информация.

 

Файловая система UNIX.

В качестве классической файловой системы UNIX можно рассмотреть файловую системы, используемую в Linuxext2.

В начале раздела ext2 лежит таблица дескрипторов файлов или таблица inode. Одному файлу соответствует один дескриптор. В дескрипторе, в частности, содержится:

Время создания файла

Время последней модификации файла

Время обращения к файлу

ID собственника файла (изначально – создателя файла)

ID группы файла (изначально – группы, к которой принадлежит создатель файла)

Привилегии на чтение/запись/выполнение для собственника файла/членов группы файла/для всех остальных

Длина файла

Номера, как правило, 13 блоков, первые 10 из которых – номера блоков файла, следующий блок – номер блока с ссылками на номера блоков файла, следующий блок – номер блока с ссылками на номера блоков с ссылками на номера блоков файла и т.д.

Счетчик ссылок на данный дескриптор (если он обнуляется, то файл считается уничтоженным).

 

Дескриптор можно создать командой mknod. Например

mknod FileName p

создаст именованный канал – псевдо-файл, в который одновременно можно писать и из которого можно читать данные по принципу FIFO.

 

Виды файловых систем, используемых в LINUX.

ext2

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

ext3

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

Основное отличие от ext2 состоит в том, что это – журналируемая fs (journaling filesystem).

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

Теоретически, журналировать можно два типа данных – 1)данные о файлах и файловой системе (metadata); 2)сами данные в файлах(data). Кроме того, журналирование может идти двумя способами: 1)физическое журналирование – данные сохраняются в журнале блоками, даже если в блоке изменился один байт; 2)логическое журналирование – в журнале хранится информация об изменении отбельных байт в файловой системе.

ext3 использует Journaling Block Device layer или JBD – механизм, разработанный независимо для журналирования на любых блоковых устройствах. Этот подход позволяет, например, записывать несколько изменений, внесенных в один блок, с помощью одной операции записи блока на диск. Использование физического журналирования ведет к увеличению размера файла журнала, по сравнению с логическим журналированием, но существенно упрощает его структуру.

Следует отметить, что в современных ЭВМ часто существуют преграды для использования журналирования. Например, это – существование внутреннего кеша в дисках. Некоторые диски ATA отказываются физически сбрасывать информацию из этого кеша на диск, даже после принуждающих команд. Это делает использование журналирования бессмысленным.

Существует три режима ведения журнала:

data=writeback             самый простой режим журналирования meta-data. В журнале файлы не хранятся.

data=ordered                формально то же самое, но обеспечивается запись данных до внесения изменений в meta-data. Это гарантирует, например, что данные записанные в конец файла будут всегда записаны корректно (или не записаны совсем). При модификации блоков внутри файла, безусловно, могут быть проблемы. Несколько более медленная работа, чем предыдущий режим, но надежность существенно выше.

data=journal                 при записи данные записываются сначала в журнал, а потом на диск. Это обеспечивает непротиворечивость как data, так и meta-data.

ext4

Файловая система построена на основе ext3. Впервые патч к ядру Linux с поддержкой этой файловой системой был выпущен 10 октября 2006г. Основной особенностью стало увеличение максимального объема одного раздела диска до 1 эксабайта (260 байт). Кроме того, в ext4 представлен механизм пространственной (extent) записи файлов (новая информация добавляется в конец заранее выделенной по соседству области файла), уменьшающий фрагментацию и повышающий производительность.

Сейчас ext4 работает, например, в Fedora 9. Нет обратной совместимости с ext3.

RaiserFS

Обычно, под RaiserFS понимается 3-я версия этой файловой системы. 4-ая (последняя) версия, обычно, называется RaiserFS4. В настоящее время разработка RaiserFS прекращена. RaiserFS4 продолжает разрабатываться, несмотря на то, что Ганс Рейзер (создатель данной ФС) был арестован и приговорен с пожизненному заключению.

Очень мощная файловая система, работающая примерно в 10 раз быстрее чем ext2 на операциях с маленькими файлами, и опережающая ext2 почти во всех других операциях. Создана Hans Raiser и его командой. Данные о файлах хранятся не в линейном списке, как в ext2, а в B-дереве. Дисковое пространство под inode выделяется динамически в процессе работы. Данные маленьких файлов могут храниться в самих Inode. Возможен режим работы, когда под хвосты файлов память выделяется отдельно в самой структуре B-дерева, хранящего meta-data.

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

Теоретически, в RaiserFS идет журналирование meta-data, но фактически в метаданных файловой системы могут размещаться информация о папках и данные небольших файлов. Поэтому часть data также попадает в процесс журналирования.

 

UFS1

UFS1 является первой версией FFS (быстрая файловая система), созданной в Беркли. Первая ее версия была созданная в 1984г. с выходом ОС 4.2BSD. Заметим, что ext2 создавалась на основе UFS1. С тех пор система активно развивается. В нее вносилось много нововведений (Sun Microsystems внесла в нее журналирование, независимо, аналогичную работу проделала собственная команда создателей FreeBSD).

Раздел данной ФС содержит:

·        BR размером в 8Kb

·        Суперблок (содержит параметры и статистику ФС)

·        Набор групп цилиндров (Cylinder Groups)

 

Каждая CG содержит копию суперблока, набор i-node, битовую карту блоков и битовую карту i-nodes, некоторую статистику по CG (количество свободных блоков, свободных i-node, размер CG).

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

Каталог представляет собой набор структур каталога. Каждая структура каталога содержит

·        номер i-node

·        длина структуры каталога

·        тип файла

·        длина имени

·        строку имени фиксированной длины

 

UFS2

Основной предпосылкой создания UFS2 стали 32-битные указатели на номера блоков в UFS1. Это ограничило размер ФС до 1-4Тб. Требовался переход на 64-битные указатели. В этом заключается основное изменение. Было решено внести существенные ограничения в поток требуемых усовершенствований, который накопился за 20 лет существования UFS1. В результате, потребовалось переписать только около 10% кода, что дает возможность параллельного внесения изменений в UFS1/UFS2 при их развитии.

Для того, чтобы не уменьшать количество прямых указателей на блоки файла, размер i-node пришлось увеличить с 128b до 256b.

При работе i-node с диска преобразуются к единому для UFS1 и UFS2 формату. Это также дает возможность параллельно развивать обе ФС.

В UFS2 полностью отказались от привязки к физической геометрии диска, хотя работа над этим в UFS1 велась давно.

Для единообразия, структуру файла каталога менять не стали. Т.е. 32-битные номера i-node остались.

В системе не стали применять сложных структур данных, но взамен этого предусмотрели механизм динамического хеширования файлов в папке. При первом чтении папки создается хеш-таблица файлов папки. Поэтому вторичное обращение к файлам этой папки происходит существенно быстрее. В папке располагается бит, отображающий состояние хеширования папки – хешировалась она или нет. Если хеширование произведено, то бит устанавливается в 1. На настоящий момент UFS2 не изменяет значение этого бита, т.е. сам механизм хеширования пока не реализован.

Основным новшеством UFS2 стала существенно модифицированная поддержка Extended Arrtibutes – некоторого дополнительного массива данных, вязанного с i-node. В i-node UFS1 хранились два указателя на блоки EA. В UFS2 их количество увеличилось до 5 и приготовлен механизм для хранения массива указателей на блоки EA.

Первым применением EA было расширение политики безопасности, предоставляемой обычной UNIX-файловой системой. Создавался файл ограниченного размера, в котором для каждого i-node отводилась область, содержащая атрибуты специфических прав доступа для различных пользователей. Ограниченность размера этой области создавала ограничение на количество возможных пользователей в системе. Привязка ЕА непосредственно к i-node снимает это ограничение. Кроме того, привязка ЕА к i-node снимает вопрос синхронизации записи данных в файл и в таблицу EA.

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

 

JFS

JFS была создана в 1990г. вместе с первым релизом AIX. Система была очень сильно привязана к структуре менеджера памяти AIX и абсолютно не поддавалась перенесению в другую среду. В результате большой работы сотрудников IBM система претерпела изменения, в результате которых ее удалось перенести в Linux.

Система отличается очень хорошей проработанностью, оптимизированностью и надежностью, но производительность ее не впечатляет.

Дисковый раздел представляется в ней Логическим томом.

Логический том состоит из файлсетов, каждый из которых представляет собой набор файлов и каталогов. В Linux одному логическому тому соответствует один файлсет.

Том разбивается на Allocations groups, которые объединяют логически близкие данные. Каждая Allocation group имеет размер, представляющий собой степень двойки. В последней группе непомещающиеся блоки помечаются как занятые.

Каждый файл представляется как группа экстентов. Экстент представляет собой непрерывную последовательность блоков диска длиной от 1 до 224-1. Т.о. экстент описывается номером своего первого блока и его длиной.

Файл представляет собой набор экстентов, хранящихся в B+-дереве.

Каждый файл задается с помощью i-node. i-nodes файлов хранятся  i-node-экстентах, в каждом их которых хранится 32 i-node. Неиспользуемый i-node определяется по количеству ссылок на него, хранящимся в самом i-node (=0).

В конце каждого i-node присутствует область, в которой для маленьких файлов хранятся data файла, а для больших – не более восьми узлов B+-дерева экстентов.

Каталог представляет собой файл, содержащий имена файлов, содержащихся в B+-дереве, отсортированному по имени файла.

 Второй i-node тома содержит B+-дерево блоков диска, содержащих битовую карту, задающую свободные/занятые блоки файловой системы.

Система предполагает журналирование, которое абсолютно необходимо при использовании таких сложных структур данных. Используется только журналирование мета-данных.

 

XFS

XFS первоначально была разработана Silicon Graphics, Inc. в начале 90-х годов. Далее (в 1994г.) она была переработана и стала основной файловой системой на всех IRIX-based платформах. Недавно она появилась и на Linux. Она ориентирована на работу с очень большими файлами, и здесь она сильно обгоняет в производительности вышеперечисленные системы. В остальных областях не уступает.

В организации файловой системы активно используются B-деревья, что сильно увеличивает производительность.

Раздел разбивается на 8 или больше allocation groups. В каждой из них существует что-то вроде своей мини-файловой системы. Это очень удобно для распараллеливания. Т.е. с такой системой очень удобной работать на многопроцессорных многозадачных машинах. 

Использует логическое журналирование meta-data. Файл журнала может быть вынесен на отдельный раздел (носитель), что повышает быстродействие. Meta-данные здесь более часто сбрасываются на диск, чем в RaiserFS. Это провоцирует более частое сбрасывание на диск самих данных, что повышает надежность системы.

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

 

DevFS

DevFS является альтернативой стандартному подходу, издавна используемому в UNIX для работы с папкой /dev (см. далее Файлы устройств).

Проблемы: слишком много файлов в этой папке (в том числе устройств, реально не существующих в системе); Major number и Minor number представляют собой 8-битное беззнаковое целое и его диапазона перестает хватать; проблема назначения номеров устройств становится актуальной при согласованиях с другими разработчиками (разработчик драйвера, реально, обязан связываться с разработчиками ядра Linux).

При использовании DevFS драйвер устройства, поддерживающего DevFS,  регистрирует себя в системе (с помощью специального вызова) и просит ему назначить устройство с данным именем. В папке /dev появляется файл устройства с соответствующим именем. После этого все общение с устройством происходит через файл устройства. В самой системе адресация к устройству происходит не по Major number, а по имени файла устройства.

tmpFS

Это – файловая система на основе виртуальной памяти. Виртуальная память поддерживается ядром системы. tmpFS не требует форматирования. tmpFS имеет динамический объем (размер увеличивается/уменьшается с ростом/уменьшением объема занятого в системе пространства).

Отметим, что во всех новых версиях ядер возможна монтировка файловых систем на папки с уже открытыми файлами. Вся работа с открытыми ранее файлами будет продолжаться в старом режиме, а новые файлы будут открываться в новой  файловой системе. Это очень удобно, например, если мы хотим перемонтировать папку /tmp.

Отметим, также, что возможна монтировка части одной файловой системы на некоторую папку. Таким образом, например, мы может создать новую папку в уже подмонтированной tmpFS и подмонтировать ее к папке /tmp:

# mkdir /dev/shm/tmp
# chmod 1777 /dev/shm/tmp
# mount --bind /dev/shm/tmp /tmp

 

NFS

Файловая система, дающая возможность  подмонтировать файловую систему, расположенную на удаленном компьютере по протоколу NFS.

 

 

Типы файлов. Команды ls, chmod .

Вообще говоря, файлы могут быть следующих типов:

·        Стандартные файлы (символ `-’ в начале строки, выдаваемой командой ls -l)

·        Папки (`d')

·        Файлы устройств (блоковые и символьные) (`b', `c’)

·        Гнезда (Sockets) (`s')

·        Символьные ссылки (`l')

·        Именованные каналы  (`p')

 

Команда ls выдает список всех файлов из текущей папки, кроме скрытых, имена которых начинаются на точку.

Команда ls -a выдает список всех файлов из текущей папки, включая скрытые.

Команда lsl  выдает список всех файлов из текущей папки, кроме скрытых, вместе с их полным описанием.

Описание содержит строку из 10 символов, задающих тип файла (первый символ) и привилегии для работы с файлом для трех различных видов пользователей (с точки зрения файла). Три привилегии для трех типов пользователей = 9 символов.

Привилегия x для папок обозначает возможность в нее заходить (т.е. делать папку текущей). Также это право дает возможность обращаться к файлам этой папки даже если право на чтение папки не установлено (т.е. посмотреть список файлов из папки нельзя).

Кроме этого у файла могут быть некоторые дополнительные привилегии. В Linux наиболее важные из них это: SUID (ls вместо x печатает s), SGID (ls вместо x печатает g), SVTX (ls вместо x печатает t). SUID и SGID дают возможность запускать программу, записанную в файле, от имени создателя файла, а не от имени пользователя, запустившего файл (подробнее – при разговоре о процессах). SVTX (sticky bit) ранее разрешал системе временно выгружать программу из памяти. Теперь этот атрибут указывает, на то, что удалить файл из каталога может только создатель файла (по умолчанию удаление файла требует права на модификацию каталога и не имеет отношения к правам на сам файл). Отметим, что значения этих битов в разных UNIX могут отличаться.

 

Вслед за строкой привилегий команда ls выдает количество имен, ссылающихся на дескриптор файла. Далее следуют имена собственника файла (UID) и группы файла (GID). Далее идут верхнее и нижнее номера устройства и дата создания файла.

 

Следует отметить, что в ОС Linux каждый пользователь имеет кроме идентификаторов UID, GID некоторый набор идентификаторов дополнительных групп. Пользователь имеет право читать/модифицировать/выполнять файл если верно одно из трех:

·        ID пользователя совпадает с UID файла и в файле разрешена соответствующая привилегия для собственника файла

·        ID группы пользователя или  ID некоторой дополнительной группы пользователя совпадает с GID файла и в файле разрешена соответствующая привилегия для группы файла

·        Для всех остальных пользователей: если в файле разрешена соответствующая привилегия для всех остальных пользователей

 

Сменить привилегии файла можно с помощью команды chmod.

chmod priv FilesList

 

Вместо priv можно написать битовую маску, соответствующую привилегии:

SUID=4000

SGID=2000

Sticky bit = 1000

rwxrwxrwx – для владельца/группы/всех читать/писать/выполнять

660 обозначает rw-rw----

 

Либо: {ugoa}{+-=}{rwxs}

Файлы устройств. Команда dd

Каждому устройству в UNIX соответствует свой файл устройства, через который можно работать с устройством как с файлом. В Linux (обычно, так же и в других UNIX, но не всегда) файлы устройств размещены в папке /dev.

Устройства бывают блоковыми (row device) и символьными (character device). Если спросить

lsl DeviceFileName

то для символьного устройства первая буква описания файла будет `c’:

crw-------    1 root     root       5,   1 Сен 10 07:47 console

, а бля блокового `b’:

brw-rw----    1 root     floppy     2,   0 Сен 27  2000   fd0

Файл устройства задается двумя числами – верхним (major number, номер драйвера) и нижним (minor number, номер устройства). Существует утилита, помогающая создавать файлы устройств MAKEDEV.

 

Команда dd  позволяет переписывать данные из одного файла (устройства) в другой файл (устройство). При этом, можно задавать размер блока для каждого из двух файлов/устройств. Параметры:

if=…      имя входного файла

of=…     имя выходного файла

ibs=…    размер блока входного файла

skip=blocks       количество блоков, кот. надо пропустить

obs=...    размер блока выходного файла

seek=blocks       пропустить указанное количество блоков в выходном файле

count=blocks    количество блоков, кот. надо скопировать

conv=  lcase ucase        преобразование, которое необходимо произвести с данными (напрмер, conv= lcase  понижает ригистр)

=====================================================

 

Понятие монтировки.

Монтировкой называется процесс отображения некоторой файловой системы (более грубо – файла устройства, через который осуществляется доступ к данной файловой системе) на некоторый файл.

Монтировка корневой папки осуществляется при загрузке ядра. Все остальные монтировки осуществляются командой mount. Ее синтаксис

    mount                                                                      распечатать список всех монтировок

       mount -a [-fFnrsvw] [-t vfstype]                          -a = монтировать все ф.с. из /etc/f stab

       mount [-fnrsvw] [-o options [,...]] device | dir                 задается только имя устройства или папки, а недостающие данные (например, для папки – имя устройства, или для устройства – имя папки) берутся из файла /etc/fstab

       mount [-fnrsvw] [-t vfstype] [-o options] device dir        полный синтаксис

 

Отдельно стоит сказать о монтировке по протоколу NFS. Данный протокол позволяет монтировать файловые системы с удаленных компьютеров. В качестве имени устройства указывается адрес сервера и имя папки на сервере, с которого монтируется файловая система:

mount –t nfs  192.192.192.192:/var/www/dir  /mnt/dir

 

В свою очередь, сервер должен разрешить данному клиенту понтировать его файловые системы. В ОС Linux, AIX это делается с помощью соответствующих записей в файле /etc/exports. В простейшем случае в отдельной строке этого файла можно указать имя папки, которую все смогут монтировать по протоколу NFS. Можно указывать ограничения на список клиентов, которые имеют право монтировки каждой папки. Пример файла /etc/exports:

 

/               master(rw) trusty(rw,no-root-squash)

/projects       proj*.local.domain(rw)

/usr            *.local.domain(ro) @trusted(rw)

/var/www/joe       pc001(rw,all-squash,anonuid=150,anongid=100)

/pub            (ro,insecure,all-squash)

/pub/private    (noaccess)

 

В ОС Solaris разрешения организуются командой share . Например:

share -F nfs -o ro /disk

Загрузка UNIX. Завершение работы

Загрузку UNIX можно рассмотреть на примере Linux. В остальных разновидностях она происходит аналогично, с точностью до имен используемых папок.

Код BR инициализирует распаковку ядра Linux и начало его выполнения.

После проверки работоспособности оборудования происходит монтировка всех необходимых файловых систем в режиме ro. Далее, если необходимо, запускается программа fsck для проверки целостности разделов. При ее успешном выполнении далее происходит перемонтировка соответствующих файловых систем уже в режиме rw.

Монтировка файловых систем осуществляется следующим образом: сначала монтируется корневая файловая система (ее расположение задается в самом ядре или в его параметрах), далее рассматривается файл /etc/fstabSolaris, например, этот файл зовется /etc/vfstab, AIX - /etc/filesystems). Каждая строка этого файла описывает одну файловую систему. Так, например, в Linux каждая строка выглядит следующим образом:

/dev/fd0       /mnt/dos-floppy    msdos   noauto,user 0 0

т.е. сначала указывается файл устройства, на которое происходит монтировка (вообще, здесь может быть и другая информация: например, для монтирования по протоколу NFS здесь указывается адрес сервера и папка на нем), далее указывается имя папки на которую монтируется устройство (при загрузке ядра монтировка производится в порядке записей в данном файле, поэтому порядок записей сущуственен), далее – тип файловой системы, далее – список параметров через запятую (параметр user указывает, что обычный пользователь имеет право на выполнение данной монтировки), далее – уровень дампа (число, определяющее – следует ли производить резервное копирование данного раздела командой dump), далее указывается – следует ли производить проверку данной файловой системы при загрузке и ее порядковый номер в процессе тестирования (равные номера приводят к параллельному тестированию, 0 = не тестировать).

Существует несколько уровней загрузки, обозначающихся номерами (обычно от 0 до 6). Выйти на соответствующий уровень можно командой /sbin/init n, где n - уровень загрузки. Обычно, стандартный уровень загрузки имеет уровень 3. В Linux в папке /etc/rc.d. В ней для каждого уровня загрузки существует своя папка с именами rc0.d, rc1.d, и т.д. В каждой папке лежат выполняемые файлы, которые должны выполниться в начале данного уровня загрузки. Программа init запускает программу getty, которая, собственно, и обеспечивает создание текстового терминала и задание его свойств.  Эта процедура также запрашивает имя пользователя для передачи его процедуре login . Последняя процедура, если необходимо, запрашивает пароль пользователя и, в случае успешной идентификации пользователя, после установки различных параметров вызывается login shell – исходный интерпретатор командной строки.

 

Завершение работы используются процедуры

sync                   синхронизация памяти с диском

halt                    немедленное завершение работы системы (реально, часто = shutdown). В Linux = init 0

reboot                инициализация процесса перезагрузки. В Linux = init 6

shutdown          инициализация процесса завершения работы системы. Ключи:

   -t sec    начать процесс через sec секунд

   now     сейчас

   -r         = reboot

   -h         = halt

 

 

Поиск файлов

Для поиска файлов существует целый ряд программ:

find

ключи:

-name

-iname --- ignore case

-maxdepth n --- n=макс.вложенность поддиректорий (1=только тек.)

-maxdepth 1 --- n=мин.вложенность поддиректорий (1=exceptтолько тек.)

-mount (иногда -xdev) --- не исп.др.файловые системы

-atime n --- последний доступ не более n*24 часов (access)

-ctime n --- последнее изменение статуса не более n*24 часов (change)

-mtime n --- последнее изменение не более n*24 часов (change)

-inum n --- inode=n

-regex expr --- рег. выр. на весь путь

-iregex expr --- рег. выр. на весь путь; case  не важен

-exec expr; ---  `{}' = найденный файл          команда expr выполняется для каждого найденного файла. Например

find . –name ’*.tmp’ –exec rm ’{}’ \;

 

whereis filename        PATH ищет файл filename в стандартных папках (можно задавать имя без расширения)

locate, updatedb         locate ищет файл в базе данных, обновляемой командой updatedb; по умолчанию ищется имя файла, содержащее заданное имя; можно задавать маску на полное (!) имя файла

which filename          ищет файл filename в списке папок переменной PATH