web-dev-qa-db-fra.com

Déterminez si le système de fichiers ou la partition est monté RO ou RW via Bash Script?

Existe-t-il un moyen simple de déterminer si un système de fichiers monté est monté en lecture seule ou en lecture-écriture? Je pensais juste à pipe mount mais j'ai pensé qu'il pourrait y avoir un moyen plus simple.

38
Jake Wilson

Ce petit one-liner sortira quelque chose si un système de fichiers ro existe.

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

En supposant que vous n'avez généralement pas de système de fichiers ro comme un CD dans le lecteur, cela suffit pour certains éléments de type de 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 le type de votre système de fichiers. Canalisez-le dans grep -v iso9660 si vous voulez garder vos CD hors de l'enregistrement.

53
flickerfly

Vieille question, mais je l'ai rencontrée à la recherche de la même aide et semble avoir été trouvée de manière encore plus simple sans avoir à créer de fichier.

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

Bien sûr, root-ro est ro monté fs et root-rw est rw fs.

12
user156888

Si le système de fichiers est monté, je ferais un cd vers un répertoire temporaire et j'essaierais 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).

7
David Harris

Je viens d'avoir ce problème et ce sont de vraies pâtes ...

Jetez un œil à/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 apparaissent comme étant montées rw lorsque vous utilisez simplement la commande mount.

4
Wayne

Basé sur un réponse de flickerdfly , influencé par un commentaire de WhiteKnight

Créez une fonction de détecteur à la volée.

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

l'utiliser 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;
3
unsynchronized

Voici ma solution:

if findmnt -n -o OPTIONS ${YOUR_MOUNT_POINT} | egrep "^ro,|,ro,|,ro$"; then
  echo "Read only!"
fi
1
Antonio Petricca

Semblable à Antonio, vous pouvez utiliser/proc/mounts pour faire la même chose. Utilisez votre propre lecteur à la place de sda4.

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

0
randyman99

Par exemple, pour vérifier si la partition racine est en mode lecture seule:

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