在 Mac 上恢复丢失的组权限

在 Mac 上恢复丢失的组权限

使用 mac 糟糕的文件共享首选项,我设法搞砸了 Documents 目录的权限。我的非 Documents 目录具有如下权限:

drwx------+ for .
drwxr-xr-x+ for ..
-rw-------@ for .DS_Store

drwxr-xr-x  for most folders
drwxr-xr-x@ for some folders

-rw-r--r--  for some files
-rw-r--r--@ for some files

我的文档目录具有如下权限:

drwx---r-x+ for .
drwx---r-x+ for ..
-rw----r--@ for .DS_Store

drwx---r-x+ for (all?) folders

-rw----r--@ for some files
-rw----r--+ for some files

看起来所有应该具有组读权限的内容都缺失了。我知道 chmod 可以提供帮助,并且它有一个 -R 递归选项,但我不愿意开始试验并把事情搞得更糟。特别是,我不想在不应该设置组读权限的地方设置它。另外,我只想更改一些位,而其他位保持不变。

有人可以提供一些建议如何解决这个问题吗?

不确定这是否相关,但我尝试允许同一台机器上的另一个用户对我的主用户的文档进行读/写访问时遇到了这个问题。在共享首选项中,我尝试将“Documents”文件夹添加到共享文件夹列表中,并将所有人设置为读取(或至少读取),但在此过程中,我认为我删除了“staff”组,无论它是什么。

答案1

在紧急情况下,您可以通过进入您的 Documents 目录并发出以下命令来添加组读/写权限:

chmod -R g+rw *

如果您需要修复所有权,您可以执行以下操作:

chown -R user.group *

[显然你用实际的用户名和组名替换user了]group

现在您只需要修复目录。

find . -type d | replace ' ' '\ ' | xargs chmod g+x

上述调用查找所有目录,然后用反斜杠转义空格(传递给 时需要xargs),然后为每个目录添加组执行权限。该replace命令是 mysql 的一部分。如果您没有,您可以使用sed 's/ /\\ /g'

免责声明:我的 Linux 发行版是 Slackware。我希望它能在 Mac 上运行,但我无法测试。如果您想进行健全性检查,可以替换xargs chmod g+x为。echo | more

请注意,您可以先将输出传送到文件:

find . -type d | replace ' ' '\ ' > dirs.txt

然后,您可以查看该文件并使用文本编辑器删除您不想更改的任何目录。然后,chmod您可以执行以下操作,而不是递归调用:

cat dirs.txt | sed 's/$/\/*/' | xargs chmod g+rw
cat dirs.txt | xargs chmod +x

sed调用只是将每行的末尾替换为“/*”,以表示目录中的所有文件。

答案2

如果我没记错的话,标准 ls rwxrwxrwx 后面的 + 属性表示 ACL。我会小心,因为您的组读取访问权限可能是 ACL 方案的一部分。

相关内容