«Отказано в доступе» с использованием Cygwin в Windows - PullRequest
13 голосов
/ 18 декабря 2010

Справочная информация: Я пытаюсь написать файл [.bat], чтобы дважды щелкнуть по нему, и будет запущен скрипт bash. Скрипт bash запустит несколько приложений с графическим интерфейсом Windows для мониторинга температуры графического процессора / процессора. Я только что сделал свежую установку Cygwin v1.7.7-1 (скачано сегодня) и Windows 7.

Код: монитор-temps.bat:

C:\cygwin\bin\bash.exe ~/bin/monitor-temps.bash
pause

Код: монитор-temps.bash:

#!/usr/bin/bash
"/cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe" &

Выход: После того, как я дважды щелкну по файлу [.bat], я получу:

C:\Users\michael\Desktop>C:\cygwin\bin\bash.exe ~/bin/monitor-temps.bash

C:\Users\michael\Desktop>pause
Press any key to continue . . . /home/michael/bin/monitor-temps.bash: line 2: /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe: Permission denied

Я все еще получаю ту же ошибку прав доступа, когда перехожу в каталог и вручную запускаю приложение.

Разрешения: Из моего опыта с проблемами разрешений в Linux все выглядит хорошо, потому что я пользователь, которым я себя считаю, и файл имеет ожидаемые разрешения:

$ whoami
michael

$ ls -l GPU*
-rwx------+ 1 michael        None 890720 2010-12-01 19:23 GPU-Z.0.4.8.exe

Вопрос: Кто-нибудь знает, как это исправить? Я что-то упустил?

Ответы [ 8 ]

15 голосов
/ 23 января 2015

Как разработчик, я использую ярлык для обеспечения интерфейса командной строки (CLI), который ведет себя подобно Linux в моей среде Windows, и столкнулся с той же проблемой, пытаясь распаковать файл.

Исправление состояло в том, чтобы установить ярлык «Запуск от имени администратора».

Если вы используете этот метод для доступа к среде Cygwin, перейдите в свойства ярлыка, нажмите кнопку «Дополнительно», чтобы получить параметры для «Запуск от имени администратора ", установите флажок, нажмите ОК.И пошли!Вы также можете установить для этого свой командный файл, сделав для него ярлык и выполнив вышеуказанное.

Надеюсь, это поможет!

11 голосов
/ 07 июня 2013

Я думаю, что вы должны изменить каталог или разрешение файла.Если вы хотите изменить разрешение для файла или каталога, вам нужно добавить полный путь с кодом.

Как будто вы хотите изменить разрешение для папки cocos2d-x в C: \ yourDirectory (я нахожусь наWindows; на Mac это будет / вместо \), напишите код на консоли Cygwin:

chmod -R 775 /cygwindrive/c/yourDirectory
7 голосов
/ 03 марта 2017
  • Проверьте таблицу монтирования с помощью cat /proc/mounts или mount и убедитесь, что каждая точка монтирования из /, /usr/bin, /usr/lib имеет флаг noacl.Если он отсутствует, исправьте /etc/fstab и перезагрузите компьютер.(Перезагрузка синхронизировала для меня флаг noacl корневой точки монтирования, и я не знаю, можно ли этого добиться без перезагрузки).

  • Проверьте наличие записи NULL SID и других странных записей в выходных данных icacls для файла.Они появляются добавленными при записи слоем перевода POSIX ACL в Cygwin (использование «noacl» в / etc / fstab позволяет отключить это, но повреждение уже будет сделано).

    Сброса Windows ACL только для файла может быть недостаточно, если у родителей, содержащихся в нем, была запись NULL SID.Нужно запустить

    icacls c:\cygwin64 /reset /t /l /c
    

    из командной строки, чтобы удалить посторонние записи из ACL Windows в каждом файле и каталоге.

Обновление Другие команды сбрасывают владельца, удаляют списки ACL по умолчанию и показывают списки ACL известного двоичного файла до и после изменений:

set croot=c:\cygwin64
icacls %croot%\bin\ls.exe
%croot%\bin\getfacl /bin/ls
takeown /F %croot% /R /D Y > nul
icacls %croot% /reset /T /C /L /Q
icacls %croot%\bin\ls.exe

%croot%\bin\getfacl /bin/setfacl
%croot%\bin\getfacl /bin/find
%croot%\bin\setfacl -bk /bin/find
%croot%\bin\find -P / -xdev -exec /bin/setfacl -bk "{}" +

icacls %croot%\bin\ls.exe
%croot%\bin\getfacl /bin/ls
6 голосов
/ 18 декабря 2010

Самый простой способ исправить это:

  1. Скачать Sysinternals ProcMon , запустить его и дать ему поработать некоторое время.
  2. Исключить все процессы, которыегенерировать шум.
  3. Когда журнал становится менее занятым, запустите попытку доступа к файлу.
  4. Найдите в журнале ProcMon сообщения «Отказано в доступе».
  5. Исследуйте.Должно быть легко исправить.
5 голосов
/ 20 декабря 2010

-rwx ------ + может быть проблемой. Некоторые скрытые acl могут запретить x для вас. Сбросьте ваш acl с помощью setfacl затем.

$ cat >/tmp/faclx <<EOF
user::rwx
group::r--
mask:rwx
other:r--
EOF
$ setfacl -f /tmp/faclx /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe

Или вам нужны повышенные права:

$ cygstart  --action=runas /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe
1 голос
/ 24 июля 2015

У меня была эта проблема, и я исправил ее с помощью cd в каталоге, в котором находится только что созданный ящик (упакованный или переупакованный).Тогда vagrant box add <file.box> --name <name>.Я думаю, что PATH'ы все испортили, и это привело к провалу.Затем проверьте еще раз с vagrant box list.Тогда я mkdir coolbox; cd coolbox.Тогда я просто vagrant init <name>, и все приходит как по волшебству.

0 голосов
/ 21 ноября 2018

git bash, выполните команду следующим образом: cmd "/C postgresql-10.5-2-windows-x64.exe --unattendedmodeui minimal --mode unattended --servicename 'postgreSQL'"

0 голосов
/ 01 сентября 2015

просто измените режим скриптов с помощью команды chmod, чтобы сделать его исполняемым.смотрите man chmod для более подробной информации.

...