我有一个文件夹/ cygwin / d / myfolder / 每次我保存文件,从cygwin如果我做一个ls -la我看到文件被授予000.这实际上导致我相当多的问题,因为我rsync这个文件夹到我的服务器,没有任何文件可访问。如何让文件自动获得合理的许可?
答案 0 :(得分:116)
阅读此链接的答案: http://cygwin.1069669.n5.nabble.com/vim-and-file-permissions-on-Windows-7-td61390.html
那里的解决方案也适用于我:
修改 / etc / fstab 并在文件末尾添加此行:
none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
然后关闭所有Cygwin进程,打开一个新终端并再次对你的文件进行ls -l。
说明: 默认情况下,Cygwin使用文件系统的访问控制列表(ACL)来实现真正的POSIX权限。某些Windows本机程序或进程可能会创建或修改ACL,以便Cygwin将POSIX权限计算为000.使用 noacl 挂载选项,Cygwin将忽略文件系统ACL并仅基于以下方式伪造权限位的子集DOS只读属性。
答案 1 :(得分:6)
检查以确保使用umask命令正确设置了umask。如果您的umask是0777,它会从新文件的权限中减去并最终获得000权限。除此之外,还有其他几种可能性需要考虑。
如果在/ etc / passwd和/ etc / group中未正确设置您的ID,也会导致ls显示意外结果。检查文件夹的权限。还可以使用getfacl命令检查Windows权限。也许还要检查mount命令。
答案 2 :(得分:3)
在上面的回答中,提出了解决方案:
编辑/ etc / fstab并在文件末尾添加此行:
none / cygdrive cygdrive binary,noacl,posix = 0,user 0 0
在那个答案中有这样的评论:
当我尝试这个时,我的所有文件都是-rw-r - r--无论我做什么chmod()。我无法将文件标记为可执行文件;它只是恢复到0644.(umask == 0022)
我遇到了同样的问题,但它表现在运行Cygwin ksh或mksh时无法执行DOS批处理文件(* .bat)。我偶然发现了这个网站:http://pipeline.lbl.gov/code/3rd_party/licenses.win/cygwin-doc-1.4/html/faq/,其中包含这个有用的建议:
请注意,您可以使用mount -x强制Cygwin将挂载点下的所有文件视为可执行文件。这可以用于单个文件以及目录。然后,Cygwin将不会费心阅读文件以确定它们是否可执行。
然后用这个页面交叉引用 - https://cygwin.com/cygwin-ug-net/using.html#mount-table - 及其建议:
cygexec - 将挂载点下的所有文件视为cygwin可执行文件。
我将cygexec添加到我的fstab的第四个字段中。这样做了。我的.bat现在可以在ksh / mksh中执行,这是必要的,因为我正在运行一个调用Korn shell堆栈3个文件的Jenkins作业,我没有可修改的控制权。我只需要.bat来运行!
更新:在进一步测试时,上面的解决方案并不是我所需要的。它导致一些可执行文件,如javac和cl表现得很奇怪(实用程序会打印它们的用法并退出)。我认为我所需要的而不是'cygexec'只是'exec'。正如同一页说明:
exec - 将挂载点下面的所有文件视为可执行文件。
答案 3 :(得分:2)
在我的Win7 PC上通常都有文件 ---------- + 1 David None 69120 Jun 17 13:17 mydoc.txt
我尝试了以上所有的运气 原来我的.zshrc中仍然有一些旧的历史挂载条目 我删除了这些,鲍勃的叔叔问题消失了!