我试图了解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