Сценарий оболочки, чтобы узнать, смонтирована ли уже файловая система

У меня есть файловая система tmpfs, смонтированная в определенном каталоге. Я хочу написать сценарий оболочки, чтобы проверить, смонтирована ли уже файловая система tmpfs в каталоге.


person nitin_cherian    schedule 18.11.2010    source источник


Ответы (7)


Вы можете проверить тип файловой системы.

$ stat -f -c '%T' /
xfs
$ stat -f -c '%T' /dev/shm
tmpfs

Вы также можете проверить, является ли каталог точкой монтирования, сравнив его устройство с родительским.

$ stat -c '%D' /
901
$ stat -c '%D' /home
fe01
$ stat -c '%D' /home/$USER
fe01
person ephemient    schedule 19.11.2010

Специально для этого есть инструмент: mountpoint(1)

if mountpoint -q "$directory" ; then
    echo it is a mounted mountpoint
else
    echo it is not a mounted mountpoint
fi

И вам даже не нужно царапать струны, чтобы сделать это!

Обратите внимание, что я нашел этот инструмент в пакете initscripts Debian. Насколько это доступно в других местах, я не могу комментировать.

person sorpigal    schedule 18.11.2010
comment
Я вижу, что точка монтирования является частью пакета Gentoo Linux sys-apps/util-linux вместе с другими, mount, umount, dmesg и кучей других системных инструментов. Я бы сказал, что это самое чистое решение. - person cvolny; 28.05.2013
comment
@cvolny: Оказывается, mountpoint является частью util-linux (в частности, частью sys-utils) и, вероятно, так или иначе доступен в большинстве дистрибутивов Linux. Однако он не является частью GNU и вряд ли доступен в системах, отличных от Linux. - person sorpigal; 29.05.2013
comment
Похоже, он поставляется с RHEL 7.1 (ошибаюсь, я установил здесь кое-что, поэтому я не могу быть в этом уверен) - person Cody S; 17.04.2015

Что-то вроде этого, хотя и хакерское, должно помочь:

FS_TO_CHECK="/dev" # For example... change this to suit your needs.

if grep -F " $FS_TO_CHECK " /proc/mounts > /dev/null; then
    # Filesystem is mounted
else
    # Filesystem is not mounted
fi
person cdhowie    schedule 18.11.2010

Я знаю, что этот поток устарел, но почему бы просто не использовать df и grep для требуемого пути к точке монтирования? то есть вот так:

df /full/path | grep -q /full/path

grep возвращает true, если смонтирован, и false, если нет. Итак, нам просто нужно проверить это следующим образом:

df /mnt/myUSBdisk | grep -q /mnt/myUSBdisk && echo "Mounted" || echo "Not mounted"

Очень просто...

person Scooby-2    schedule 21.07.2013
comment
Я решил проголосовать за этот вопрос, потому что, хотя точка монтирования была бы проще для заданного вопроса, этот ответ более гибкий. Например, некоторые дистрибутивы Linux монтируют tmpfs общей памяти в /tmp, в то время как другие используют /dev/shm или и то, и другое. Этот ответ позволяет легко понять, что вы можете определить, является ли /tmp общей памятью или нет: df /tmp | grep -q tmpfs && echo "Shared Memory" || echo "Not Shared Memory Или, что более важно, df /tmp | grep -q tmpfs && tmp=/tmp || tmp=/dev/shm - person Colin Keenan; 01.10.2014

Вы можете использовать df, попробуйте man df.

df 'directory' | awk '{print $1, $6}'

даст вам что-то вроде:

Filesystem Mounted
/dev/sda5  'some_dir'

затем вы можете добавить проверку, совпадает ли каталог «some_dir» с «your_dir» и файловая система такая же, как у вас.

person sud03r    schedule 18.11.2010

Проверьте /proc/mounts. Если вы выберете имя файловой системы и путь, который вы хотите смонтировать (возможно, даже определенную строку со всеми включенными параметрами), вы можете определить, смонтирована ли файловая система.

if [ "`grep "tmpfs /lib/init/rw tmpfs rw,nosuid,mode=755 0 0" /proc/mounts`" != "" ]
then
  echo Mounted.
else
  echo Not mounted.
fi
person Martin Schapendonk    schedule 18.11.2010
comment
Виртуальный -1 для использования обратных кавычек в нетривиальном месте. - person sorpigal; 18.11.2010
comment
if grep ... - скобки тоже не нужны. - person Dennis Williamson; 19.11.2010

точка монтирования намного элегантнее и есть в sysvinit-tools CentOS 6+++

person Chuck    schedule 26.07.2016
comment
Этот некачественный ответ дублирует существующий ответ с более подробной информацией от 2010 года. - person tripleee; 20.11.2018