备份档案中的符号链接和权限

pio*_*rek 9 linux tar backup data-recovery file-copy

我在另一台计算机上安装了 Linux,我想将我的/home目录移动到那台计算机上。我想用任何文件权限、符号链接等备份该目录。

我该怎么做?tar gzip 有什么参数吗?

gol*_*cks 13

如果您的意思是要包含符号链接指向的文件,请使用-h.

tar -chzf foo.tar.gz directory/
Run Code Online (Sandbox Code Playgroud)

默认情况下保留权限和所有权。如果您只想将符号链接包含为符号链接,请省略-h. Small-z用于 gzip。

这一切都在man tar; 您可以man通过正斜杠键搜索术语(例如“符号链接”)/


当您解压缩存档 ( tar -xzf foo.tar.gz) 时,只有以 root 身份解压时才会保留所有权,否则所有文件都将归您所有。这是一项功能,因为否则普通用户通常无法访问他们(例如)下载的存档中的文件。模态权限(读/写/执行)将保持不变。如果作为普通用户,您无论如何都希望保留所有权,则可以使用-p开关 (so tar -xzpf foo.tar.gz)。

但是,有一个问题。

文件所有权实际上存储为数字,而不是名称;系统通过将名称与来自 的值相关联来报告名称/etc/passwd。您可以通过以下方式找到与您的用户名对应的号码:

grep yourusername < /etc/passwd
Run Code Online (Sandbox Code Playgroud)

这将打印如下内容:

piotek:x:1001:1001::/home/piotek:/bin/bash
Run Code Online (Sandbox Code Playgroud)

第一个数字是您的用户号,第二个数字是您的组号(它们通常相同)。其他字段在man 5 passwd(注意5)中进行了解释。

因此,如果您将某些文件 tar 压缩并以 root 用户身份或使用-p(以便保留所有权)在另一个系统上解压缩,并且该系统上有一个用户号为 1001 的用户,则这些文件将归该用户所有用户,即使他们的名字不是piotek(即使piotek系统上有一个用户具有不同的对应号码)。

tar手册页有一点这方面的困惑,因为它是指-p交换机涉及文件的权限。这是在读/写/执行位的状态称为mode的上下文中常见的 *nix 歧义。