¿Cómo cambiar los permisos de una carpeta y sus subcarpetas / archivos en un solo paso?

Me gustaría cambiar los permisos de una carpeta y todas sus subcarpetas y archivos en un solo paso (comando) en Linux.

Ya probé el siguiente comando, pero funciona solo para la carpeta mencionada:

chmod 775 /opt/lampp/htdocs

¿Hay alguna manera de establecer chmod 755 para /opt/lampp/htdocs y todo su contenido, incluidas las subcarpetas y archivos?

Además, en el futuro, si creo una nueva carpeta o archivo dentro htdocs, ¿cómo se pueden establecer automáticamente los permisos de eso en 755?

También eché un vistazo a este enlace:

¿Cómo configurar el CHMOD predeterminado en el terminal LINUX?

preguntado el 17 de septiembre de 10 a las 23:09

¿Tenías la intención de escribir? chmod 75 /opt/lampp/htdocs ¿O debería ser eso realmente? chmod 755 /opt/lampp/htdocs? -

El hecho de que la cuarta pregunta más votada sobre Linux esté "cerrada por estar fuera de tema" es gracioso. ¿A quién sino a un programador le importaría chmod? ¿Cómo es esto fuera de tema? ¿Por qué los "permisos", "carpeta" y "cmod" son etiquetas pares si no están relacionados con el tema? -

@ArthurDent, porque esta pregunta (aunque es perfectamente válida y útil) es más adecuada para un sitio SE centrado en el sistema, como SuperUser o ServerFault. No está expresamente relacionado con la programación. -

@timelmer Seguro, pero vuelvo a preguntar, ¿por qué son las etiquetas "permisos", "carpeta" y "cmod"? ¿Cuándo se usaría cmod 'expresamente' para la programación? -

Si quieres ser muy exigente, Bash es en realidad un lenguaje de scripting, pero también lo es php, que a SO no parece importarle. -

20 Respuestas

Las otras respuestas son correctas, en eso chmod -R 755 establecerá estos permisos para todos los archivos y subcarpetas del árbol. Pero, ¿por qué diablos querrías? Puede tener sentido para los directorios, pero ¿por qué establecer el bit de ejecución en todos los archivos?

Sospecho que lo que realmente quieres hacer es configurar los directorios en 755 y dejar los archivos en paz o configurarlos en 644. Para esto, puedes usar el find mando. Por ejemplo:

