Инструменты пользователя

Инструменты сайта


igor:udev_i_ego_primenenie_dlja_montirovanija_fajlovoj_sistemy

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
igor:udev_i_ego_primenenie_dlja_montirovanija_fajlovoj_sistemy [2017/03/23 19:30] – [Вспомогательные команды для монтирования.] igorigor:udev_i_ego_primenenie_dlja_montirovanija_fajlovoj_sistemy [2019/12/09 23:54] (текущий) – [Опции монтирования] igor
Строка 1: Строка 1:
 +Все мои статьи: [[igor:glavnaja|Статьи Игоря Романова]]
 =====Udev и его применение для монтирования файловой системы===== =====Udev и его применение для монтирования файловой системы=====
-====Необходимость и сущность операции монтирования, в сопоставлении Linux-Windows.====+====Необходимость и сущность операции монтирования, в сопоставлении Linux-Windows====
 Прежде чем рассматривать операцию монтирования, представим себе организацию файлов в операционных системах семейства DOS/Windows: там никакого монтирования нет. \\ Прежде чем рассматривать операцию монтирования, представим себе организацию файлов в операционных системах семейства DOS/Windows: там никакого монтирования нет. \\
-=== Немного истории с предысторией===+=== Немного истории с предысторией ===
 Системы DOS/Windows, как мы помним, выросли из древней системы CP/M, в которой предусматривалось всего два флоппи-дисковода A: и B:, и на каждом из них был единственный каталог файлов, так что полное имя файла включало букву дисковода и собственно имя. \\ Системы DOS/Windows, как мы помним, выросли из древней системы CP/M, в которой предусматривалось всего два флоппи-дисковода A: и B:, и на каждом из них был единственный каталог файлов, так что полное имя файла включало букву дисковода и собственно имя. \\
 Впоследствии появилась DOS, в которой был реализован принцип многоуровневого вложения каталогов. Также стало возможно добавить к компьютеру "винчестер", а позже CD-диски и флэш-накопители. Но принцип формирования общего файлового пространства остался прежним: каждому устройству, хранящему данные в виде файловой системы, ставится в соответствие очередная буква алфавита, и путь к файлу начинается с этой буквы. Файловая система Впоследствии появилась DOS, в которой был реализован принцип многоуровневого вложения каталогов. Также стало возможно добавить к компьютеру "винчестер", а позже CD-диски и флэш-накопители. Но принцип формирования общего файлового пространства остался прежним: каждому устройству, хранящему данные в виде файловой системы, ставится в соответствие очередная буква алфавита, и путь к файлу начинается с этой буквы. Файловая система
Строка 18: Строка 19:
 Как мы знаем, устройство типа жесткого диска ("винчестера") во всех ОС принято разбивать на разделы ("логические диски") и размещать определенные файлы и каталоги на разных разделах (в зависимости, как уже говорилось, от их роли и места в решении задач на конкретном компьютере). В самом простом случае весь винчестер представляет собой один раздел, но все равно раздел есть. В DOS/Windows каждый раздел, если конечно на нем есть файлы и каталоги, рассматривается как отдельное устройство, и ему присваивается своя буква. Например, если на компьютере два винчестера, и на первом три раздела, а на втором два, то получим "логические диски" C:, D:, E:, F: и G:, и не сразу поймешь, где они физически находятся. На картах памяти разделов, как правило, не делают, так что каждая карта памяти представлена одной буквой. В наших ОС винчестеры представлены как файлы (ноды) /dev/sda, /dev/sdb и т. д. - но это относится к винчестеру как изделию. Разделы на каждом винчестере представлены нодами /dev/sda1, /dev/sda2 и т. д. Таким образом, нетрудно понять, на каком физическом винчестере Как мы знаем, устройство типа жесткого диска ("винчестера") во всех ОС принято разбивать на разделы ("логические диски") и размещать определенные файлы и каталоги на разных разделах (в зависимости, как уже говорилось, от их роли и места в решении задач на конкретном компьютере). В самом простом случае весь винчестер представляет собой один раздел, но все равно раздел есть. В DOS/Windows каждый раздел, если конечно на нем есть файлы и каталоги, рассматривается как отдельное устройство, и ему присваивается своя буква. Например, если на компьютере два винчестера, и на первом три раздела, а на втором два, то получим "логические диски" C:, D:, E:, F: и G:, и не сразу поймешь, где они физически находятся. На картах памяти разделов, как правило, не делают, так что каждая карта памяти представлена одной буквой. В наших ОС винчестеры представлены как файлы (ноды) /dev/sda, /dev/sdb и т. д. - но это относится к винчестеру как изделию. Разделы на каждом винчестере представлены нодами /dev/sda1, /dev/sda2 и т. д. Таким образом, нетрудно понять, на каком физическом винчестере
 располагается интересующий нас логический раздел. Что же касается устройств типа флэшек, то для одного устройства может создаваться одна нода (например /dev/sdf) или две (/dev/sdf и /dev/sdf1). От чего это зависит, мне пока что непонятно. Могу только сказать, что, если в устройстве имеется стандартная карта памяти, например micro-sd, вставляемая в кард-ридер, то почти наверняка будет иметь место вторая ситуация, однако имеются исключения. В такой ситуации файловая система, подлежащая монтированию, представлена нодой sdf1, аналогично разделам на винчестерах. \\ \\ располагается интересующий нас логический раздел. Что же касается устройств типа флэшек, то для одного устройства может создаваться одна нода (например /dev/sdf) или две (/dev/sdf и /dev/sdf1). От чего это зависит, мне пока что непонятно. Могу только сказать, что, если в устройстве имеется стандартная карта памяти, например micro-sd, вставляемая в кард-ридер, то почти наверняка будет иметь место вторая ситуация, однако имеются исключения. В такой ситуации файловая система, подлежащая монтированию, представлена нодой sdf1, аналогично разделам на винчестерах. \\ \\
