2010-11-08 17:31:41 +0000 2010-11-08 17:31:41 +0000
11
11
Advertisement

So ändern Sie die Dateiberechtigungen für ein Verzeichnis mit einem Befehl

Advertisement

Wie kann ich unter Unix alle Dateiberechtigungen eines Verzeichnisses mit einem Befehl ändern?

Advertisement
Advertisement

Antworten (3)

21
21
21
2010-11-08 17:40:58 +0000

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.

6
6
6
2010-11-08 17:34:48 +0000

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.

3
Advertisement
3
3
2012-08-01 07:10:21 +0000
Advertisement
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.

Advertisement

Verwandte Fragen

10
37
7
14
4
Advertisement