在Windows中使用cygwin“权限被拒绝”

时间:2010-12-18 19:09:10

标签: windows-7 cygwin file-permissions

背景 的 我正在尝试编写[.bat]文件,以便我可以双击它,并调用bash脚本。 bash脚本将启动一些Windows GUI应用程序来监控GPU / CPU温度。我刚刚安装了新的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

当我cd到目录并手动执行应用程序时,我仍然得到相同的权限错误。

权限: 的 根据我在Linux中的权限问题的经验,一切看起来都很好,因为我是我认为的用户,并且该文件具有预期的权限:

$ whoami
michael

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

问题: 的 有谁知道如何解决这一问题?我错过了什么吗?

9 个答案:

答案 0 :(得分:13)

作为开发人员,我在Windows环境中使用快捷方式提供与Linux类似的命令行界面(CLI),并遇到尝试解压缩文件的同一问题。

修复方法是将快捷方式设置为“以管理员身份运行”。

如果您使用此方法访问Cygwin环境,请转到快捷方式的属性,选择“高级”按钮以获取“以管理员身份运行”选项,选中该框,然后单击“确定”。你走吧! 您也可以通过设置快捷方式并执行上述操作来设置批处理文件。

希望有所帮助!

答案 1 :(得分:10)

我认为您必须更改目录或文件权限。如果要更改文件或目录的权限,则必须使用代码添加完整路径。

好像你想在C:\ yourDirectory上更改cocos2d-x文件夹的权限(我在Windows上;在Mac上它将是/而不是\)在cygwin上编写代码控制台:

chmod -R 775 /cygwindrive/c/yourDirectory

答案 2 :(得分:7)

  • 使用cat /proc/mountsmount检查挂载表,并确保//usr/bin/usr/lib中的每个挂载点都有noacl标志。如果它丢失了,请更正/etc/fstab并重新启动。 (对于我,重新启动同步根安装点的noacl标志,我不知道是否可以在不重新启动的情况下实现相同的功能。

  • 检查icacls输出中针对该文件的NULL SID记录和其他奇怪记录。它们似乎在Cygwin中的POSIX ACL转换层写入时添加(使用" noacl"在/ etc / fstab中允许禁用它,但损坏已经完成)。

    如果包含父项具有NULL SID记录,则仅在文件上重置Windows ACL可能是不够的。一个人必须运行

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

    从命令提示符中删除每个文件和目录中Windows ACL的无关记录。

<强>更新 其他命令重置所有权,删除默认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

答案 3 :(得分:6)

解决此问题的最简单方法是:

  1. 下载Sysinternals ProcMon,启动它并让它运行一段时间。
  2. 排除所有产生噪音的流程。
  3. 当日志变得不那么繁忙时,请启动文件访问尝试。
  4. 在ProcMon日志中搜索“拒绝访问”消息。
  5. 究。应该很容易修复。

答案 4 :(得分:5)

-rwx ------ +可能是问题所在。一些隐藏的acl可能会禁止x给你。 然后用setfacl重置你的acl。

$ 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

答案 5 :(得分:1)

我遇到了这个问题,并通过cd将其修复到包含我刚制作的框(打包或重新打包)的目录中。然后是vagrant box add <file.box> --name <name>。我认为PATH会使事情发生变化并导致失败。然后仔细检查vagrant box list。然后我mkdir coolbox; cd coolbox。然后我只是vagrant init <name>,这一切都像魔术一样。

答案 6 :(得分:0)

git bash,运行如下命令:cmd "/C postgresql-10.5-2-windows-x64.exe --unattendedmodeui minimal --mode unattended --servicename 'postgreSQL'"

答案 7 :(得分:0)

您可以按照以下链接中的说明进行操作:https://cygwin.readthedocs.io/en/latest/install/#install-and-maintain-cygwin 在 Windows 上为文件夹授予权限时,请使用以下命令: chmod ugo+x /usr/local/bin/cyg-get 从 Cygwin 终端,如本例所示:

打开 Cygwin64 终端,然后运行:

chmod -R 775 /usr/local/bin/

答案 8 :(得分:-1)

使用chmod命令更改脚本的模式以使其可执行。 有关详细信息,请参阅man chmod。