Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Конечно, root-ro монтируется как fs, а root-rw - это rw fs.

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

У меня только что возникла эта проблема и это настоящие пасты ...

Взгляните на / 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;}";    

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

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

И утилизируйте его, когда закончите

#dump temp function
unset -f is_readonly;

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

if findmnt -n -o OPTIONS ${YOUR_MOUNT_POINT} | egrep "^ro,|,ro,|,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)}'