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


11

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


Wollen Sie damit die Berechtigungen für alle Dateien im Verzeichnis ändern? Möchten Sie, dass dies auch in verschachtelte Verzeichnisse verschoben wird? Möchten Sie die Berechtigungen des Verzeichnisses (der Verzeichnisse) selbst oder nur der darin enthaltenen Dateien ändern? Haben Sie zuletzt versucht, diese Website zuerst zu durchsuchen, bevor Sie Ihre Frage gestellt haben?
Ether

Antworten:


21

Verwenden Sie den chmodBefehl , um die Berechtigungen für einen Datei- oder Verzeichniseintrag nicht rekursiv zu ändern ( weitere Informationen zu den spezifischen Optionen finden Sie unter man chmod ):

chmod +x dir  # Set a directory to be listable
chmod +x file # Set a file to be executable

So ändern Sie den Eigentümer einer Datei / eines Verzeichnisses rekursiv (betrifft alle Nachkommen):

chown -R username           dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

So ändern Sie die Berechtigungsbits aller Dateien in einem Verzeichnis rekursiv:

find dir -type f -exec chmod 644 {} ';' # make all files       rw-r-r-

So ändern Sie die Berechtigungsbits aller Verzeichnisse:

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. Dateien und Verzeichnisse werden gleich behandelt. Der obige Befehl macht Verzeichnisse für alle Benutzer auflistbar und lesbar, macht aber auch alle Dateien ausführbar, was normalerweise nicht der Fall ist.

Wenn wir es ändern 644, erhalten 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 besteht darin, dass 644das Verzeichnislistenbit entfernt wird und dieser Nebeneffekt ein weiteres Durchlaufen des Dateibaums verhindert. Sie könnten dieses Problem mithilfe von umgehen sudo, aber Sie erhalten immer noch Verzeichnisse, die für Nicht-Root-Benutzer völlig nutzlos sind.

Der Punkt ist, chmod -Rfunktioniert in einigen Fällen gut (z. B. chmod -R g-r), aber nicht in Fällen, in denen Sie mit dem -xBit herumspielen möchten , da es wahllos mit Dateien und Verzeichnissen arbeitet.


Warum nehmen Sie an, dass er setzen möchte 644oder dass er überhaupt -xauf die Verzeichnisse setzt? Die Frage besagt nur, dass er Berechtigungen ändern möchte, nicht zu was insbesondere.
Reese Moore

@ Reese Moore: Du hast recht. Der Fragesteller sagte nicht einmal etwas über das rekursive Ändern von Berechtigungen.
Joey Adams

1
Im Allgemeinen möchten Sie dafür den symbolischen Modus + und - verwenden. dhchmod -R go=u,go-w /dir
dannysauer

6

chmodhat ein -RFlag, das bedeutet, dass Berechtigungen für Dateien und Verzeichnisse rekursiv geändert werden.

Sie können das Großbuchstaben 'X' verwenden, um das Richtige für Ordner zu tun: 'X' = "Nur ausführen / suchen, wenn die Datei ein Verzeichnis ist oder bereits die Ausführungsberechtigung für einen Benutzer hat"

Also zB: chmod -R ug = rwX, o-rwx.

Würde einen ganzen Baum für den Eigentümer und die Gruppe jeder Datei zugänglich machen und für niemanden anderen zugänglich. Alle bereits ausführbaren Dateien wären danach noch ausführbar, und alle Verzeichnisse hätten das 'x' für den Benutzer und die Gruppe und nicht für andere.


Probieren Sie chmod -R 444 somedirein Verzeichnis mit Dateien aus. Sie erhalten, Permission deniedweil das Flag -x aus Verzeichnissen entfernt wird und es benötigt wird, um das Verzeichnis weiterzulesen.
Joey Adams

1
Ein nützlicher Nachtrag dazu ist die X = Y-Syntax. Sie können beispielsweise Gruppenberechtigungen für die Benutzerberechtigung festlegen, indem Sie chmod -R g = u dir verwenden, um Gruppen- und Benutzeräquivalente festzulegen. Dies funktioniert um Dinge wie Verzeichnisse, die ausführbar sein müssen, während "einfache" Dateien dies nicht tun.
Paul Rubel

3
chmod -R <file permission> *

Aus der Manpage von chmod:

-R, --recursive
              change files and directories recursively

Verwenden Sie chmodmit -Rswitch für mehrere Richtungen, in dem sich ein Unterverzeichnisbaum mit Millionen von Dateien befindet, und Sie möchten die Dateiberechtigungen dieser Dateien auf einmal ändern.

Die Dateiberechtigung kann z. 777, 755, 644 usw.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.