Cambiar todos los permisos de archivos y carpetas de un directorio a 644/755


184

¿Cómo cambiaría todos los archivos a 644 y todas las carpetas a 755 usando chmodel linuxsímbolo del sistema? (Terminal)


66
Si alguien (@animuson) sería tan amable de explicar, por qué esta pregunta chmod es fuera de tema y todos los demás (14.438 resultados) aquí no son ...
— Hugo der Hungrige

Un poco tarde, pero este comando también hará la respuesta aceptada de una vez: chmod -R a = r, a + X, u + w / your / path
— MichaelICE

Buena pregunta, no merece un cierre. Estos deberían ser trasladados a un subsitio stackoverflow que cerrados.
— Erik Friesen

1
@hugoderhungrige significa ir a preguntar en un sitio del servidor como http://superuser.com: P, pero esta pregunta me ayudó aquí, gracias.
— emotalidad

Respuestas:


345

Un enfoque podría ser usar find:

para directorios

find /desired_location -type d -print0 | xargs -0 chmod 0755

para archivos

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
solo para alguien como yo, esto no funciona en su lugar, intente sudo find /your/location -type f -exec chmod 644 {} \;con archivos y sudo find /your/location -type d -exec chmod 755 {} \;directorios
— NineCattoRules

Ejecuté la solución original y estropeó mis permisos en archivos y directorios. ¡Cuidado! La solución en el comentario funcionó, ¡gracias!
— Mahsa Mortazavi

3
¿Por qué (?) Es mejor tham chmod -R a=r,u+w,a+X /foo?
— Peter Krauss

falla conunable to execute /bin/chmod: Argument list too long
— vladkras

¿Qué sucede si solo quiero que la subcarpeta sea chmod 755 al especificar la ubicación deseada? Porque esto también hará que la carpeta principal sea 755
— MaXi32

105

La forma más fácil es hacer:

chmod -R u+rwX,go+rX,go-w /path/to/dir

que básicamente significa:

para charchivar modes -Recursivamente dando:

  • user: rpermisos de ead, write y e Xecute,
  • grupo y other usuarios: rEAD y correoX , pero no -wpermisos de rito.

Tenga en cuenta que X hará que un directorio sea ejecutable, pero no un archivo, a menos que ya se pueda buscar / ejecutar.

+X - haga que todos puedan buscar / ejecutar un directorio o archivo si ya alguien puede buscarlo / ejecutarlo.

por favor, compruebe man chmod para más detalles.

Ver también: ¿Cómo modificar todos los directorios excepto los archivos (recursivamente)? en SU


77
chmod -R a = r, u + w, a + X / foo
— John Allsup

9
Esta respuesta, aunque ordenada, tiene un problema: un archivo que es ejecutable antes de ejecutar el comando será ejecutable después. Vea la respuesta de @JohnAllsup para un comando que no tiene este defecto.
— mzuther

44
@mzuther a menos que este problema sea realmente una característica para usted
— RiaD

37

El más corto que se me ocurrió es:

chmod -R a=r,u+w,a+X /foo

que funciona en GNU / Linux, y creo en Posix en general (de mi lectura de: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Lo que esto hace es:

  1. Establezca el archivo / directorio en r__r__r__ (0444)
  2. Agregue w para el propietario, para obtener rw_r__r__ (0644)
  3. Establezca ejecutar para todos si es un directorio (0755 para dir, 0644 para archivo).

Es importante destacar que el permiso del paso 1 borra todos los bits de ejecución, por lo que el paso 3 solo agrega bits de ejecución para directorios (nunca archivos). Además, los tres pasos suceden antes de que se vuelva a utilizar un directorio (por lo que esto no es equivalente a, por ejemplo,

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

dado que a = r elimina x de los directorios, entonces chmod no puede recurrir a ellos).


¡brillante! me ayudó mucho
— Jannie Theunissen

13

Lo más fácil para mí es recordar dos operaciones:

chmod -R 644 dirName
chmod -R +X dirName

La + X solo afecta a los directorios.


1
Más simple y seguro
— Marco Marsala

12

En https://help.directadmin.com/item.php?id=589 escriben:

Si necesita una forma rápida de restablecer sus datos public_html a 755 para directorios y 644 para archivos, puede usar algo como esto:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Lo probé y ... ¡funciona!


Salvavidas! ¡Gracias por la solución limpia a este problema! ¡Me funcionó cuando necesité solucionar problemas de permisos para una instalación de WordPress!
— twknab

Funciona bien para hacer los ajustes dentro de un directorio.
— Christian Berendt

8

Esto funcionó para mí:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
Tenga cuidado: estos comandos no manejarán archivos o directorios con espacios en sus nombres. Los comandos en la respuesta aceptada lo harán.
— Chad Nouis

1
Esta advertencia solo se aplica si {} no está entre comillas ... por lo tanto, no hay razón para jugar con print0 y xargs -0, lo siguiente es suficiente:find /A -type X -exec chmod Y '{}' \;
— Michael Stumpfl

6

Haz ambas cosas en una sola pasada con:

find -type f ... -o -type d ...

Como en, encuentre el tipo f O el tipo d, y haga el primero ... para archivos y el segundo ... para directorios. Específicamente:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Deja el --changessi quieres que funcione en silencio.


2

Si necesita una forma rápida de restablecer sus datos public_html a 755 para directorios y 644 para archivos, puede usar algo como esto:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Además, si sabe que PHP se ejecuta como usuario y no como "apache", puede configurar los archivos PHP a 600, para un nivel adicional de seguridad, por ejemplo:

find . -type f -name '*.php' -exec chmod 600 {} \;

Puede encontrar este recurso aquí: https://help.directadmin.com/item.php?id=589


-9

Esto también puede funcionar:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

1
¡NADIE HAGA ESO! ¡afecta al servidor completo!
— T.Todua
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.