【问题标题】:cygwin sets file permission to 000cygwin 将文件权限设置为 000
【发布时间】:2011-08-15 05:49:57
【问题描述】:

我有一个文件夹 /cygwin/d/myfolder/ 每次我在那里保存文件时,如果我从 cygwin 执行 ls -la 我会看到这些文件被授予了 000 权限。这实际上给我带来了很多问题,因为我将此文件夹同步到我的服务器并且没有任何文件可以访问.如何让文件自动获得合理的权限?

【问题讨论】:

  • 这些错误可以通过在 Windows 上设置正确的安全属性来修复。右键单击文件夹-> 选择属性-> 选择安全选项卡。现在修复任何不正确的设置。还要检查“高级”选项。尝试“启用继承”并将子对象权限替换为当前文件夹设置。

标签: cygwin


【解决方案1】:

阅读此链接中的答案: 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 只读属性。

【讨论】:

  • 我想为此 +10。我多年来一直在解决这个问题。谢谢!
  • 当我尝试这个时,我所有的文件都是-rw-r--r--,不管我做什么chmod()。我无法将文件标记为可执行文件;它只是恢复到 0644。 (umask==0022)
  • 我想补充一点,这是唯一的解决方法,当patch 命令从 CYGWIN shell 外部运行并重置修补文件的权限时也有帮助(非常讨厌!)。更多信息在这里:cygwin.com/ml/cygwin/2011-10/msg00324.html
  • 我现在正在删除我为解决此问题而编写的 2 年前的脚本。真希望那时我能找到这个。 :)
  • 这行得通。我尝试的另一件事也有效,是放宽 Windows (7) 中的权限。我基本上从 Windows 资源管理器中制作了 chmod u+rw .chown -r me .(用 Unix 术语)的所有内容。我不推荐我的解决方案,因为这是一场安全灾难。我只是为了提供更多数据而做此记录。
【解决方案2】:

检查以确保使用 umask 命令正确设置了 umask。如果您的 umask 是 0777,它会从新文件的权限中减去,最终会得到 000 权限。除此之外,可能还有其他几种可能性需要考虑。

如果您的 id 在 /etc/passwd 和 /etc/group 中设置不正确,也会导致 ls 显示意外结果。检查文件夹的权限。还可以使用 getfacl 命令检查 Windows 权限。也许还要检查 mount 命令。

【讨论】:

  • getfacl . 是我要找的。​​span>
【解决方案3】:

在上述答案中,提出了解决方案:

编辑 /etc/fstab 并在文件末尾添加这一行:

无 /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 - 将挂载点以下的所有文件视为可执行文件。

【讨论】:

    【解决方案4】:

    在我的 Win7 PC 上,文件通常是 ----------+ 1 David None 69120 Jun 17 13:17 mydoc.txt

    我尝试了以上所有方法都没有运气 结果我的 .zshrc 中仍然有一些旧的历史挂载条目 我删除了这些,鲍勃的你叔叔的问题就消失了!

    【讨论】:

    • 这太有用了。知道在哪里可以找到旧的历史装载条目救了我。
    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 2013-05-11
    • 1970-01-01
    • 2015-10-18
    • 2015-06-04
    • 2010-09-26
    • 2021-03-12
    • 2016-08-20
    相关资源
    最近更新 更多