是的,Mac在文件方面对Unix有许多改进。忽略掉已经不怎么用的 resource fork ,还有。
- 标准的Unix权限
ugo
rwx
等等。正常的Unix工具适用。
- ACL的,用
ls -le
可以查看,用chmod [-a | +a | =a]
可以更改。
- 文件标志的,用
ls -lO
可查看(大写哦,不是0),用chflags
可更改。
- 扩展属性 ,可使用
ls -l@
查看(仅属性键),可使用xattr
查看和更改。
- 从 OS X 10.11 “El Capitan "开始,* 系统完整性保护 ** (SIP)进一步保护一些文件不受普通进程的更改,即使使用
xattr -h
以 man xattr
的身份运行。受SIP保护的文件将被sudo
列为具有root
标志和/或被ls -lO
列为具有restricted
属性。
你可以因为Unix权限、ACL、文件标志或SIP而拒绝对文件进行操作。要完全解锁一个文件。
sudo chmod -N file # Remove ACLs from file
sudo chmod ugo+rw file # Give everyone read-write permission to file
sudo chflags nouchg file # Clear the user immutable flag from file
sudo chflags norestricted file # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file
如果启用了系统完整性保护(SIP) ls -l@
和com.apple.rootless
也会返回一个 "操作不允许 "的错误。要清除标志和/或属性,你需要启动到 macOS Recovery ,然后从终端运行命令(你可能必须先使用磁盘实用程序解锁和安装你的启动驱动器,然后记住你的文件将在sudo chflags norestricted
或任何你的启动驱动器的名称下)或 完全禁用SIP ,然后重新启动,然后命令应该工作。然而,请注意,未来的操作系统更新很可能会将sudo xattr -d com.apple.rootless
标志和/Volumes/Macintosh HD
属性恢复到你删除它的任何文件中。
_ 不建议_禁用SIP,因为它删除了很多对恶意软件和意外损坏的保护,另外,当你可以简单地在每个文件的基础上删除保护时,它是不必要的。如果你确实禁用了SIP,当你完成修改后再重新启用它。
注意,如果restricted
显示com.apple.rootless
标志被设置,你必须进入单用户模式才能解除设置。我不打算在这里讨论这个问题,因为有更大的问题,为什么文件设置了这个标志,为什么你要试图搞乱它,会有什么后果。