Wie kann ich unter Unix alle Dateiberechtigungen eines Verzeichnisses in einem Befehl ändern?
Wie kann ich unter Unix alle Dateiberechtigungen eines Verzeichnisses in einem Befehl ändern?
Antworten:
Verwenden Sie den chmod
Befehl , 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 644
das 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 -R
funktioniert in einigen Fällen gut (z. B. chmod -R g-r
), aber nicht in Fällen, in denen Sie mit dem -x
Bit herumspielen möchten , da es wahllos mit Dateien und Verzeichnissen arbeitet.
644
oder dass er überhaupt -x
auf die Verzeichnisse setzt? Die Frage besagt nur, dass er Berechtigungen ändern möchte, nicht zu was insbesondere.
chmod -R go=u,go-w /dir
chmod
hat ein -R
Flag, 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.
chmod -R 444 somedir
ein Verzeichnis mit Dateien aus. Sie erhalten, Permission denied
weil das Flag -x aus Verzeichnissen entfernt wird und es benötigt wird, um das Verzeichnis weiterzulesen.
chmod -R <file permission> *
Aus der Manpage von chmod
:
-R, --recursive
change files and directories recursively
Verwenden Sie chmod
mit -R
switch 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.