Solo per espandere e migliorare alcune delle risposte di cui sopra:
Per prima cosa, controllerò la pagina man di mkdir per GNU Coreutils 8.26 - ci fornisce queste informazioni sull'opzione '-m' e '-p' (può anche essere dato come --mode = MODE e --parents, rispettivamente ):
... imposta la [s] modalità file (come in chmod), non a = rwx - umask
... nessun errore se esistente, crea le directory padre come necessario
Le dichiarazioni sono vaghe e poco chiare a mio parere. Ma fondamentalmente, dice che puoi creare la directory con i permessi specificati da "chmod numeric notation" (ottali) oppure puoi andare "dall'altra parte" e usare una / tua umask.
Nota a margine: dico "dall'altra parte" poiché il valore umask è in realtà esattamente come suona - una maschera , che nasconde / rimuove i permessi piuttosto che "concedendoli" come con la notazione numerica ottale di chmod.
Puoi eseguire il comando incorporato della shell umask
per vedere qual è la tua umask a 3 cifre; per me lo è 022
. Ciò significa che quando mkdir yodirectory
eseguo in una determinata cartella (ad esempio, mahome) e in stat
essa, ottengo un output simile a questo:
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)
#
Ora, per aggiungere solo un po 'di più su quei permessi ottali. Quando crei una directory, "il tuo sistema" prende la tua directory predefinita perms '[che si applica per le nuove directory (il suo valore dovrebbe 777)] e schiaffeggia la tua (u) maschera, nascondendo effettivamente alcune di quelle permanenti'. La mia umask è 022 - ora se "sottraiamo" 022 da 777 (tecnicamente la sottrazione è una semplificazione eccessiva e non è sempre corretta - in realtà stiamo disattivando le permanenti o le mascheriamo ) ... otteniamo 755 come indicato (o "statted" ) in precedenza.
Possiamo omettere lo '0' davanti agli ottali a 3 cifre (quindi non devono essere a 4 cifre) poiché nel nostro caso non volevamo (o meglio non menzionavamo) alcun stickybits, setuid o setgid (potresti voler esaminare quelli, tra l'altro, potrebbero essere utili dato che stai andando 777). Quindi, in altre parole, 0777 implica (o è equivalente a) 777 (ma 777 non è necessariamente equivalente a 0777 - poiché 777 specifica solo i permessi, non i setuids, setgids, ecc.)
Ora, per applicare questo alla tua domanda in un senso più ampio, hai (già) alcune opzioni. Tutte le risposte sopra funzionano (almeno secondo i miei coreutils). Ma potresti (o è abbastanza probabile che tu incorra) in problemi con le soluzioni di cui sopra quando vuoi creare sottodirectory (directory annidate) con permessi 777 tutto in una volta. In particolare, se eseguo quanto segue in mahome con una umask di 022:
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
Otterrò permanenti 755
per entrambi yodirectory
e yostuff
, con solo 777
permanenti per mastuffinyostuff
. Quindi sembra che umask
sia tutto ciò che è stato schiaffeggiato yodirectory
e yostuff
... per aggirare questo possiamo usare una subshell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
e questo è tutto. 777 permanenti per yostuff, mastuffinyostuff e yodirectory.
mkdir temp; chmod 777 temp
è una riga. Potresti rendere "temp" una variabile e salvarla come comando bash. È questo quello che stai cercando di fare?