¿Cómo crear un directorio y dar permiso en un solo comando en Linux?
Tengo que crear muchas carpetas con todos los permisos 777
.
Comandos
mkdir path/foldername
chmod 777 path/foldername
No me gusta crear y dar permiso en dos comandos. ¿Puedo hacer esto con un solo comando?
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?Respuestas:
Según la página de manual de mkdir ...
fuente
-p
ese @DisplayName ya mencionado anteriormente, también hay otro. Se-m
aplicará solo si se crea realmente un directorio. Si ya existe, su modo no se cambiará. Dependiendo de su contexto, esto puede ser bueno o malo.debería darte lo que quieres. Tenga en cuenta que todos los usuarios tienen derecho a escribir, agregar y eliminar archivos en ese directorio.
fuente
three
, siendo los permisos predeterminados suficientes para la ruta.Cuando el directorio ya existe:
Cuando el directorio no existe y desea crear los directorios principales:
fuente
find /your/dirs -type d -exec chmod 755 {} \;
En mi opinión, es mejor usar el
install
comando en tales situaciones. Estaba tratando de hacersystemd-journald
persistente entre reinicios.fuente
Podría escribir un script de shell simple, por ejemplo:
Una vez guardado y habilitado el indicador ejecutable, puede ejecutarlo en lugar de mkdir y chmod:
Sin embargo, la respuesta de Alex es mucho mejor porque genera un proceso en lugar de tres. No conocía la
-m
opción.fuente
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 ):
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 es022
. Esto significa que cuando ejecutomkdir yodirectory
en una carpeta determinada (por ejemplo, mahome)stat
, obtendré una salida parecida a esta: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:
Conseguiré permanentes
755
para ambosyodirectory
yyostuff
, solo con777
permanentes paramastuffinyostuff
. Entonces, parece queumask
es todo lo que se abofeteayodirectory
yyostuff
... para evitar esto, podemos usar una subcapa:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
y eso es. 777 permanentes para yostuff, mastuffinyostuff y yodirectory.
fuente
puede usar el siguiente comando para crear un directorio y otorgar permisos al mismo tiempo
fuente
No lo hagas:
mkdir -m 777 -p a/b/c
ya que eso solo establecerá el permiso777
en el último directorio, c; ayb se crearán con el permiso predeterminado de su umask.En lugar de crear nuevos directorios con permiso
777
, ejecutemkdir -p
una subcapa en la que anule la máscara de usuario:Sin embargo, tenga en cuenta que esto no cambiará los permisos si ya existe alguno de a, byc.
fuente