有关 cp --preserve=links 的信息

有关 cp --preserve=links 的信息

我试图了解cp --preserve=links单独使用时的作用。

从我的测试来看,它似乎正常复制普通文件并取消引用符号链接,但它似乎与cp -L在单个文件上使用时具有相同的效果。

这是真的还是我遗漏了什么?

答案1

--preserve=links选项不是指符号链接,而是指硬链接。它要求cp保留正在复制的两个或多个文件之间的任何现有硬链接。

$ date > file1
$ ln file1 file2
$ ls -1i file1 file2
6034008 file1
6034008 file2

可以看到两个原始文件是硬链接的,其inode号为6034008。

$ mkdir dir1
$ cp file1 file2 dir1
$ ls -1i dir1
total 8
6035093 file1
6038175 file2

您现在可以看到,如果没有--preserve=links它们的副本,则有两个不同的 inode 编号:两者之间不再存在硬链接。

$ mkdir dir2
$ cp --preserve=links file1 file2 dir2
$ ls -1i dir2
total 8
6089617 file1
6089617 file2

现在您可以看到,使用--preserve=links,两个副本仍然是硬链接的,但它们的索引节点号是 6089617,这与原始文件的索引节点号不同(与本来的情况相反cp --link)。

答案2

在测试和阅读手册页后,我得到了一些相互矛盾的信息。我刚刚进行了一些测试并发现了以下内容。

[root@el7-1 dest]# ls -l
total 0
lrwxrwxrwx. 1 root root 16 Aug 18 16:51 test1.txt -> ../src/test1.txt

以下命令均参考链接

cp test1.txt test2.txt 
cp -L test1.txt test2.txt 
cp --preserve=link test1.txt test2.txt 

以下命令复制符号链接本身

cp -P test1.txt test2.txt 

相关内容