请告诉我一个MSYS shell命令,该命令可用于更改文件的属性。当我以ls -l
运行命令时,我得到以下内容:
-rw-r--r-- 1 lenovo Admin .....m4sugar.m4
我想提供完全访问权限。
非常感谢任何帮助。
由于
答案 0 :(得分:2)
@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旨在更好地与原生 MS-Windows功能集成 由MinGW支持。在这个本机MS-Windows环境中,没有 文件系统属性,可以将文件标记为可执行文件 - 即 由文件数据空间中的魔术字节序列表示,(和 通常也通过文件扩展名来限定匹配)。没有办法 其他,MSYS chmod可以安全地修改它,没有文件损坏的风险 而不是更完全地接受Cygwin的模仿。但是,就是这样 与MSYS项目的目标截然相反 - 它只是不会 发生。
@kbulgrien提供了改变权限的好方法:
cacls
:http://ss64.com/nt/cacls.html或icacls
:http://ss64.com/nt/icacls.html 注意:icacls
是cacls
的新版本,可以解决几个问题,但似乎在Windows XP中不存在。
您可以使用以下任一命令为Everyone提供完全访问权限:
cacls "$file_path" //E //P Everyone:F
icacls "$file_path" //grant Everyone:F
请注意,使用ls -l
或cacls
后,Msys中的icacls
将无法显示有关实际ACL的准确信息。
答案 1 :(得分:0)
问题很可能是MSYS工具中最小的实现之一。您也将无法使用attrib.exe等Windows工具进行更改。
$ >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表示“最小”。
cacls.exe可以在MSYS下做一些事情。例如,这表示我和管理员完全控制,即使ls -l
似乎表示Administrat没有写入。小心。如果在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,format等,而不调用cmd.exe。
$ cacls "Mantis*.*" //E //G "NETWORK SERVICE":F