-====Опции монтирования.====+====Опции монтирования====
 Это "нюансы" того, как операционная система должна обращаться с файлами и каталогами на каждом конкретном Это "нюансы" того, как операционная система должна обращаться с файлами и каталогами на каждом конкретном
-устройстве. Их довольно много, выглядят они несколько путано, и вся эта система опций монтирования носит на себе следы кусочно-ямочных модернизаций. Перечислю некоторые опции, начиная с тех, которыми владею сам.\\ +устройстве. Их довольно много, выглядят они несколько путано, и вся эта система опций монтирования носит на себе следы многочисленных кусочно-ямочных улучшизаций. Перечислю некоторые опции, начиная с тех, которыми владею сам.\\ 
-rw/ro - использовать диск для чтения и записи или только для чтения; \\ +**rw/ro** - использовать диск для чтения и записи или только для чтения; \\ 
-exec/noexec - разрешать/запрещать выполнение программ, находящихся на диске; \\ +**exec/noexec** - разрешать/запрещать выполнение программ, если они имеются в данной файловой системе; \\ 
-sync/async - синхронный/асинхронный режим записи: при синхронном режиме каждый файл записывается немедленно, а +**sync/async** - синхронный/асинхронный режим записи: при синхронном режиме каждый файл записывается немедленно, а при асинхронном файлы накапливаются в буфере (временном хранилище) и затем записываются на диск "оптом", что несколько повышает скорость и продлевает жизнь аппаратуры; \\ 
-при асинхронном файлы накапливаются в буфере (временном хранилище) и затем записываются на диск "оптом", что несколько повышает скорость и продлевает жизнь аппаратуры; \\ +**flush=N** - используется совместно с async, "временное хранилище" сбрасывается на диск периодически через N секунд; \\ 
-flush=N - используется совместно с async, "временное хранилище" сбрасывается на диск периодически через N секунд; \\ +**atime/noatime** - обновлять/не обновлять время в каталоге файлов при каждом обращении к файлу; \\ 
-atime/noatime - обновлять/не обновлять время в каталоге файлов при каждом обращении к файлу; \\ +**diratime/nodiratime** - аналогично для каталогов; \\ 
-diratime/nodiratime - аналогично для каталогов; \\ +**relatime** - обновлять время только при создании или изменении файла; \\ 
-relatime - обновлять время только при создании или изменении файла; \\ +**codepage=M,iocharset=N** - нужны для устройств, записанных на других компьютерах, если в именах файлов и в самих файлах присутствуют буквы, отличные от латинских, чтобы дать понять нашему компьютеру, "по-каковски это написано" (для России codepage=866,iocharset=koi8-r); \\ 
-codepage=M,iocharset=N - нужны для устройств, записанных на других компьютерах, если в именах файлов и в самих файлах присутствуют буквы, отличные от латинских, чтобы дать понять нашему компьютеру, "по-каковски это написано" (для России codepage=866,iocharset=koi8-r); \\ +**utf8** - из той же серии: мне ее хватает для работы с флэшками, где могут быть файлы с русскими буквами в именах; \\ 
-utf8 - из той же серии: мне ее хватает для работы с флэшками, где могут быть русские буквы; \\ +**user,users/nouser** - кто имеет право монтировать и размонтировать: nouser - только рут, user - монтировать может рядовой пользователь, и размонтировать - только он же, users - монтировать и размонтировать может любой пользователь; \\ 
-user,users/nouser - кто имеет право монтировать и размонтировать: nouser - только рут, user - монтировать может рядовой пользователь, и размонтировать - только он же, users - монтировать и размонтировать может любой пользователь; \\ +**uid=M,gid=N** - позволяют назначить владельца и группу для файловой системы, не поддерживающей права доступа (важно для флэшек - на них файловая система FAT); \\ 
-uid=M,gid=N - позволяют назначить владельца и группу для файловой системы, не поддерживающей права доступа (важно для флэшек - на них файловая система FAT); \\ +**user_id,group_id** - почти то же самое, но в современной нотации; \\ 
-user_id,group_id - почти то же самое, но в современной нотации; \\ +**fmask,dmask,umask** - задают права доступа к файлам и каталогам; \\ 
-fmask,dmask,umask - задают права доступа к файлам и каталогам; \\ +**dev/nodev** - разрешать/запрещать создание на данном носителе файлов-устройств (файлы-устройства - небезопасные игрушки, так что файловые системы, предназначенные для пользовательских данных, монтируются с опцией nodev); \\
-dev/nodev - разрешать/запрещать создание на данном носителе файлов-устройств (файлы-устройства - небезопасные игрушки, так что файловые системы, предназначенные для пользовательских данных, монтируются с опцией nodev); \\+
 suid/nosuid; \\ suid/nosuid; \\
 blksize=N; \\ blksize=N; \\
 default_permissions; \\ default_permissions; \\
