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 復制鏈接文件會失?。磕蔷鸵碿p -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.www58058.com/53450

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

相關推薦

  • 如何修改linux系統主機名稱及自動登錄圖形化界面

    編輯器:gedit(圖形化編輯器)在圖形界面編輯開機自動登錄圖形化界面(在工作中不能使用)Centos6  第一步:ls /etc/gdm/custom.conf第二步:nano /etc/gdm/custom.conf第三步:[daemon]第四步:AutomaticLoginEnable=trueAutomaticLogin=root第五步:按…

    Linux干貨 2017-07-15
  • CentOS6 ELK實現

    1 簡介 我們來介紹Centos6.5基于SSL密碼認證部署ELK(Elasticsearch 1.4.4+Logstash 1.4.2+kibana3),同時為大家介紹如何集合如上組件來收集日志,本章的日志收集主要為大家介紹SYSTEM日志收集. 集中化日志收集主要應用場景是在同一個窗口臨時性或永久性鑒定分析系統,應用等各類日志,對用戶提供極大便利,同時也…

    2015-02-15
  • N27_第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 基本模式:編輯模式(命令模式),輸入模式,末行模式 模式轉換: 編輯模式–輸入模式: i:insert,在光標所在處前方輸入 a:append,在光標所在處后方輸入 o:在光標所在處的下方新建一行 I:在光標所在行行首輸入 A:在光標所在處行尾輸入 O:在光標所在處的上方打開一個新行 輸入模式&#82…

    Linux干貨 2017-10-26
  • centos進程管理

    一 、進程的概念和分類1.進程的概念      Linux是一個多用戶多任務的操作系統。多用戶是指多個用戶可以在同一時間使用同一個linux系統;多任務是指在Linux下可以同時執行多個任務,更詳細的說,linux采用了分時管理的方法,所有的任務都放在一個隊列中,操作系統根據每個任務的優先級為每個任務分配合適…

    Linux干貨 2016-09-19
  • 軟鏈接和硬鏈接詳解

    軟連接和硬鏈接圖解 硬鏈接 符號鏈接 軟鏈接和硬鏈接詳解 軟鏈接和硬鏈接詳解 Linux下的鏈接文件有點類似于Windows的快捷方式,但又不完全一樣。鏈接文件有兩種:一種是硬鏈接,另一種是符號鏈接(又稱軟鏈接)。 UNIX文件系統提供了一種將不同文件鏈接至同一個文件的機制,我們稱這種機制為鏈接。它可以使得單個程序對同一文件使用不同的名字。這樣的好處是文件系…

    Linux干貨 2016-09-06
  • DNS相關配置

    DNS基礎概念: DNS全稱為Domain Name System。它作為將域名和IP地址相互映射的得一個分布式數據庫,能夠使人更方便的訪問互聯網 DNS使用TCP和UDP得53號端口 BIND是DNS得實現方式之一 named是bind程序得運行的進程名 named進程的主要運行者是named用戶,為了安全起見,它的程序也應該以named用戶運行 配置正向…

    Linux干貨 2017-05-30
欧美性久久久久