Есть ли простой способ определить, смонтирована ли смонтированная файловая система как для чтения или для чтения-записи? Я думал просто трубить 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)}'