仅更改特定所有者的所有者和组

仅更改特定所有者的所有者和组

我对这个愚蠢/简单的问题表示歉意 - 但在搜索网络和 SE 后,我找不到这个特定问题的答案。

问题:
如何更改所有者和组(系统范围)仅有的对于 a 所拥有的文件具体的所有者?

用例:
我们有许多 RasPi 作为各种服务器运行并用于rsync备份它们。例如,当我们不幸必须执行恢复时,所有“用户”文件的所有者和组都是pi:pi,而不是原始所有者。adminuser:adminuser

在不寻找 拥有的文件的情况下pi,有什么方法可以完成所有者/组的重新分配?

编辑:这是 rsync 命令:

sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --exclude-from="${exc_path}" "${src_path}" "${dst_addr}:${dst_path}"

答案1

您没有使用-numeric-ids和/或-fake-super用于备份(和恢复)。如果稍微修改rsync命令,您将正确保存和恢复映射。

在这些示例中,-M指示rsync在连接的远程端应用下一个选项,即伪造。额外的副作用是您不需要远程端(存储备份的地方)以 root 身份运行

这会将备份从客户端推送到备份服务器

sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --numeric-ids -M--fake-super --exclude-from="${exc_path}" "${src_path}" "${dst_addr}:${dst_path}"

这将从客户端提取备份(即恢复)

sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --numeric-ids -M--fake-super --exclude-from="${exc_path}" "${dst_addr}:${dst_path}" "${src_path}"

这在备份服务器上运行,会将备份推送到客户端(即恢复)

sudo rsync -azh -e 'ssh -pNNNN' --stats --delete --numeric-ids --fake-super "${dst_path}" "${src_host}:${src_path}"

答案2

每个文件单独存储其所有者信息,没有数据结构可以根据所有者对文件进行索引。因此,无论您做什么,您都必须寻找这些文件,并分别更改每个文件的 UID。幸运的是,这并不难做到。这应该做:

find "$dir" -user olduser -exec chown newuser {} +

当然,最好更改备份系统以存储(和恢复)正确的 UID,特别是如果您可能备份了属于多个用户的文件。

相关内容