Frage Ermitteln, ob das Dateisystem oder die Partition RO oder RW über Bash Script aktiviert ist?


Gibt es eine einfache Möglichkeit festzustellen, ob ein angehängtes Dateisystem als Read-Only oder Read-Write eingebunden ist? Ich habe nur daran gedacht zu pumpen mount aber ich dachte, es könnte einen leichteren Weg geben.


28
2017-10-22 19:31


Ursprung


Der ideale Systemaufruf dafür wäre statvfs die unter anderem ein Flag-Feld mit einem Flag zurückgibt, das ein Read-Only-Mount anzeigt. Leider kenne ich keinen Shell-Befehl, um dies direkt zu tun. Ich hätte gebraucht stat -f, aber dieser Befehl zeigt alles außer Flags an. - kasperd
Hinweis: Wie @Travis Campbell in seinem Kommentar hilfreich erklärt serverfault.com/a/277449/236916, mount sagt dir nicht immer, was du willst: um zu paraphrasieren, liest es aus /etc/mtabDies ist eine zwischengespeicherte Version der Daten und kann in einigen Fällen veraltet sein. Die Info in /proc/mounts ist was du wirklich willst. - mwfearnley


Antworten:


Dieser kleine Einzeiler wird etwas heraussprengen, wenn ein ro-Dateisystem existiert.

grep "\sro[\s,]" /proc/mounts 

Angenommen, Sie haben normalerweise kein ro-Dateisystem wie eine CD im Laufwerk, reicht dies für einige grundlegende Überwachungsfunktionen aus und es ist nicht erforderlich, das Dateisystem zu ändern, um den aktuellen Status zu finden. Es nimmt auch nicht Ihren Dateisystemtyp an. Wenn Sie Ihre CDs aus dem Datensatz entfernen möchten, leiten Sie sie in grep -v iso9660 ein.


41
2018-01-11 20:56



Ich musste es benutzen grep -P "\sro[\s,]" /proc/mounts oder grep " ro[ ,]" /proc/mounts - WhiteKnight
Dies ist eine viel bessere Antwort als "versuchen und eine Datei erstellen" danke. - Vagnerr
Heißt das nicht nur die Optionen, die zum Bereitstellen verwendet wurden, nicht den aktuellen Status? Z.B. ein Eintrag mit den Optionen ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0 ist so eingestellt, dass es im Fehlerfall nur als gelesen wiederhergestellt wird, also ohne zu prüfen mount Sie wissen nicht, ob diese Remount aufgetreten ist, also wenn es tatsächlich in der Tat ist ro. - Walf
Das war nicht meine Erfahrung. - flickerfly
Ich hatte heute nur eins. Dies ist das Root-Dateisystem in ro, aber es war rw, als es gestartet wurde. $ grep "\sro[\s,]" /proc/mounts Ausgabe: /dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0 - flickerfly


Alte Frage, aber ich habe es auf der Suche nach der gleichen Hilfe gefunden und scheint wie gefunden, noch einfacher, ohne die Notwendigkeit, Datei zu erstellen.

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

Natürlich ist root-ro ro-mounted fs und root-rw ist rw fs.


10
2018-01-31 04:18



Das scheint die Dateisystemberechtigung zu testen, aber nicht den Mount-Status. - Robert Calhoun
Richtig, aber es ist sehr einfach und kann für einige Fälle (wie meins) funktionieren. - Yajo
Von man dash für die -w option - 'Die Datei kann nicht auf einem schreibgeschützten Dateisystem beschreibbar sein, selbst wenn dieser Test wahr anzeigt.' AFAIK das ist das gleiche für andere Muscheln. - Graeme


Wenn das Dateisystem eingehängt ist, würde ich in ein temporäres Verzeichnis wechseln und versuchen, eine Datei zu erstellen. Der Rückgabecode sagt Ihnen, ob das Dateisystem schreibgeschützt oder schreibgeschützt ist, vorausgesetzt, das Dateisystem ist nicht voll (danke Willem).


7
2017-10-22 19:59



Wenn Sie nur überprüfen, wie ein Dateisytem eingebunden ist, sollte die Ausgabe von mount ausreichen. Aber ich muss zustimmen, dies ist eine erschöpfende Art zu überprüfen. Es gibt Gelegenheiten, an denen mount melden kann, dass es schreibgeschützt ist, aber tatsächlich schreibgeschützt ist. Ein häufiges Beispiel hierfür ist eine große Anzahl von SCSI-Fehlern auf einem Gerät, die sich selbst schützen, indem sie schreibgeschützt gehen. Beim Erstellen einer Datei wird das Lesen + Schreiben / Lesen ohne Zweifel überprüft. - Alex
das wäre ordentlich: touch afile && { rm afile; echo "read-write"; } || echo "read-only" - glenn jackman
Das geschriebene Scriptlet hat eine Race Condition. Ich würde FILE = verwendenmktemp -p /filesystem/of/interest/ anstatt nur "afile" zu verwenden, um die Datei und den Dateinamen zu erzeugen. Beste - Rik Schneider
Dies wird ein vollständiges Dateisystem als schreibgeschützt melden. - Willem
@ David, Dies scheint wie ein Stopgap-Hack statt einer echten Lösung. - Pacerier


Ich hatte gerade dieses Problem und das sind echte Pasten ...

Werfen Sie einen Blick auf / 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 - Diese beiden Partitionen werden als montierte RW angezeigt, wenn Sie nur den Befehl mount verwenden.


2
2017-08-17 02:51



Dies funktioniert nicht, wenn 'ro' die einzige Mount-Option ist - Willem


Basiert auf einem flickerdflys Antwort, beeinflusst von einem Kommentar von WhiteKnight

Erstelle eine Detektorfunktion, die Fliege.

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

Verwenden Sie es, um festzustellen, ob sich ein Pfad in einem Read-Only-Dateisystem befindet

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

Und entsorgen Sie es, wenn Sie fertig sind

#dump temp function
unset -f is_readonly;

2
2018-06-08 07:07





Um beispielsweise zu überprüfen, ob sich die Root-Partition im schreibgeschützten Modus befindet:

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

0
2018-06-06 14:09



Dies erfasst nicht alle Fälle. / sbin / mount sucht in / etc / mtab nach der zwischengespeicherten Version der aktuell gemounteten Dateisysteme (und deren aktuellen Optionen). Wenn es mir gelingt, ro aus irgendeinem Grund neu zu mounten, wird mtab möglicherweise nicht korrekt aktualisiert, so dass / rw immer noch erscheinen kann. / proc / mounts sollte immer den korrekten Wert anzeigen. - Travis Campbell
Ich stimme der Verwendung von / proc / mounts zu. Ich denke, dieser Test sollte auf eine Shell reduziert werden (bash, da die OP fragt), die dafür sorgt, dass die referenzierte Zeichenkette keine Teilzeichenkette eines anderen Pfades ist. - Skaperen


Hier ist meine Lösung:

if findmnt ${YOUR_MOUNT_POINT} | awk '{print $4}' | grep "ro,"; then
  echo "Read only!"
fi

0
2017-09-18 07:27