Linux программирование в примерах
8.2.1. Использование опций монтирования
Команда
поддерживает опции, которые контролируют то, какие операции ядро будет позволять или не позволять применять к файловой системе. Их приличное количество. Лишь две из них полезны на самом деле в командной строке:mountroМонтирует файловую систему только для чтения. Это необходимо для устройств только для чтения, таких, как CD-ROM и DVD.
loopИспользует кольцевое устройство для интерпретации обычного файла в качестве файловой системы. Пример этого мы показали ранее (см. раздел 8.1.3 «Монтирование файловых систем:
»).mountОпции передаются с опцией командной строки -о и могут группироваться, отделяясь запятыми. Например, вот использованная ранее командная строка:
mount -t iso9660 -о ro,loop shrike-i386-discl.iso /mnt/cdromОставшиеся опции предназначены для использования в
(хотя они могут использоваться также и в командной строке). Следующий список представляет те опции, которые, как мы полагаем, наиболее важны в повседневном использовании./etc/fstab,autonoautoФайловые системы, помеченные
, должны монтироваться при загрузке системы через 'auto' (монтировать все файловые системы). Файловые системыmount -адолжны монтироваться вручную. Они по-прежнему находятся вnoautoвместе с другими файловыми системами. (См., например, элемент/etc/fstabдля показанного ранее файла/win)./etc/fstabdefaultsИспользует по умолчанию опции
,rw,suid,dev,exec,autoиnouser. (asyncявляется продвинутой опцией, повышающей производительность ввода/вывода).async,devnodevПозволяет (не позволяет) использовать в файловой системе файлы символьных или блочных устройств.
,execnoexecПозволяет (не позволяет) запускать в файловой системе двоичные исполняемые файлы.
,usernouserПозволяет (не позволяет) монтировать данную файловую систему любому пользователю. Это полезно для CD-ROM; даже если вы находитесь на рабочей станции с одним пользователем, удобно не переключаться на
просто для монтирования CD. Демонтировать файловую систему может лишь пользователь, который смонтировал ее.rootпредполагает наличие опцийuser,noexecиnosuid.nodev,suidnosuidПоддерживает (не поддерживает) биты
иsetuidисполняемых файлов в файловой системе.setgidrwМонтирует файловую систему в режиме для чтения/записи.
Опции
,nodevиnoexecособенно ценны для безопасности на файловых системах гибких дисков и CD-ROM. Рассмотрите студенческую среду, в которой студентам разрешено монтировать собственные гибкие диски или CD. Тривиально смастерить для жесткого диска файловую систему с оболочкой setuid-root или с файлом устройства с разрешением записи для всех, которая позволила бы предприимчивому пользователю изменить права доступа к системным файлам.nosuidУ каждой файловой системы есть специфичные для нее опции. Важной опцией для
иext2являетсяext3. Мы отложим обсуждение этой опции до раздела 11.5.1 «Группа по умолчанию для новых файлов и каталогов». Подробности для всех поддерживаемых файловых систем можно найти в справочной странице mount(8).grpidВ качестве конкретного примера вернемся к строчке для раздела Windows в нашей системе:
# device mount-point type options freq passno/dev/hda1 /win vfat noauto,defaults,user,uid=2076,gid=10 0 0Опция
предотвращает монтирование раздела Windows при загрузке. Опцияnoautoта же самая, чтоdefaults,rw,suid,dev,exec. Опцияasyncпозволяет нам монтировать файловую систему, не будучиuser. Опцииrootиuid=делает файлы вgid=принадлежащими нам, так что нам не нужно иметь права/winпри работе с этим разделом.root8.2.2. Работа со смонтированными файловыми системами:
getmntent()Любой из файлов
,/etc/fstabи/etc/mtabможет быть прочитан программное использованием набора процедур/proc/mounts:getmntent()#include <stdio.h> /* GLIBC */#include <mntent.h>FILE *setmntent(const char *filename, const char *type);struct mntent *getmntent(FILE *filep);int addmntent(FILE *filep, const struct mntent *mnt);int endmntent(FILE *filep);char *hasmntopt(const struct mntent *mnt, const char *opt);открывает файл, содержащий элементы точек монтирования. Аргументsetmntent()является файлом, который должен быть открыт. Аргументfilenameпохож на второй аргументtype, указывая доступ для чтения, записи или чтения/записи. (Рассмотрите командуfopen(), которой приходится добавлять элемент кmountдля каждой файловой системы, которую она монтирует, и/etc/mtab, которая должна удалять этот элемент.) Затем возвращаемое значение типаumountиспользуется с оставшимися процедурами.FILE*