Монтирование файловых систем
Сначала несколько концепций, связанных с файловыми системами. Прежде, чем файловая система будет принята вашей системой, она должна быть примонтирована к какому-то каталогу. Например, если у вас файловая система на дискете, то вы должны примонтировать ее в каталог, скажем /mnt, для того, чтобы обеспечить доступ к ее файлам. После монтирования файловой системы все файлы этой системы появляются в этом каталоге (и ниже). После размонтирования файловой системы каталог (в нашем случае /mnt) будет пуст, то же самое справедливо для файловой системы на жестком диске. Причем каталог /mnt будет пуст, если он был пуст до монтирования, иначе наоборот, станут видными файлы каталога /mnt (основной системы), которые становятся "невидимыми", когда к этому каталогу монтируется файловая система). Система автоматически монтирует файловые системы на ваш жесткий диск во время загрузки. Так называемая "корневая файловая система" монтируется к каталогу /. Если у вас отдельные файловые системы, например, для /usr - она монтируется на /usr. Если у вас только корневая файловая система, то все файлы, включая содержимое /usr, существуют в этой файловой системе.
Команда mount используется для монтирования файловой системы.
mount -av
Выполняется из файла /etc/rc (файла системной инициализации во время загрузки). Команда mount -av получает информацию о файловых системах и монтирует в соответствии с файлом /etc/fstab. Пример файла fstab показан ниже.
# device directory type options
/dev/hda2 / ext2 defaults
/dev/hda3 /mnt ext2 defaults
/dev/hda4 none swap sw
/proc /proc proc none
Первое поле - это устройство (имя монтируемого раздела). Например, /dev/hda2 – соответствует второму разделу жесткого диска. Имя файла hda2 расшифровывается следующим образом: hd (hard disk) – означает жесткий диск, a – означает канал IDE, на котором находится ваш диск, 2- означает номер раздела. Второе поле - точка монтирования. Третье поле - тип файловой системы (например, ext2 для системы типа ext2fs или minix для Minix filesystems).
Не все эти типы могут быть доступны на вашей системе; ваше ядро должно иметь соответствующую откомпилированную поддержку.
Последнее поле файла fstab (options) содержит опции монтирования, обычно они устанавливаются в ``defaults''.
Вы можете видеть, что разделы своппинга также включены в /etc/fstab. Они имеют каталог монтирования "tt/none/", и тип "swap". Команда swapon -a выполняемая из /etc/rc используется для обеспечения своппинга на все устройства, перечисленные в /etc/fstab.
Файл fstab содержит одну специальную запись для файловой системы /proc. Файловая система /proc используется для хранения информации о системных процессах, доступной памяти и т.п. Если /proc не примонтирован, такие команды, как ps не будут работать.
Внимание! Команда mount может использоваться только root. Это для обеспечения безопасности системы. Вам не захочется, чтобы монтирование и размонтирование файловых систем зависело от прихоти рядовых пользователей. Есть несколько программных пакетов, которые дают возможность тем самым рядовым пользователям монтировать и размонтировать файловые системы (особенно на дискетах) не затрагивая безопасности системы.
Таким образом, команда mount -av фактически монтирует все файловые системы, кроме корневой файловой системы. Корневая файловая система автоматически монтируется ядром во время загрузки. Вместо использования mount -av вы можете примонтировать файловую систему вручную. Команда
# mount –t ext2 /dev/hda3 /mnt
эквивалентна монтированию файловой системы на /dev/hda3 в примере fstab, рассмотренном ранее. В данном случае команде mount передается три параметра ext2, /dev/hda3 и /usr - которые содержат соответственно тип файловой системы, файл устройства, на котором располагается файловая система и точка монтирования. Как правило, обычно бывает достаточно указать два параметра: файл устройства и точка монтирования.
Обычно пользователю не приходится монтировать и размонтировать файловые системы вручную. Команда mount -av в /etc/rc позаботится о монтировании файловых систем во время загрузки. Файловые системы автоматически размонтируются командами shutdown или halt перед выключением системы.
В файле /etc/mtab хранится информация о том, какие файловые системы сейчас смонтированы и с какими параметрами монтирования это было сделано. Данные о смонтированных файловых системах содержатся также в файле /proc/mounts (и там они точнее, поскольку отображают соответствующую внутреннюю таблицу ядра), но параметров, с которыми эти системы были смонтированы, в нем нет, поскольку они в ядре не хранятся (а те из них, которые интерпретируются программой mount, вообще не доходят до ядра), поэтому /etc/mtab также находит применение.
Как уже было сказано, монтирование файловых систем выполняется командой mount, а их размонтирование - командой unmount (в некоторых системах umount). Исключение составляет корневая файловая система, которая обслуживается отдельно и до всех остальных систем. Действительно, только при ее наличии становятся доступными и сама команда mount, и каталог /dev, где находятся файлы устройств, и подкаталоги для монтирования. Чтобы файловые системы можно было монтировать при запуске ОС и размонтировать при ее остановке, используются два файла, которые традиционно размещаются в подкаталоге /etc: /etc/fstab и /etc/mtab. Файл /etc/fstab содержит список файловых систем, которые могут быть смонтированы. Конечно, необходимые параметры всегда можно указать при вызове команды mount, но гораздо удобнее, когда они извлекаются из файла.
Каждой точке монтирования в нем соответствует одна строка, состоящая из шести полей: название устройства, на котором расположена файловая система, точка монтирования, тип файловой системы, параметры монтирования, "уровень дампа" и порядковый номер файловой системы для программы fsck.
Примеры монтирования и размонтирования:
$ mount /dev/hda2 /home
$ umount /home
Доступ к файлам MS-DOS
Если вам необходимо обеспечить доступ к файлам MS-DOS, вы можете это легко сделать. Обычно для получения доступа к файлам MSDOS, вам достаточно примонтировать MS-DOS раздел или дискету и обращаться к фалам через файловую систему Linux. Например, если вы вставите дискету MS-DOS в устройство /dev/fd0 (A: в нотации MS/DOS), команда
# mount –t msdos /dev/fd0 /mnt
примонтирует эту дискету к каталогу /mnt. Или же можно не указывать тип файловой системы, тогда она будет определена автоматически: # mount /dev/fd0 /mnt . Точно также, вы можете примонтировать MS-DOS раздел на вашем винчестере. Если вы, например, имеете MS-DOS раздел на /dev/hda1, команда
# mount -t msdos /dev/hda1 /mnt
примонтирует ее. Не забудьте размонтировать DOS-раздел после окончания работы с ней. Вы можете монтировать раздел MS-DOS автоматически во время загрузки системы, если добавите строку в файл /etc/fstab. Например, следующая строка в файле /etc/fstab монтирует DOS раздел /dev/hda1 на каталог /dos.
/dev/hda1 /dos msdos defaults
Если вы не знаете, как указать тип монтируемой файловой системы, то можно указать параметр auto, например
mount –t auto /dev/hda1 /mnt/dos
Вы можете также получить доступ к файлам MS-DOS, используя пакет Mtools. Команды mcd, mdir и mcopy этого пакеты работают точно также как команды MS-DOS cd, dir, copy. Если вы установили пакет Mtools, то он должен содержать и руководства на эти команды.
Доступ к файлам MS-DOS и выполнение программ MS-DOS - это две большие разницы. В настоящее время в процессе разработки находится эмулятор программ MS-DOS. Он широко распространен и даже входит в состав дистрибутива SLS. Доступен он также и по FTP с многих серверов. Эмулятор MS-DOS достаточно полон для выполнения большинства DOS программ, включая Wordperfect. Однако Linux и MS-DOS совершенно разные операционные системы и полнота любого MS-DOS эмулятора в любой UNIX-системе всегда ограничена.
Кроме этого, в настоящее время существуют в среде X Window эмулятор Microsoft Windows. Для получения дополнительной информации обратитесь к соответствующим группам новостей и FTP серверам.
Программирование в ОС Linux
Рассмотрим пример написания программы на языке C под Linux. Заметим, что C является родным языком этой операционной системы. Приведенная ниже программа (delete.c) реализует функцию удаления файла, имя которого задается как параметр командной строки. При этом программа будет работать только с ключом –i. Перед удалением файла производится запрос на подтверждение удаления.
#include <stdio.h>
main(argc, argv)
int argc;
char *argv[];
{
char c [5];
int b;
b=0;
if (!strcmp(argv[1],"-i"))
{
printf("delete %s ? (y/n)", argv[2]);
scanf ("%s", c);
if (c[0] == 'y')
{
remove(argv[2]);
printf ("file deleted \n");
}
b=1;
}
if (!b) printf ("no key valid \n");
}
Функция main является первой функцией, которой будет передано управление. Первый аргумент (argc) определяет число параметров, передаваемых программе, включая ее имя. Указатели на каждый из параметров передаются в массиве argv[]. Таким образом, через argv[0] адресуется строка, содержащая имя программы. В результате компиляции (#gcc delete.c) будет создан исполняемый файл ( по умолчанию a.out). В данном случае предлагается использовать компилятор gcc.
После запуска (#./a.out –i del.txt) будет предложено произвести подтверждение на удаление файла и если подтверждение будет получено, то файл del.txt будет удален. Если программа будет запущена без ключа –i, то на экране появится надпись «no key valid».