-allow_other; \\+**allow_other** - эта опция используется только при монтировании по сети и дает возможность другим пользователям также получать доступ к данному ресурсу; \\
 shortname=mixed; \\ shortname=mixed; \\
 unhide \\ \\ unhide \\ \\
-====Монтирование файлового дерева при загрузке системы. Файлы /etc/fstab и /etc/mtab.====+====Монтирование файлового дерева при загрузке системы. Файлы /etc/fstab и /etc/mtab====
 На определенном этапе загрузки линуксоидной системы производится монтирование файлового дерева из частей, На определенном этапе загрузки линуксоидной системы производится монтирование файлового дерева из частей,
 располагающихся на разных жестких дисках, подключенных к компьютеру. Поскольку наши системы используются не только на домашних и игровых компьютерах, но и на серверах, к компьютеру может быть подключено множество винчестеров, да еще на каждом из них может быть несколько разделов. Для описания того, как из этого всего следует собирать файловое дерево, предназначен файл /etc/fstab, формирующийся в процессе установки ОС на компьютер. Каждая строка в нем соответствует одному из дисков (разделов), используемых системой. располагающихся на разных жестких дисках, подключенных к компьютеру. Поскольку наши системы используются не только на домашних и игровых компьютерах, но и на серверах, к компьютеру может быть подключено множество винчестеров, да еще на каждом из них может быть несколько разделов. Для описания того, как из этого всего следует собирать файловое дерево, предназначен файл /etc/fstab, формирующийся в процессе установки ОС на компьютер. Каждая строка в нем соответствует одному из дисков (разделов), используемых системой.
 В строке 6 полей, на данном этапе мы рассмотрим первые четыре: нода устройства, точка монтирования, тип файловой системы (или, в более общем плане, в каком виде хранится информация, поскольку она может храниться не только в виде файловой системы, но и как-то иначе) и опции монтирования.\\ В строке 6 полей, на данном этапе мы рассмотрим первые четыре: нода устройства, точка монтирования, тип файловой системы (или, в более общем плане, в каком виде хранится информация, поскольку она может храниться не только в виде файловой системы, но и как-то иначе) и опции монтирования.\\
 Для примера: как это сделано у меня.\\ Для примера: как это сделано у меня.\\
-В своих статьях я придерживаюсь определенной системы представления текста. ''Моноспейсный'' текст имитирует экран компьютера, на котором мы видим наши команды (подчеркнутым шрифтом) и ответ системы на них.\\ \\+В своих статьях я придерживаюсь определенной системы представления текста. ''Моноспейсный'' текст имитирует экран компьютера, на котором мы видим наши команды (''__подчеркнутым шрифтом__'') и ответ системы на них.\\ \\
 ''igor@ibmnote ~ $ __cat /etc/fstab__ \\ ''igor@ibmnote ~ $ __cat /etc/fstab__ \\
 /dev/sda3       /               ext4    rw,async,noatime   0 0 \\ /dev/sda3       /               ext4    rw,async,noatime   0 0 \\
Строка 80: Строка 80:
 /dev/sda1 on /media/windows type fuseblk (ro,nosuid,nodev,allow_other,blksize=4096)'' \\ \\ /dev/sda1 on /media/windows type fuseblk (ro,nosuid,nodev,allow_other,blksize=4096)'' \\ \\
 Как видим, результаты двух команд по существу одинаковы, хотя представлены в несколько разном формате. Как видим, результаты двух команд по существу одинаковы, хотя представлены в несколько разном формате.
