Ich habe ein Skript geschrieben, um die Berechtigungen für alle Dateien in einem Verzeichnis zu ändern:
#!/bin/bash
files=`find "$1"`
for f in $files; do
chown "$2" "$f"
chmod 600 "$2"
done
Offensichtlich sollte das zweite Argument für chmod "$f"
anstelle von lauten "$2"
. Als ich das Skript jedoch (in einem kleinen Verzeichnis) ausführte, vergaß ich auch, das zweite Argument einzuschließen, das hätte lauten sollen "dave:dave"
. Jetzt sind alle Dateien im Verzeichnis völlig durcheinander:
~ $ ll Documents/
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ? ? modules.txt
-????????? ? ? ? ? ? packages.txt
-????????? ? ? ? ? ? todo.txt
-????????? ? ? ? ? ? wiki.txt
Läuft sudo chown dave:dave Documents/*
und sudo chmod 600 Documents/*
wirft keine Fehler aus, aber die Dateien bleiben unverändert. Ich weiß, dass ich sudo cat
jede Datei in eine neue Datei umwandeln kann, aber ich bin neugierig, wie ich die Berechtigungen für die Originaldateien korrigieren kann.
Antwort1
Zusätzlich zu den Antworten in den Kommentaren sollten Sie auch beachten, dass Ihr Skript bei Dateinamen mit Leerzeichen abbricht.
Sie können all dies mit einem einzigen Befehl erledigen find
, anstatt zu versuchen, eine Liste von Dateinamen zu analysieren, die von ausgegeben werden find
. Viel robuster; verarbeitet Dateinamen unabhängig von Sonderzeichen oder Leerzeichen.
find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;
Beachten Sie, dass, wenn der chown
Befehl bei einer bestimmten Datei fehlschlägt, der chmod
Befehl nicht für diese Datei ausgeführt wird. Dies ist wahrscheinlich ohnehin das gewünschte Verhalten.
Da Sie bereits einen fehlerhaften Befehl ausgeführt haben, der die Ausführungsberechtigungen für Ihr Verzeichnis „Dokumente“ entfernt hat, müssen Sie die Ausführungsberechtigungen wieder hinzufügen:
chmod u+x Documents
Wenn es weitere Verzeichnisse gibt, deren Ausführungsberechtigung fälschlicherweise entfernt wurde, sollten Sie diese wie folgt reparieren können:
find Documents -type d -exec chmod u+x {} \;
Ich glaube jedoch nicht, dass Sie das brauchen werden, da nach dem Entfernen der Ausführungsberechtigungen für „Dokumente“ keines der Unterverzeichnisse mehr zugänglich wäre und die Ausführungsberechtigungen daher nicht entfernt worden wären.
Antwort2
Das einzige Mal, dass ich Dateien mit solch seltsamen Berechtigungen sah, war auf einemernsthaftdurcheinandergebrachtes Dateisystem. Eine Runde fsck(8)
hat viele davon wieder relativ normalisiert, aber viele waren immer noch stark beschädigt. Ich glaube, es lag an einem Hardwareproblem (habe die guten Dateien von der Festplatte geholt und sie weggeworfen).