Solo para ampliar y mejorar algunas de las respuestas anteriores:
Primero, verificaré la página de manual de mkdir para GNU Coreutils 8.26; nos brinda esta información sobre la opción '-m' y '-p' (también se pueden dar como --mode = MODE y --parents, respectivamente ):
... establece el modo de archivo [s] (como en chmod), no a = rwx - umask
... no hay error si existe, cree directorios principales según sea necesario
Las declaraciones son vagas y poco claras en mi opinión. Pero básicamente, dice que puede crear el directorio con permisos especificados por "notación numérica chmod" (octales) o puede ir "al revés" y usar una / su umask.
Nota al margen: digo "al revés" ya que el valor de umask es exactamente lo que parece: una máscara , que oculta / elimina permisos en lugar de "otorgarlos" como con la notación octal numérica de chmod.
Puede ejecutar el comando shell-builtin umask
para ver cuál es su umask de 3 dígitos; para mí lo es 022
. Esto significa que cuando ejecuto mkdir yodirectory
en una carpeta determinada (por ejemplo, mahome) stat
, obtendré una salida parecida a esta:
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)
#
Ahora, para agregar un poquito más sobre esos permisos octales. Cuando crea un directorio, "su sistema" toma sus permisos de directorio predeterminados [que se aplican a los nuevos directorios (su valor debería ser 777)] y coloca su máscara (u), ocultando efectivamente algunos de esos permisos. Mi umask es 022; ahora, si "restamos" 022 de 777 (técnicamente, restar es una implicación excesiva y no siempre es correcto; en realidad, estamos desactivando las permanentes o la máscara ) ... obtenemos 755 como se indica (o "establecido" ) antes.
Podemos omitir el '0' delante de los octales de 3 dígitos (para que no tengan que ser de 4 dígitos) ya que en nuestro caso no queríamos (o mejor dicho no mencionamos) ningún stickybits, setuids o setgids (es posible que desee verlos, por cierto, podrían ser útiles ya que va al 777). Entonces, en otras palabras, 0777 implica (o es equivalente a) 777 (pero 777 no es necesariamente equivalente a 0777, ya que 777 solo especifica los permisos, no los setuids, setgids, etc.)
Ahora, para aplicar esto a su pregunta en un sentido más amplio, (ya) tiene algunas opciones. Todas las respuestas anteriores funcionan (al menos de acuerdo con mis coreutils). Pero puede (o es muy probable que lo haga) tener problemas con las soluciones anteriores cuando desee crear subdirectorios (directorios anidados) con 777 permisos todos a la vez. Específicamente, si hago lo siguiente en mahome con una umask de 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
Conseguiré permanentes 755
para ambos yodirectory
y yostuff
, solo con 777
permanentes para mastuffinyostuff
. Entonces, parece que umask
es todo lo que se abofetea yodirectory
y yostuff
... para evitar esto, podemos usar una subcapa:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
y eso es. 777 permanentes para yostuff, mastuffinyostuff y yodirectory.
mkdir temp; chmod 777 temp
es una línea. Puede convertir 'temp' en una variable y guardarla como un comando bash. ¿Es esto lo que estás buscando hacer?