Para cambiar todos los directorios a 755 (drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Para cambiar todos los archivos a 644 (-rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;

Respondido el 26 de Septiembre de 18 a las 11:09

Cualquiera se preocupa por explicar lo que {} \; al final la línea significa? - Nilzor

@Nilzor chmod 644 {} \; especifica el comando que será ejecutado por find para cada archivo. {} se reemplaza por la ruta del archivo, y el punto y coma denota el final del comando (escapado, de lo contrario sería interpretado por el shell en lugar de find). - tobbez

"pero ¿por qué establecer el bit de ejecución en todos los archivos?" ¿Por qué no? Soy nuevo en Ubuntu / Linux ... - FlavorScape

@FlavorScape Womble establece el bit de ejecución exclusivamente en los directorios devueltos por find. El permiso de ejecución en un directorio permite a una clase de usuario listar el contenido de ese directorio y acceder a él. En términos generales, desea tanto r como x en un directorio para que pueda acceder a él, aunque puede haber casos extremos extraños en los que establezca solo uno u otro. Consulte esta guía para obtener más información: nixsrv.com/llthw/ex23 - Alejandro Kurilín

Con la excepción de sleepynate, cada respuesta descuidó abordar el aspecto de su pregunta con respecto a la configuración de permisos para archivos / carpetas creados en el futuro. - jgarrido

Marque la opción -R

chmod -R <permissionsettings> <dirname>

En el futuro, puede ahorrar mucho tiempo si consulta primero la página de manual:

man <command name>

Entonces en este caso:

man chmod

Respondido el 25 de Septiembre de 13 a las 03:09

significa página manual y es un comando de Linux que muestra la página de manual de un comando (la mayoría de los comandos de Linux tienen una página de manual). prueba man ls o man man. - steve roberto

Esto no funcionó para mí en la Terminal en Mac OS X. Allí hice "chmod -R *" Y funcionó. - Einar Olafsson

Consulte también la respuesta a continuación de @WombleGoneBad. Querrá establecer permisos de manera diferente para archivos y carpetas. - Sudhir

Creo que a estas alturas, en realidad es más rápido publicar aquí o usar Google que usar man. Particularmente para algo como grep donde si eres nuevo en man Puede llevar mucho tiempo localizar ejemplos en el documento, pero Google o SO proporcionan ejemplos en segundos. - Ely

Para el registro, aquellos que no están familiarizados con Linux pueden no estar familiarizados con man. Solo sé de su existencia, pero tratar de descubrir cómo usarlo requeriría una aventura de Google en sí misma. Posiblemente una empresa que valga la pena, pero debes darte cuenta de que encontré MUY ESTA publicación a través de Google y respondió la pregunta EXACTA que estaba haciendo. Recursos, amigo mío. Los recursos son invaluables. Y puede pensar que esto no tenía sentido y que debería haber revisado al hombre, pero esto me ha ayudado a mí y a CIENTOS más (miles incluso). Así que, por favor, considérelo. - sonidofx4

Si desea establecer permisos en todos los archivos para a+ry todos los directorios a a+x, y hazlo de forma recursiva a través del árbol de subdirectorios completo, usa:

chmod -R a+rX *

La X (eso es capital X, no pequeño x!) se ignora para archivos (a menos que ya sean ejecutables para alguien) pero se usa para directorios.

respondido 11 nov., 13:20

Gran respuesta. Solo tenga en cuenta que * no coincidirá con los archivos ocultos (nombres que comienzan con un punto). Entonces, puede tener más sentido usarlo. (para el directorio actual). - aarón adams

Esta es la respuesta correcta. En mi caso, quería configurar todos los directorios en 775 y todos los archivos a 664. La excelente respuesta de @ Pete me llevó al chmod docs, donde descubrí que podría usar chmod -R g+wX .. ¡Bravo! - chadoh

Esto no eliminará x en archivos si ya lo tienen. - benoit duffez

En caso de que no esté del todo claro, la X mayúscula significa "hacer que todos los directorios sean ejecutables" (pero no archivos). - matt browne

@BenoitDuffez si su objetivo es eliminar también el bit ejecutable de los archivos, puede combinar directivas, como "a-x + rX" para eliminar "x" de todo y luego configurar "r" para todo y "x" solo para directorios . - monjas

Puedes usar el -R con chmod para el recorrido recursivo de todos los archivos y subcarpetas.

Es posible que necesite sudo, ya que depende de LAMPARA siendo instalado por el usuario actual u otro:

sudo chmod -R 755 /opt/lampp/htdocs

respondido 17 mar '20, 06:03

De algun modo, sudo chmod 755 -R /directory no funcionó pero sudo chmod -R 755 /directory hizo. Extraño. Por cierto, estoy usando Mac os x. - Lomse

Esto es correcto en mi experiencia. La bandera debe aparecer directamente después de chmod, no en ninguna parte de la cadena. - Orionrush

El comando escrito arriba es incorrecto. El comando recursivo correcto es: sudo chmod -R 755 / opt / lampp / htdocs Nota: -R debe ser anterior a 755 - Sandip Patel - SM

debe editarse, no funciona en mac osx sin una sintaxis pedante. - Tipo anónimo

OSX USSING: sudo chmod 777 logs / -R GETTING: chmod: -R: Ningún archivo o directorio DEBE SER: sudo chmod -R 777 logs / - elad plata

El comando recursivo correcto es:

sudo chmod -R 755 /opt/lampp/htdocs

-R: cambia todas las subcarpetas, incluida la carpeta actual

Respondido el 20 de enero de 20 a las 22:01

Hola, ¿estás seguro de la carpeta actual? ¿Eres uno a pesar de la ruta? - Shareef

OSX USANDO: sudo chmod 777 logs / -R GETTING: chmod: -R: Ningún archivo o directorio DEBE SER: sudo chmod -R 777 logs / - elad plata

Para establecer todas las subcarpetas (recursivamente) use -R

chmod 755 /folder -R

Y use umask para establecer el valor predeterminado en nuevas carpetas / archivos cd / carpeta umask 755

Respondido el 18 de Septiembre de 10 a las 03:09

NO configure su umask en 755! ¡No podrá enumerar, leer ni utilizar ningún archivo o directorio que cree! - somnoliento

esto establece todo en 755, incluidos los archivos.! - Patricio Mutwiri

@sleepynate ¿De qué diablos estás hablando? 755 significa que el propietario puede leer, escribir y ejecutar, y todos los demás usuarios pueden leer y ejecutar, pero no escribir en el objeto. svin83

@NicHartley @ svin83 umask son los bits que se enmascararán de los permisos, por lo que es efectivamente el inverso de chmod. λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w - somnoliento

chmod 755 -R /opt/lampp/htdocs establecerá recursivamente los permisos. No hay forma de configurar los permisos para los archivos automáticamente solo en este directorio que se crean después de configurar los permisos, pero puede cambiar los permisos de archivo predeterminados de todo el sistema con la configuración umask 022.

Respondido el 18 de Septiembre de 10 a las 03:09

La respuesta de sleepynate es la ÚNICA correcta. El cartel hizo dos preguntas: 1) ¿Cómo puedo arreglar los permisos en archivos y carpetas, y 2) cómo cambio los valores predeterminados (es decir, archivos "futuros"). Como dijo Nate, el primero es con "chmod" y el segundo es con "umask". También agregaría que NO HAY MANERA de cambiar umask en solo 1 directorio ... umask es "todo o nada" por usuario. Sin embargo, nada le impide crear un nuevo usuario, que comparte grupos con usted, para que pueda simplemente 'sudo -u someuser [crear archivo] ". Eso es pensar un poco fuera de la caja, pero es una buena solución. - scott prive

