Solution 1 :
Ce petit one-liner affichera quelque chose si un système de fichiers ro existe.
grep "[[:space:]]ro[[:space:],]" /proc/mounts
En supposant que vous n'ayez généralement pas de système de fichiers ro comme un CD dans le lecteur, cela suffit pour certains éléments de type surveillance de base et ne nécessite pas de changer le système de fichiers pour trouver l'état actuel. Il ne suppose pas non plus votre type de système de fichiers. Pipez-le dans grep -v iso9660 si vous souhaitez que vos CD ne soient pas enregistrés.
Solution 2 :
Vieille question, mais je l'ai rencontrée à la recherche de la même aide et semble avoir trouvé un moyen encore plus simple sans avoir besoin de créer un fichier.
[ -w /root-rw ] && echo "rw" || echo "ro"
rw
[ -w /root-ro ] && echo "rw" || echo "ro"
ro
Bien sûr, root-ro est monté sur ro fs et root-rw est rw fs.
Solution 3 :
Si le système de fichiers est monté, je cd dans un répertoire temporaire et j'essaie de créer un fichier. Le code de retour vous indiquera si le système de fichiers est en lecture seule ou en lecture-écriture à condition que le système de fichiers ne soit pas plein (merci Willem).
Solution 4 :
Je viens d'avoir ce problème et ce sont de vraies pâtes...
Jetez un oeil à /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
FYI - Ces deux partitions s'affichent comme étant montées rw lors de l'utilisation de la commande mount.
Solution 5 :
Basé sur la réponse d'un flickerdfly, influencé par un commentaire de WhiteKnight
Créer une fonction de détection de la mouche.
eval "function is_readonly () {
$( grep -P "\sro[\s,]" /proc/mounts | awk '{print "if echo $1 | grep -q \""$2"\"; then return 0;fi"}' )
return 1;}";
utilisez-le pour déterminer si un chemin est sur un fs en lecture seule
is_readonly /path/to/file/on/read/only/fs && echo "sorry. can't delete that"
Et jetez-le une fois terminé
#dump temp function
unset -f is_readonly;