So ändern Sie die Dateiberechtigungen für ein Verzeichnis mit einem Befehl
Wie kann ich unter Unix alle Dateiberechtigungen eines Verzeichnisses mit einem Befehl ändern?
Wie kann ich unter Unix alle Dateiberechtigungen eines Verzeichnisses mit einem Befehl ändern?
Um die Berechtigungen einer Datei oder eines Verzeichniseintrags nicht rekursiv zu ändern, verwenden Sie den Befehl chmod
(siehe man chmod , um mehr über seine spezifischen Optionen zu erfahren):
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
Um den Eigentümer einer Datei/eines Verzeichnisses rekursiv zu ändern (mit Auswirkungen auf alle Nachkommen):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
Um die Berechtigungsbits aller Dateien in einem Verzeichnis rekursiv zu ändern:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
Um die Berechtigungsbits aller Verzeichnisse zu ändern:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
Es wäre schön, wenn Sie dies einfach tun könnten:
chmod -R 755 dir
Dies hat jedoch Probleme. Es behandelt Dateien und Verzeichnisse gleich. Der obige Befehl macht Verzeichnisse auflistbar und lesbar für alle Benutzer, aber er macht auch alle Dateien ausführbar, was Sie normalerweise nicht wollen.
Wenn wir es in 644
ändern, bekommen wir ein anderes Problem:
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
Das Problem ist, dass 644
das Verzeichnislisten-Bit herausnimmt, und dieser Nebeneffekt verhindert weitere Traversierungen des Dateibaums. Sie könnten dieses Problem umgehen, indem Sie sudo
verwenden, aber Sie enden immer noch mit Verzeichnissen, die für Nicht-Root-Benutzer völlig nutzlos sind.
Der Punkt ist, dass chmod -R
in einigen Fällen gut funktioniert (z. B. chmod -R g-r
), aber nicht in Fällen, in denen Sie mit dem -x
-Bit herumspielen wollen, da es wahllos auf Dateien und Verzeichnisse wirkt.
Das Flag chmod
bedeutet, dass die Berechtigungen für Dateien und Verzeichnisse rekursiv geändert werden.
Sie können ein großes ‘X’ verwenden, um das Richtige für Ordner zu tun: ‘X’ = “Ausführen/Suchen nur, wenn die Datei ein Verzeichnis ist oder bereits Ausführungsrechte für einen Benutzer hat”
Also z. B.: chmod -R ug=rwX,o-rwx .
würde einen ganzen Baum für den Besitzer und die Gruppe jeder Datei zugänglich machen, und für alle anderen nicht. Alle bereits ausführbaren Dateien wären danach immer noch ausführbar, und alle Verzeichnisse hätten das ‘x’ für den Benutzer und die Gruppe und nicht für andere.
chmod -R <file permission> *
Aus der Manpage von chmod
:
-R, --recursive
change files and directories recursively
Verwenden Sie chmod
mit dem Schalter -R
für mehrere Richtungen, die einen Baum von Unterverzeichnissen mit Millionen von Dateien enthalten, und Sie möchten die Dateiberechtigungen dieser Dateien auf einen Schlag ändern.
Die Dateiberechtigung kann z. B. 777, 755, 644 usw. sein.