Soluzione 1:
Questo piccolo one-liner farà apparire qualcosa se esiste un file system ro.
grep "[[:space:]]ro[[:space:],]" /proc/mounts
Supponendo che di solito non si disponga di un file system ro come un CD nell'unità, è sufficiente per alcune cose di tipo di monitoraggio di base e non richiede la modifica del file system per trovare lo stato corrente. Inoltre, non presuppone il tipo di file system. Inseriscilo in grep -v iso9660 se vuoi tenere i tuoi CD fuori dal registro.
Soluzione 2:
Vecchia domanda, ma l'ho trovata cercando lo stesso aiuto e sembra aver trovato un modo ancora più semplice senza la necessità di creare file.
[ -w /root-rw ] && echo "rw" || echo "ro"
rw
[ -w /root-ro ] && echo "rw" || echo "ro"
ro
Naturalmente, root-ro è ro mount fs e root-rw è rw fs.
Soluzione 3:
Se il file system è montato, cd su una directory temporanea e tento di creare un file. Il codice di ritorno ti dirà se il file system è di sola lettura o lettura-scrittura a condizione che il file system non sia pieno (grazie Willem).
Soluzione 4:
Ho appena avuto questo problema e queste sono paste vere...
Dai un'occhiata a /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
Cordiali saluti - Queste due partizioni vengono visualizzate come montate rw quando si utilizza solo il comando mount.
Soluzione 5:
Basato su una risposta di flickerdfly, influenzata da un commento di WhiteKnight
Crea una funzione di rilevamento al volo.
eval "function is_readonly () {
$( grep -P "\sro[\s,]" /proc/mounts | awk '{print "if echo $1 | grep -q \""$2"\"; then return 0;fi"}' )
return 1;}";
usalo per determinare se un percorso è su un fs di sola lettura
is_readonly /path/to/file/on/read/only/fs && echo "sorry. can't delete that"
E smaltiscilo quando hai finito
#dump temp function
unset -f is_readonly;