-Команда mount без параметров просто выдает список всего, что смонтировано. Файл /etc/mtab также хранит информацию о смонтированных ФС. Этот файл создается системой, и пользователю изменять его не следует. \\+Команда mount без параметров просто выдает список всего, что смонтировано. Файл /etc/mtab также хранит информацию о смонтированных ФС. Этот файл создается системой, и пользователю изменять его не следует. Заметим, что команда cat отображает __настоящее содержимое__ файла (/etc/mtab - символическая ссылка, которая в Дебиане ведет на /proc/mounts). \\
 Devtmpfs, proc,tmpfs,devpts,shm,sysfs - это как раз псевдофайловые системы. \\ Devtmpfs, proc,tmpfs,devpts,shm,sysfs - это как раз псевдофайловые системы. \\
 Вывод этих команд можно сделать более наглядным, если использовать утилиту column, например так: \\ \\ Вывод этих команд можно сделать более наглядным, если использовать утилиту column, например так: \\ \\
Строка 87: Строка 87:
 Рекомендуемая статья: \\ Рекомендуемая статья: \\
 https://losst.ru/avtomaticheskoe-montirovanie-fstab-i-systemd \\ \\ https://losst.ru/avtomaticheskoe-montirovanie-fstab-i-systemd \\ \\
-==== Вспомогательные команды для монтирования====+==== Вспомогательные команды для монтирования ====
 Прежде чем подходить собственно к операции монтирования, изучим несколько вспомогательных команд, которые помогут нам ориентироваться как в нашем файловом хозяйстве, так и в вопросах его обслуживания. \\ Прежде чем подходить собственно к операции монтирования, изучим несколько вспомогательных команд, которые помогут нам ориентироваться как в нашем файловом хозяйстве, так и в вопросах его обслуживания. \\
 Команды, которые рассматриваются в этой главе, требуют рутовых полномочий. \\ Команды, которые рассматриваются в этой главе, требуют рутовых полномочий. \\
Строка 125: Строка 125:
 Команда lsblk выдает информацию о жестких дисках и разделах. К сожалению, формат вики не позволяет воспроизвести ее вывод - попробуйте сами. \\ Команда lsblk выдает информацию о жестких дисках и разделах. К сожалению, формат вики не позволяет воспроизвести ее вывод - попробуйте сами. \\
 Также много интересной информации можно получить, просматривая каталог /dev/disk и его подкаталоги (с использованием общеупотребительных команд типа cd и ls) - здесь я на этом не буду останавливаться. \\ \\ Также много интересной информации можно получить, просматривая каталог /dev/disk и его подкаталоги (с использованием общеупотребительных команд типа cd и ls) - здесь я на этом не буду останавливаться. \\ \\
-====Команда монтирования: mount.====+====Команда монтирования: mount====
 В самом простом виде команда выглядит так: \\ В самом простом виде команда выглядит так: \\
 mount нода точкамонтирования, \\ mount нода точкамонтирования, \\
Строка 151: Строка 151:
 Аналогичные результаты можно получить с помощью udevadm monitor. \\ Аналогичные результаты можно получить с помощью udevadm monitor. \\
 См. также man mount. \\ \\ См. также man mount. \\ \\
-====Постановка задачи автомонтирования.====+====Постановка задачи автомонтирования====
 При частом использовании различных устройств со сменными носителями описанная выше операция монтирования может быть довольно хлопотной, и даже может стать источником дополнительных непоняток. Возникает желание как-то эту операцию автоматизировать, тем более что линукс - система, изначально построенная с расчетом на то, чтобы каждый пользователь подгонял что-то под свои потребности. \\ При частом использовании различных устройств со сменными носителями описанная выше операция монтирования может быть довольно хлопотной, и даже может стать источником дополнительных непоняток. Возникает желание как-то эту операцию автоматизировать, тем более что линукс - система, изначально построенная с расчетом на то, чтобы каждый пользователь подгонял что-то под свои потребности. \\
 Мои потребности достаточно скромные. Я не считаю себя любителем гаджетов, но и у меня они имеются в некотором множестве: во-первых, фотоаппарат и автомобильный видеорегистратор. Во-вторых, сотовый телефон, который я порой использую в качестве фотоаппарата, а порой в качестве аудиоплеера. В-третьих, электронная книжка, которую я не столько читаю, сколько использую для просмотра фотографий и воспроизведения музыки. В-четвертых, просто USB-флэшка, кард-ридер и карты памяти к нему... В общем, джентльменский набор гаджетов, каждый из которых время от времени приходится подключать к компьютеру. Соответственно, каждый раз при подключении нужно подавать команду монтирования, и ничего при этом не перепутать. Я хочу, чтобы эта команда подавалась автоматически, и каждый раз с надлежащими параметрами: каждый гаджет должен монтировался в некоторую постоянную точку, специально для него заготовленную (хотя не обязательно строго индивидуальную), снабженную "говорящим" именем: \\ Мои потребности достаточно скромные. Я не считаю себя любителем гаджетов, но и у меня они имеются в некотором множестве: во-первых, фотоаппарат и автомобильный видеорегистратор. Во-вторых, сотовый телефон, который я порой использую в качестве фотоаппарата, а порой в качестве аудиоплеера. В-третьих, электронная книжка, которую я не столько читаю, сколько использую для просмотра фотографий и воспроизведения музыки. В-четвертых, просто USB-флэшка, кард-ридер и карты памяти к нему... В общем, джентльменский набор гаджетов, каждый из которых время от времени приходится подключать к компьютеру. Соответственно, каждый раз при подключении нужно подавать команду монтирования, и ничего при этом не перепутать. Я хочу, чтобы эта команда подавалась автоматически, и каждый раз с надлежащими параметрами: каждый гаджет должен монтировался в некоторую постоянную точку, специально для него заготовленную (хотя не обязательно строго индивидуальную), снабженную "говорящим" именем: \\
