Проверьте, подключен ли каталог с помощью bash - PullRequest
84 голосов
/ 24 февраля 2012

Я использую

mount -o bind /some/directory/here /foo/bar

Я хочу проверить /foo/bar хотя и с помощью bash-скрипта и посмотреть, был ли он смонтирован? Если нет, то вызовите указанную выше команду монтирования, иначе сделайте что-нибудь еще. Как я могу это сделать?

CentOS - операционная система.

Ответы [ 6 ]

162 голосов
/ 24 февраля 2012

Вы не удосужились упомянуть 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

Надеюсь, чтопомогает.

63 голосов
/ 24 февраля 2012

Выполнение команды mount без аргументов покажет вам текущее монтирование. Из сценария оболочки вы можете проверить точку монтирования с помощью grep и оператора if:

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

В моем примере оператор if проверяет код выхода grep, который указывает, было ли совпадение. Поскольку я не хочу, чтобы вывод отображался при совпадении, я перенаправляю его на /dev/null.

29 голосов
/ 03 сентября 2017

В инструкции mountpoint написано, что это:

проверяет, указан ли данный каталог или файл в файле / proc / self / mountinfo.

Инструкция mount гласит:

Режим листинга поддерживается только для обратной совместимости. За более надежный и настраиваемый вывод используйте findmnt (8), особенно в вашем скрипты.

Итак, правильная команда для использования - findmnt, которая сама является частью пакета util-linux и, согласно инструкции:

может выполнять поиск в / etc / fstab, / etc / mtab или / proc / self / mountinfo

Так что на самом деле он ищет больше вещей, чем mountpoint. Также предусмотрена удобная опция:

-M, --mountpoint путь

Явно определите файл или каталог точки монтирования. Смотрите также --target.

В итоге, чтобы проверить, смонтирован ли каталог с bash, вы можете использовать:

if [[ $(findmnt -M "$FOLDER") ]]; then
    echo "Mounted"
else
    echo "Not mounted"
fi

* * Пример тысяча сорок-одиной: * +1042 *
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"
1 голос
/ 10 ноября 2017

Мое решение:

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 не работает, если монтировать с bindопция в другой файловой системе.

Для Ответ Кристофера Нейлана , нет необходимости перенаправлять вывод grep в / dev / null, просто используйте grep -q.

Самое важное - канонизировать путь, используя readlink -f $mypath:

  • Если вы проверите путь, например /path/to/dir/, заканчивающийся обратной косой чертой, путь в выходных данных /proc/mounts или mountis /path/to/dir
  • В большинстве версий linux /var/run/ является символической ссылкой /run/, поэтому, если вы смонтируете bind для /var/run/mypath и проверите, смонтирован ли он, он будет отображаться как /run/mypath in /proc/mounts.
0 голосов
/ 18 июня 2017

В моем .bashrc я сделал следующий псевдоним:

alias disk-list="sudo fdisk -l"
0 голосов
/ 28 марта 2017

Вот еще одно чистое решение:

$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted

Конечно, «эхо-то» может быть заменено тем, что вам нужно сделать для каждого случая.

...