¿Cómo cambiar los permisos de una carpeta y sus subcarpetas / archivos en un solo paso?
Frecuentes
Visto 4,377 veces
1962
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?
20 Respuestas
3174
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
811
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
415
Si desea establecer permisos en todos los archivos para a+r
y 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
160
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
83
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
80
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
58
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
31
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
Relacionado: Cambie todos los permisos de carpeta con un comando en U & L. - G-Man dice 'Reincorporar a Monica'
De acuerdo con @miravalls - find. -tipo d -exec chmod 755 {} \; && buscar. -tipo f -exec chmod 644 {} \; - Vagif
22
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:
- Analiza el sistema de archivos solo una vez en lugar de dos.
- 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.
- 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
21
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
14
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
12
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
10
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
8
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
6
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
- Utiliza
chmod -R 755 /opt/lampp/htdocs
si desea cambiar los permisos de todos los archivos y directorios a la vez. - 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. - Utiliza
chmod 755 $(find /path/to/base/dir -type d)
de otra manera - Es mejor usar el primero en cualquier situación.
Respondido 21 Oct 13, 20:10
3
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
2
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
1
Puede cambiar el permiso usando los siguientes comandos
sudo chmod go=rwx /opt/lampp/htdocs
Respondido 12 Oct 20, 16:10
0
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
-1
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 linux permissions directory chmod or haz tu propia pregunta.
¿Tenías la intención de escribir?
chmod 75 /opt/lampp/htdocs
¿O debería ser eso realmente?chmod 755 /opt/lampp/htdocs
? - HelloGoodbyeEl 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? - Arthur Dent
@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
@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? - Arthur Dent
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. - timelmer