2011-04-29 9 views
52

Tengo una carpeta/cygwin/d/myfolder/ Y cada vez que guardo archivos allí, de cygwin si hago una ls -la veo que los archivos tienen permiso 000. Eso realmente causa Tengo un problema bastante grande ya que sincronizo esta carpeta con mi servidor y no se puede acceder a ninguno de los archivos. ¿Cómo puedo obtener los archivos para obtener automáticamente un permiso razonable?cygwin establece permiso de archivo para 000

+0

Estos errores se pueden solucionar estableciendo los atributos de seguridad correctos en Windows. Haga clic derecho en la carpeta -> seleccione Propiedades -> seleccione la pestaña de seguridad. Ahora arregla cualquier configuración incorrecta. También verifique la opción "Avanzado". Intenta con "Habilitar herencia" y reemplaza los permisos de objetos secundarios con la configuración de la carpeta actual. –

Respuesta

105

tener una lectura a través de las respuestas a este enlace: http://cygwin.1069669.n5.nabble.com/vim-and-file-permissions-on-Windows-7-td61390.html

La solución no funcionó para mí también:

Editar /etc/fstab y añadir esta línea al final del archivo:

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0 

A continuación, cierre todos los procesos de Cygwin, abra un nuevo terminal y ls -l en sus archivos nuevamente.

Explicación: De forma predeterminada, Cygwin utiliza las listas de control de acceso (ACL) del sistema de archivos para implementar permisos POSIX reales. Algunos programas o procesos nativos de Windows pueden crear o modificar las ACL de modo que Cygwin calcule los permisos POSIX como 000. Con la opción de montaje noacl, Cygwin ignora las ACL del sistema de archivos y solo falsifica un subconjunto de bits de permiso basándose en el atributo de solo lectura de DOS.

+9

Quiero +10 esto. He estado trabajando alrededor de este problema por años. ¡Gracias! – Eloff

+2

La gran respuesta funciona perfectamente – gabuzo

+2

muchas gracias, funciona como un amuleto –

5

Asegúrate de que tu umask esté configurada correctamente con el comando umask. Si su umask es decir 0777 que resta de los permisos de archivos nuevos y terminará con 000 permisos. Probablemente hay muchas otras posibilidades para considerar más allá de eso.

Si su id no está configurado correctamente en/etc/passwd y/etc/group que también puede causar que ls muestre resultados inesperados. Verifica los permisos de la carpeta. También verifique los permisos de Windows con el comando getfacl. Tal vez también verifique el comando de montaje.

+3

'getfacl .' es lo que estaba buscando. –

0

En mis archivos de PC Win7 eran por lo general ---------- + 1 David Ninguno 69120 17 de Jun 13:17 mydoc.txt

he intentado todo lo anterior sin suerte Resultó Todavía tenía algunas entradas históricas de montaje en mi .zshrc ¡Las borré y el problema de Bob's your Uncle desapareció!

1

En respuesta anterior, se propuso una solución:

Editar/etc/fstab y añadir esta línea al final del archivo:

ninguno/cygdrive binaria cygdrive, noacl, POSIX = 0, usuario 0 0

Y en esa respuesta había este comentario:

cuando intento esto, todos mis archivos son -rw-r - r-- no importa qué chmod() yo haga. No puedo marcar los archivos como ejecutables; sólo se revierte a 0644. (== umask 0022)

que tenía este mismo problema, pero se manifiesta en la incapacidad para ejecutar archivos por lotes de DOS (* .bat) cuando se ejecuta ksh Cygwin o mksh.Me encontré con este sitio web: http://pipeline.lbl.gov/code/3rd_party/licenses.win/cygwin-doc-1.4/html/faq/ que contiene este útil consejo:

Tenga en cuenta que se puede utilizar para obligar a montar -x Cygwin para tratar todos los archivos bajo el punto de montaje como ejecutables. Esto se puede usar para archivos individuales y directorios. Entonces Cygwin no se molestará en leer archivos para determinar si son ejecutables.

Entonces referencias cruzadas con esta página - https://cygwin.com/cygwin-ug-net/using.html#mount-table - con su consejo:

cygexec - Tratar a todos los archivos por debajo del punto de montaje como ejecutables cygwin.

Añadí cygexec al cuarto campo de mi fstab. Esto lo hizo. Mi .bat ahora es ejecutable dentro de ksh/mksh, lo que es necesario ya que estoy ejecutando un trabajo de Jenkins que llama a una pila de shell Korn 3 archivos de profundidad, que no tengo control modificable. ¡Solo necesitaba el .bat para correr!

Actualización: la solución anterior no era exactamente lo que necesitaba, en posteriores pruebas. Resultó que algunos ejecutables, como javac y cl, se comportan de forma extraña (las utilidades imprimirían su uso y saldrían). Creo que lo que necesitaba en lugar de 'cygexec' era solo 'ejecutivo'. Como la misma nota de la página:

exec - Trate todos los archivos por debajo del punto de montaje como ejecutables.

Cuestiones relacionadas