it-swarm.com.de

So erstellen Sie ein Verzeichnis und erteilen die Berechtigung in einem einzigen Befehl

Wie erstelle ich ein Verzeichnis und erteile die Erlaubnis in einem einzigen Befehl in 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 zuzulassen. Kann ich das mit einem einzigen Befehl tun?

87
poorani

Laut der Manpage von mkdir ...

mkdir -m 777 dirname
179
alex
install -d -m 0777 /your/dir

sollte dir geben, was du willst. Beachten Sie, dass jeder Benutzer das Recht hat, Dateien in diesem Verzeichnis hinzuzufügen und zu löschen.

18

IMO, in solchen Situationen ist es besser, den Befehl install zu verwenden. Ich habe versucht, systemd-journald bleibt über Neustarts hinweg bestehen.

install -d  -g systemd-journal -m 2755 -v /var/log/journal
10
Badi

Wenn das Verzeichnis bereits existiert:

mkdir -m 777 /path/to/your/dir

Wenn das Verzeichnis nicht vorhanden ist und Sie die übergeordneten Verzeichnisse erstellen möchten:

mkdir -m 777 -p /parent/dirs/to/create/your/dir
8
Pedro Trujillo

mit dem folgenden Befehl können Sie ein Verzeichnis erstellen und gleichzeitig Berechtigungen erteilen

mkdir -m777 path/foldername 
6
Omer Gafar

Sie könnten ein einfaches Shell-Skript schreiben, zum Beispiel:

#!/bin/bash
mkdir "$1"
chmod 777 "$1"

Einmal gespeichert und das ausführbare Flag aktiviert, können Sie es anstelle von mkdir und chmod ausführen:

./scriptname path/foldername

Alex 'Antwort ist jedoch viel besser, weil es einen Prozess anstelle von drei hervorbringt. Ich wusste nicht über die -m Möglichkeit.

6
Delan Azabani

Nur um einige der obigen Antworten zu erweitern und zu verbessern:

Zuerst überprüfe ich die Manpage von mkdir auf GNU Coreutils 8.26 - es gibt uns diese Information über die Option '-m' und '-p' (kann auch angegeben werden als - mode = MODE bzw. --parents):

... setze [s] file mode (wie in chmod), nicht a = rwx - umask

... kein Fehler, falls vorhanden, übergeordnete Verzeichnisse nach Bedarf erstellen

Die Aussagen sind meiner Meinung nach vage und unklar. Grundsätzlich heißt es jedoch, dass Sie das Verzeichnis mit den durch "chmod numeric notation" (Oktale) angegebenen Berechtigungen erstellen oder "in die andere Richtung" gehen und eine/your umask verwenden können.

Randnotiz: Ich sage "in die andere Richtung", da der umask-Wert genau das ist, wonach er sich anhört - ein mask, das Berechtigungen verbirgt/entfernt, anstatt sie wie bei der numerischen Oktalnotation von chmod zu "gewähren".

Sie können den Shell-eingebauten Befehl umask ausführen, um zu sehen, wie Ihre dreistellige Umask lautet. für mich ist es 022. Das heißt, wenn ich mkdir yodirectory In einem bestimmten Ordner (z. B. Mahome) und stat erhalten Sie eine Ausgabe, die der folgenden ähnelt:

               755                   richard:richard         /mahome/yodirectory
 #          permissions                 user:group      what I just made (yodirectory),
 # (owner,group,others--in that order)                 where I made it (i.e. in mahome)
 # 

Nun, um nur ein bisschen mehr über diese oktalen Berechtigungen hinzuzufügen. Wenn Sie ein Verzeichnis erstellen, verwendet "Ihr System" die Standardverzeichnis-Erlaubnis "(dies gilt für ne Verzeichnisse (der Wert sollte 777 sein)" und schlägt auf Ihre (u) Maske, wodurch einige davon effektiv ausgeblendet werden Dauerwellen '. Meine umask ist 022 - jetzt, wenn wir 022 von 777 "subtrahieren" (technisch gesehen ist das Subtrahieren eine übermäßige Vereinfachung und nicht immer korrekt - wir schalten tatsächlich die Dauerwelle aus oder maskieren sie) ... wir erhalten 755 wie zuvor angegeben (oder "statted").

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 vielmehr nicht erwähnten) (Vielleicht möchten Sie sich diese ansehen, übrigens, sie könnten nützlich sein, da Sie auf 777 gehen). Mit anderen Worten, 0777 impliziert (oder entspricht) 777 (aber 777 entspricht nicht unbedingt 0777 - da 777 nur die Berechtigungen angibt, nicht die setuids, setgids usw.)

Nun, um dies auf Ihre Frage im weiteren Sinne anzuwenden - Sie haben (bereits) einige Optionen. Alle obigen Antworten funktionieren (zumindest gemäß meinen Coreutils). Aber Sie können (oder sind ziemlich wahrscheinlich) auf Probleme mit den obigen Lösungen stoßen, wenn Sie sub Verzeichnisse (verschachtelte Verzeichnisse) mit 777 Berechtigungen auf einmal erstellen möchten. Konkret, wenn ich in mahome mit einer umask von 022 Folgendes mache:

mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff

Ich werde Dauerwellen bekommen 755 für yodirectory und yostuff, mit nur 777 Dauerwellen für mastuffinyostuff. Es scheint also, dass das umask alles ist, was auf yodirectory und yostuff geschlagen wird. Um dies zu umgehen, können wir eine Subshell verwenden:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

und das ist es. 777 Dauerwellen für Yostuff, Mastuffinyostuff und Yodirectory.

4
YenForYang