Проверьте, установлен ли каталог с bash
Я использую
mount -o bind /some/directory/here /foo/bar
Я хочу проверить /foo/bar
, хотя с bash script, и посмотреть, смонтирован ли он? Если нет, то вызовите приведенную выше команду mount, иначе сделайте что-нибудь еще. Как я могу это сделать?
CentOS - это операционная система.
Ответы
Ответ 1
Запуск команды mount
без аргументов покажет вам текущие настройки. Из оболочки script вы можете проверить точку монтирования с помощью grep
и if-statement:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
В моем примере оператор if проверяет код выхода grep
, который указывает, было ли совпадение. Поскольку я не хочу, чтобы вывод отображался, когда есть совпадение, я перенаправляю его на /dev/null
.
Ответ 2
Вы не потрудились упомянуть O/S.
Ubuntu Linux 11.10 (и, возможно, самые современные варианты Linux) имеют команду mountpoint
.
Вот пример на одном из моих серверов:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
Собственно, в вашем случае вы можете использовать параметр -q
, например:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Надеюсь, что это поможет.
Ответ 3
Еще одно чистое решение:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
Конечно, "echo something" может быть заменено тем, что вам нужно делать для каждого случая.
Ответ 4
В руководстве mountpoint
указано, что оно:
проверяет, указан ли данный каталог или файл в файле /proc/self/mountinfo.
В руководстве mount
говорится, что:
Режим листинга поддерживается только для обратной совместимости. Для более надежный и настраиваемый выход использует findmnt (8), особенно в вашем скрипты.
Итак, правильная команда для использования - findmnt
, которая сама является частью util-linux
пакет и, согласно руководству:
способен искать в /etc/fstab,/etc/mtab или/proc/self/mountinfo
Поэтому он ищет больше вещей, чем mountpoint
. Он также предоставляет удобный вариант:
-M, - путь точки монтирования
Явным образом определите файл или каталог точки монтирования. См. Также --target.
В заключение, чтобы проверить, установлен ли каталог с помощью bash, вы можете использовать:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Пример:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
Ответ 5
Мое решение:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Пример:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Для Ответ Марка Дж. Бобака, mountpoint
не работает, если mount с параметром bind
в разных файловых системах.
Для Кристофер Нейлан ответ, не нужно перенаправлять вывод grep на /dev/null, вместо этого используйте grep -q
.
Самое главное, канонизировать путь, используя readlink -f $mypath
:
- Если вы проверите путь, например
/path/to/dir/
, завершите обратную косую черту, путь в /proc/mounts
или mount
будет /path/to/dir
- В большинстве релизов Linux
/var/run/
является символической ссылкой /run/
, поэтому, если вы монтируете bind для /var/run/mypath
и проверяете, смонтирован ли он, он будет отображаться как /run/mypath
в /proc/mounts
.
Ответ 6
В моем .bashrc я сделал следующий псевдоним:
alias disk-list="sudo fdisk -l"