Строка 164: Строка 164:
 Udev - вещь достаточно универсальная, его компетенция простым автомонтированием гаджетов отнюдь не исчерпывается (некоторые даже пишут, что он для этого не предназначен - непонятно почему). Однако по жизни именно автомонтирование - задача номер один, при решении которой люди в первую очередь вспоминают про udev. \\ Udev - вещь достаточно универсальная, его компетенция простым автомонтированием гаджетов отнюдь не исчерпывается (некоторые даже пишут, что он для этого не предназначен - непонятно почему). Однако по жизни именно автомонтирование - задача номер один, при решении которой люди в первую очередь вспоминают про udev. \\
 Udev независим ни от файл-менеджеров, ни от используемой вами графической оболочки (desktop environment, window manager...), ни вообще от X-сервера, то есть описанная ниже технология применима даже к компьютеру, совсем не имеющему графической периферии. \\ Udev независим ни от файл-менеджеров, ни от используемой вами графической оболочки (desktop environment, window manager...), ни вообще от X-сервера, то есть описанная ниже технология применима даже к компьютеру, совсем не имеющему графической периферии. \\
-Второе. В бинарных дистрибутивах, как правило, имеются свои варианты решения поставленной задачи, разработанные для нас (за нас) создателями конкретного дистрибутива и, в отличие от того что сказано чуть выше, "привязанные" к графическим средствам этого дистрибутива. Если вы, подобно вашему покорному слуге, считаете их неудачными и хотите решить задачу по-своему, то надо понимать, что это обходное решение - "костыль". В данной ситуации это слово не несет отрицательной эмоциональной нагрузки, но этот "костыль" может конфликтовать со стандартным решением, которого никто не отменял. У меня, например, тунар просто "вылетает" при попытке обратиться к флэшке, примонтированной через udev. \\ \\ +Второе. В бинарных дистрибутивах, как правило, имеются свои варианты решения поставленной задачи, разработанные для нас (за нас) создателями конкретного дистрибутива и, в отличие от того что сказано чуть выше, "привязанные" к графическим средствам этого дистрибутива. Если вы, подобно вашему покорному слуге, считаете их неудачными и хотите решить задачу по-своему, то надо понимать, что это обходное решение - "костыль". В данной ситуации это слово не несет отрицательной эмоциональной нагрузки, но этот "костыль" может конфликтовать со стандартным решением, которого никто не отменял. У меня, например, тунар при попытке обратиться к флэшке, примонтированной через udev, просто "вылетает" со скоростью, обычно ему не свойственной. \\ \\ 
-====Краткое описание принципа работы udev.====+====Краткое описание принципа работы udev====
 Как уже говорилось, в каждой ОС есть механизмы, следящие за событиями и докладывающие о них, и есть механизмы, получающие эти доклады и предпринимающие должные действия по факту событий. К последним относится udev - демон, который характеризуется тем, что может анализировать информацию о событиях согласно __правилам__, написанным для него пользователем данного конкретного компьютера. \\ Как уже говорилось, в каждой ОС есть механизмы, следящие за событиями и докладывающие о них, и есть механизмы, получающие эти доклады и предпринимающие должные действия по факту событий. К последним относится udev - демон, который характеризуется тем, что может анализировать информацию о событиях согласно __правилам__, написанным для него пользователем данного конкретного компьютера. \\
 Если вы когда-нибудь в школе или в институте изучали основы советского (российского) государства и права, то вам наверняка рассказывали, как устроена правовая норма: "если имеет место А, то следует обеспечить Б", причем и А и Б могут представлять собой некие множества. В реальных законах я этого не видел, но правила udev строятся именно по такому принципу. То есть каждое правило состоит из опознавательной и исполнительной частей. \\ Если вы когда-нибудь в школе или в институте изучали основы советского (российского) государства и права, то вам наверняка рассказывали, как устроена правовая норма: "если имеет место А, то следует обеспечить Б", причем и А и Б могут представлять собой некие множества. В реальных законах я этого не видел, но правила udev строятся именно по такому принципу. То есть каждое правило состоит из опознавательной и исполнительной частей. \\
