Предположим, вы хотите проверить, является ли /mnt/disk точкой монтирования в оболочке script. Как вы это делаете?
Как проверить, является ли данный путь точкой монтирования
Ответ 1
Я обнаружил, что на моей Fedora 7 есть команда mountpoint.
От точки монтирования человека:
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
/bin/mountpoint [-q] [-d] /path/to/directory
/bin/mountpoint -x /dev/device
По-видимому, он поставляется с пакетом sysvinit, я не знаю, доступна ли эта команда в других системах.
[[email protected]~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17
Ответ 2
Не полагаясь на mount
, /etc/mtab
, /proc/mounts
и т.д.:
if [ `stat -fc%t:%T "$dir"` != `stat -fc%t:%T "$dir/.."` ]; then
echo "$dir is mounted"
else
echo "$dir is not mounted"
fi
Когда $dir
является точкой монтирования, у нее есть другой номер устройства, чем его родительский каталог.
Преимущество по сравнению с перечисленными альтернативами заключается в том, что вам не нужно ничего разбирать, и он делает правильные вещи, если dir=/some//path/../with///extra/components
.
Недостатком является то, что он не указывает /
как точку монтирования. Ну, это достаточно легко для особого случая, но все же.
Ответ 3
Использование GNU find
find <directory> -maxdepth 0 -printf "%D"
укажет номер устройства в каталоге. Если он отличается каталог и его родительский элемент, то у вас есть точка монтирования.
Добавить/. на имя каталога, если вы хотите, чтобы символические ссылки в разные файловые системы считать как точки монтирования (вы всегда будете хотеть его для родителя).
Недостатки: использование GNU менее портативно
Преимущества: точки монтирования отчетов не записываются в/etc/mtab.
Ответ 4
if mount | cut -d ' ' -f 3 | grep '^/mnt/disk$' > /dev/null ; then
...
fi
EDIT: Использовать идею Bombe для использования разреза.
Ответ 5
df $path_in_question | grep " $path_in_question$"
После завершения будет установлено $?
.
Ответ 6
К сожалению, как mountpoint, так и stat будут иметь побочный эффект МОНТИРОВАНИЯ каталога, который вы тестируете, если вы используете automount. Или, по крайней мере, это для меня на Debian, используя автоматические cifs для сетевого диска WD MyBookLive. Я закончил с вариантом /proc/mounts, сделанным более сложным, потому что каждый POTENTIAL mount уже находится в /proc/mount, даже если он не монтируется на самом деле!
cut -d ' ' -f 1 < /proc/mounts | grep -q '^//disk/Public$' && umount /tmp/cifs/disk/Public
Where 'disk' is the name of the server (networked disk) in /etc/hosts. '//disk/Public' is the cifs share name '/tmp/cifs' is where my automounts go (I have /tmp as RAM disk and / is read-only) '/tmp/cifs/disk' is a normal directory created when the server (called 'disk') is live. '/tmp/cifs/disk/Public' is the mount point for my 'Public' share.
Ответ 7
for mountedPath in `mount | cut -d ' ' -f 3`; do
if [ "${mountedPath}" == "${wantedPath}" ]; then
exit 0
fi
done
exit 1
Ответ 8
Вот вариант с "df -P", который должен быть переносимым:
[email protected]:/tmp$ f(){ df -P | awk '{ if($6 == "'$1'")print }' ; }
[email protected]:/tmp$ f /
/dev/mapper/lvm0-vol1 20642428 17141492 2452360 88% /
[email protected]:/tmp$ f /mnt
[email protected]:/tmp$ f /mnt/media
/dev/mapper/lvm0-media 41954040 34509868 7444172 83% /mnt/media
Ответ 9
mount | awk '$3 == "/pa/th" {print $1}'
Пусто, если не является точкой монтирования ^^