在 Windows 10 中使用最新版本的 cygwin64 foo
。我不太確定這是怎麼發生的,但症狀如下:
$ cd /f/temp/foo
$ ls -lad .
drwxrwx---+ 1 Mm None 0 Jun 16 14:03 .
$ mkdir bar
$ ls -lad bar
d---rwx---+ 1 Mm None 0 Jun 16 14:17 .
$ cd bar
Permission denied
$ umask
0022
對於其他目錄,例如 ,不會發生這種情況/f/temp/ok
。使用ls
開關我看不出f/temp/ok
和之間有任何區別/f/temp/foo
。
如果我這樣做,chmod 775 bar
那麼我可以輸入bar
,但是在下面建立目錄bar
也會出現相同的問題。所以這個問題阻止了我的git init
工作/f/temp/foo
。chown -R Mm *
在父母身上做的事情沒有什麼不同。
我的問題是:導致此問題的原因是什麼以及正確的解決方法是什麼?
有一些明顯的差異,icacls
但我不確定如何解釋它們:
$ cd /f/temp
$ icacls ok >ok.txt
$ icacls foo >foo.txt
$ diff -b ok.txt foo.txt
1c1
< ok NULL SID:(DENY)(Rc,S,REA,WEA,X,DC)
---
> foo NULL SID:(DENY)(Rc,S,REA,WEA,X,DC)
3c3
< DESKTOP-AO2AIEC\None:(RX)
---
> DESKTOP-AO2AIEC\None:(Rc,S,RA)
8c8
< Everyone:(RX)
---
> Everyone:(Rc,S,RA)
10,11c10,12
< CREATOR OWNER:(OI)(CI)(IO)(F)
< CREATOR GROUP:(OI)(CI)(IO)(RX)
---
> CREATOR OWNER:(OI)(CI)(IO)(DENY)(S,RD,WD,AD,REA,WEA,X,DC)
> CREATOR OWNER:(OI)(CI)(IO)(D,Rc,WDAC,WO,RA,WA)
> CREATOR GROUP:(OI)(CI)(IO)(Rc,S,RA)
16c17
< Everyone:(OI)(CI)(IO)(RX)
---
> Everyone:(OI)(CI)(IO)(Rc,S,RA)
我現在有一個解決方法:在 下建立另一個目錄/f/temp
,然後使用cp -r
將所有檔案複製到foo
新目錄中,然後刪除foo
並重新命名新目錄。如果我使用cp -a
而不是cp -r
問題仍然存在。
答案1
icacls 顯示的 DENY 過多可能是由於 cygwin dll 最近的更改(2.3 和當前 2.5 之間)造成的。花了一些時間才正確,並且可能會留下帶有令人費解的 ACL 的檔案或目錄。
為了清理 ACL,-b
在 setfacl 中加入了一個開關
setfacl -b foo