Dateien mit ?????????-Berechtigungen reparieren

Dateien mit ?????????-Berechtigungen reparieren

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 catjede 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 chownBefehl bei einer bestimmten Datei fehlschlägt, der chmodBefehl 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).

verwandte Informationen