Msys shell命令更改文件属性

5
请告诉我一个可以用于更改文件属性的MSYS shell命令。当我运行ls -l命令时,我得到了以下结果:
-rw-r--r-- 1 lenovo Admin .....m4sugar.m4

我希望能提供完全的访问权限。

非常感谢任何帮助。

谢谢。


我不确定我是否正确理解了你的意思,但是无论如何请检查 chmod - Forgottn
我使用了chmod 777 m4sugar.m4,它显示了我所写的内容。 - eddie
文件的所有者是谁?是你吗?尝试使用sudo chmod或者su以及chmod命令。这两个命令都需要输入su/root/admin密码。 - Forgottn
1
从记忆中来看,我不确定 chmod 在 Windows 上是否真正有效;我不确定 NTFS ACL 是否准确地表示为类 Unix 权限,并且是否可以通过该接口进行更改。 - cdhowie
2个回答

3

@cdhowie是正确的;这是msys的一个错误,已经在此处跟踪 -> http://sourceforge.net/tracker/?func=detail&atid=102435&aid=3071537&group_id=2435

它不能比现在做得更有用,除非在POSIX模拟中伪造它,就像Cygwin一样。然而,Cygwin所做的大部分都不相关;由于MSYS是从Cygwin-1.3分支出来的,因此大部分伪造被故意禁用了——MSYS的目标并不是提供由Cygwin支持的伪造POSIX功能的程度。如果您想要Cygwin的行为,并且MSYS没有足够满足您的需求,请使用Cygwin。

MSYS旨在更好地集成MinGW支持的本地MS-Windows功能。在这个本地MS-Windows环境中,没有文件系统属性可以将文件标记为可执行——这是由文件数据空间中的魔术字节序列指示的(通常也会通过文件名扩展名进行匹配)。 MSYS chmod无法安全地修改它,以避免文件损坏,除非更全面地采用Cygwin的模拟。然而,这与MSYS项目目标截然相反——它不会发生。

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

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

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

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

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


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 运行良好。现在,让我们看看 Windows 二进制文件 attrib.exe 发生了什么:

$ 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代表“Minimal”。

cacls.exe在MSYS下可以执行某些操作。例如,这表示我和管理员拥有完全控制权,即使ls -l似乎表明管理员没有写入权限。要小心。如果在Windows上,请使用Windows方法。 $ cacls test
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、格式化等,而不调用cmd.exe。

$ cacls "Mantis*.*" //E //G "NETWORK SERVICE":F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接