Строка 178: Строка 178:
 udevadm control - управление демоном. \\ udevadm control - управление демоном. \\
 Названия, которые я здесь привожу, относятся к дебиану и генте. В других дистрибутивах могут быть названия типа udevinfo. \\ \\ Названия, которые я здесь привожу, относятся к дебиану и генте. В других дистрибутивах могут быть названия типа udevinfo. \\ \\
-====Правила написания правил.====+====Правила написания правил====
 Каждое правило записывается в виде последовательности ключей - опознавательных (фильтров) и исполнительных. Каждое правило записывается в виде последовательности ключей - опознавательных (фильтров) и исполнительных.
 Ключи разделяются запятыми или пробелами. Можно ли ставить пробелы внутри ключей? - Боюсь что нет. Ключи разделяются запятыми или пробелами. Можно ли ставить пробелы внутри ключей? - Боюсь что нет.
Строка 214: Строка 214:
 программа обнаруживает ошибку, то никакого сообщения на экран мы тоже не получим. По большому счету, для контроля действий udev в реальном времени можно использовать только звуковой вывод. \\ программа обнаруживает ошибку, то никакого сообщения на экран мы тоже не получим. По большому счету, для контроля действий udev в реальном времени можно использовать только звуковой вывод. \\
 С поправкой на указанные обстоятельства, в RUN-ключе можно указывать практически любые программы, в т. ч. самостоятельно написанные bash-скрипты (при написании скрипта не забыть сделать его исполняемым с помощью команды chmod). Можно вообще все действия по подготовке монтирования прописать в скрипт, а udev использовать только для запуска этого скрипта. \\ \\ С поправкой на указанные обстоятельства, в RUN-ключе можно указывать практически любые программы, в т. ч. самостоятельно написанные bash-скрипты (при написании скрипта не забыть сделать его исполняемым с помощью команды chmod). Можно вообще все действия по подготовке монтирования прописать в скрипт, а udev использовать только для запуска этого скрипта. \\ \\
-====Информация для написания правил.====+====Информация для написания правил====
 Выше мы рассмотрели несколько исполнительных ключей, а сейчас более подробно остановимся на опознавательных Выше мы рассмотрели несколько исполнительных ключей, а сейчас более подробно остановимся на опознавательных
 ключах: какие бывают наименования и значения? \\ ключах: какие бывают наименования и значения? \\
Строка 352: Строка 352:
 ATTR{partition}=="1" однозначно говорит о том, что это устройство представляет собой "раздел" - следовательно,  ATTR{partition}=="1" однозначно говорит о том, что это устройство представляет собой "раздел" - следовательно, 
 файлы, подлежащие монтированию, находятся именно здесь, и в команде mount мы должны вписать sdb1. ATTR{removable}=="1" при отсутствии sdb1 ничего бы не означало, но в нашей ситуации sdb1 имеется, и ATTR{removable}=="1" говорит о том, что sdb следует рассматривать как кард-ридер: файлов на нем нет, и монтированию оно не подлежит. \\ \\ файлы, подлежащие монтированию, находятся именно здесь, и в команде mount мы должны вписать sdb1. ATTR{removable}=="1" при отсутствии sdb1 ничего бы не означало, но в нашей ситуации sdb1 имеется, и ATTR{removable}=="1" говорит о том, что sdb следует рассматривать как кард-ридер: файлов на нем нет, и монтированию оно не подлежит. \\ \\
-====Написание правил.====+====Написание правил====
 Итак, имеем почти все, что нужно для написания правил... Только не забыть о том, на что я уже  Итак, имеем почти все, что нужно для написания правил... Только не забыть о том, на что я уже 
 указывал выше: правила относятся не к устройству, а к событию, так что нам нужно указать, какого рода указывал выше: правила относятся не к устройству, а к событию, так что нам нужно указать, какого рода
