在Windows中使用cygwin"权限被拒绝"

Mik*_*ike 15 cygwin file-permissions windows-7

背景: 我正在尝试编写[.bat]文件,因此我可以双击它,并调用bash脚本.bash脚本将启动一些Windows GUI应用程序来监控GPU/CPU温度.我刚刚安装了cygwin v1.7.7-1(今天下载)和windows 7.

代码: monitor-temps.bat:

C:\cygwin\bin\bash.exe ~/bin/monitor-temps.bash
pause
Run Code Online (Sandbox Code Playgroud)

代码: monitor-temps.bash:

#!/usr/bin/bash
"/cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe" &
Run Code Online (Sandbox Code Playgroud)

输出: 双击[.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
Run Code Online (Sandbox Code Playgroud)

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

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

$ whoami
michael

$ ls -l GPU*
-rwx------+ 1 michael        None 890720 2010-12-01 19:23 GPU-Z.0.4.8.exe
Run Code Online (Sandbox Code Playgroud)

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

小智 15

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

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

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

希望有所帮助!


Saj*_*man 11

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

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

chmod -R 775 /cygwindrive/c/yourDirectory
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说在 C:/ 中不起作用。权限被拒绝,必须以管理员身份运行 cygwin 控制台。 (2认同)

eel*_*EEz 7

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

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

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

    icacls c:\cygwin64 /reset /t /l /c
    
    Run Code Online (Sandbox Code Playgroud)

    从命令提示符中删除每个文件和目录中的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
Run Code Online (Sandbox Code Playgroud)


Tom*_*lak 6

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

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


rur*_*ban 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
Run Code Online (Sandbox Code Playgroud)

或者您需要提升权限:

$ cygstart  --action=runas /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe
Run Code Online (Sandbox Code Playgroud)