运行 脚本中的 sudo 将 uid 设置为当前用户而不是 root uid

Running sudo inside script sets uid to current user instead of root uid

我有一个创建文件系统存档的脚本。为此,我需要超级用户权限,但我不希望 运行 使用 sudo 整个脚本,只希望创建存档的特定行。

问题是,当我在归档命令前加上 'sudo' 前缀时,在归档中创建的文件都有我的 uid (1000),而不是根 uid (0)。当这个文件系统后来被解压到 target 平台时,我们以 root 身份启动它,尝试执行需要超级用户权限的操作失败:系统认为 root 帐户应该有 uid 1000,而不是 0。

如何使 tar 命令 运行 成为 root,同时在结果中也有正确的 uid?

tar 保留文件默认在文件系统上的权限、所有权等。

您可以使用 --owner=USER--group=USER 标志覆盖它。

此外,您可以告诉 tar 使用存储在 tar 文件中的数字所有权和组信息,而不是等效名称(以防不同系统上的名称不同) --numeric-owner 参数。

因此,如果您需要 tar 命令的 root 的唯一原因是在 tar 球中设置所有权等,那么您根本不需要它。