Mi instalación de Cygwin se comporta de forma extraña: chmod
no funciona.
[09:45 Administrator@DellIns14 ~] > ls -ls /usr/bin/chmod
64K -rwxr-xr-x 1 Administrator None 38K Feb 6 2012 /usr/bin/chmod
[09:47 Administrator@DellIns14 ~] > rm /tmp/example.sh
rm: remove regular empty file `/tmp/example.sh'? y
[09:48 Administrator@DellIns14 ~] > touch /tmp/example.sh
[09:48 Administrator@DellIns14 ~] > ls -ls /tmp/example.sh
0 -rw-r--r-- 1 Administrator None 0 Jul 8 09:48 /tmp/example.sh
[09:48 Administrator@DellIns14 ~] > chmod -v +x /tmp/example.sh
mode of `/tmp/example.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
[09:48 Administrator@DellIns14 ~] > ls -ls /tmp/example.sh
0 -rw-r--r-- 1 Administrator None 0 Jul 8 09:48 /tmp/example.sh
[09:48 Administrator@DellIns14 ~] >
Tenga en cuenta que se puede escribir en el directorio a medida que se crea el archivo.
Cuando miro este directorio desde unventanasperspectiva, se reporta comosolo lectura(incluso después de cambiarlo a lectura-escritura, vuelve a solo lectura).
Las capturas de pantalla están en/tmp de cygwin es de solo lectura en Windows y no se puede cambiar a lectura-escritura
¿Puede sugerir cómo depurar/resolver?
Entorno:
Windows 7, Cygwin 1.7.29(0.272/5/3) i686
Respuesta1
Felicitaciones a esta respuestahttps://stackoverflow.com/questions/25730041/updating-file-permissions-with-git-bash-on-windows-7contenido pegado a continuación
Probablemente esté utilizando NTFS o FAT32 en Windows y esos sistemas de archivos no son compatibles con elejecutablepermiso. En cambio,cygwin mira el nombre del archivo y su contenido para determinar si es ejecutable:
Los archivos se consideran ejecutables si el nombre del archivo termina en .bat, .com o .exe, o si su contenido comienza con #!.
Por lo tanto, debes asegurarte de que el archivo bash comience con un shebang. Luego, debería poder simplemente ejecutar el archivo, sin tener en cuenta el permiso de salida de ls
.
Respuesta2
encontréEsta respuestaútil.
Además de los permisos POSIX normales que controlan el propietario, el grupo y otros accesos, el permiso de archivo en Cygwin también puede verse afectado por la ACL de Windows.
En tu caso, intenta
ls -l /tmp/example.sh
getfacl /tmp/example.sh
setfacl -b /tmp/example.sh
ls -l /tmp/example.sh
chmod -v +x /tmp/example.sh
ls -l /tmp/example.sh
Respuesta3
No pude hacer chmod hasta que descubrí que /etc/fstab contenía:
none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
pero necesitaba ser:
none /cygdrive cygdrive binary,posix=0,user 0 0
Después de cerrar todos los procesos abiertos de Cygwin y reiniciar, todo funcionó.
Respuesta4
Chmod no funciona (silenciosamente) en mi computadora si las rutas están en formato Windows. Con rutas "cygdrive" funciona. Aquí está el ejemplo:
D:\>mkdir D:\test
D:\>touch D:\test\qwe
D:\>ls -l D:\test\qwe
-rw-r--r-- 1 cat None 0 Sep 16 10:40 'D:\test\qwe'
D:\>cacls D:\test\qwe
D:\test\qwe Все:(ID)F
D:\>chmod 600 D:\test\qwe
D:\>ls -l D:\test\qwe
-rw-r--r-- 1 cat None 0 Sep 16 10:40 'D:\test\qwe'
D:\>cacls D:\test\qwe
D:\test\qwe Все:(ID)F
D:\>chmod 600 /cygdrive/D/test/qwe
D:\>ls -l D:\test\qwe
-rw-r--r-- 1 cat None 0 Sep 16 10:40 'D:\test\qwe'
D:\>cacls D:\test\qwe
D:\test\qwe CAT\cat:(специальный доступ:)
STANDARD_RIGHTS_ALL
DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
SYNCHRONIZE
STANDARD_RIGHTS_REQUIRED
FILE_GENERIC_READ
FILE_GENERIC_WRITE
FILE_READ_DATA
FILE_WRITE_DATA
FILE_APPEND_DATA
FILE_READ_EA
FILE_WRITE_EA
FILE_READ_ATTRIBUTES
FILE_WRITE_ATTRIBUTES
CAT\None:(специальный доступ:)
READ_CONTROL
SYNCHRONIZE
FILE_READ_ATTRIBUTES
Все:(специальный доступ:)
READ_CONTROL
SYNCHRONIZE
FILE_READ_ATTRIBUTES
También hay una rareza en el ls -l
comportamiento. Windows nativo cacls
confirma que el segundo chmod 600
fue exitoso, pero ls -l
dice -rw-r--r--
incluso después.
Así que he usado la "función" cmd para convertir rutas de Windows en rutas de cygdrive:
call :chmod "D:\test\qwe"
rem ...
goto :eof
:chmod
set "STMP=%~dp1"
set "STMP=%STMP:\=/%"
set "STMP=%STMP::=%"
set "STMP=/cygdrive/%STMP%%~nx1"
chmod 600 "%STMP%"
set "STMP="
goto :eof
Mi configuración: Windows 7, cygwin x64 actualizado en septiembre de 2020, NTFS.