当 unix/mac 文件被复制或移动到其他系统时,其所有权/组/权限会发生什么变化

当 unix/mac 文件被复制或移动到其他系统时,其所有权/组/权限会发生什么变化

具体谈论 Mac 或者 Unix 我对文件从一个系统移动到另一个系统时文件所有权/组的方式有点困惑。

例如,在我的 Mac 上,如果我创建了一个文件,我就是它的所有者,因此假设所有者是“ahmed”,组是“staff”

当将此文件复制到另一台 MacBook 时,用户“ahmed”是否仍为所有者并且组为“staff”?即使在第二台 MacBook 上,用户“ahmed”或组“staff”可能存在也可能不存在。?

有人可以解释一下吗,这很令人困惑。

谢谢,艾哈迈德

答案1

如果您只是复制文件而不要求操作系统保留权限(通常是“cp”的 -p 标志),那么复制的文件将在发布副本的用户拥有的目标区域上重新创建。例如,如果我(freudy)将 Ahmed 在 /tmp 中拥有的文件复制到我的主目录中:

cp /tmp/ahmedsFile .

那么我(freudy)将拥有该副本。

为了在用户之间保留所有权类型权限,我怀疑你需要

所以,

sudo su -
cp -p /tmp/ahmedsFile /home/freudy

将导致 /home/freudy/ahmedsFile 归 Ahmed 所有。

请注意,这一切都在同一台机器上,以说明保留权限(所有权和文件属性)背后的要点。

如前所述,用户 ID 和组 ID 以数字形式存储在 /etc/passwd 和 /etc/group 文件中。使用不同的 ID 在系统之间复制文件(同时保留文件权限)会导致副本由不同的用户“拥有”。

Source Machine Passwd
testuser:x:1001:1001:Test user:/home/testuser:/bin/sh

Target Machine Passwd
rupert:x:1001:1001:Rupert the bear:/home/rupert:/bin/sh

从源复制到目标并保留权限将使源上明显由“testuser”拥有的任何文件在目标上似乎由“rupert”拥有。这通常是在恢复存档文件(即 tar 文件)时出现的问题,因为 tar 以与操作系统相同的方式存储 id。

在源机器上将文件存档到 tar 中,然后在目标机器上进行提取将演示用户名切换。

答案2

这取决于文件如何复制,但几乎肯定不是。例如,如果您使用以下命令复制文件scp

ahmed@macbook$ scp foo.txt remoteuser@remotemachine:/home/remoteuser/

这将创建一个由 拥有的新文件remoteuser。为了将文件复制到新机器,您需要以某种方式访问​​新机器。这意味着您必须使用某种用户名登录新机器。复制文件意味着在新机器上创建新文件,这些是数据,而不是物理对象,因此您实际上并没有移动任何东西。由于您将创建新文件,因此适用文件创建的正常规则。

答案3

Unix 文件和组所有权不是用名称编码的,而是用文件系统中的数字 ID 编码的。这些 ID 被转换为 /etc/passwd 和 /etc/group 中的名称。如果您将磁盘移至另一个系统,并且该系统对这些 ID 有不同的名称,则所有者将发生变化。如果根本不使用这些 ID,所有权通常会显示为数字 ID。如果您稍后添加具有该 ID 的用户/组,则他/她将拥有这些文件。

相关内容