5

请让我知道可用于更改文件属性的 MSYS shell 命令。当我运行命令时,ls -l我得到以下信息:

-rw-r--r-- 1 lenovo Admin .....m4sugar.m4

我想提供完全访问权限。

非常感谢任何帮助。

谢谢

4

2 回答 2

3

@cdhowie 是对的;这是在那里跟踪的 msys 的错误-> http://sourceforge.net/tracker/?func=detail&atid=102435&aid=3071537&group_id=2435

它不能做任何比它已经做的更有用的事情,除非它像 Cygwin 那样在 POSIX 仿真中伪造它。但是,Cygwin 所做的几乎无关紧要。由于 MSYS 是从 Cygwin-1.3 分叉出来的,因此大部分伪造都是故意禁用的——在 Cygwin 支持的范围内提供伪造的 POSIX 功能并不是MSYS 的目标。如果您想要 Cygwin 的行为,而 MSYS 不能充分满足您的需要,那么您应该使用 Cygwin。

MSYS 旨在更好地与MinGW 支持的本机MS-Windows 功能集成。在本机 MS-Windows 环境中,没有可以将文件标记为可执行文件的文件系统属性——这由文件数据空间中的魔术字节序列指示,(通常也由匹配的文件扩展名限定)。除了更完全地接受 Cygwin 的仿真之外,MSYS chmod 无法安全地修改它,而不会有文件损坏的风险。然而,这与 MSYS 项目的目标截然相反——它不会发生。

@kbulgrien 提供了更改权限的好方法:

注意:icaclscacls修正了几个问题的新版本,但似乎在 Windows XP 中不存在。

您可以使用以下任一命令为所有人授予完全访问权限:

  • cacls "$file_path" //E //P Everyone:F
  • icacls "$file_path" //grant Everyone:F

请注意,在使用orls -l之后,Msys 中不会显示有关真实 ACL 的准确信息。caclsicacls

于 2012-09-19T02:15:56.887 回答
1

该问题很可能是 MSYS 工具中的最小实现之一。您也将被限制无法使用 Windows 工具(如 attrib.exe)进行更改。

$ >test
$ ls -l test
-rw-r--r--    1 kbulgrie Administ        0 Aug 24 13:51 test
$ chmod u-w test
$ ls -l test
-r--r--r--    1 kbulgrie Administ        0 Aug 24 13:51 test
$ chmod u+w test
$ ls -l test
-rw-r--r--    1 kbulgrie Administ        0 Aug 24 13:51 test

如您所见, chmod 工作正常。现在,看看 attrib.exe 会发生什么,这是一个 Windows 二进制文件:

$ ls -l test
-rw-r--r--    1 kbulgrie Administ        0 Aug 24 13:51 test
$ attrib +R test
$ ls -l test
-r--r--r--    1 kbulgrie Administ        0 Aug 24 13:51 test
$ attrib -R test
$ ls -l test
-rw-r--r--    1 kbulgrie Administ        0 Aug 24 13:51 test

Windows 工具 attrib 与 ugoa 权限无关,并将事情简化为拥有或不拥有权限:

$ attrib +R test
$ attrib test
     R     C:\msys\1.0\home\kbulgrien\test

我注意到,期望 MSYS 工具比 Windows“等效”工具做得更多是公平的。MSYS 中的 M 表示“最小”。

cacls.exe 可以在 MSYS 下做一些事情。例如,这表示我和管理员拥有完全控制权,即使ls -l似乎说 Administrat 没有写入权限。当心。如果在 Windows 上,也许使用 Windows 方法。$ cacls 测试
C:\msys\1.0\home\kbulgrien\test BUILTIN\Administrators:F NT AUTHORITY\SYSTEM:F APD\kbulgrien:F BUILTIN\Users:R

以下命令是我在 MSYS 环境中使用的命令,用于在从存档还原后修复 SQL 数据库文件的权限。您可以从 MSYS 运行 Windows 二进制文件。我一直这样做...例如,脚本在 MSYS shell 中运行 diskpart、format 等,而不调用 cmd.exe。

$ cacls "Mantis*.*" //E //G "NETWORK SERVICE":F
于 2012-08-24T19:08:44.007 回答