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)

hugo der hungrige
fuente
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
3
Respuesta corta:chmod -R u+rwX,go+rX,go-w /foo
kenorb

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
hugo der hungrige
fuente
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

kenorb
fuente
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).

John Allsup
fuente
¡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.

Mark D
fuente
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!

Christian Michael
fuente
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 {} \;
Jair Reina
fuente
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.

mza
fuente
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

Hemant Kumar
fuente
-9

Esto también puede funcionar:

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

chmod -R 644 *.*  // All files will be 644.
Puneet Tiwari
fuente
1
¡NADIE HAGA ESO! ¡afecta al servidor completo!
T.Todua