Ich habe ein Backup auf ein NTFS-Laufwerk erstellt, und nun, dieses Backup hat sich wirklich als notwendig erwiesen. Das NTFS-Laufwerk hat jedoch die Berechtigungen durcheinander gebracht. Ich möchte sie auf den Normalzustand zurücksetzen, ohne jede einzelne Datei manuell reparieren zu müssen.
Ein Problem ist, dass plötzlich alle meine Textdateien Ausführungsberechtigungen erhalten haben, was natürlich falsch ist. Also habe ich versucht:
sudo chmod -R a-x folder\ with\ restored\ backup/
Aber es ist falsch, da es die x
Erlaubnis auch aus Verzeichnissen entfernt , was sie unlesbar macht.
Was ist in diesem Fall der richtige Befehl?
permissions
executable
recursive
Gaazkam
quelle
quelle
Antworten:
Das
-x
entfernt Ausführungsberechtigungen für alleDas
+X
fügt Ausführungsberechtigungen für alle hinzu, aber nur für Verzeichnisse.quelle
chmod -R -x+x *
chmod -R -x * && chmod -R +X *
Ok, ich habe die "chmod" -Manpages für Mac OS X, BSD und Linux noch einmal gelesen und ein paar Experimente durchgeführt. Folgendes habe ich über symbolische Modi gelernt. Es kann kompliziert werden, aber es lohnt sich zu verstehen:
So würde zum Beispiel
a+x
eine Datei von jedem ausführbar gemacht.a+X
würde eine Datei für alle ausführbar machen, WENN sie für alle ausführbar gewesen wäre.a+x
würde ein Verzeichnis für alle durchsuchbar machen.a+X
würde auch ein Verzeichnis für alle durchsuchbar machen.Der Hauptunterschied zwischen BSD und Linux besteht darin, dass bei BSD die Ermittlung auf der Grundlage der Berechtigungen der Datei erfolgt, bevor chmod ausgeführt wurde. Unter Linux erfolgt die Ermittlung unmittelbar vor der Ausführung der + X-Klausel.
Mit BSD
a-x,a+X
würde die Kombination die Ausführungs- / Suchberechtigung entfernen und dann ein Verzeichnis für alle durchsuchbar machen und eine Datei für alle ausführbar machen, wenn sie ursprünglich für alle ausführbar gewesen wäre.a-x,a+X
Würde unter Linux die Ausführungs- / Suchberechtigung entfernen und dann ein Verzeichnis für alle durchsuchbar machen, während eine Datei für niemanden ausführbar bleibt.Hier ein konkretes Beispiel: Auf einer BSD-Maschine: Ein Verzeichnis, eine ausführbare Datei und eine nicht ausführbare Datei:
Beachten Sie, dass sowohl das Verzeichnis als auch "fie" vom Benutzer ausführbar / durchsuchbar sind, jedoch nicht von anderen.
Jetzt führen wir aus
chmod a-x,a+X *
. Die erste Klausel entfernt das Ausführungs- / Suchbit von allen Benutzern für alle Dateien, die zweite Klausel fügt es jedoch für "fee" und "fie" wieder hinzu. "fee", weil es sich um ein Verzeichnis handelt, und "fie", weil es zu Beginn mindestens ein ausführbares Bit enthält.Ich hatte das gleiche Ergebnis ausgeführt
chmod -x+X
.Fazit: Jak Gibbs Lösung wird unter Linux funktionieren, aber für BSD müssten Sie zwei Durchgänge durchführen.
Ich habe dies nicht auf SVr4 oder anderen Unix-Varianten getestet.
quelle
Ein Weg, es zu tun:
quelle
chmod a-x {}
chmod a-x {}
kann auch Berechtigungen entfernen, die Sie nicht ändern möchten, und es kann dazu führen, dass Dateien nicht mehr schreibgeschützt sind. Der Punkt ist, 0644 ist ein "allgemein vernünftiger" Kompromiss. Das OP sollte natürlich auch das Gehirn einbeziehen, bevor Lösungen aus dem Internet auf seinen Computer angewendet werden.chmod
lauten. Wenn die Sicherungsdateien Skripte und Binärdateien enthalten, ist das Entfernenx
von Skripten falsch. Wenn die Berechtigungen vorherchmod
0777 sind,chmod a-x
werden sie trotzdem 0666 belassen, was wahrscheinlich nicht das ist, was Sie wollen. Ich sage, daschmod 0644
ist eine bessere Heuristik, nicht daschmod a-x
ist falsch.Entfernt die Ausführungsberechtigung für Dateien, die nicht vom Typ Verzeichnis (wie von Ihnen angefordert) oder symbolischer Verknüpfung sind (Symlinks sind im Allgemeinen immer rwxrwxrwx und
chmod
wirken sich auf das Ziel des Symlinks auf ihnen aus).Beachten Sie, dass:
würde nur die Erlaubnis von regulären Dateien ändern . Dies würde Verzeichnisse und Symlinks ausschließen , aber auch Geräte , Named Pipes , Sockets und möglicherweise andere, je nach System (obwohl im Falle einer Sicherung eines NTFS-Dateisystems diese wahrscheinlich nicht vorhanden sind).
quelle
Verwenden Sie in zsh das Glob-Qualifikationsmerkmal
.
, um nur mit regulären Dateien (ohne symbolische Links) undD
mit Punktdateien übereinzustimmen:Wenn die Befehlszeile zu lang ist, können Sie Folgendes verwenden
zargs
:quelle