Определить, смонтирована ли файловая система или раздел RO или RW через Bash Script?

Есть ли простой способ определить, смонтирована ли файловая система как только для чтения или для чтения-записи? Я думал просто трубку mount но я подумал, что может быть проще.

9 ответов

Решение

Эта маленькая однострочная строка что-то выскакивает, если существует файловая система ro.

grep "[[:space:]]ro[[:space:],]" /proc/mounts 

Предполагая, что у вас обычно нет файловой системы ro, такой как компакт-диск в приводе, этого достаточно для некоторых базовых типов мониторинга и не требует изменения файловой системы, чтобы найти текущее состояние. Это также не предполагает ваш тип файловой системы. Отправьте его в grep -v iso9660, если вы хотите, чтобы ваши CD не записывались.

Старый вопрос, но я наткнулся на него, ища ту же помощь, и кажется, что нашел еще более простой способ без необходимости создавать файл.

    [ -w /root-rw ] && echo "rw" || echo "ro"
    rw
    [ -w /root-ro ] && echo "rw" || echo "ro"
    ro

Конечно, root-ro - это смонтированный ros, а root-rw - это rw fs.

Если файловая система смонтирована, я бы перешел во временный каталог и попытался создать файл. Код возврата сообщит вам, если файловая система доступна только для чтения или для чтения и записи, при условии, что файловая система не заполнена (спасибо Виллему).

У меня просто была эта проблема, и это настоящие пасты...

Посмотрите на /proc/mounts -

egrep " ro,|,ro " /proc/mounts 
/dev/sda3 / ext4 ro,seclabel,relatime,barrier=1,data=ordered 0 0    
/dev/sda5 /var ext4 ro,seclabel,relatime,barrier=1,data=ordered 0 0

К вашему сведению - эти два раздела отображаются как смонтированные rw только при использовании команды mount.

Основано на ответе flickerdfly, под влиянием комментария от WhiteKnight

Создать детектор функции мухи.

eval "function is_readonly () {
          $( grep -P "\sro[\s,]" /proc/mounts | awk '{print "if echo $1 | grep -q \""$2"\"; then return 0;fi"}' )
      return 1;}";    

используйте его, чтобы определить, находится ли путь только для чтения

is_readonly /path/to/file/on/read/only/fs && echo "sorry. can't delete that"

И избавиться от него, когда закончите

#dump temp function
unset -f is_readonly;

Вот мое решение:

if findmnt ${YOUR_MOUNT_POINT} | awk '{print $4}' | grep "ro,"; then
  echo "Read only!"
fi

Например, чтобы проверить, находится ли корневой раздел в режиме только для чтения:

if [[ ! -z `mount | grep "on / type ext3 (ro,"` ]]
then
   echo "It's in read-only mode"
fi

Подобно Антонио, вы можете использовать /proc/mounts, чтобы сделать то же самое. Используйте свой собственный диск вместо sda4.

cat /proc/mounts | grep / dev / sda4 | awk '{print substr ($ 4,1,2)}'

Ubuntu перешла на Snap-пакеты, которые возвращают множество результатов /snap/$package. Итак, моя обновленная команда выглядит следующим образом:

      grep "[[:space:]]ro[[:space:],]" /proc/mounts | grep -v /snap | grep -v tmpfs
Другие вопросы по тегам