¿Cómo puedo cambiar todos los permisos de archivo de un directorio en un comando en Unix?
¿Cómo puedo cambiar todos los permisos de archivo de un directorio en un comando en Unix?
Respuestas:
Para cambiar los permisos en un archivo o entrada de directorio de forma no recursiva, use el chmod
comando (vea man chmod para leer más sobre sus opciones específicas):
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
Para cambiar el propietario de un archivo / directorio de forma recursiva (que afecta a todos los descendientes):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
Para cambiar los bits de permisos de todos los archivos en un directorio, recursivamente:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
Para cambiar los bits de permisos de todos los directorios:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
Sería bueno si pudieras hacer esto:
chmod -R 755 dir
Sin embargo, esto tiene problemas. Trata los archivos y directorios de la misma manera. El comando anterior hace que los directorios sean listables y legibles para todos los usuarios, pero también hace que todos los archivos sean ejecutables, que generalmente es lo que no desea hacer.
Si lo cambiamos a 644
, tenemos otro problema:
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
El problema es que 644
elimina el bit de la lista de directorios, y este efecto secundario impide un mayor recorrido del árbol de archivos. Podría solucionar este problema utilizando sudo
, pero aún así terminará con directorios que son completamente inútiles para los usuarios no root.
El punto es que chmod -R
funciona bien en algunos casos (por ejemplo chmod -R g-r
), pero no en los casos en que desea jugar con el -x
bit, ya que funciona en archivos y directorios de manera indiscriminada.
644
o que está configurando -x
en los directorios? La pregunta solo estipula que quiere cambiar los permisos, no a qué en particular.
chmod -R go=u,go-w /dir
chmod
tiene una -R
bandera que significa cambiar los permisos en archivos y directorios de forma recursiva.
Puede usar 'X' mayúscula para hacer lo correcto para las carpetas: 'X' = "ejecutar / buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario"
Entonces, por ejemplo: chmod -R ug = rwX, o-rwx.
Haría que un árbol completo fuera accesible para el propietario y el grupo de cada archivo, y que nadie más pueda acceder a él. Cualquier archivo ya ejecutable seguiría siendo ejecutable después, y todos los directorios tendrían la 'x' para el usuario y el grupo y no para otros.
chmod -R 444 somedir
en un directorio con archivos en él. Obtiene Permission denied
porque el indicador -x se está quitando de los directorios y es necesario para continuar leyendo el directorio.
chmod -R <file permission> *
De la página del manual de chmod
:
-R, --recursive
change files and directories recursively
Úselo chmod
con el -R
interruptor para varias direcciones que tiene un árbol de subdirectorios que tiene millones de archivos dentro y desea cambiar los permisos de estos archivos juntos de una sola vez.
El permiso de archivo puede ser por ej. 777, 755, 644, etc.