Creo que tienes razón, pero no puedes inherit ¿Será una solución para muchos casos o funcionará exclusivamente con NTFS-3G? - Sebastián Schlicht

sin dar permiso a las carpetas se pueden crear en el futuro, es posible que no se pueda copiar una carpeta, digamos myforlder desde otros lugares (como una PC) a este directorio de destino (en un servidor) porque intentará crear una nueva carpeta en el directorio de destino con el nombre myfolder que no tiene permiso para hacerlo. Como yo tengo root, Solo uso chown -R username:usergroup /directory. - Gol de Jasón

Es posible que desee considerar esta respuesta dada por nik en superusuario y use "un chmod" para todos los archivos / carpetas como este:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

respondido 20 mar '17, 10:03

Advertencia, es fácil encontrarse con los límites de la línea de comandos. - Lothar

Tengo este error: -bash: / bin / chmod: lista de argumentos demasiado larga - Oleg Abrazhev

Sería mejor usar el -exec opción de find con el fin de superar el Argument list too long error. - Miravalles

De acuerdo con @miravalls - find. -tipo d -exec chmod 755 {} \; && buscar. -tipo f -exec chmod 644 {} \; - Vagif

Aquí hay otra forma de establecer directorios en 775 y archivos en 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Puede parecer largo, pero es genial por tres razones:

  1. Analiza el sistema de archivos solo una vez en lugar de dos.
  2. Proporciona un mejor control sobre cómo archivos se manejan vs. cómo directorios son manejados. Esto es útil cuando se trabaja con modos especiales tales como el poco pegajoso, que probablemente desee aplicar a directorios pero no a archivos.
  3. Utiliza una técnica directamente man páginas (ver más abajo).

Tenga en cuenta que no he confirmado la diferencia de rendimiento (si existe) entre esta solución y la de simplemente usar dos comandos de búsqueda (como en la solución de Peter Mortensen). Sin embargo, es alentador ver un ejemplo similar en el manual.

Ejemplo de man find página:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and direct‐
tories into /root/suid.txt and large files into /root/big.txt.

¡Salud

Respondido 07 Feb 21, 07:02

Ahora, ¿cómo convertir eso en un script de shell para que podamos ejecutar openmod $ folder? - StR

Gente, use xargs. Guarda miles de invocaciones de procesos. - seanahern

{} + puede hacer lo mismo con find que xargs hace en general. - Amit Naidu

Uso:

sudo chmod 755 -R /whatever/your/directory/is

Sin embargo, ten cuidado con eso. Realmente puede perjudicarle si cambia los permisos de los archivos / carpetas incorrectos.

Respondido el 25 de Septiembre de 13 a las 03:09

chmod -R 755 directory_name funciona, pero ¿cómo conservaría también los archivos nuevos en 755? Los permisos del archivo se convierten en el permiso predeterminado.

Respondido 22 ago 17, 13:08

Lo hice pero no puedo abrir la terminal desde allí. No puedo arreglarlo. - Kavindu Gayantha

Para Mac OS X 10.7 (Lion), es:

chmod -R 755 /directory

Y sí, como dicen todos los demás, tenga cuidado al hacer esto.

Respondido el 25 de Septiembre de 13 a las 03:09

Desea asegurarse de que los archivos y directorios apropiados sean chmod-ed / los permisos sean apropiados. Para todos los directorios que desee

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

Y para todas las imágenes, JavaScript, CSS, HTML ... bueno, no deberías ejecutarlas. Así que usa

