Вопрос или проблема
Я новичок в скриптах … Я могу делать очень простые вещи, но сейчас мне нужна помощь.
У меня есть локальная файловая система, которая будет монтироваться только когда мне нужно сделать резервную копию.
Я начинаю с этого.
#!/bin/bash
export MOUNT=/myfilesystem
if grep -qs $MOUNT /proc/mounts; then
echo "Она смонтирована."
else
echo "Она не смонтирована."; then
mount $MOUNT;
fi
Как я уже сказал, я очень базовый в скриптах. Я слышал, что можно проверить статус команды mount
, глядя на коды возврата.
КОДЫ ВОЗВРАТА
mount имеет следующие коды возврата (биты могут быть объединены):
0 успех
1 некорректный вызов или разрешения
2 системная ошибка (недостаточно памяти, невозможно создать процесс, больше нет устройств цикла)
4 внутренняя ошибка монтирования
8 прерывание пользователем
16 проблемы с записью или блокировкой /etc/mtab
32 неудача монтирования
64 некое монтирование успешно
Я не знаю, как это проверить. Есть ли какие-то указания?
Во многих дистрибутивах Linux есть команда mountpoint
. Она может явно использоваться для проверки, является ли директория точкой монтирования. Просто так:
#!/bin/bash
if mountpoint -q "$1"; then
echo "$1 является точкой монтирования"
else
echo "$1 не является точкой монтирования"
fi
Вы можете проверить код состояния mount
, а также большинство хорошо написанных исполняемых файлов, с помощью специального параметра оболочки ?
.
Из man bash
:
? Разворачивается в код завершения последнего выполненного конвейера в переднем плане.
После выполнения команды mount
, немедленно выполнив echo $?
, вы получите код состояния от предыдущей команды.
# mount /dev/dvd1 /mnt
mount: нет диска на /dev/sr0
# echo $?
32
Не все исполняемые файлы имеют четко определенные коды состояния. По крайней мере, они должны завершаться с кодом успеха (0) или неудачи (1), но это не всегда так.
Чтобы расширить (и исправить) ваш пример скрипта, я добавил вложенную конструкцию if
для ясности. Это не единственный способ проверить код состояния и выполнить действие, но это самый простой способ чтения при обучении.
Обратите внимание на пробелы вокруг пути монтирования, чтобы гарантировать, что частичные пути не были сопоставлены.
#!/bin/bash
mount="/myfilesystem"
if grep -qs " $mount " /proc/mounts; then
echo "Она смонтирована."
else
echo "Она не смонтирована."
mount "$mount"
if [ $? -eq 0 ]; then
echo "Монтирование прошло успешно!"
else
echo "Что-то пошло не так с монтированием..."
fi
fi
Для получения дополнительной информации о “Выходе и статусе выхода” вы можете обратиться к Руководству по продвинутому Bash-скриптингу.
Еще один способ:
if findmnt "$MOUNT" >/dev/null 2>&1 ; then
: # Сделайте что-то для положительного результата (выход 0)
else
: # Сделайте что-то для отрицательного результата (выход 1)
fi
Самый простой способ, который не требует прав root:
if $(df | grep -q /mnt/ramdisk); then
fi
или, чтобы проверить, не смонтирована ли она:
if ! $(df | grep -q /mnt/ramdisk); then
fi
Короткие заявления
Проверьте если смонтировано:
mount|grep -q "/mnt/data" && echo "/mnt/data смонтировано; я могу продолжать свою работу!"
Проверьте если не смонтировано:
mount|grep -q "/mnt/data" || echo "/mnt/data не смонтировано, я, вероятно, могу его смонтировать!"
Я попробовал следующий скрипт
#!/bin/bash
echo "введите файловую систему, чтобы проверить, смонтирована она или нет"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p смонтирована"
else
echo "$p не смонтирована"
fi
done
Единственный ввод, который вам нужно дать, это имя файловой системы
Я попробовал следующее, и это сработало. Это просто, надеюсь, я смог помочь вам.
#!/bin/bash
for i in /tmp/demo.txt /etc/demo.xt /var/demo.txt /var/log/demo.txt /opt/demo.txt /demo.txt
do
touch $i
if [ -f $i ];
then
rm $i
echo "ФС в порядке! $i"
else
message="ФС только для чтения!"
echo '${message} $i'
fi
done
Вывод скрипта.
ФС только для чтения! /tmp/demo.txt
ФС в порядке! /etc/demo.xt
ФС в порядке! /var/demo.txt
ФС в порядке! /var/log/demo.txt
ФС в порядке! /opt/demo.txt
ФС в порядке! /demo.txt
Да, вы можете проверить статус возврата монтирования. Проблема в том, что если файловая система уже смонтирована и вы пытаетесь смонтировать ее снова, команда mount вернет ошибку 32. Строго говоря, монтирование не удалось, потому что она уже смонтирована. Чтобы обойти это, например, для однострочного задания резервного копирования для корневого cron, я бы сделал следующее:
mount /myfilesystem 2>/dev/null; grep -qs '/myfilesystem ' /proc/mounts && backupscript && umount /myfilesystem
По сути, просто смонтируйте файловую систему, затем проверьте, смонтирована ли она, и если да, запустите скрипт резервного копирования. Не очень элегантно, но быстро и грязно, и делает свою работу.
Да, я знаю, что это древний вопрос, и автор вопроса, вероятно, уже старший системный администратор, но у меня был тот же вопрос, и я хотел узнать, смогу ли я найти лучшее решение.
Ответ или решение
Для проверки, смонтирована ли файловая система, можно использовать несколько подходов в скрипте на Bash. Вот один из вариантов, который включает использование команды grep
, mountpoint
, а также проверку кода возврата команды mount
.
1. Проверка с помощью grep
в /proc/mounts
#!/bin/bash
MOUNT_POINT="/myfilesystem"
if grep -qs " $MOUNT_POINT " /proc/mounts; then
echo "Файловая система $MOUNT_POINT смонтирована."
else
echo "Файловая система $MOUNT_POINT не смонтирована."
mount "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "Файловая система успешно смонтирована!"
else
echo "Что-то пошло не так при монтировании."
fi
fi
2. Использование mountpoint
Если у вас есть доступ к утилите mountpoint
, вы можете сделать это более просто:
#!/bin/bash
MOUNT_POINT="/myfilesystem"
if mountpoint -q "$MOUNT_POINT"; then
echo "$MOUNT_POINT - это точка монтирования."
else
echo "$MOUNT_POINT - это не точка монтирования."
fi
3. Проверка статуса возврата при монтировании
Можно также проверить код возврата после выполнения команды mount
для обработки ошибки:
#!/bin/bash
MOUNT_POINT="/myfilesystem"
mount "$MOUNT_POINT" 2>/dev/null
if [ $? -eq 0 ]; then
echo "Файловая система $MOUNT_POINT успешно смонтирована."
else
echo "Файловая система $MOUNT_POINT уже смонтирована или произошла другая ошибка."
fi
4. Альтернативный способ с использованием findmnt
С помощью команды findmnt
вы можете проверить, смонтирована ли файловая система:
#!/bin/bash
MOUNT_POINT="/myfilesystem"
if findmnt "$MOUNT_POINT" >/dev/null 2>&1; then
echo "$MOUNT_POINT - это точка монтирования."
else
echo "$MOUNT_POINT - это не точка монтирования."
mount "$MOUNT_POINT"
fi
5. Использование df
Вы также можете использовать команду df
для проверки, смонтирована ли файловая система:
#!/bin/bash
MOUNT_POINT="/myfilesystem"
if df | grep -q "$MOUNT_POINT"; then
echo "$MOUNT_POINT смонтирована."
else
echo "$MOUNT_POINT не смонтирована."
mount "$MOUNT_POINT"
fi
Резюме
Существует множество способов проверки, смонтирована ли файловая система. Выбор метода зависит от ваших предпочтений и доступности команд в вашей среде. Удостоверьтесь, что у вас есть необходимые права для выполнения команды mount
.