Me acabo de dar cuenta de que después de correr
chmod 777 *
en un directorio que tiene subdirectorios hace lo que cabría esperar. Establece los permisos de todo, incluidos los subdirectorios, en 777. Sin embargo, si luego decide que no desea hacer eso y ejecuta
chmod 644 *
Ahora el contenido de los subdirectorios obtiene permisos desconocidos y no puede volver a cambiarlos.
¿Por qué sucede eso? ¿Es este el comportamiento esperado o un error? ¿Hay alguna manera de restaurar los permisos del archivo?
Como los archivos que tenía estaban en un archivo zip en otra ubicación, simplemente eliminé todo el directorio y descomprimí el archivo zip nuevamente, pero me gustaría saber las causas de este "problema" y sus soluciones.
Alguna información adicional. Estoy ejecutando esos comandos en una máquina remota a través de SSH.
Respuesta1
Probablemente sea mejor utilizar find para este tipo de cosas.
Los directorios deben tener acceso x, los archivos no, por lo que hay diferentes conjuntos de permisos.
# Files
find . -type f -exec chmod 644 '{}' \;
# Directories
find . -type d -exec chmod 755 '{}' \;
Respuesta2
La forma en que se interpretan los bits de permiso difiere para archivos y directorios. Lea info coreutils 'File permissions'
y man 2 chmod
para más detalles. ¿Por qué querríamos que todo fuera legible, escribible y ejecutable para el propietario, el grupo y el mundo?
Dado que la evidencia desapareció, solo puedo suponer que después de su chmod
, perdió el acceso de escritura al .
directorio actual. Esto se puede solucionar mediante:
chmod u+w $PWD
Luego, puede cambiar el modo (permisos) de los archivos en$PWD
Al hacer el chmod 644 *
, también eliminaste elejecutarpermiso de cualquiera de los archivos que lo tenían, por lo que ya no son ejecutables por ningún propietario, grupo o mundo.
Respuesta3
Cuando desee establecer permisos para directorios y subdirectorios, debe usar:
chmod -R
-R, --recursive cambia archivos y directorios de forma recursiva
Respuesta4
Encontré la solución al problema que tenía.
En primer lugar, gracias a todos los que publicaron, sus respuestas fueron realmente útiles.
El problema es que asignar el permiso 664 a todos los archivos en el directorio actual:
chmod 644 *
elimina los permisos de ejecución en los directorios, que necesitan permisos de ejecución para funcionar correctamente. La solución es bastante simple. Sólo necesitamos cambiar los permisos para los directorios de esta manera:
chmod 744 dir_name
Donde dir_name es, por supuesto, el nombre de nuestro directorio. Una vez que hagamos eso, todo volverá a la normalidad.