Я использую
mount -o bind /some/directory/here /foo/bar
Я хочу проверить это /foo/bar
с помощью сценария bash и посмотреть, смонтирован ли он? Если нет, то вызовите указанную выше команду монтирования, иначе сделайте что-нибудь еще. Как я могу это сделать?
CentOS - это операционная система.
Ответы:
Выполнение
mount
команды без аргументов сообщит вам текущие подключения. Из сценария оболочки вы можете проверить точку монтирования сgrep
помощью оператора if:if mount | grep /mnt/md0 > /dev/null; then echo "yay" else echo "nay" fi
В моем примере оператор if проверяет код выхода
grep
, который указывает, было ли совпадение. Поскольку я не хочу, чтобы вывод отображался при совпадении, я перенаправляю его на/dev/null
.источник
grep
возвращает ненулевой статус выхода, если совпадений нет. Нет необходимости ни в тесте, ни в подоболочке, созданной $ ().if command | grep -q 'stuff'; then ...
mount | grep ...
то, что покажете вам, что ваша привязка монтирования все еще активна. Если базовое устройство размонтировано и перемонтировано, привязка монтирования больше не будет соединять два файла / каталога, хотя по-mount
прежнему показывает, что они подключены. И если вы это сделаете,umount ...
он даже скажет вам, что он не установлен, хотяmount
сказал, что был. ОГРОМНЫЙ недостаток файловой системы Linux.readlink -f
, который ничего не возвращает, если путь / файл не существует. Если базового / mount / path / to_file нет (на ссылку для чтения), базовое монтирование сломано (перемонтируйте базовое монтирование и привязку). Если базовый файл присутствует иreadlink -f
сообщает, что версия привязки этого файла отсутствует, привязка нарушена, просто перемонтируйте привязку./mnt/md0xxx
так называемая, команда будет указывать/mnt/md0
как смонтированную, в то время как то, что она не обязательно должна быть ...Вы не удосужились упомянуть O / S.
В Ubuntu Linux 11.10 (и, вероятно, в большинстве современных версий Linux) есть
mountpoint
команда.Вот пример на одном из моих серверов:
На самом деле, в вашем случае вы можете использовать эту
-q
опцию, например:mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Надеюсь, это поможет.
источник
В руководстве
mountpoint
говорится, что это:В руководстве
mount
говорится, что:Итак, правильная команда, которую следует использовать, -
findmnt
это сама по себе частьutil-linux
пакета и, согласно руководству:Так что на самом деле он ищет больше вещей, чем
mountpoint
. Также есть удобный вариант:Таким образом, чтобы проверить, смонтирован ли каталог с помощью 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"
источник
Мне нравятся используемые ответы
/proc/mounts
, но я не люблю простой grep. Это может дать вам ложные срабатывания. Что вы действительно хотите знать, так это «есть ли в какой-либо из строк именно эту строку для поля номер 2». Итак, задайте этот вопрос. (в данном случае проверяю/opt
)awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts # and you can use it in and if like so: if awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts; then echo "yes" else echo "no" fi
источник
mountpoint
илиfindmnt
нет. Очень простой ответ, много радости, такой UNIX :)Мое решение:
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
илиmount
выходе будет/path/to/dir
/var/run/
это символическая ссылка/run/
, поэтому, если вы смонтируете привязку/var/run/mypath
и проверите, смонтирована ли она, она будет отображаться как/run/mypath
в/proc/mounts
.источник
Еще одно чистое решение:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
Конечно, «echo something» можно заменить на все, что вам нужно сделать для каждого случая.
источник
Ответы здесь слишком сложны, просто проверьте, существует ли монтирование, используя:
cat /proc/mounts | tail -n 1
Это выводит только последнюю смонтированную папку, если вы хотите увидеть их все, просто удалите команду tail.
источник
В моем .bashrc я сделал следующий псевдоним:
alias disk-list="sudo fdisk -l"
источник