我有一个包含 900 个用户 ID 的旧 Unix 文件服务器快照,其中包含上百万个文件。在 Linux 上,我只需 chroot 到快照的顶级目录,就可以浏览它并ls -l
显示快照中的用户名。/etc/passwd
我已将此快照复制到 exFAT 格式的 USB 驱动器,以便发送给 Mac 用户。但在 macOS 中,我的 chroot 技巧可能无法显示用户名,因为用户名来自 DirectoryService 而不是 /etc/passwd。(他不会在他的 Mac 上添加 900 个用户,也不会在上面安装 Linux。)
他如何在文件列表中查看这些用户名?
或者他是否必须ls -ln
通过自定义脚本将 uid/gid 替换为该密码文件中的名称?
答案1
我认为你可能会觉得tar
有用。我tar
在 Debian 和 Ubuntu 上测试了 GNU。我无法使用 Mac,它的tar
选项可能不那么丰富。不过,我认为你能从我的回答中得到一些想法。
tar -xf archive.tar mountpoint/
将主要将文件所有者/组存储为字符串,除非您使用--numeric-owner
。您当然还可以选择其他几个选项不想要使用,例如--owner=
。
在目标系统上,提取档案可能会破坏所有权信息,并且就您而言确实如此。但您可以使用以下方式查看原始用户/组
tar -tvf archive.tar
或者例如
tar -tvf archive.tar path/to/object1/within/archive path/to/object2
如果大型快照已发送,而您不想再发送大型文件,则其他用户可能会尝试使用archive.tar
将--owner-map=
快照中的数字 UID 连接到您(或/etc/passwd
快照的所有者)提供的任意名称来构建。构建映射文件需要一些努力。我担心这不适用于群组。
在这种情况下仅复制元数据(在您的系统上):
cp -a --attributes-only mountpoint/ whatever
以及tar
生成的空文件:
tar -xf metadata.tar whatever/
发送metadata.tar
给其他用户(gzip
可能是为了减小尺寸)。要查看所有权信息,他们应该运行tar -tvf metadata.tar
。