Проверьте, установлен ли каталог с помощью bash


Я использую

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

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

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

6 69

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.

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

alias disk-list="sudo fdisk -l"