Под Linux вы можете получить информацию о точке монтирования непосредственно из ядра в /proc/mounts
. mount
Программа записывает аналогичную информацию /etc/mtab
. Пути и параметры могут отличаться, так как они /etc/mtab
представляют то, что было mount
передано ядру, тогда /proc/mounts
как данные отображаются в виде внутри ядра. /proc/mounts
всегда актуален, тогда как /etc/mtab
не может быть, если бы /etc
был доступен только для чтения в какой-то момент, который не ожидался загрузочными скриптами. Формат похож на /etc/fstab
.
В обоих файлах первое поле, разделенное пробелами, содержит путь к устройству, а второе поле содержит точку монтирования.
awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts
или если у вас нет awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Есть ряд крайних случаев, когда вы можете не получить то, что ожидаете. Если устройство было смонтировано по другому пути /dev
, обозначающему одно и то же устройство, вы не заметите его таким образом. В /proc/mounts
bind крепления неотличимы от оригинала. Может быть несколько совпадений, если точка монтирования затеняет другую (это необычно).
В /proc/self
или /proc/$pid
есть mounts
файл для процесса, который имитирует глобальный файл. Информация о монтировании может отличаться в зависимости от процесса, например, из-за chroot
. Существует дополнительный файл с именем, mountinfo
который имеет другой формат и содержит больше информации, в частности, старшие и младшие номера устройства. Из документации :
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
(1) mount ID: unique identifier of the mount (may be reused after umount)
(2) parent ID: ID of parent (or of self for the top of the mount tree)
(3) major:minor: value of st_dev for files on filesystem
(4) root: root of the mount within the filesystem
(5) mount point: mount point relative to the process's root
(6) mount options: per mount options
(7) optional fields: zero or more fields of the form "tag[:value]"
(8) separator: marks the end of the optional fields
(9) filesystem type: name of filesystem of the form "type[.subtype]"
(10) mount source: filesystem specific information or "none"
(11) super options: per super block options
Поэтому, если вы ищете устройство по номеру, вы можете сделать это следующим образом:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'
udisks
символическая ссылка (в / dev / disk / by-label / ...). Но я могу разрешить использование узла устройстваreadlink -f
. Мне нравится/proc/mounts
идея, я думаю, что это может быть немного надежнее, чем/etc/mtab
.mountinfo
. Позвоните,stat
чтобы узнать номера устройств (см. Мой обновленный ответ, я забыл включить команду ранее).-d " "
опция дляcut
в этойgrep
команде.findmnt
иlsblk
специальные команды, которые делают тяжелую работу (более надежную) за васВ Linux теперь вы можете использовать
findmnt
команду изutil-linux
(начиная с версии 2.18):Или
lsblk
(также начинаяutil-linux
с версии 2.19):Это также полезно, чтобы найти всю файловую систему, смонтированную на определенном устройстве (диск или раздел ...):
Чтобы получить только точку монтирования:
Выше
findmnt
возвращается с ошибкой выхода из состояния, если устройство не смонтировано, нетlsblk
.Так:
источник
Команда
mount
без аргументов выведет список всех подключенных файловых систем; Вы можете сделатьgrep
это для диска, который вы хотите (или изgrep
/etc/mtab
которого файлmount
считывает информацию):источник
grep ${NODE} /etc/mtab | cut -d ' ' -f 2
должен это сделать.grep ^"${NODE}[[:space:]]\+" /etc/mtab | cut -d ' ' -f 2"
гораздо менее хрупкий ...Да. Вы можете увидеть Отображение только интересных точек монтирования / Фильтрация неинтересных типов или списков каталогов
/
, которые не находятся под одной точкой монтирования для некоторых примеров использования, но ниже также приводится краткое изложение. Команда, о которой вы спрашиваете,findmnt
(хотяlsblk
может и служить) :Теперь, как видите,
/dev/sda1
монтируется на/esp
. Интересно, он также установлен в другом месте?Ага. Понимаю. Подпапка также
--bind
монтируется поверх загрузки. Хорошо...Ничего такого. Что за черт?
Оооо ... Ну, это мило. Хммм ...
О, да, это действительно мило.
Теперь давайте вернем sda1 на место и попробуем снова ...
Но где я нашел эту магическую команду?
источник
Я не знаю простого и простого способа определить, подключен ли узел устройства или нет
/dev
. Это то, что я могу предложить, хотя. Он обрабатывает непосредственно установленные устройства (/dev/sda1
) и устройства, установленные с помощью UUID (/dev/disk/by-uuid/aa4e7b08-6547-4b5a-85ad-094e9e1af74f
). Это ломается, если ваши имена устройств содержат пробелы.Функция записывает запись из
/proc/mounts
в вывод, если она найдена, а также устанавливает состояние выхода равным 0. В противном случае состояние выхода равно 1.источник
Просто запустите следующую команду:
источник