Строка 396: Строка 396:
 Опознавательная часть в этих правилах, хотя и написана иначе, чем у меня, сомнений не вызывает. (все уже поняли, что значит "sd[c-z][0-9]"?) Но вот вопрос: зачем для одного и того же события писать несколько правил с одними и теми же фильтрами, когда можно в одно правило вставить два RUN-ключа? Впрочем, это не главное. Наибольшие сомнения вызывает команда размонтирования, выполняемая __по факту__ события ACTION=="remove". Такое событие регистрируется, когда флэшка __уже вынута__ из USB-гнезда, а размонтирование следовало выполнить раньше. Даже если использовать опцию монтирования sync, кто гарантирует, что команда umount не будет нужна? А поскольку компьютер не может предсказать извлечение флэшки, подавать команду umount нужно обязательно вручную __перед тем как__ вынимать флэшку. \\ Опознавательная часть в этих правилах, хотя и написана иначе, чем у меня, сомнений не вызывает. (все уже поняли, что значит "sd[c-z][0-9]"?) Но вот вопрос: зачем для одного и того же события писать несколько правил с одними и теми же фильтрами, когда можно в одно правило вставить два RUN-ключа? Впрочем, это не главное. Наибольшие сомнения вызывает команда размонтирования, выполняемая __по факту__ события ACTION=="remove". Такое событие регистрируется, когда флэшка __уже вынута__ из USB-гнезда, а размонтирование следовало выполнить раньше. Даже если использовать опцию монтирования sync, кто гарантирует, что команда umount не будет нужна? А поскольку компьютер не может предсказать извлечение флэшки, подавать команду umount нужно обязательно вручную __перед тем как__ вынимать флэшку. \\
 Что касается команд mkdir и rm, то все авторы интернет-блогов и статей поступают так, на самом же деле необходимости в этом нет. У меня все каталоги, которые будут служить точками монтирования, созданы заранее и существуют постоянно. \\ \\ Что касается команд mkdir и rm, то все авторы интернет-блогов и статей поступают так, на самом же деле необходимости в этом нет. У меня все каталоги, которые будут служить точками монтирования, созданы заранее и существуют постоянно. \\ \\
-====Нестандартные имена для устройств.====+====Нестандартные имена для устройств====
 Как я уже отмечал, помимо собственно автомонтирования, udev может решать множество других задач. В частности, он позволяет "подготовить почву" для ручного монтирования, на случай, если автомонтирование по какой-либо причине не нужно. Например, можно в дополнение к безликим и путаным именам типа sdb1, sdc1... разместить в каталоге /dev альтернативные файлы-ноды с "говорящими" именами, с тем чтобы затем дать команду, например, так: \\ \\ Как я уже отмечал, помимо собственно автомонтирования, udev может решать множество других задач. В частности, он позволяет "подготовить почву" для ручного монтирования, на случай, если автомонтирование по какой-либо причине не нужно. Например, можно в дополнение к безликим и путаным именам типа sdb1, sdc1... разместить в каталоге /dev альтернативные файлы-ноды с "говорящими" именами, с тем чтобы затем дать команду, например, так: \\ \\
 ''mount /dev/nokia /media/nokia'' \\ \\ ''mount /dev/nokia /media/nokia'' \\ \\
Строка 409: Строка 409:
 Какой вариант предпочесть? Сколько людей, столько мнений. Излагаю свое, личное и потому неизбежно субъективное. \\ Какой вариант предпочесть? Сколько людей, столько мнений. Излагаю свое, личное и потому неизбежно субъективное. \\
 Каталог /dev содержит десятки устройств. В этом списке более-менее легко найти sda, sdb, sdc и т. п., поскольку они расположены компактной группой. А вот альтернативные имена в этом списке даже чисто зрительно практически теряются, да еще как их сопоставить с соответствующими стандартными именами? Если же использовать символические ссылки, то, во-первых, символическая ссылка легко отличаются от простых файлов даже по "внешнему виду" в выводе команды ls -l. Во-вторых, сразу видно, на какую стандартную ноду она ссылается. Если подключено несколько устройств, то нетрудно определить, на какую стандартную ноду "село" каждое из них. Поэтому я предпочитаю этот вариант. \\ \\ Каталог /dev содержит десятки устройств. В этом списке более-менее легко найти sda, sdb, sdc и т. п., поскольку они расположены компактной группой. А вот альтернативные имена в этом списке даже чисто зрительно практически теряются, да еще как их сопоставить с соответствующими стандартными именами? Если же использовать символические ссылки, то, во-первых, символическая ссылка легко отличаются от простых файлов даже по "внешнему виду" в выводе команды ls -l. Во-вторых, сразу видно, на какую стандартную ноду она ссылается. Если подключено несколько устройств, то нетрудно определить, на какую стандартную ноду "село" каждое из них. Поэтому я предпочитаю этот вариант. \\ \\
