Wie erstelle ich ein Verzeichnis und erteile die Berechtigung in einem einzigen Befehl unter Linux?
Ich muss viele Ordner mit voller Erlaubnis erstellen 777
.
Befehle
mkdir path/foldername
chmod 777 path/foldername
Ich mag es nicht, zwei Befehle zu erstellen und Berechtigungen zu erteilen. Kann ich das mit einem einzigen Befehl tun?
mkdir temp; chmod 777 temp
ist eine Zeile. Sie können 'temp' zu einer Variablen machen und als Bash-Befehl speichern. Wollen Sie das tun?Antworten:
Laut der Manpage von mkdir ...
quelle
-p
dem oben bereits erwähnten Problem mit @DisplayName gibt es auch ein anderes. Das-m
gilt nur , wenn ein Verzeichnis tatsächlich erstellt wird. Wenn es bereits existiert, wird sein Modus nicht geändert. Abhängig von Ihrem Kontext kann dies gut oder schlecht sein.sollte dir geben, was du willst. Beachten Sie, dass jeder Benutzer das Recht hat, Hinzufügen und Löschen von Dateien in dieses Verzeichnis zu schreiben.
quelle
three
, wobei die Standardberechtigungen für den Pfad dazu ausreichen.Wenn das Verzeichnis bereits vorhanden ist:
Wenn das Verzeichnis nicht vorhanden ist und Sie die übergeordneten Verzeichnisse erstellen möchten:
quelle
find /your/dirs -type d -exec chmod 755 {} \;
IMO, es ist besser, den
install
Befehl in solchen Situationen zu verwenden. Ich habe versucht,systemd-journald
über Neustarts hinweg dauerhaft zu bleiben.quelle
Sie könnten ein einfaches Shell-Skript schreiben, zum Beispiel:
Nach dem Speichern und Aktivieren des ausführbaren Flags können Sie es anstelle von mkdir und chmod ausführen:
Die Antwort von Alex ist jedoch viel besser, da sie einen Prozess anstelle von drei erzeugt. Ich wusste nichts über die
-m
Option.quelle
Nur um einige der oben genannten Antworten zu erweitern und zu verbessern:
Zuerst überprüfe ich die Manpage mkdir auf GNU Coreutils 8.26 - sie gibt uns diese Informationen über die Optionen '-m' und '-p' (kann auch als --mode = MODE bzw. --parents angegeben werden ):
Die Aussagen sind meiner Meinung nach vage und unklar. Grundsätzlich heißt es jedoch, dass Sie das Verzeichnis mit Berechtigungen erstellen können, die durch die numerische Notation "chmod" (Oktale) angegeben sind, oder "in die andere Richtung" gehen und eine / Ihre Umask verwenden können.
Randnotiz: Ich sage "andersherum", da der Umask-Wert genau das ist, wonach er sich anhört - eine Maske , die Berechtigungen versteckt / entfernt, anstatt sie wie bei der numerischen Oktalschreibweise von chmod zu "gewähren".
Sie können den Shell-eingebauten Befehl ausführen, um
umask
zu sehen, was Ihre dreistellige Umask ist. für mich ist es022
. Dies bedeutet, dass ich beim Ausführenmkdir yodirectory
in einem bestimmten Ordner (z. B. Mahome)stat
eine Ausgabe bekomme, die dieser ähnelt:Um noch ein kleines bisschen mehr über diese oktalen Berechtigungen hinzuzufügen. Wenn Sie ein Verzeichnis erstellen, nimmt "Ihr System" Ihre Standardverzeichnis-Dauerwellen "[was für neue Verzeichnisse gilt (der Wert sollte 777 sein)] und klatscht auf Ihre (u) -Maske, wodurch einige dieser Dauerwellen effektiv ausgeblendet werden." Meine Umask ist 022 - wenn wir jetzt 022 von 777 "subtrahieren" (technisch gesehen ist das Subtrahieren eine übermäßige Vereinfachung und nicht immer korrekt - wir schalten tatsächlich Dauerwellen aus oder maskieren sie) ... erhalten wir 755 wie angegeben (oder "statted"). ) vorhin.
Wir können die '0' vor den 3-stelligen Oktalen weglassen (sie müssen also nicht 4-stellig sein), da wir in unserem Fall keine Stickybits, Setuids oder Setgids wollten (oder eher nicht erwähnten) (Vielleicht möchten Sie diese untersuchen, übrigens, sie könnten nützlich sein, da Sie 777 gehen). Mit anderen Worten, 0777 impliziert (oder entspricht) 777 (aber 777 ist nicht unbedingt gleich 0777 - da 777 nur die Berechtigungen angibt, nicht die Setuids, Setgids usw.)
Um dies nun im weiteren Sinne auf Ihre Frage anzuwenden, haben Sie (bereits) einige Optionen. Alle obigen Antworten funktionieren (zumindest gemäß meinen Coreutils). Es kann jedoch (oder wahrscheinlich) zu Problemen mit den oben genannten Lösungen kommen, wenn Sie Unterverzeichnisse (verschachtelte Verzeichnisse) mit 777 Berechtigungen gleichzeitig erstellen möchten . Insbesondere, wenn ich in Mahome Folgendes mit einer Umask von 022 mache:
Ich werde Dauerwellen
755
für beideyodirectory
undyostuff
mit nur777
Dauerwellen für bekommenmastuffinyostuff
. Es scheint also, dass dasumask
alles ist, worauf geklatscht wird,yodirectory
undyostuff
... um dies zu umgehen, können wir eine Unterschale verwenden:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
und das ist es. 777 Dauerwellen für Yostuff, Mastuffinyostuff und Yodirectory.
quelle
Mit dem folgenden Befehl können Sie ein Verzeichnis erstellen und gleichzeitig Berechtigungen erteilen
quelle
Nicht tun:
mkdir -m 777 -p a/b/c
da dadurch nur die Berechtigung777
für das letzte Verzeichnis festgelegt wird, c; a und b werden mit der Standardberechtigung Ihrer umask erstellt.Um neue Verzeichnisse mit Berechtigung zu erstellen
777
, führenmkdir -p
Sie stattdessen eine Unterschale aus, in der Sie die Umask überschreiben:Beachten Sie, dass dies die Berechtigungen nicht ändert, wenn a, b und c bereits vorhanden sind.
quelle