chmod 644 img/* js/* html/*

Pero para todo el código lógico (por ejemplo, el código PHP), debe establecer permisos de manera que el usuario no pueda ver ese código:

chmod 600 file

Respondido el 22 de junio de 14 a las 23:06

Creo que Adam estaba preguntando cómo cambiar el valor de umask para todos los procesos que están vinculados a operar /opt/lampp/htdocs directorio.

La máscara del modo de creación de archivos de usuario (umask) se utiliza para determinar el permiso de archivo para los archivos recién creados. Se puede utilizar para controlar el permiso de archivo predeterminado para archivos nuevos.

así que si va a utilizar algún tipo de programa ftp para cargar archivos en /opt/lampp/htdocs necesita configurar su servidor ftp para usar umask que desee.

Si los archivos / directorios los crea, por ejemplo, php, debe modificar el código php

<?php
umask(0022);
// other code
?>

si va a crear nuevos archivos / carpetas desde su sesión de bash, puede establecer el valor de umask en su perfil de shell ~ / .bashrc O puede configurar umask en /etc/bashrc or /etc/profile archivo para todos los usuarios. agregue lo siguiente al archivo: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Y para cambiar los permisos de archivos ya creados, puede usar find. Espero que esto ayude.

Respondido el 21 de diciembre de 15 a las 09:12

Hay dos respuestas para buscar archivos y aplicar chmod a ellos. El primero es find el archivo y aplicar chmod como encuentra (como lo sugiere @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

La segunda solución es generar una lista de todos los archivos con find comando y proporcione esta lista al chmod comando (como lo sugiere @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Ambas versiones funcionan bien siempre que el número de archivos devueltos por el find El comando es pequeño. La segunda solución se ve muy bien a la vista y es más legible que la primera. Si hay una gran cantidad de archivos, la segunda solución devuelve un error: Argument list too long.

Entonces mi sugerencia es

  1. Utiliza chmod -R 755 /opt/lampp/htdocs si desea cambiar los permisos de todos los archivos y directorios a la vez.
  2. Utiliza find /opt/lampp/htdocs -type d -exec chmod 755 {} \; si la cantidad de archivos que está utilizando es muy grande. La -type x La opción busca solo un tipo específico de archivo, donde d se usa para buscar el directorio, f para el archivo yl para el enlace.
  3. Utiliza chmod 755 $(find /path/to/base/dir -type d) de otra manera
  4. Es mejor usar el primero en cualquier situación.

Respondido 21 Oct 13, 20:10

Para cualquiera que todavía tenga problemas con los permisos, suba un nivel de directorio cd .. desde el directorio raíz de su proyecto, luego agréguese usted mismo (usuario) al directorio y dé permiso para editar todo lo que contiene (probado en Mac OS).

Para hacer eso, ejecutaría este comando (preferido):

sudo chown -R username: foldername .*

Nota: para los cambios no guardados actualmente, es posible que primero deba reiniciar el editor de código para poder guardar sin que se le solicite una contraseña.

Además, recuerde que puede presionar tab para ver las opciones mientras escribe el nombre de usuario y la carpeta para que sea más fácil para usted.


o simplemente:

sudo chmod -R 755 foldername

pero como se mencionó anteriormente, debe tener cuidado con el segundo método.

Respondido el 03 de enero de 21 a las 18:01

Es muy sencillo.

En Terminal, vaya al administrador de archivos. ejemplo: sudo nemo. Ir /opt/ Luego haga clic Propiedades → Permiso. y entonces Otros. Por último, cambia a crear y eliminar y acceso a archivos para leer y escribir y hacer clic en el botón aplicar ... Y funciona.

Respondido el 16 de junio de 14 a las 10:06

¿Qué es sudo nemo? - Vikranth Inti

nemo es el administrador de archivos gráficos de Cinnamon. Puede que esté instalado o no y requiere que ejecute un entorno gráfico. - Brice M. Dempsey

Puede cambiar el permiso usando los siguientes comandos

sudo chmod go=rwx /opt/lampp/htdocs

Respondido 12 Oct 20, 16:10

Para ya creado archivos:

find . \( -type f -exec chmod g=r,o=r {} \; \) , \( -type d -exec chmod g=rx,o=rx {} \; \)

Para futuro creado archivos:

sudo nano /etc/profile

Y establecer:

umask 022

Los modos comunes son:

  • 077: u = rw, g =, o =
  • 007: u = rw, g = rw, o =
  • 022: u = rw, g = r, o = r
  • 002: u = rw, g = rw, o = r

respondido 10 nov., 20:20

sudo chmod -R a=-x,u=rwX,g=,o= folder

propietario rw, otros sin acceso, directorio con rwx. Esto borrará las x existentes en los archivos

simbólico chmod calc se explica aquí https://chmodcommand.com/chmod-744/

Respondido el 31 de enero de 21 a las 06:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.