虽然我们知道在学习cp命令时,在复制软链接时,我们会保留链接文件并使用-d,但在实际操作中,通常会出现以下情况
情况
[根@ loot~~ ] # ls-l/etc/red hat-release #此文件是链接文件lrwxrwxrwx.1根根根14o CT 1708:48/etc/red hat-release
[ root @ localhost~] # CP-d/etc/red hat-release/root/red hat.s #使用-d保存链接文件的属性
如果检查[ root @ localhost~] # ls-l/root/red hat.s #,就会发现centos-release正在闪烁,即不存在
lwxrwxrwx1root root 14o CT 2209:06/root/red hat.s-centos-release
[ root @ localhost~] # cat/root/red hat.s #看不到的/root/redhat.s链接文件cat :/root/red hat.s : nosuchfileled
为什么使用cp -d复制链接文件会失败? 那取决于cp -d是如何复制软链接的。 在上例中,我们
/etc/redhat-release软链接将复制到/root/redhat.s。 使用cp -d时,原始软链接的指针区域实际上表示原始文件
路径字符串将复制到新创建的/root/redhat.s中。 以下命令显示所有文件大小为14,即centos-release
字符串大小
[ root @ localhost~] # ls-l/etc/red hat-release/root/red hat.s
lrwxrwxrwx.1根根根14o CT 1708:48/etc/red hat-release-centos-release lrwxrwxrwx
1根路由14o CT 2209:06 /根路由/红帽. s-centos-release
如果查看新的软链接/root/redhat.s,则会发现原始文件路径为centos-release,并将其移动到当前路径(/root/)
在中显示centos-release文件,但实际上原始文件位于/etc/目录中,因此显示/root/redhat.s
/root/red hat.s : nosuchfileordirectory错误。
根据这一原理,可以推断,如果原始链接文件包含原始文件的绝对路径,则新创建的链接文件可以找到原始文件,而不是错误。 接下来做个实验吧。
#1.如果创建了软链接/etc/redhat-release2,则可以看到数据区包含原始文件的绝对路径/etc/centos-release
[ root @ localhost~] # ln-s/etc/centos-release/etc/red hat-release 2
[ root @ localhost~~ ] # ls-l/etc/red hat-release2lrwxrwxrwx1root root 19 oct 2209:37/etc/red hat-release2-/eted
#2.刚创建的软链接/etc/redhat-release2到/root/radhat2.s的副本
[ root @ localhost~] # CP-d/etc/red hat-release2/root/rad hat2. s
[ root @ localhost~] # ls-l/root/rad hat2. slrwxrwxrwx1root root 19 oct 2209336041/root/rad hat2. s-/etc/centos
#3.查看新软链接的内容
([根@ localhost~] # cat/root/rad hat2. s centos release 6.7 (final ) ) ) ) ) 65 )
cp -d复制软链接时的总结
1 .如果原始链接文件包含原始文件的绝对路径:创建的新链接文件可以在任何路径中创建。
2 .如果原始链接文件包含原始文件的相对路径:
示例1 :
新的链接文件位于/root/link2中
相对路径是centos (来自原始链接文件的指针数据区域) )。
/root/centos是原始文件路径
示例2 :
新链接文件为/root/test/link2
相对路径为./centos
/root/centos是原始文件路径
如果找到原始文件路径,则确定;如果找不到,则报告错误。
原创文章,作者:李璐,转载请注明来源: http://www.178linux.com/53450