2010-12-18 170 views
8

背景: 我試圖寫一個[蝙蝠]文件,所以我可以雙擊它,bash腳本會被調用。 bash腳本將啓動幾個Windows GUI應用程序來監視GPU/CPU溫度。我只是做了一個新的安裝cygwin v1.7.7-1(今天下載)和Windows 7。「權限被拒絕」使用的cygwin在Windows

代碼: 監視器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" & 

輸出: 後,我雙擊[蝙蝠]文件,我得到一個:

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 

問題: 有誰知道如何解決這個問題?我錯過了什麼嗎?

回答

5

解決這個問題的最簡單方法是:

  1. 下載Sysinternals ProcMon,啓動它,並讓它運行了一段時間。
  2. 排除產生噪音的所有過程。
  3. 當日志變得不太忙時,開始文件訪問嘗試。
  4. 在ProcMon日誌中搜索「拒絕訪問」消息。
  5. 調查。應該很容易解決。
4

-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 
9

我認爲你必須更改目錄或文件的權限。如果您想更改文件或目錄的權限,則必須添加代碼的完整路徑。

就好像你想改變的cocos2d-x文件夾的權限在C:\ yourDirectory(我在Windows,Mac上這將是/代替\)寫的cygwin控制檯上的代碼:

chmod -R 775 /cygwindrive/c/yourDirectory 
+1

這根本不是在C工作:/我。權限被拒絕,不得不以管理員身份運行cygwin控制檯。 – jcarballo 2016-12-12 22:43:25

+1

更改bash文件的權限對我來說已經足夠了。 – 2017-11-16 14:35:33

12

作爲開發人員,我使用快捷方式在Windows環境中提供類似於Linux的命令行界面(CLI),並嘗試解開文件時遇到同一問題。

解決的辦法是將快捷方式設置爲「以管理員身份運行」。

如果您使用此方法訪問您的Cygwin環境,請轉到快捷方式的屬性,選擇高級按鈕以獲取選項以「以管理員身份運行」,選中該框並單擊確定。而你離開! 你也可以設置你的批處理文件來做到這一點,做一個快捷方式,並執行上述操作。

希望有幫助!

+0

比搞定setfacl簡單得多,這對我來說並沒有什麼竅門。只需移動,右鍵單擊Cygwin圖標,選擇「以管理員身份運行」,並突然編譯時創建文件夾正在運行!謝謝,@Darkstrumm! – Redboots 2016-10-11 16:11:40

+0

我需要編輯'/ etc/nsswitch.conf'來修復配置文件問題,並以管理員身份啓動終端是唯一允許我這樣做的終端。謝謝! – kenchilada 2017-01-29 16:57:52

0

我遇到了這個問題,並將其修復了cd到包含我剛剛製作的盒子(打包或重新打包)的目錄。然後vagrant box add <file.box> --name <name>。我認爲路徑會讓事情發展,並導致它失敗。然後仔細檢查vagrant box list。然後我mkdir coolbox; cd coolbox。然後我只是vagrant init <name>,這一切都像魔術般出現。

-1

只需使用chmod命令更改腳本的模式以使其可執行即可。 有關更多詳細信息,請參閱man chmod。

+1

如果您遇到windows/cygwin權限問題,chmod將不起作用。相信我,我一直在嘗試,但我的文件每次最終都有755個權限。在Windows中更改安全權限也沒有好處。 – Redboots 2016-10-11 16:21:22

2
  • 檢查安裝表cat /proc/mountsmount並確保每個安裝點出//usr/bin/usr/libnoacl標誌。如果缺少,請更正/etc/fstab並重新啓動。 (重新啓動對我來說同步了根掛載點的noacl標誌,我不知道是否可以在不重新啓動的情況下實現同樣的功能)。

  • 在icacls的輸出中針對該文件檢查NULL SID記錄和其他奇怪記錄。它們似乎在Cygwin的POSIX ACL轉換層寫入時添加了(使用/ etc/fstab中的「noacl」可以禁用該功能,但損壞已經完成)。

    如果包含的父項具有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 
+0

除了上述我想我需要刪除繼承的權限,設置完全訪問。\ Administrators和。\ SYSTEM。我想這可以用一個額外的'''icacls%croot%/ grant:'SYSTEM:F管理員:F/t/c/l/q'''來編寫腳本。 – 2017-11-06 19:59:03

+0

https://gist.github.com/ilatypov/5956ae36da8ff0aa2212eb2004def8c4 – 2018-01-19 15:37:33