Chmod no funciona como se esperaba

Chmod no funciona como se esperaba

Cuando estoy a punto de cambiar el permiso de mi archivo de esta manera

 $ sudo chmod a+x *.* 

Este error aparece

 chmod: cannot access ‘*.*’: No such file or directory

Y cuando quiero cambiar el permiso de cada archivo en un directorio con

 $ sudo chmod a+x directory/* 

Aparece el mismo error

 chmod: cannot access ‘directory/*’: No such file or directory

Cuando intento el mismo comando en otro directorio, funciona, pero en este directorio /var/www/html no funciona, pero incluso cuando cambio el permiso archivo por archivo a a+x cuando ejecuto

 ls

Aparece un error de permiso

 ls: cannot open directory .: Permission denied

Respuesta1

La extensión del archivo en Linux no es nada especial, es sólo una parte del nombre del archivo. El archivo global del shell usa *para todos los caracteres, por lo que puede usarlo chmod a+x *en lugar de.

Respuesta2

El lsproblema parece que es posible que no tenga suficientes privilegios en el directorio. Comohttps://stackoverflow.com/a/15800917/3501748estados: los directorios necesitan el conjunto de permisos de ejecución para poder ver su contenido.

cdretroceda un nivel y vea cuáles son los permisos en el directorio del que acaba de venir. sudono le otorga ningún derecho para acceder a una carpeta si root no tiene ningún derecho sobre esa carpeta. Quizás sudo -u <username>podría ayudar.

Si necesita recurrir al árbol de directorios debajo de su punto de partida, utilice chmod -R.

Respuesta3

Primero, me gustaría reconocer las respuestas existentes:

  • Como dice UweBurger, se usa *un comodín general en Ubuntu (o, creo, Unix en general). (¿Es posible que directoryen su ejemplo esté vacío, lo que provoca el error chmod: cannot access ‘directory/*’: No such file or directory?)
  • Como sugirió Northern-bradley, se puede usar la Rbandera chmodpara hacer que atraviese el árbol de forma recursiva, cambiando los permisos de todo lo que se encuentre bajo su punto actual. Es decir, use chmod -R directory, o si carece de privilegios sudo chmod -R directory(sin embargo, asegúrese de no cambiar inadvertidamente los permisos en los archivos del sistema cuando usesudoachmod; su propio usuario simplemente carece de privilegios para hacerlo, lo que hace que la primera variante sea más segura).

Sin embargo, me gustaría agregar que es posible que no desee cambiar los permisos de los directorios de la misma manera que lo hace con los archivos. Como se explica en eldocumentación oficial, el rpermiso de lectura ( ) para directorios significa poder ver su contenido (como usar ls), el wpermiso de escritura ( ) permite al usuario crear/eliminar archivos en él y el xpermiso de ejecución ( ) hacia cdel interior. Hay una gran respuestaaquísugiriendo un método para distinguir entre archivos y directorios al aplicar nuevos permisos de forma recursiva. La variante que usa xargsessupuestamente más rápido. Es posible que desees agregar el rindicador to xargspara evitar un error en caso de que findno devuelva nada, y si necesitas rootprivilegios, debes usarlos sudopara ambas mitades de la tubería (nuevamente, ten cuidado al chmodejecutar as root), por lo que sería:

sudo buscar [ruta/a/dir] -tipo d -print0 | sudo xargs -0r chmod [permisos-dir-deseados]

sudo buscar [ruta/a/dir] -tipo f -print0 | sudo xargs -0r chmod [permisos-de-archivo-deseado]

donde [desired-*-permissions]se puede darexplícitamente( 777) ousando letras(como a+x).

información relacionada