
Wenn ich dann verwende, bekomme ich mkdir -pm 764 a/b/c
nur c
die Berechtigung 764, während a
und b
die Standardberechtigung haben. Warum ist das so? Warum bekommen nicht alle Verzeichnisse die Berechtigung 764?
Antwort1
Das mkdir
Dienstprogramm erstellt ein einzelnes Verzeichnis. Bei Verwendung mit -m
wird das Verzeichnis erstellt und effektiv chmod
mit den angegebenen Berechtigungen darin ausgeführt (obwohl dies nicht in zwei Schritten geschieht, was unter bestimmten Umständen wichtig sein könnte).
Mit -p
werden alle Zwischenverzeichnisse erstellt, die noch nicht existieren. Der angegebene Modus -m
gilt weiterhin nur für den letzten Namen im Pfadnamen, da dies das Verzeichnis ist, das Sie erstellen möchten (die Zwischenverzeichnisse werden erstellt, um die Erstellung dieses Verzeichnisses mit dem angegebenen Modus zu ermöglichen).
DerPOSIX-Standard fürmkdir
sagen Sie, dass jedes Zwischenverzeichnis mit dem Modus erstellt werden soll, (S_IWUSR|S_IXUSR|~filemask)&0777
wobei filemask
der Umask-Wert Ihrer Shell ist.
Im Abschnitt „Anwendungsnutzung“ heißt es
[…] Für von erstellte Zwischenpfadkomponenten
mkdir
ist der Modus der von geänderte Standard,u+ wx
so dass die Unterverzeichnisse immer unabhängig von der Erstellungsmaske im Dateimodus erstellt werden können; wenn für die Zwischenverzeichnisse andere endgültige Berechtigungen gewünscht sind, können diese nachträglich mit geändert werdenchmod
.
Dies bedeutet, dass der Modus für die Zwischenverzeichnisse so eingestellt ist, dass Sie ein Verzeichnis erstellen können, das möglicherweise keine Benutzerschreib- oder Ausführungsberechtigungen hat. Wenn den Zwischenverzeichnissen ebenfalls keine Ausführungs- und/oder Schreibberechtigungen erteilt würden, könnten die letzten Komponenten des Verzeichnispfads nicht erstellt werden.
Verwenden Sie in Ihrem speziellen Fall
mkdir -p -m 764 a/b/c
chmod 764 a/b
chmod 764 a
Wenn Sie sicher sind, dass keines der Verzeichnisse zuvor existierte, verwenden Sie
mkdir -p -m 764 a/b/c
chmod -R 764 a