cygwins chmod verhält sich wie funktionierend, funktioniert aber nicht

cygwins chmod verhält sich wie funktionierend, funktioniert aber nicht

Meine Cygwin-Installation verhält sich seltsam: chmodfunktioniert nicht.

[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 ~] >

Beachten Sie, dass das Verzeichnis beschreibbar ist, sobald die Datei erstellt wurde.

Wenn ich mir dieses Verzeichnis von einemFensterPerspektive wird berichtet,schreibgeschützt(selbst nachdem ich es auf Lesen/Schreiben umgestellt habe, wird es wieder auf schreibgeschützt zurückgesetzt).
Bildschirmaufnahmen sind beiCygwins /tmp ist in Windows schreibgeschützt und kann nicht in Lese-/Schreibzugriff geändert werden.

Können Sie Vorschläge zur Fehlerbehebung/Lösung machen?


Umgebung:
Windows 7, Cygwin 1.7.29(0.272/5/3) i686

Antwort1

Ein großes Lob für diese Antworthttps://stackoverflow.com/questions/25730041/updating-file-permissions-with-git-bash-on-windows-7Inhalt unten eingefügt


Sie verwenden wahrscheinlich NTFS oder FAT32 unter Windows und diese Dateisysteme unterstützen nicht dieausführbarErlaubnis. Stattdessencygwin prüft den Dateinamen und den Inhalt, um festzustellen, ob die Datei ausführbar ist:

Dateien gelten als ausführbar, wenn ihr Dateiname mit .bat, .com oder .exe endet oder ihr Inhalt mit #! beginnt.

Stellen Sie daher sicher, dass die Bash-Datei mit einem Shebang beginnt. Anschließend sollten Sie die Datei ausführen können, ohne die Berechtigungsausgabe von zu beachten ls.

Antwort2

ich fandDiese Antworthilfreich.

Neben normalen POSIX-Berechtigungen, die Besitzer, Gruppen und andere Zugriffe steuern, können die Dateiberechtigungen in Cygwin auch durch die Windows-ACL beeinflusst werden.

Versuchen Sie in Ihrem Fall bitte

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

Antwort3

Ich konnte keinen Chmod-Befehl ausführen, bis ich feststellte, dass /etc/fstab Folgendes enthielt:

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

aber musste sein:

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

Nach dem Schließen aller offenen Cygwin-Prozesse und einem Neustart funktionierte alles.

Antwort4

Chmod funktioniert auf meinem Computer nicht (im Hintergrund), wenn die Pfade im Windows-Format vorliegen. Mit "cygdrive"-Pfaden funktioniert es. Hier ist das Beispiel:

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

Außerdem gibt es eine Merkwürdigkeit im ls -lVerhalten. Das native Windows caclsbestätigt, dass der zweite chmod 600erfolgreich war, ls -lsagt aber -rw-r--r--auch danach noch etwas.

Daher habe ich die cmd-„Funktion“ verwendet, um Windows-Pfade in Cygdrive-Pfade umzuwandeln:

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

Meine Konfiguration: Windows 7, Cygwin x64, aktualisiert im September 2020, NTFS.

verwandte Informationen