-====Использование переменных окружения.====+====Использование переменных окружения====
 Кроме атрибутов устройств, каждому событию ставится в соответствие еще одно "досье", называемое английским словом environment. Это слово с некоторой приблизительностью переводят как среда или окружение, но толку от такого перевода мало, потому что к пониманию сути он не приближает. \\ Кроме атрибутов устройств, каждому событию ставится в соответствие еще одно "досье", называемое английским словом environment. Это слово с некоторой приблизительностью переводят как среда или окружение, но толку от такого перевода мало, потому что к пониманию сути он не приближает. \\
 На самом деле окружение - используемый во многих близких к UNIX системах (в том числе в ДОС) инструмент для изменения "поведения" программ путем передачи им некоторых параметров. Иначе говоря, любая программа "работает в своей среде" (в своем окружении), а формируется эта среда процессом, вызывающим эту программу (родительским). \\ На самом деле окружение - используемый во многих близких к UNIX системах (в том числе в ДОС) инструмент для изменения "поведения" программ путем передачи им некоторых параметров. Иначе говоря, любая программа "работает в своей среде" (в своем окружении), а формируется эта среда процессом, вызывающим эту программу (родительским). \\
Строка 485: Строка 485:
 То есть мы можем обращаться к переменным окружения точно так же, как вообще к переменным в языке командной оболочки (а какие, собственно, еще бывают переменные?) \\ То есть мы можем обращаться к переменным окружения точно так же, как вообще к переменным в языке командной оболочки (а какие, собственно, еще бывают переменные?) \\
 Назовем этот скрипт, допустим, bashmount. Не забудем вписать первой строкой #!/bin/bash, чтобы система понимала, какую программу использовать для отработки скрипта, и сделать скрипт исполняемым с помощью команды chmod a+x bashmount.\\ \\ Назовем этот скрипт, допустим, bashmount. Не забудем вписать первой строкой #!/bin/bash, чтобы система понимала, какую программу использовать для отработки скрипта, и сделать скрипт исполняемым с помощью команды chmod a+x bashmount.\\ \\
-====Права доступа.====+====Права доступа====
 В юниксоидных ОС используются файловые системы семейства ext2/ext3/ext4, требующие задания для каждого файла или каталога тех или иных ограничений по доступу для разных пользователей. Однако мы сейчас говорим о всевозможных гаджетах, а на них обычно имеется файловая система семейства FAT (такая же, как в DOS/Windows). В юниксоидных ОС используются файловые системы семейства ext2/ext3/ext4, требующие задания для каждого файла или каталога тех или иных ограничений по доступу для разных пользователей. Однако мы сейчас говорим о всевозможных гаджетах, а на них обычно имеется файловая система семейства FAT (такая же, как в DOS/Windows).
 Эта файловая система не поддерживает прав доступа. Поэтому, если монтировать флэшку без специфических опций, то владельцем файловой системы будет root и, соответственно, запись файлов на флэшку будет возможна лишь через su или sudo. \\ Эта файловая система не поддерживает прав доступа. Поэтому, если монтировать флэшку без специфических опций, то владельцем файловой системы будет root и, соответственно, запись файлов на флэшку будет возможна лишь через su или sudo. \\
Строка 492: Строка 492:
 В опциях fmask, dmask и umask ставится восьмеричный код доступа, инверсный по отношению к тому, который ставится в команде chmod. То есть, по сути дела, указываем, что кому __запрещено__ делать, в противоположность тому, как в команде chmod указываем, что кому __разрешено__. Например, dmask=000,fmask=111 - дают права доступа к каталогам 777, к файлам 666 (напоминаю: для того чтобы войти в каталог, нужно иметь права на его "исполнение".)\\ В опциях fmask, dmask и umask ставится восьмеричный код доступа, инверсный по отношению к тому, который ставится в команде chmod. То есть, по сути дела, указываем, что кому __запрещено__ делать, в противоположность тому, как в команде chmod указываем, что кому __разрешено__. Например, dmask=000,fmask=111 - дают права доступа к каталогам 777, к файлам 666 (напоминаю: для того чтобы войти в каталог, нужно иметь права на его "исполнение".)\\
 Почему так сделано - непонятно. \\ \\ Почему так сделано - непонятно. \\ \\
-====Немного высшего пилотажа.====+====Немного высшего пилотажа====
 Правила udev представляют собой специфическую программу. И, как в обычной программе, здесь можно использовать метки и условные переходы. Специального оператора типа IF здесь нет, да он и не очень нужен, поскольку сами правила есть не что иное как условные операторы, хотя и в несколько нетрадиционной записи. Все остальное записывается в том же синтаксисе, что и правила. Метка: \\ Правила udev представляют собой специфическую программу. И, как в обычной программе, здесь можно использовать метки и условные переходы. Специального оператора типа IF здесь нет, да он и не очень нужен, поскольку сами правила есть не что иное как условные операторы, хотя и в несколько нетрадиционной записи. Все остальное записывается в том же синтаксисе, что и правила. Метка: \\
 **LABEL="имяметки"** \\ **LABEL="имяметки"** \\
igor/udev_i_ego_primenenie_dlja_montirovanija_fajlovoj_sistemy.1490286606.txt.bz2 · Последнее изменение: 2017/03/23 19:30 — igor