cp复制软链接失效的原因

在学习cp命令时我们会知道复制软链接时,如果要保留链接文件使用-d,但当我们实际操作时却常常出现如下
情况

[root@localhost ~]# ls -l /etc/redhat-release     #此文件为链接文件 lrwxrwxrwx. 1 root root 14 Oct 17 08:48 /etc/redhat-release -> centos-release  
[root@localhost ~]# cp -d /etc/redhat-release /root/redhat.s   #使用-d 保存链接文件属性 
[root@localhost ~]# ls -l /root/redhat.s            #查看可知centos-release是闪烁的,也就是不存在 
lrwxrwxrwx 1 root root 14 Oct 22 09:06 /root/redhat.s -> centos-release  
[root@localhost ~]# cat /root/redhat.s    #看不了/root/redhat.s链接文件 cat: /root/redhat.s: No such file or directory

为什么我们使用cp -d 复制链接文件会失败?那就要看cp -d 是如何复制软链接的。在上例中,我们打算将
/etc/redhat-release软链接复制到/root/redhat.s。在使用cp -d实际上是将原软链接中指针区代表原文件
路径的字符串拷贝到新创建的/root/redhat.s中
下面命令可以看出其文件大小都为14,即centos-release
字符串大小

[root@localhost ~]# ls -l /etc/redhat-release /root/redhat.s  
lrwxrwxrwx. 1 root root 14 Oct 17 08:48 /etc/redhat-release -> centos-release lrwxrwxrwx  
1 root root 14 Oct 22 09:06 /root/redhat.s -> centos-release

当我们查看新建软链接/root/redhat.s时看到原文件路径是centos-release,就会到当前路径(/root/)
上查看centos-release文件,而实际上原文件在/etc/目录下,所以查看/root/redhat.s才会出现
/root/redhat.s: No such file or directory的错误。
根据这个原理我们可以推断,如果原链接文件存的是原文件的绝对路径的话,新建的链接文件就能找到原文件而不是报错,接下来我们实验一下。

#1. 先创建一个软链接/etc/redhat-release2,可知数据区存的是原文件的绝对路径/etc/centos-release 
[root@localhost ~]# ln -s /etc/centos-release /etc/redhat-release2 
[root@localhost ~]# ls -l /etc/redhat-release2 lrwxrwxrwx 1 root root 19 Oct 22 09:37 /etc/redhat-release2 -> /etc/centos-release  
#2. 复制刚创建的软链接/etc/redhat-release2到/root/radhat2.s 
[root@localhost ~]# cp -d /etc/redhat-release2 /root/radhat2.s 
[root@localhost ~]# ls -l /root/radhat2.s lrwxrwxrwx 1 root root 19 Oct 22 09:41 /root/radhat2.s -> /etc/centos-release  
#3. 查看新软链接内容 
[root@localhost ~]# cat /root/radhat2.s CentOS release 6.7 (Final)

cp -d 复制软链接时总结

1. 当原链接文件中存的是原文件的绝对路径:创建的新链接文件可在任何路径下。
2. 当原链接文件中存的是原文件的相对路径:
    例1:
        新链接文件在/root/link2
        相对路径是 centos (来自原链接文件的指针数据区)
        那么/root/centos就是原文件路径
    例2:
        新链接文件为/root/test/link2
        相对路径为../centos
        那么/root/centos为原文件路径
    原文件路径找得到就ok,找不到就报错。

原创文章,作者:lirou,如若转载,请注明出处:http://www.178linux.com/53450

(3)
liroulirou
上一篇 2016-10-25
下一篇 2016-10-25

相关推荐

  • Linux系统用户、组

    1、资源分派:          Authentication  认证        Authorization   授权     &nbs…

    Linux干货 2016-08-04
  • CentOS通过bind配置DNS服务器

    一、创建DNS主服务器 1、安装bind并配置主配置文件     主服务器为CentOS 7,主服务地址为172.16.11.55     安装bind [root@xinfeng ~]# yum install bind  &n…

    Linux干货 2016-04-18
  • 【26期】Linux第五周学习小总结

        第五周的学习内容很丰富, 从查找到压缩打包,到软件包的管理,其中尤其是以压缩的内容最为丰富,而且庞大的选项让人绝望,那我今天就总结了一下压缩的一些东西,和大家一起分享。     为什么会产生压缩工具呢?因为我们的现在的很多文件会利用到的东西很多,电脑的读存速度也越来越快,一些大的文件在传输和使用上就会很麻烦,虽…

    2017-08-12
  • 你会用Python写洗脑神曲吗?

    Python实战班-学员学习成果展示 同样是周末,有些人是闲聊着度过,有些人是学习充电度过。 人与人最大的区别,是下班后的时间。看你怎么去利用。 周末时,马哥Python实战班的学员正在认真上课,他们中的不少人,月薪在10k以上,甚至月薪20k以上。 但他们没有虚度周末时光。 #最浪费时间的就是:思而不学+犹豫不决。# 马哥Python实战班二期的小伙伴们才…

    Linux干货 2016-07-05
  • 认识DNS

    DNS全称是Domain Name System的简称,即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP/TCP协议之上,使用端口号53。 认识DNS 安装 创建一台DN…

    Linux干货 2016-12-07
  • 权限管理和字符匹配示例

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 cp -r /etc/skel /home/tuser1 chmod -R 700 tuser1 2、编辑/etc/group文件,添加组hadoop hadoop:x:999 3、手动编辑/etc/passwd文件新增一行,…

    2017-12-25