![仅更改特定所有者的所有者和组](https://linux22.com/image/184529/%E4%BB%85%E6%9B%B4%E6%94%B9%E7%89%B9%E5%AE%9A%E6%89%80%E6%9C%89%E8%80%85%E7%9A%84%E6%89%80%E6%9C%89%E8%80%85%E5%92%8C%E7%BB%84.png)
我对这个愚蠢/简单的问题表示歉意 - 但在搜索网络和 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,特别是如果您可能备份了属于多个用户的文件。