不同的“删除前导斜杠”警告的含义是什么?

use*_*847 7 tar

我正在使用tar带有几个--exclude指定实例的gnu 。

我得到两个

Removing leading / from member names
Run Code Online (Sandbox Code Playgroud)

Removing leading / from hard link targets
Run Code Online (Sandbox Code Playgroud)

警告。它们之间有什么区别?

Dev*_*lar 10

tarball 中的任何条目都不能以“/”开头,即具有绝对路径。这是一项安全功能,因此如果您解压缩 tarball,您可以确保所有文件都驻留在目标目录和子目录中,而不是分散在整个系统中(并且可能覆盖关键文件)。

您看到的警告tar是从任何绝对路径中去除前导“/”产生的,包括普通文件(“成员名称”)和硬链接(“硬链接目标”)。

例如,这个命令...

/home/user $ tar czf tarball.tgz /home/user/data
Run Code Online (Sandbox Code Playgroud)

...会导致这些警告,因为“/home/...”被转换为“home/...”。解压压缩包...

/home/user $ tar xzf tarball.tgz
Run Code Online (Sandbox Code Playgroud)

...将导致所有文件被解压缩到/home/user/home/user/data. 如果tar没有去除前导斜杠,则文件/home/user/data将被覆盖。

  • `tar` 档案 * 允许具有绝对名称,如有必要,可以使用 `-P` 禁用剥离... 应该注意的是,*tar* 档案以类似于符号链接的方式存储硬链接——第二个和进一步的链接实际上通过其 *path*(而不是通过 inode)指向第一个,这就是显示第二条消息的原因。 (4认同)