Проверьте, установлен ли каталог с помощью bash
Я использую
mount -o bind /some/directory/here /foo/bar
Я хочу проверить /foo/bar
хотя со скриптом bash, и посмотреть, если его монтировали? Если нет, то вызовите приведенную выше команду монтирования, иначе сделайте что-то еще. Как я могу это сделать?
CentOS-это операционная система.
6 ответов:
под управлением
mount
команда без аргументов покажет вам текущую крепления. Из сценария оболочки вы можете проверить точку монтирования с помощьюgrep
и if-оператор:if mount | grep /mnt/md0 > /dev/null; then echo "yay" else echo "nay" fi
в моем примере оператор if проверяет код завершения
grep
, что указывает на наличие совпадения. Поскольку я не хочу, чтобы вывод отображался, когда есть совпадение, я перенаправляю его на/dev/null
.
вы не потрудились упомянуть O / S.
Ubuntu Linux 11.10 (и, вероятно, самые современные вкусы Linux) имеют .
вот пример на одном из моих серверов:
$ mountpoint /oracle /oracle is a mountpoint $ mountpoint /bin /bin is not a mountpoint
на самом деле, в вашем случае, вы должны быть в состоянии использовать , например:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
надеюсь, что это поможет.
руководство
mountpoint
говорит, что это:проверяет, указан ли данный каталог или файл в файле /proc/self/mountinfo.
руководство
mount
говорит, что:режим листинга поддерживается только для обратной совместимости. Для более надежный и настраиваемый выход используйте findmnt(8), особенно в вашем файлы сценариев.
так правильная команда для использования
findmnt
, который сам является частьюutil-linux
пакет и, согласно руководству:может искать в /etc /fstab,/etc /mtab или/proc/self / mountinfo
так что на самом деле ищет более, чем
mountpoint
. Он также предоставляет удобный вариант:- M, --mountpoint путь
явно определите файл или каталог точки монтирования. Смотрите также-целевой.
In резюме, чтобы проверить, установлен ли каталог с помощью 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"
другое чистое решение выглядит так:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
конечно, 'echo something' может быть заменен тем, что вам нужно сделать для каждого случая.
мое решение:
is_mount() { path=$(readlink -f ) grep -q "$path" /proc/mounts }
пример:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
на ответ Марка Дж. Бобака,
mountpoint
не работает, если гора сbind
опция в другой файловой системе.на ответ Кристофера Нейлана, не нужно перенаправлять вывод grep в /dev / null, просто используйте .
самое главное, канонизировать путь с помощью
readlink -f $mypath
:
- если вы проверьте путь, например
/path/to/dir/
конец с обратной косой чертой, путь в/proc/mounts
илиmount
выход/path/to/dir
- в большинстве версий linux,
/var/run/
является символической ссылкой/run/
, так что если вы установите привязку к/var/run/mypath
и проверить, если он установлен, он будет отображаться как/run/mypath
на/proc/mounts
.